千家信息网

如何进行spark2.0.1安装部署及使用jdbc连接基于hive的sparksql

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,如何进行spark2.0.1安装部署及使用jdbc连接基于hive的sparksql,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、安
千家信息网最后更新 2025年02月23日如何进行spark2.0.1安装部署及使用jdbc连接基于hive的sparksql

如何进行spark2.0.1安装部署及使用jdbc连接基于hive的sparksql,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1、安装

如下配置,除了配置spark还配置了spark history服务

#先到http://spark.apache.org/根据自己的环境选择编译好的包,然后获取下载连接cd /optmkdir sparkwget http://d3kbcqa49mib13.cloudfront.net/spark-2.0.1-bin-hadoop2.6.tgztar -xvzf spark-2.0.1-bin-hadoop2.6.tgzcd spark-2.0.1-bin-hadoop2.6/conf

复制一份spark-env.sh.template,改名为spark-env.sh。然后编辑spark-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_111export SPARK_MASTER_HOST=hadoop-n

复制一份spark-defaults.conf.template,改成为spark-defaults.conf,然后编辑spark-defaults.conf

#指定master地址,以便在启动的时候不用再添加--master参数来启动集群spark.master                                                   spark://hadoop-n:7077#对sql查询进行字节码编译,小数据量查询建议关闭spark.sql.codegen                                               true#开启任务预测执行机制,当出现比较慢的任务时,尝试在其他节点执行该任务的一个副本,帮助减少大规模集群中个别慢任务的影响spark.speculation                                                  true#默认序列化比较慢,这个是官方推荐的spark.serializer                                                   org.apache.spark.serializer.KryoSerializer#自动对内存中的列式存储进行压缩spark.sql.inMemoryColumnarStorage.compressed            true#是否开启event日志spark.eventLog.enabled                                              true#event日志记录目录,必须是全局可见的目录,如果在hdfs需要先建立文件夹spark.eventLog.dir                                                      hdfs://hadoop-n:9000/spark_history_log/spark-events#是否启动压缩spark.eventLog.compress                                 true

复制一份slaves.template,改成为slaves,然后编辑slaves

hadoop-d1hadoop-d2

从$HIVE_HOME/conf下拷贝一份hive-site.xml到当前目录下。

编辑/etc/下的profile,在末尾处添加

export SPARK_HOME=/opt/spark/spark-2.0.1-bin-hadoop2.6export PATH=$PATH:$SPARK_HOME/binexport HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopexport SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://hadoop-n:9000/spark_history_log/spark-events"

为了保证绝对生效,/etc/bashrc也做同样设置,然后刷新设置

source /etc/profilesource /etc/bashrc

2、启动

a)首先启动hadoop;

cd $HADOOP_HOME/sbin./start-dfs.sh

访问http://ip:port:50070查看是否启动成功

b)然后启动hive

cd $HIVE_HOME/bin./hive --service metastore

执行beeline或者hive命令查看是否启动成功,默认hive日志在/tmp/${username}/hive.log

c)最后启动spark

cd $SPARK_HOME/sbin./start-all.sh

sprark ui :http://hadoop-n:8080

spark客户端

cd $SPARK_HOME/bin./spark-shell

sparksql客户端

cd $SPARK_HOME/bin./spark-sql

注意执行命令后提示的webui的端口号,通过webui可以查询对应监控信息。

启动thriftserver

cd $SPARK_HOME/sbin./start-thriftserver.sh

spark thriftserver ui:http://hadoop-n:4040

启动historyserver

cd $SPARK_HOME/sbin./start-history-server.sh

spark histroy ui:http://hadoop-n:18080

3、使用jdbc连接基于hive的sparksql

a)如果hive启动了hiveserver2,关闭

b)执行如下命令启动服务

cd $SPARK_HOME/sbin./start-thriftserver.sh

执行如下命令测试是否启动成功

cd $SPARK_HOME/bin./beeline -u jdbc:hive2://ip:10000#如下是实际输出[root@hadoop-n bin]# ./beeline -u jdbc:hive2://hadoop-n:10000Connecting to jdbc:hive2://hadoop-n:1000016/11/08 21:03:05 INFO jdbc.Utils: Supplied authorities: hadoop-n:1000016/11/08 21:03:05 INFO jdbc.Utils: Resolved authority: hadoop-n:1000016/11/08 21:03:05 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://hadoop-n:10000Connected to: Spark SQL (version 2.0.1)Driver: Hive JDBC (version 1.2.1.spark2)Transaction isolation: TRANSACTION_REPEATABLE_READBeeline version 1.2.1.spark2 by Apache Hive0: jdbc:hive2://hadoop-n:10000> show databases;+---------------+--+| databaseName  |+---------------+--+| default       || test          |+---------------+--+2 rows selected (0.829 seconds)0: jdbc:hive2://hadoop-n:10000>

编写代码连接sparksql

按照自己的环境添加依赖

                                        jdk.tools                        jdk.tools                        1.6                        system                        ${JAVA_HOME}/lib/tools.jar                                                        org.apache.hive                        hive-jdbc                        1.2.1                                                        org.apache.hadoop                        hadoop-common                        2.6.0                        

然后编写类

/**    * * @Title: HiveJdbcTest.java  * @Package com.scc.hive  * @Description: TODO(用一句话描述该文件做什么)  * @author scc * @date 2016年11月9日 上午10:16:32    */package com.scc.hive;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * * @ClassName: HiveJdbcTest * @Description: TODO(这里用一句话描述这个类的作用) * @author scc * @date 2016年11月9日 上午10:16:32 *  */public class HiveJdbcTest {    private static String driverName = "org.apache.hive.jdbc.HiveDriver";    public static void main(String[] args) throws SQLException {        try {            Class.forName(driverName);        } catch (ClassNotFoundException e) {            e.printStackTrace();            System.exit(1);        }        Connection con = DriverManager.getConnection("jdbc:hive2://10.5.3.100:10000", "", "");        Statement stmt = con.createStatement();        String tableName = "l_access";        String sql = "";        ResultSet res = null;        sql = "describe " + tableName;        res = stmt.executeQuery(sql);        while (res.next()) {            System.out.println(res.getString(1) + "\t" + res.getString(2));        }        sql = "select * from " + tableName + " limit 10;";        res = stmt.executeQuery(sql);        while (res.next()) {            System.out.println(res.getObject("id"));        }        sql = "select count(1) from " + tableName;        res = stmt.executeQuery(sql);        while (res.next()) {            System.out.println("count:" + res.getString(1));        }    }}

下面是控制台输出

log4j:WARN No appenders could be found for logger (org.apache.hive.jdbc.Utils).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.id      intreq_name        stringreq_version     stringreq_param       stringreq_no  stringreq_status      stringreq_desc        stringret     stringexcute_time     intreq_time        datecreate_time     date212213214215216217218219220221count:932

4、注意事项

  • 集群要配置ssh免密码登录

  • 不要忘记拷贝hive的配置文件,不然spark会在本地创建物理数据库文件

  • hive启动时提示ls: cannot access /opt/spark/spark-2.0.1-bin-hadoop2.6/lib/spark-assembly-*.jar: No such file or directory,不影响程序运行。

看完上述内容,你们掌握如何进行spark2.0.1安装部署及使用jdbc连接基于hive的sparksql的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0