写点什么

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

  • 2022 年 1 月 04 日
  • 本文字数:2130 字

    阅读完需:约 7 分钟

摘要:结构上 Hive On Spark 和 SparkSQL 都是一个翻译层,把一个 SQL 翻译成分布式可执行的 Spark 程序。

 

本文分享自华为云社区《Hive on Spark和Sparksql on Hive有啥区别?》,作者:dayu_dls 。

 

结构上 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:7077scala> 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 参数。


这里说下 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 页面看到执行过程。


点击关注,第一时间了解华为云新鲜技术~

发布于: 52 分钟前
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
Hive on Spark和Spark sql on Hive,你能分的清楚么