spark的 thrift serve r和hive的hive server2类似,有了它之后,sparksql就可以直接用jdbc去连接
是需要对外提供服务的,因此可以配置线程池最大连接数
sparksql的源数据还是依赖hive的
一. 前提条件
启动hdfs集群
start-all.sh
192.168.4.31:50070
启动hive的metastore服务
node2上启动:
service mysqld restart
cd /opt/apache-hive-1.2.1-bin/bin
./hive --service metastore
没反应就是启动成功
ctrl +c
再执行 ./hive --service metastore &
等一会后,node1上执行,查看 hive 是否启动成功
$ hive
hive> show tables;
OK
node1 启动 spark 集群
cd /opt/spark-2.1.0-bin-hadoop2.7/sbin
./start-all.sh
二. 安装配置
node1 上
cd /opt/spark-2.1.0-bin-hadoop2.7/conf
cp /opt/apache-hive-1.2.1-bin/conf/hive-site.xml ./
cd /opt/spark-2.1.0-bin-hadoop2.7/bin
vim log4j.properties
添加如下配置
log4j.logger.org.apache.spark.sql.SQLContext=WARN
log4j.logger.org.apache.spark.sql.catalyst.analysis.Analyzer=WARN
log4j.logger.org.apache.spark=WARN
log4j.logger.org.apache.spark.storage.BlockManagerMasterActor=WARN
log4j.logger.org.apache.spark.HeartbeatReceiver=WARN
log4j.logger.org.apache.spark.scheduler.local.LocalActor=WARN
启动 sqarksql 的 client(我们用下面启动服务的方式,可以用 jdbc 连接)
node1上
cd /opt/spark-2.1.0-bin-hadoop2.7/bin
./spark-sql --master spark://192.168.4.31:7077 --executor-memory 512m
用这种方式可以直接 写 sql 语句
select * from person;(虽然数据少,但spark 将它放在两个地方,所以有2个任务)
select count(*) from person group by name; (shuffl 后是200个任务,原因是 sparksql 默认 shuffle后是启200个task)
虽然shuffle后有200个任务,但实际并行跑的只有3个(也即并行度为3个),因为这个和你机器的核数有关,我们这里有3台虚拟机且配置的核心数都是1。
cat spark-env.sh
所以shuffle后的200个任务,要跑 200/3 = 67 次
注意如果 加上limit 关键字就会秒出,不跑spark任务,会直接从本地文件里取
vim hive-site.xml
在spark的conf目录下配置hive-site.xml,添加配置:
hive.server2.thrift.min.worker.threads
5
hive.server2.thrift.max.worker.threads
500
hive.server2.thrift.port
10000
hive.server2.thrift.bind.host
spark1
启动 spark thrift server 即把sparksql 启成一个服务
node1 上
cd /opt/spark-2.1.0-bin-hadoop2.7/sbin
./start-thriftserver.sh --master spark://192.168.4.31:7077 --executor-memory 512M
cd /opt/spark-2.1.0-bin-hadoop2.7/bin
./beeline (稍等一会)
beeline>!connect jdbc:hive2://spark1:10000
用户名和密码都是空
show tables;