你好,游客 登录
背景:
阅读新闻

Spark Sql系统入门3:spark sql运行计划精简

[日期:2017-10-31] 来源:aboutyun  作者:pig2 [字体: ]

问题导读

1.hive/console的作用是什么?
2.hive/console如何安装?
3.hive/console的原理是什么?
4.通过什么命令可以查看执行计划?
5.如何查看RDD的转换过程?



hive/console官网没有提供,需要下载spark源码,hive源码及配置环境变量编译。然后运行hive/console.这个作用,可以查看sql的运行计划,schema,转换rdd等。
hive/console安装

sparkSQL从1.0.0开始提供了一个sparkSQL的调试工具hive/console。该工具是给开发者使用,在编译生成的安装部署包中并没有;该工具需要使用sbt编译运行。要使用该工具,需要具备以下条件:
1spark1.1.0源码
2 hive0.12源码并编译
3 配置环境变量

安装hive/cosole
下面是笔者安装过程:
A:下载spark1.1.0源码,安装在/app/hadoop/spark110_sql目录
B:下载hive0.12源码,安装在/app/hadoop/hive012目录,进入src目录后,使用下面命令进行编译:

[Bash shell] 纯文本查看 复制代码
1
ant clean package -Dhadoop.version=2.2.0 -Dhadoop-0.23.version=2.2.0 -Dhadoop.mr.rev=23



C:配置环境变量文件~/.bashrc后,source ~/.bashrc使环境变量生效。

[Bash shell] 纯文本查看 复制代码
1
2
3
export HIVE_HOME=/app/hadoop/hive012/src/build/dist
export HIVE_DEV_HOME=/app/hadoop/hive012/src
export HADOOP_HOME=/app/hadoop/hadoop220



D:启动

切换到spark安装目录/app/hadoop/spark110_sql,运行命令:

[Bash shell] 纯文本查看 复制代码
1
sbt/sbt hive/console



经过一段漫长的sbt编译过程,最后出现如下界面:


在控制台的scala提示符下,输入:help可以获取帮助,输入Tab键会陈列出当前可用的方法、函数、及变量。下图为按Tab键时显示的方法和函数,随着用户不断使用该控制态,用户定义或使用过的变量也会陈列出来。



hive/console原理
hive/console的调试原理很简单,就是在scala控制台装载了catalyst中几个关键的class,其中的TestHive预定义了表结 构并装载命令,这些数据是hive0.12源码中带有的测试数据,装载这些数据是按需执行的;这些数据位于/app/hadoop/hive012 /src/data中,也就是$HIVE_DEV_HOME/data中。




因为要使用hive0.12的测试数据,所以需要定义两个环境变量:HIVE_HOME和HIVE_DEV_HOME,如果使用hive0.13的话,用户需要更改到相应目录:

[Scala] 纯文本查看 复制代码
1
2
3
4
5
/*源自 sql/hive/src/main/scala/org/apache/spark/sql/hive/TestHive.scala */
/** The location of the compiled hive distribution */
lazy val hiveHome = envVarToFile("HIVE_HOME")
/** The location of the hive source code. */
lazy val hiveDevHome = envVarToFile("HIVE_DEV_HOME")



另外,如果用户想在hive/console启动的时候,预载更多的class,可以修改spark源码下的 project/SparkBuild.scala文件

[Scala] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
/* 源自 project/SparkBuild.scala */
object Hive {
lazy val settings = Seq( javaOptions += "-XX:MaxPermSize=1g",
// Multiple queries rely on the TestHive singleton. See comments there for more details.
parallelExecution in Test := false,
// Supporting all SerDes requires us to depend on deprecated APIs, so we turn off the warnings
// only for this subproject.
scalacOptions <<= scalacOptions map { currentOpts: Seq[String] => currentOpts.filterNot(_ == "-deprecation") }, initialCommands in console := """ |import org.apache.spark.sql.catalyst.analysis._
|import org.apache.spark.sql.catalyst.dsl._
|import org.apache.spark.sql.catalyst.errors._
|import org.apache.spark.sql.catalyst.expressions._
|import org.apache.spark.sql.catalyst.plans.logical._
|import org.apache.spark.sql.catalyst.rules._
|import org.apache.spark.sql.catalyst.types._
|import org.apache.spark.sql.catalyst.util._
|import org.apache.spark.sql.execution
|import org.apache.spark.sql.hive._
|import org.apache.spark.sql.hive.test.TestHive._
|import org.apache.spark.sql.parquet.ParquetTestData""".stripMargin ) }




常用操作
下面介绍一下hive/console的常用操作,主要是和运行计划相关的常用操作。在操作前,首先定义一个表people和查询query:

//在控制台逐行运行
case class Person(name:String, age:Int, state:String) sparkContext.parallelize(Person("Michael",29,"CA")::Person("Andy",30,"NY")::Person("Justin",19,"CA")::Person("Justin",25,"CA")::Nil).registerTempTable("people")
val query= sql("select * from people")

查看查询的schema

[Bash shell] 纯文本查看 复制代码
1
query.printSchema





查看查询的整个运行计划

[Bash shell] 纯文本查看 复制代码
1
query.queryExecution






查看查询的Unresolved LogicalPlan

[Bash shell] 纯文本查看 复制代码
1
query.queryExecution.logical




同理其它
查看查询的analyzed LogicalPlan

[Bash shell] 纯文本查看 复制代码
1
query.queryExecution.analyzed


查看优化后的LogicalPlan

[Bash shell] 纯文本查看 复制代码
1
query.queryExecution.optimizedPlan



查看物理计划

[Bash shell] 纯文本查看 复制代码
1
query.queryExecution.sparkPlan



查看RDD的转换过程

[Bash shell] 纯文本查看 复制代码
1
query.toDebugString


上一篇:spark sql系统入门2---spark sql精简总结

收藏 推荐 打印 | 阅读:
相关新闻       hive  spark sql  rdd  console