Spark On Hive配置测试及分布式SQL ThriftServer配置

文章目录

Spark On Hive的原理及配置

  • Spark本身是一个执行引擎,而没有管理metadate的能力,当我们在执行SQL的时候只能将SQL转化为RDD提交。而对于一些数据中的元数据Spark并不知道,而Spark能写SQL主要是通过DataFrame进行注册的。
  • 这时候我们就可以借助Hive中的MetaStore进行元数据管理。也就是说把Hive中的metastore服务器直接拿过来给Spark使用。

配置步骤

  1. 在spark安装的conf目录下创建hive-site.xml
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>
  1. 将mysql驱动Jar包放在spark安装的jars目录中
  2. 确保Hive配置了metastore的服务
xml 复制代码
<!-- 远程模式部署metastore metastore地址 -->
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://node1:9083</value>
</property>
  1. 启动metastore服务
bash 复制代码
 nohup bin/hive --service metastore 2>&1 >> /export/server/apache-hive-3.1.2/log/metastore.log &
  1. 测试:在spark安装的bin目录下,启动spark-sql直接编写sql。

在代码中集成Spark On Hive

python 复制代码
# 确保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配置

配置步骤

  1. 配置spark on hive步骤相同
  2. 启动ThriftServer服务
bash 复制代码
./start-thriftserver.sh --hiveconf hive.server2.thrift.port=10000 --hiveconf hive.server2.thrift.bind.host=node1 --master local[2]
  1. 测试:通过DBeaver等工具连接Spark

在代码中集成Spark JDBC ThriftServer

  1. 安装pyhive所需要的linux依赖包
bash 复制代码
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
  1. 代码测试
python 复制代码
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计算。
相关推荐
卷毛迷你猪4 天前
快速实验篇(A11)数据集成与多维分析:从单实验产出到跨实验宽表
hive·hadoop
Thomas.Sir4 天前
第21课:PyTorch|GPU多卡训练与分布式训练基础【让多卡并行成为你的加速引擎】
人工智能·pytorch·分布式
Cicada1284 天前
库存消息消费的正确性设计——从幂等窗口到批量流水线
分布式·系统架构
IT研究室4 天前
最新大数据毕业设计选题推荐-基于大数据的信用等级数据分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·数据分析·spark·课程设计
Francek Chen5 天前
【大数据处理与分析】数据仓库Hive:04 数据仓库Hive概述
大数据·数据仓库·hive·hadoop·分布式
Gl�ria5 天前
Hadoop/YARN 集群缩容:下线DN节点
大数据·hadoop·分布式
吉甫作诵5 天前
Kafka 集群安装与运维实战:消费组排查、Offset 重置与副本重分配
大数据·运维·分布式·kafka·消息队列
计算机源码社5 天前
基于大数据技术的台北市住宅价格影响因素挖掘与可视化分析-基于Python与Hadoop的台北市住宅价格数据仓库构建与可视化
大数据·hadoop·python·数据分析·spark·毕业设计·数据可视化
IT研究室5 天前
最新大数据毕业设计选题推荐-基于大数据的物流快递数据分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·数据分析·spark·课程设计