Spark on Hive及 Spark SQL的运行机制

Spark on Hive

集成原理

Spark on Hive及 Spark SQL的运行机制_第1张图片

HiveServer2的主要作用: 接收SQL语句,进行语法检查;解析SQL语句;优化;将SQL转变成MapReduce程序,提交到Yarn集群上运行

SparkSQL与Hive集成,实际上是替换掉HiveServer2。是SparkSQL中的HiveServer2替换掉了Hive中的HiveServer2。

集成以后优点如下:
1- 对于SparkSQL来说,可以避免在代码中编写schema信息。直接向MetaStore请求元数据信息
2- 对于SparkSQL来说,多个人可以共用同一套元数据信息,避免每个人对数据理解不同造成代码功能兼容性问题
3- 对于Hive来说,底层执行引擎由之前的MapReduce变成了Spark Core,能够提升运行效率
4- 对于使用者/程序员来说,SparkSQL与Hive集成,对于上层使用者来说,是完全透明的。

在代码中集成Hive

代码中集成Hive:

from pyspark import SparkConf, SparkContext
import os
from pyspark.sql import SparkSession

# 绑定指定的Python解释器
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'

if __name__ == '__main__':
    # 1- 创建SparkSession对象
    """
        spark.sql.warehouse.dir:告诉Spark数据存储在什么地方。默认使用本地磁盘进行存储。推荐使用HDFS
        hive.metastore.uris:告诉Spark元数据信息去什么地方找MetaStore
        enableHiveSupport():开启SparkSQL和Hive的集成
    """
    spark = SparkSession.builder\
        .config("spark.sql.warehouse.dir","hdfs://node1:8020/user/hive/warehouse")\
        .config("hive.metastore.uris","thrift://node1.itcast.cn:9083")\
        .appName('sparksql_hive')\
        .master('local[*]')\
        .enableHiveSupport()\
        .getOrCreate()

    # 2- 数据输入
    # 3- 数据处理
    # 4- 数据输出
    spark.sql("show databases").show()

    spark.sql("""
        select 
            *
        from a.student
        where id>=2
    """).show()

    # 5- 释放资源
    spark.stop()

Spark on Hive及 Spark SQL的运行机制_第2张图片

总结:
spark.sql.warehouse.dir: 告知Spark,数据表存放的地方。推荐使用HDFS进行存储。如果不配置,默认使用本地磁盘存储。
hive.metastore.uris: 告知Spark,MetaStore元数据管理服务的连接信息
enableHiveSupport() : 开启Spark和Hive的集成

你可能感兴趣的:(spark,hive,sql)