由于项目需要挂载hive,因此学习阅读了部分spark SQL连接hive的源码,特此总结
spark SQL连接hive方式
1. spark SQL连接hive相关参数和类
spark SQL连接hive的相关demo如下(代码位于spark源码SparkHiveExample类):
val spark = SparkSession
.builder().master("local[*]")
.appName("Spark Hive Example")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()
sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) USING hive")
sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")
// Queries are expressed in HiveQL
sql("SELECT * FROM src").show()
自spark2.0开始,sparksql统一hivecontext与sqlcontext为sparksession,连接hive时,通过enableHiveSupport()开启对hive的支持。sparkSession通过参数:
spark.sql.catalogImplementation来加载或者创建不同的SessionState。SessionState作为spark SQL的核心类,总共分为以下两种:
(default) SessionStateBuilder for in-memory catalog
HiveSessionStateBuilder for hive catalog
当调用enableHiveSupport()时,便会构建hiveSessionStateBuilder对象,该类中主要重载了3个对象:Catalog,Analyzer和SparkPlanner。