SparkSql实战

3、SparkSQL CLI

  CLI(Command-Line Interface,命令行界面)是指可在用户提示符下键入可执行指令的界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后予以执行。Spark CLI指的是使用命令界面直接输入SQL命令,然后发送到Spark集群进行执行,在界面中显示运行过程和最终的结果。

  Spark1.1相较于Spark1.0最大的差别就在于Spark1.1增加了Spark SQL CLI和ThriftServer,使得Hive用户还有用惯了命令行的RDBMS数据库管理员较容易地上手,真正意义上进入了SQL时代。

【注】Spark CLI和Spark Thrift Server实验环境为第二课《Spark编译与部署(下)--Spark编译安装》所搭建

3.1  运行环境说明

3.1.1 硬软件环境

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

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

l  虚拟机操作系统:CentOS 64位,单核

l  虚拟机运行环境:

Ø  JDK:1.7.0_55 64位

Ø  Hadoop:2.2.0(需要编译为64位)

Ø  Scala:2.11.4

Ø  Spark:1.1.0(需要编译)

Ø  Hive:0.13.1

3.1.2 机器网络环境

集群包含三个节点,节点之间可以免密码SSH访问,节点IP地址和主机名分布如下:

序号

IP地址

机器名

类型

核数/内存

用户名

目录

1

192.168.0.61

hadoop1

NN/DN/RM

Master/Worker

1核/3G

hadoop

/app 程序所在路径

/app/scala-...

/app/hadoop

/app/complied

2

192.168.0.62

hadoop2

DN/NM/Worker

1核/2G

hadoop

3

192.168.0.63

hadoop3

DN/NM/Worker

1核/2G

hadoop

3.2 配置并启动

3.2.1 创建并配置hive-site.xml

在运行Spark SQL CLI中需要使用到Hive Metastore,故需要在Spark中添加其uris。具体方法是在SPARK_HOME/conf目录下创建hive-site.xml文件,然后在该配置文件中,添加hive.metastore.uris属性,具体如下:

<configuration> 

  <property>

    <name>hive.metastore.uris</name>

    <value>thrift://hadoop1:9083</value>

    <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>

  </property>

</configuration>

 

3.2.2 启动Hive

在使用Spark SQL CLI之前需要启动Hive Metastore(如果数据存放在HDFS文件系统,还需要启动Hadoop的HDFS),使用如下命令可以使Hive Metastore启动后运行在后台,可以通过jobs查询:

$nohup hive --service metastore > metastore.log 2>&1 &

 

 

3.2.3 启动Spark集群和Spark SQL CLI

通过如下命令启动Spark集群和Spark SQL CLI:

$cd /app/hadoop/spark-1.1.0

$sbin/start-all.sh

$bin/spark-sql --master spark://hadoop1:7077 --executor-memory 1g

在集群监控页面可以看到启动了SparkSQL应用程序:

 

这时就可以使用HQL语句对Hive数据进行查询,另外可以使用COMMAND,如使用set进行设置参数:默认情况下,SparkSQL Shuffle的时候是200个partition,可以使用如下命令修改该参数:

SET spark.sql.shuffle.partitions=20;

运行同一个查询语句,参数改变后,Task(partition)的数量就由200变成了20。

 

3.2.4 命令参数

通过bin/spark-sql --help可以查看CLI命令参数:

 

 

其中[options] 是CLI启动一个SparkSQL应用程序的参数,如果不设置--master的话,将在启动spark-sql的机器以local方式运行,只能通过http://机器名:4040进行监控;这部分参数,可以参照Spark1.0.0 应用程序部署工具spark-submit 的参数。

[cli option]是CLI的参数,通过这些参数CLI可以直接运行SQL文件、进入命令行运行SQL命令等等,类似以前的Shark的用法。需要注意的是CLI不是使用JDBC连接,所以不能连接到ThriftServer;但可以配置conf/hive-site.xml连接到Hive的Metastore,然后对Hive数据进行查询。

3.3 实战Spark SQL CLI

3.3.1 获取订单每年的销售单数、销售总额

第一步   设置任务个数,在这里修改为20个

spark-sql>SET spark.sql.shuffle.partitions=20;

 

 

第二步   运行SQL语句

spark-sql>use hive;

 

 

spark-sql>select c.theyear,count(distinct a.ordernumber),sum(b.amount) from tbStock a join tbStockDetail  b on a.ordernumber=b.ordernumber join tbDate c on a.dateid=c.dateid group by c.theyear order by c.theyear;

 

第三步   查看运行结果

 

 

3.3.2 计算所有订单每年的总金额

第一步   执行SQL语句

spark-sql>select c.theyear,count(distinct a.ordernumber),sum(b.amount) from tbStock a join tbStockDetail  b on a.ordernumber=b.ordernumber join tbDate c on a.dateid=c.dateid group by c.theyear order by c.theyear;

 

 

第二步   执行结果

使用CLI执行结果如下:

 

 

 

3.3.3 计算所有订单每年最大金额订单的销售额

第一步   执行SQL语句

spark-sql>select c.theyear,max(d.sumofamount) from tbDate c join (select a.dateid,a.ordernumber,sum(b.amount) as sumofamount from tbStock a join tbStockDetail  b on a.ordernumber=b.ordernumber group by a.dateid,a.ordernumber ) d  on c.dateid=d.dateid group by c.theyear sort by c.theyear;

 

 

第二步   执行结果

使用CLI执行结果如下:

 

4、Spark Thrift Server

ThriftServer是一个JDBC/ODBC接口,用户可以通过JDBC/ODBC连接ThriftServer来访问SparkSQL的数据。ThriftServer在启动的时候,会启动了一个SparkSQL的应用程序,而通过JDBC/ODBC连接进来的客户端共同分享这个SparkSQL应用程序的资源,也就是说不同的用户之间可以共享数据;ThriftServer启动时还开启一个侦听器,等待JDBC客户端的连接和提交查询。所以,在配置ThriftServer的时候,至少要配置ThriftServer的主机名和端口,如果要使用Hive数据的话,还要提供Hive Metastore的uris。

 

 

 

posted on 2017-07-22 20:18  ostin  阅读(244)  评论(0)    收藏  举报