结构上 Hive On Spark 和 SparkSQL 都是一个翻译层,把一个 SQL 翻译成分布式可执行的 Spark 程序。Hive 和 SparkSQL 都不负责计算。Hive 的默认执行引擎是 mr,还可以运行在 Spark 和 Tez。Spark 可以连接多种数据源,然后使用 SparkSQL 来执行分布式计算。
(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
hive.execution.engine
spark
(3)配置环境变量及运行时参数
在 hive-site.xml 中配置 SPARK_HOME;
在 hive-site.xml 或者或者 spark-default.conf 或者 spark-env.conf 配置 spark 运行时参数,也可以在 Hive 运行环境中设置临时参数:
set spark.master=
set spark.eventLog.enabled=true;
set spark.eventLog.dir=
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);
(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 文件,内容如下:
hive.metastore.uris
thrift://master1:9083
Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.
(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]
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 文件,内容如下:
hive.metastore.uris
thrift://master1:9083
Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.
hive.server2.thrift.min.worker.threads
5
hive.server2.thrift.max.worker.threads
500
hive.server2.thrift.port
10001
hive.server2.thrift.bind.host
master
(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 页面看到执行过程。