当前位置:   article > 正文

SparkSQL与Hive整合(Spark On Hive)

spark on hive

1. Hive的元数据服务

hive metastore元数据服务用来存储元数据,所谓元数据,即hive中库、表、字段、字段所属表、表所属库、表的数据所在目录及数据分区信息。元数据默认存储在hive自带的Derby数据库。在内嵌模式和本地模式下,metastore嵌入在主hive server进程中。但在远程模式下,metastore 和 hive server是两个单独的服务,都由各自的进程管理

metastore服务独立出来之后,1个或多个客户端在配置文件中添加metastore的地址,就可以同时连接metastore服务,metastore再去连接MySQL数据库来存取元数据。

hiveserver服务主要目的 接收 SQL, 将SQL进行编译 优化 执行, 将SQL翻译为MR程序, 然后提交Yarn运行

BeeLine客户端向HiveServer服务提交SQL语句,HiveServer服务连接MetaStore获取元数据后,将SQL编译为MR程序执行
在这里插入图片描述
SparkSQL同样适用,SparkSQL语句提交给Spark集群,Spark执行引擎查询metastore服务获取元数据,将SparkSQL翻译为Spark RDD执行

一旦替换掉HiveServer2, 让Spark 和Hive的metastore进行集成, Spark的schema元数据信息就可以交给metastore统一管理

2.配置说明

2.1 spark添加metastore地址

spark/conf添加hive-site.xml,可以拷贝 hive/conf/hive-site.xml
主要添加配置:

<!-- 远程模式部署metastore metastore地址 -->
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://node3:9083</value>
</property>
  • 1
  • 2
  • 3
  • 4
  • 5

metastore服务 和 hiveserver2服务,我都启动在了node3机器,全部配置如下:

<configuration>
    <!-- 存储元数据mysql相关配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node3:3306/hive3?createDatabaseIfNotExist=true&amp;useSSL=false</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>

    <!-- H2S运行绑定host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>node3</value>
    </property>

    <!-- 远程模式部署metastore metastore地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node3:9083</value>
    </property>

    <!-- 关闭元数据存储授权  -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
     </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

2.2 MySQL驱动包

MySQL的连接的驱动jar包拷贝到本地spark的jars目录
cd /export/server/hive/lib/
cp mysql-connector-java-5.1.32.jar /export/server/spark/jars/
版本号5.1.32可适当替换

spark on yarn运行模式下:需要上传一份到HDFS
hadoop dfs -put mysql-connector-java-5.1.32.jar /spark/jars

2.3 启动 Hadoop集群 和 Hive的metastore的服务

start-all.sh
nohup /export/server/hive/bin/hive --service metastore 2>&1 &

2.4 测试

  • cd /export/server/spark/bin/
    ./spark-sql --master local[*]

  • ./hive

进入hive客户端, 然后在hive的客户端上, 创建库和表, 以及添加数据, 在spark-sql客户端上可以看到,。

同样,在spark-sql中创建库和表, 以及添加数据, 在hive的客户端也可以看到
说明SparkSQL和Hive集成成功

2.5 SparkSQL集成Hive在代码中实现

# 1.创建Spark SQL的核心对象: SparkSession
    # .enableHiveSupport() 开启和HIVE整合
    # spark.sql.shuffle.partitions 宽依赖运行并行度
    # hive.metastore.uris 元数据服务地址
    # spark.sql.warehouse.dir spark数据存储目录和Hive保持一致
    spark = SparkSession.builder \
        .appName('spark on hive') \
        .master('local[*]') \
        .config('spark.sql.shuffle.partitions', 4) \
        .config('hive.metastore.uris', 'thrift://node3.itcast.cn:9083') \
        .config('spark.sql.warehouse.dir', 'hdfs://node1:8020/user/hive/warehouse') \
        .enableHiveSupport() \
        .getOrCreate()

    # 2. 执行相关的操作
    spark.sql("select * from pyspark_hive.stu; ").show()

    # 3. 释放资源
    spark.stop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/884577
推荐阅读
相关标签
  

闽ICP备14008679号