Hive on Spark 和 Spark sql on Hive,你能分的清楚么

Hive on Spark 和 Spark sql on Hive,你能分的清楚么

结构上 Hive On Spark 和 SparkSQL 都是一个翻译层,把一个 SQL 翻译成分布式可执行的 Spark 程序。Hive 和 SparkSQL 都不负责计算。Hive 的默认执行引擎是 mr,还可以运行在 Spark 和 Tez。Spark 可以连接多种数据源,然后使用 SparkSQL 来执行分布式计算。

Hive On Spark 配置

(1)首先安装包要选择对,否则就没有开始了。

Hive 版本:apache-hive-2.1.1-bin.tar

spark 版本:spark-1.6.3-bin-hadoop2.4-without-hive (不需要把 Hive 编译进去)

(2)假设你已经安装好 Hive(元数据为 Derby)和 spark,那么默认 Hive 走 mr,需要修改以下配置让 Hive 走 spark

<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>

(3)配置环境变量及运行时参数

在 hive-site.xml 中配置 SPARK_HOME;

在 hive-site.xml 或者或者 spark-default.conf 或者 spark-env.conf 配置 spark 运行时参数,也可以在 Hive 运行环境中设置临时参数:

set spark.master=<Spark Master URL>
set spark.eventLog.enabled=true;
set spark.eventLog.dir=<Spark event log folder (must exist)>
set spark.executor.memory=512m;            
set spark.serializer=org.apache.spark.serializer.KryoSerializer;

将编译好的 Spark 安装包中 lib 目录下的 spark-assembly-*.jar 包添加至 HIVE_HOME/lib 中

(4)启动 Hive

/opt/hive/bin/hive --service metastore

(5)启动 Hive 命令行窗口

beeline -u jdbc:hive2://localhost:10000  或者  /opt/hive/bin/hive

(6)开启你的 Hive on spark 之旅

0: jdbc:hive2://localhost:10000> create table test (f1 string,f2 string) stored as orc;

No rows affected (2.018 seconds)

0: jdbc:hive2://localhost:10000> insert into test values(1,2);

Spark sql on Hive

(1)获取包

Hive 版本:apache-hive-2.1.1-bin.tar

spark 版本:spark-1.6.3-bin-hadoop2.4 (需要把 Hive 编译进去)

(2)在 $SPARK_HOME/conf 目录创建 hive-site.xml 文件,内容如下:

<configuration>  
<property>  
    <name>hive.metastore.uris</name>  
    <value>thrift://master1:9083</value>  
    <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>  
  </property>  
</configuration>

(3)如果你使用的元数据库是 mysql, 那么请把 mysql 驱动放到 $SPARK_HOME/lib 下,否则跳过。

(4)启动 Hive 元数据服务,待 spark 运行时访问。

(5)执行命令

./bin/spark-shell --master spark://master:7077
scala> val hc = new org.apache.spark.sql.hive.HiveContext(sc);
scala> hc.sql("show tables").collect.foreach(println)
[sougou,false]
[t1,false]

Sparkthriftserver 启

spark 提供了 spark-sql 命令可以直接操作 hive 或 impala,可以启用 sparkthriftserver 服务,然后利用 beeline 远程连接 spark,利用 spark sql。sparksql 的诞生其实就是为了代替 hsql。Sparksql 的元数据也是使用 hive 的 metastore 进行管理,所以需要配置 hive.metastore.uris 参数(以上环境博主都是部署在cnaaa服务器上的,感兴趣的朋友可以自己部署一套环境练习下)

这里说下 sparkthriftserver 和 hivethriftserver 的区别,二者的端口一定要区分:

hivethriftserver:hive 服务端的服务,远程通过 jdbc 或者 beeline 连接,使用 hsql 操作 hive。

sparkthriftserver:spark 的服务,远程通过 jdbc 或者 beeline 连接 spark,使用 spark sql 操作 hive。

(1)在 $SPARK_HOME/conf 目录创建 hive-site.xml 文件,内容如下:

<configuration>  
<property>  
    <name>hive.metastore.uris</name>  
    <value>thrift://master1:9083</value>  
    <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>  
  </property>  
<!--Thrift JDBC/ODBC server-->
   <property>
       <name>hive.server2.thrift.min.worker.threads</name>
       <value>5</value>
   </property>
   <property>
       <name>hive.server2.thrift.max.worker.threads</name>
       <value>500</value>
   </property>
   <property>
       <name>hive.server2.thrift.port</name>
       <value>10001</value>
   </property>
   <property>
       <name>hive.server2.thrift.bind.host</name>
       <value>master</value>
   </property>
</configuration>  

(2)启动 sparkthriftserver

./start-thriftserver.sh --hiveconf hive.server2.thrift.port=10000 --master yarn --driver-class-path /data/spark-2.2.0-bin-hadoop2.7/jars/mysql-connector-java-5.1.43-bin.jar --executor-memory 5g --total-executor-cores 5

启动 sparkthriftserver 后,后台默认会执行 spark-sql 命令,实际上是用 spark-submit 向 yarn 提交一个任务。这样就会在 yarn 的 8088 页面任务栏中起一个常驻任务,用来执行 spark sql。

(3)连接 spark

./beeline -u jdbc:hive2://172.168.108.6:10001 -n root

(4)这里的 sql 可以在 8088 页面看到执行过程。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值