摘要:结构上Hive On Spark和SparkSQL都是一个翻译层,把一个SQL翻译成分布式可执行的Spark程序。
结构上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运行环境中设置临时参数:
setspark.master=<SparkMasterURL>setspark.eventLog.enabled=true;setspark.eventLog.dir=<Sparkeventlogfolder(mustexist)>setspark.executor.memory=512m;setspark.serializer=org.apache.spark.serializer.KryoSerializer;
将编译好的Spark安装包中lib目录下的spark-assembly-*.jar包添加至HIVE_HOME/lib中
(4)启动Hive
/opt/hive/bin/hive--servicemetastore
(5)启动Hive命令行窗口
beeline-ujdbc:hive2://localhost:10000或者/opt/hive/bin/hive
(6)开启你的Hive on spark之旅
0:jdbc:hive2://localhost:10000>createtabletest(f1string,f2string)storedasorc;Norowsaffected(2.018seconds)0:jdbc:hive2://localhost:10000>insertintotestvalues(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>ThriftURIfortheremotemetastore.Usedbymetastoreclienttoconnecttoremotemetastore.</description></property></configuration>
(3)如果你使用的元数据库是mysql,那么请把mysql驱动放到$SPARK_HOME/lib下,否则跳过。
(4)启动Hive元数据服务,待spark运行时访问。
(5)执行命令
./bin/spark-shell--masterspark://master:7077scala>valhc=neworg.apache.spark.sql.hive.HiveContext(sc);scala>hc.sql("showtables").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>ThriftURIfortheremotemetastore.Usedbymetastoreclienttoconnecttoremotemetastore.</description></property><!--ThriftJDBC/ODBCserver--><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--hiveconfhive.server2.thrift.port=10000--masteryarn--driver-class-path/data/spark-2.2.0-bin-hadoop2.7/jars/mysql-connector-java-5.1.43-bin.jar--executor-memory5g--total-executor-cores5
启动sparkthriftserver后,后台默认会执行spark-sql命令,实际上是用spark-submit向yarn提交一个任务。这样就会在yarn的8088页面任务栏中起一个常驻任务,用来执行spark sql。
(3)连接spark
./beeline-ujdbc:hive2://172.168.108.6:10001-nroot
(4)这里的sql可以在8088页面看到执行过程。
本文分享自华为云社区,作者:dayu_dls 。