本帖最后由 desehawk 于 2015-6-8 18:59 编辑
问题导读
1.spark1.3.1默认不支持Hive,该如何解决?
2.如何编译spark?
3.Hive数据需要准备哪些工作?
spark1.3.1默认不支持Hive,如果想要在SparkSQL中使用HiveContext需要自己编译spark的版本。
需要的环境:Hadoop、Hive、MySQL和Spark。
测试数据下载地址:http://pan.baidu.com/s/1o6DVYbw
步骤:
1、搭建Hadoop集群
2、安装MySQL
3、安装Hive
4、下载Spark源码,并进行编译:
Spark的make-distribution.sh使用格式:
[mw_shl_code=bash,true]./make-distribution.sh [--name] [--tgz] [--with-tachyon]<maven build options>[/mw_shl_code]
参数的含有:
* --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源码目录下,使用命令:
[mw_shl_code=bash,true]./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
[/mw_shl_code]
经过大约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,并装载数据,具体命令如下:
[mw_shl_code=sql,true]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';[/mw_shl_code]
装载数据:
[mw_shl_code=bash,true]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;[/mw_shl_code]
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:
[mw_shl_code=bash,true]./spark-shell --driver-class-path /opt/spark-1.3.1-bin-2.4.0/lib/mysql-connector-java-5.1.35.jar[/mw_shl_code]
或者
[mw_shl_code=bash,true]SPARK_CLASSPATH=/opt/spark-1.3.1-bin-2.4.0/lib/mysql-connector-java-5.1.35.jar ./spark-shell[/mw_shl_code]
执行下面语句:
[mw_shl_code=bash,true]val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc);
hiveContext.sql("use saledata");
hiveContext.sql("show tables").collect().foreach(println);[/mw_shl_code]
表示已经可以使用HiveContext了。
来源:Lucius89
|
|