当前位置:Gxlcms > 数据库问题 > Spark入门实战系列--6.SparkSQL(中)--深入了解运行计划及调优

Spark入门实战系列--6.SparkSQL(中)--深入了解运行计划及调优

时间:2021-07-01 10:21:17 帮助过:2人阅读

》获取

1.1  运行环境说明

1.1.1 硬软件环境

l  主机操作系统:Windows 64位,双核4线程,主频2.2G10G内存

l  虚拟软件:VMware® Workstation 9.0.0 build-812388

l  虚拟机操作系统:CentOS6.5 64位,单核

l  虚拟机运行环境:

Ø  JDK1.7.0_55 64

Ø  Hadoop2.2.0(需要编译为64位)

Ø  Scala2.10.4

Ø  Spark1.1.0(需要编译)

Ø  Hive0.13.1(源代码编译,参见1.2

1.1.2 集群网络环境

本次实验环境只需要hadoop1一台机器即可,网络环境配置如下:

序号

IP地址

机器名

类型

用户名

目录

1

192.168.0.61

hadoop1

NN/DN

hadoop

/app 程序所在路径

/app/scala-...

/app/hadoop

/app/complied

1.2 编译Hive

1.2.1 下载Hive源代码包

这里选择下载的版本为hive-0.13.1,这个版本需要到apache的归档服务器下载,下载地址:http://archive.apache.org/dist/hive/hive-0.13.1/,选择apache-hive-0.13.1-src.tar.gz文件进行下载:

技术分享

1.2.2 上传Hive源代码包

把下载的hive-0.13.0.tar.gz安装包,使用SSH Secure File Transfer工具(参见第2课《Spark编译与部署(上)--基础环境搭建》1.3.1介绍)上传到/home/hadoop/upload 目录下。

1.2.3 解压缩并移动到编译目录

到上传目录下,用如下命令解压缩hive安装文件:

$cd /home/hadoop/upload

$tar -zxf apache-hive-0.13.1-src.tar.gz

改名并移动到/app/complied目录下:

$sudo mv apache-hive-0.13.1-src /app/complied/hive-0.13.1-src

$ll /app/complied

1.2.4 编译Hive

编译Hive源代码的时候,需要从网上下载依赖包,所以整个编译过程机器必须保证在联网状态。编译执行如下脚本:

$cd /app/complied/hive-0.13.1-src/

$export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

$mvn -Phadoop-2,dist -Dmaven.test.skip=true clean package

技术分享

在编译过程中可能出现速度慢或者中断,可以再次启动编译,编译程序会在上次的编译中断处继续进行编译,整个编译过程耗时与网速紧密相关,网速较快的情况需要1个小时左右(上图的时间是多次编译后最后成功的界面)。最终编译的结果为$HIVE_HOME/packaging/target/apache-hive-0.13.1-bin.tar.gz

通过如下命令查看最终编译完成整个目录大小,可以看到大小为353.6M左右

$du -s /app/complied/hive-0.13.1-src

技术分享

【注】已经编译好的Hive包在本系列配套资源/install/6.hive-0.13.1-src.tar.gz,读者直接使用

1.3 首次运行hive-console

1.3.1 获取Spark源代码

由于首次运行hive-console需要在Spark源代码进行编译,关于Spark源代码的获取可以参考第二课《Spark编译与部署(下)--Spark编译安装》方式进行获取,连接地址为 http://spark.apache.org/downloads.html,获取源代码后把Spark源代码移动到/app/complied目录,并命名为spark-1.1.0-hive

1.3.2 配置/etc/profile环境变量

第一步   使用如下命令打开/etc/profile文件:

$sudo vi /etc/profile

第二步   设置如下参数:

export HADOOP_HOME=/app/hadoop/hadoop-2.2.0

export HIVE_HOME=/app/complied/hive-0.13.1-src

export HIVE_DEV_HOME=/app/complied/hive-0.13.1-src

技术分享

第三步   生效配置并验证

$sudo vi /etc/profile

$echo $HIVE_DEV_HOME

1.3.3 运行sbt进行编译

运行hive/console不需要启动Spark,需要进入到Spark根目录下使用sbt/sbt hive/console进行首次运行编译,编译以后下次可以直接启动。编译Spark源代码的时候,需要从网上下载依赖包,所以整个编译过程机器必须保证在联网状态。编译命令如下:

$cd /app/complied/spark-1.1.0-hive

$sbt/sbt hive/console

技术分享

编译时间会很长,在编译过程中可能出现速度慢或者中断,可以再次启动编译,编译程序会在上次的编译中断处继续进行编译,整个编译过程耗时与网速紧密相关。

技术分享

通过如下命令查看最终编译完成整个目录大小,可以看到大小为267.9M左右

$du -s /app/complied/spark-1.1.0-hive

技术分享

【注】已经编译好的Spark for hive-console包在本系列配套资源/install/6.spark-1.1.0-hive.tar.gz,可直接使用

1.4 使用hive-console

1.4.1 启动hive-console

进入到spark根目录下,使用如下命令启动hive-console

$cd /app/complied/spark-1.1.0-hive

$sbt/sbt hive/console

技术分享

1.4.2 辅助命令HelpTab

可以使用:help查看帮助内容

scala>:help

技术分享

可以使用tab键查看所有可使用命令、函数

技术分享

1.4.3 常用操作

首先定义Person类,在该类中定义nameagestate三个列,然后把该类注册为people表并装载数据,最后通过查询到数据存放到query

scala>case class Person(name:String, age:Int, state:String)

scala>sparkContext.parallelize(Person("Michael",29,"CA")::Person("Andy",30,"NY")::Person("Justin",19,"CA")::Person("Justin",25,"CA")::Nil).registerTempTable("people")

技术分享

scala>val query= sql("select * from people")

技术分享

1.4.3.1 查看查询的schema

scala>query.printSchema

scala>query.collect()

技术分享

1.4.3.2 查看查询的整个运行计划

scala>query.queryExecution

技术分享

1.4.4 查看查询的Unresolved LogicalPlan

scala>query.queryExecution.logical

技术分享

1.4.4.1 查看查询的Analyzed LogicalPlan

scala>query.queryExecution.analyzed

技术分享

1.4.4.2 查看优化后的LogicalPlan

scala>query.queryExecution.optimizedPlan

技术分享

1.4.4.3 查看物理计划

scala>query.queryExecution.sparkPlan

技术分享

1.4.4.4 查看RDD的转换过程

scala>query.toDebugString

技术分享

人气教程排行