本文介绍: 分布式SQL执行引擎就是使用Spark提供的ThriftServer服务,以“后台进程”的模式持续运行,对外提供端口。SQL提交后,底层运行的就是Spark任务。相当于构建了一个以MetaStore服务为元数据,Spark为执行引擎的数据库服务,像操作数据库那样方便的操作SparkSQL进行分布式的SQL计算。
文章目录
Spark On Hive的原理及配置
- Spark本身是一个执行引擎,而没有管理metadate的能力,当我们在执行SQL的时候只能将SQL转化为RDD提交。而对于一些数据中的元数据Spark并不知道,而Spark能写SQL主要是通过DataFrame进行注册的。
- 这时候我们就可以借助Hive中的MetaStore进行元数据管理。也就是说把Hive中的metastore服务器直接拿过来给Spark使用。
配置步骤
- 在spark安装的conf目录下创建hive-site.xml
<configuration>
<!-- 告知spark创建表位置 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- 告知spark hive metastore位置 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://node1:9083</value>
</property>
</configuration>
- 将mysql驱动Jar包放在spark安装的jars目录中
- 确保Hive配置了metastore的服务
<!-- 远程模式部署metastore metastore地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://node1:9083</value>
</property>
- 启动metastore服务
nohup bin/hive --service metastore 2>&1 >> /export/server/apache-hive-3.1.2/log/metastore.log &
- 测试:在spark安装的bin目录下,启动spark-sql直接编写sql。
在代码中集成Spark On Hive
# 确保metastore服务是开启的
if __name__ == '__main__':
ss = SparkSession.builder
.appName("test")
.master("local[*]")
.config("spark.sql.shuffle.partitions", 2)
.config("spark.sql.warehouse.dir", "hdfs://node1:8020/user/hive/warehouse/")
.config("hive.metastore.uris", "thrift://node1:9083")
.enableHiveSupport()
.getOrCreate()
sc = ss.sparkContext
ss.sql('''select * from student''').show()
Spark分布式SQL执行原理及配置
- Spark中ThriftServer,监听10000端口的服务,能够使开发者直接使用数据库工具或者代码连接,并且直接通过编写SQL来操作Spark。前提确保metastore服务+spark on hive配置
配置步骤
- 配置spark on hive步骤相同
- 启动ThriftServer服务
./start-thriftserver.sh --hiveconf hive.server2.thrift.port=10000 --hiveconf hive.server2.thrift.bind.host=node1 --master local[2]
- 测试:通过DBeaver等工具连接Spark
在代码中集成Spark JDBC ThriftServer
- 安装pyhive所需要的linux依赖包
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make gcc-c++ python-devel cyrus-sasl-devel cyrus-sasl-plain cyrus-sasl-gssapi -y
pip install pyhive pymysql sasl thrift thrift_sasl
- 代码测试
from pyhive import hive
if __name__ == '__main__':
# 获取到Hive(Spark Thrift连接)
conn = hive.connect(host="node1", port=10000, username="root")
# 获取一个游标对象
cursor = conn.cursor()
# 执行SQL
cursor.execute("SELECT * FROM student")
# 通过fetchall函数返回结果
res = cursor.fetchall()
print(res)
总结
- 分布式SQL执行引擎就是使用Spark提供的ThriftServer服务,以“后台进程”的模式持续运行,对外提供端口。
- SQL提交后,底层运行的就是Spark任务。相当于构建了一个以MetaStore服务为元数据,Spark为执行引擎的数据库服务,像操作数据库那样方便的操作SparkSQL进行分布式的SQL计算。
原文地址:https://blog.csdn.net/sinat_31854967/article/details/135713900
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_59574.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。