Spark on hive
开发环境配置
- 将 hive_home/conf 的 hive-site.xml 拷贝到 spark_home/conf 内;
- 将 hadoop_home/etc/hadoop 内的 hdfs-site.xml 和 core-site.xml 拷贝到spark_home/conf 内;
- 在拷贝到 spark_home/conf 所在节点上以 local 模式启动 spark-sql;
- 如果 hive 的 metastore 是 mysql 数据库,需要将 mysql 驱动放到 spark_home/jars 目录下面;
开发环境:在项目中创建文件夹 conf ,将上述三个文件放入 conf 目录; 如果 hive 的 metastore 是 mysql 数据库,需要将 mysql 驱动放到项目的类路径下。
val spark = SparkSession
.builder()
.master("local[*]")
.appName("Spark Hive Example")
.enableHiveSupport()//启用对hive的支持
.getOrCreate()
<!--如果版本高于1.2.1,设置hive-site.xml中的属性,避免报错:-->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
SparkSQL 执行过程
SparkSQL执行过程
- 编辑 Dataset API SQL代码;
- 如果代码编译没有报错,Spark 会将代码转化为逻辑计划;
- Spark 会将逻辑计划转化为物理计划,会对代码进行优化(catalyst 优化器) ;
- Spark 执行物理计划 (RDD)。
逻辑计划(Logical plan)
逻辑计划不涉及 Executor 和 Driver,只是将用户写的代码转化为最优版本,通过将用户代码转化为 unresolved logic plan,然后再转化为 resolvd logic plan,catalog(所有表和DataFrame 信息的存储库),接着会把计划给 catalyst 优化器,catalyst 优化器是一组优化规则的集合:谓词下推、投影。
物理计划
最优逻辑计划通过生成不同的物理执行策略(A B C 计划),这些物理执行计划会通过 cost model 来比较,从而从中被选取一个最优的物理执行计划,其结果是一系列的 RDD 和 transformation。
执行
选择一个物理执行计划,运行所有的 RDD 代码,使用 tungsten 进一步优化,生成本地 Java 字节码,执行生成的各种 stages,最后返回结果给用户。