Spark - Thrift Server模式
Spark Thrift Server 其实是 Spark SQL 的一种运行方式,笔者前段时间用它来做测试了 Spark 的性能,以及 Spark SQL 对 SQL 语句的支持情况,用起来还是十分方便的,后来在网上一搜,除了官网很少有写 Spark Thrift Server 的文章,那么本文将让你了解并且会使用它。
Spark Thrift Server 运行原理
即然它被称为 Server,那它就是提供某种服务的,它提供的服务就是解析 SQL 语句,然后将解析完的 SQL 转换为 Spark 任务,并提交给 Spark 集群去执行(这里要取决于 Spark 的运行方式,如:Spark on Yarn、Spark Standalone 等),最后捕获运行结果。
配置一个可用的 Spark Thrift Server
前提准备
- 我们为以三台机器的作为示例,分别为:host1、host2、host3
- 在三个节点上部署好 Hadoop2.7 集群,并启动 Hdfs、Yarn
- 在 host1 上部署好 Hive1.2.1,并且可以运行
- 在 host1 上安装 Spark2.0,先不用配置
修改 spark-env.sh
要使用 Spark Thrift Server,需要用到三个配置文件,我们一个一个来配置 首先是 Spark 安装目录下的 conf/spark-env.sh
[user@host1 spark]$ vi conf/spark-env.sh
#!/usr/bin/env bash
# 这里是Spark的配置文件所在的目录,在本例中为:$spark_home/conf
export SPARK_CONF_DIR=/usr/lib/spark/conf
# 为Spark Thrift Server分配的内存大小
export SPARK_DAEMON_MEMORY=1024m
# Hadoop的安装目录
export HADOOP_HOME=/usr/lib/hadoop
# Hadoop的配置文件目录
export HADOOP_CONF_DIR=/usr/lib/hadoop/etc/hadoop
# 这里的java安装路经要换成自己的
export JAVA_HOME=/usr/lib/java
修改spark-defaults.conf
然后是Spark安装目录下的 conf/spark-defaults.conf
[user@host1 spark]$ vi conf/spark-defaults.conf
# 指定Spark的运行模式
spark.master yarn-client
# 这里我们让Spark自己去动态调整资源
spark.dynamicAllocation.enabled true
spark.dynamicAllocation.initialExecutors 2
spark.dynamicAllocation.maxExecutors 10
spark.dynamicAllocation.minExecutors 2
# 这几个可有可无了,,
spark.history.fs.logDirectory hdfs:///spark-history/
spark.shuffle.service.enabled true
spark.yarn.queue spark-thrift
复制hive-site.xml
最后将 Hive 的配置文件复制到 spark_home/conf
内
[user@host1 spark]$ ll conf/
-rw-r--r-- 1 spark spark 899 2月 28 22:23 hive-site.xml # Hive的配置文件
-rw-r--r-- 1 root root 865 1月 11 05:14 slaves.template # 这个没有用到
-rw-r--r-- 1 spark spark 719 3月 19 05:54 spark-defaults.conf
-rw-r--r-- 1 spark spark 1710 2月 28 22:23 spark-env.sh
启动服务
sbin/start-thriftserver.sh --hiveconf hive.server2.thrift.port=10011
查看启动是否成功
[user@host1 spark]$ ss -apln | grep 10011
LISTEN 0 50 :::10011 :::* users:(("java",8600,389))
使用 Spark Thrift Server
在 Hive 里创建一个数据库
[user@host1 spark]$ hive
WARN conf.HiveConf: HiveConf of name hive.optimize.mapjoin.mapreduce does not exist
17/03/19 07:20:11 WARN conf.HiveConf: HiveConf of name hive.heapsize does not exist
17/03/19 07:20:11 WARN conf.HiveConf: HiveConf of name hive.sentry.conf.url does not exist
17/03/19 07:20:11 WARN conf.HiveConf: HiveConf of name hive.auto.convert.sortmerge.join.noconditionaltask does not exist
Logging initialized using configuration in file:/etc/hive/conf.dist/hive-log4j.properties
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive> create thrift; # 创建数据库
OK
hive> quit; #然后退出
[user@host1 spark]$
进入 Spark Thrift 客户端
[root@spark ~]# bin/beeline
Beeline version 1.2.1.spark2 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10011
Connecting to jdbc:hive2://localhost:10011
Enter username for jdbc:hive2://localhost:10011: # 直接回车
Enter password for jdbc:hive2://localhost:10011: # 直接回车
Connected to: Spark SQL (version 2.0.0)
Driver: Hive JDBC (version 1.2.1.spark2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10011> show databases; # 查看所有数据库
+---------------+--+
| databaseName |
+---------------+--+
| default |
| thrift |
+---------------+--+
3 rows selected (0.082 seconds)
0: jdbc:hive2://localhost:10011>
到这里Spark Thrift配置完毕,进入客户端后就可以执行SQL语句了,不过更多的时候我们是用脚本的方式来执行SQL任务,这当然也可以了, 先把我们需要执行的SQL语句写到一个文件里,如:my_task.sql,然后执行以下命令:
bin/beeline -u "jdbc:hive2://host1:10011/default;httpPath=cliservice" -f my_task.sql