一、原理
一、Hive组件的核心
- SQL优化翻译器(执行引擎),翻译SQL到MapRedue并提交到YARN执行
- MetaStore元数据管理中心
二、Spark On Hive解决方案
- Spark提供执行引擎能力
- Hive的MetaStore提供元数据管理功能
- 让Spark和MetaStore连接起来
三、Spark On Hive的核心
- 引擎:spark
- 元数据管理:metastore
四、总结
Spark On Hive就是把Hive的MetaStore服务拿过来,给Spark做元数据管理用而已
二、配置
- 在Spark的conf目录中,创建hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--告知Spark创建表存到哪里-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<!--告知Spark Hive的MetaStore在哪-->
<property>
<name>hive.metastore.uris</name>
<value>thrift://node1:9083</value>
</property>
</configuration>
-
将mysql的驱动jar包放入spark的jars目录
-
确保Hive配置了MetaStore相关的服务,检查hive配置文件目录内的hive-site.xml,确保有如下的配置:
<configuration> <property> <name>hive.metastore.uris</name> <value>thrift://node1:9083/value> </property> </configuration>
-
启动hive的MetaStore服务
nohup /export/server/hive/bin/hive --service metastore 2>&1 >> /var/log/metastore.log &
import os
from pyspark.sql import SparkSession
os.environ['SPARK_HOME'] = '/export/server/spark'
PYSPARK_PYTHON = '/root/anaconda3/envs/pyspark_env/bin/python'
os.environ['PYSPARK_PYTHON'] = PYSPARK_PYTHON
os.environ['PYSPARK_DRIVER_PYTHON'] = PYSPARK_PYTHON
if __name__ == '__main__':
spark = SparkSession\
.builder\
.appName("test")\
.master("local[*]")\
.config("spark.sql.shuffle.partitions","4")\
.config("spark.sql.warehouse.dir","hdfs://node1:8020/user/hive/warehouse")\
.config("hive.metastore.uris","thrift://node1:9083")\
.enableHiveSupport()\
.getOrCreate()
spark.sql("""SELECT * FROM testttt.student""").show()