本文主要参考自《大数据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了。
画龙画虎难画骨,知人知面不知心。