编译能支持Hive的Spark,并部署测试。

本文主要参考自《大数据Spark企业级实战》王家林著 电子工业出版社

spark1.3.1默认不支持Hive,如果想要在SparkSQL中使用HiveContext需要自己编译spark的版本。

需要的环境:Hadoop、Hive、MySQL和Spark。

测试数据下载地址:#path=%252Fblog

步骤:

1、搭建Hadoop集群

2、安装MySQL

3、安装Hive

4、下载Spark源码,并进行编译:

Spark的make-distribution.sh使用格式:

./make-distribution.sh [–name] [–tgz] [–with-tachyon]<maven build options>

参数的含有:

* –with-tachyon:是否支持内存文件系统Tachyon,不加此参数时为不支持。

* –tgz:在根目录下生成spark-$VERSION-bin.tar.gz,不加此参数是不生成tgz文件,只生成/dist目录。

* –name NAME: 和tgz结合可以生成spark-$VERSION-bin-$NAME.tgz的部署包。不加此参数时NAME为Hadoop的版本号。

* maven build options:使用maven编译时可以使用的配置选项,如使用-P、-D的选项(build Spark)。

本次生成基于Hadoop2.4.0和Yarn并集成Hive、ganglia、asl、ThriftServer的Spark1.3.1部署包,,可以在Spark源码目录下,使用命令:

./make-distribution.sh –tgz –name 2.4.0 -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -Phive -Phive-thriftserver -Pspark-ganglia-lgpl -Pkinesis-asl

经过大约25分钟的编译,生成了spark-1.3.1-bin-2.4.0.tgz这个文件,这就是我们编译的spark部署包,它支持hive,然后将它解压并部署上去。Spark的配置文件主要修改:

1)在spark-env.sh中添加下面几行:

2)在Slaves中加入从节点:

5、Hive数据的准备工作:

在Hive中定义一个数据库saledata和三个表tblData、tblStock、tblStockDetail,并装载数据,具体命令如下:

create database saledata;

use saledata;

//Date.txt文件定义了日期的分类,将每天分别赋予所属的月份、星期、季度等属性

//日期、年月、年、月、日、周几、第几周、季度、旬、半月

create table tblDate(dataID string,theyearmonth string, theyear string,themonth string,thedate string,theweek string,theweeks string, thequot string,thetenday string,thehalfmonth string ) ROW Format delimited fields terminated by ‘,’ lines terminated by ‘\n’;//Stock.txt文件定了了订单表头

//订单号、交易位置、交易日期

create table tblstock(ordernumber string,locationid string,dateId string) ROW format delimited fields terminated by ‘,’ lines terminated by ‘\n’;

//StockDetail.txt文件定义了订单明细

//订单号、行号、货品、数量、金额create table tblStockDetail(ordernumber string,rownum int, itemid string ,qty int,price int,amount int)ROW format delimited fields terminated by ‘,’ lines terminated by ‘\n’;

装载数据:

load data local inpath ‘/root/tempdata/Date.txt’ into table tbldate;load data local inpath ‘/root/tempdata/Stock.txt’ into table tblStock;load data local inpath ‘/root/tempdata/StockDetail.txt’ into table tblStockDetail;

6、hiveContext的应用。

使用hiveContext之前首先确认两点:

1)使用的Spark是否是支持Hive的。可以通过查看lib目录下是否存在以datanucleus开头的3个JAR来确定。

2)Hive的配置文件hive-site.xml已经存在conf目录中了。

启动./spark-shell时要引入mysql的驱动包,我已经将mysql-connector-java-5.1.35.jar放在了/opt/spark-1.3.1-bin-2.4.0/lib/目录下,使用如下命令启动spark-shell:

./spark-shell –driver-class-path /opt/spark-1.3.1-bin-2.4.0/lib/mysql-connector-java-5.1.35.jar

或者SPARK_CLASSPATH=/opt/spark-1.3.1-bin-2.4.0/lib/mysql-connector-java-5.1.35.jar ./spark-shell

执行下面语句:

val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc);hiveContext.sql("use saledata");hiveContext.sql("show tables").collect().foreach(println);

表示已经可以使用HiveContext了。

画龙画虎难画骨,知人知面不知心。

编译能支持Hive的Spark,并部署测试。

相关文章:

你感兴趣的文章:

标签云: