(四)SparkSQL 学习笔记

Spark on hive

开发环境配置

  1. 将 hive_home/conf 的 hive-site.xml 拷贝到 spark_home/conf 内;
  2. 将 hadoop_home/etc/hadoop 内的 hdfs-site.xml 和 core-site.xml 拷贝到spark_home/conf 内;
  3. 在拷贝到 spark_home/conf 所在节点上以 local 模式启动 spark-sql;
  4. 如果 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执行过程

  1. 编辑 Dataset API SQL代码;
  2. 如果代码编译没有报错,Spark 会将代码转化为逻辑计划;
  3. Spark 会将逻辑计划转化为物理计划,会对代码进行优化(catalyst 优化器) ;
  4. 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,最后返回结果给用户。

猜你喜欢

转载自blog.csdn.net/dec_sun/article/details/89819558