Hive on Spark配置

@ 2016-05-30

      • 修改HIVE_HOMEconfhive-sitexml
      • 添加spark-assembly包
      • 额外添加几个jar包
      • 附 编译spark-assembly包

Hive on Spark,基于Spark的Hive,实质上是将Hive默认的计算引擎MapReduce替换成Spark。Hive on Spark的设置相当简单,但是其中也是各种坑~

环境说明

  • CentOS 6.7
  • Hadoop 2.7.2
  • Hive 2.0.0
  • Spark 1.5.0
  • Kylin 1.5.1

1. 修改$HIVE_HOME/conf/hive-site.xml


    hive.execution.engine
    spark
    这个值可以使mr/tez/spark中的一个作为hive的执行引擎,mr是默认值,而tez仅hadoop 2支持
 

2. 添加spark-assembly包

注意,起初Spark使用的版本并非1.5.0,当使用其spark-assembly包时,hive无法正常使用spark进行计算,后来查看hive-2.0.0-src中的pom.xml,找到spark的版本为1.5.0,因此自己对spark进行了编译,具体编译方法在末尾小节中。

  1. 拷贝spark-assembly-1.5.0-hadoop2.6.0.jar到Hive下:
cp $SPARK_HOME/lib/spark-assembly-1.5.0-hadoop2.6.0.jar $HIVE_HOME/lib/
  1. 测试,进入Hive Cli执行计算语句,如下:
hive> select sum(measure) from tb_fact;
Query ID = nanyue_20160530194626_77f06879-0508-49cc-b4fd-8e4748da4193
Total jobs = 1
Launching Job 1 out of 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=
In order to set a constant number of reducers:
  set mapreduce.job.reduces=
Starting Spark Job = 2de6c9eb-b79b-4111-a594-b4c4552440da

Query Hive on Spark job[0] stages:
0
1

Status: Running (Hive on Spark job[0])
Job Progress Format
CurrentTime StageId_StageAttemptId: SucceededTasksCount(+RunningTasksCount-FailedTasksCount)/TotalTasksCount [StageCost]
2016-05-30 19:46:34,737 Stage-0_0: 0(+1)/2  Stage-1_0: 0/1
........
2016-05-30 19:46:48,815 Stage-0_0: 2/2 Finished Stage-1_0: 1/1 Finished 
Status: Finished successfully in 18.10 seconds
OK
4.9995E9
Time taken: 22.783 seconds, Fetched: 1 row(s)

3. 额外添加几个jar包

在我的环境下,Hive on Spark和Hive&HBase是同时使用的,且基于此还有Kylin需要使用Hive和HBase,经过测试之后,在.hiverc下添加了下面这些jar包,才使得Hive/HBase/Kylin各组件协调统一的运行正常。

add jar /opt/hbase-1.1.3/lib/htrace-core-3.1.0-incubating.jar;
add jar /opt/hive-2.0.0/lib/hive-metastore-2.0.0.jar;
add jar /opt/hbase-1.1.3/lib/hbase-server-1.1.3.jar;
add jar /opt/hbase-1.1.3/lib/hbase-client-1.1.3.jar;
add jar /opt/hbase-1.1.3/lib/hbase-protocol-1.1.3.jar;
add jar /opt/hive-2.0.0/hcatalog/share/hcatalog/hive-hcatalog-core-2.0.0.jar;
add jar /opt/hive-2.0.0/lib/datanucleus-core-4.1.6.jar;
add jar /opt/hive-2.0.0/lib/datanucleus-api-jdo-4.2.1.jar;
add jar /opt/hive-2.0.0/lib/datanucleus-rdbms-4.1.7.jar;
add jar /opt/hive-2.0.0/lib/hive-cli-2.0.0.jar;
add jar /opt/hive-2.0.0/lib/hive-hbase-handler-2.0.0.jar;

附. 编译spark-assembly包

建议:在大数据平台中,必然会使用到各种各样的开源组件,因此在使用某一组件之前,强烈建议弄清楚该组件的版本中适用于现有组件版本有哪些。开源组件的版本兼容性问题,一直是挖坑利器。

  1. 预先准备MAVEN环境
    下载MAVEN的bin包,设置好环境变量
[mars@master ~]$ echo $MAVEN_HOME
/opt/maven
  1. 下载对应的Spark源码包,这里下载spark-1.5.0.tgz,解压
  2. 进入spark-1.5.0,执行mvn编译语句
mvn -Pyarn -Dyarn.version=2.6.0 -Phadoop-2.6 -Dhadoop.version=2.6.0 -DskipTests clean package

这里需要指定hadoop和yarn,若指定为2.7.2,编译会报错找不到hadoop-2.7.2,不要添加-Phive相关的参数;编译的时长与网络情况相关,如果失败了,多试几次应该可以的。
4. 编译完成之后可以得到spark-assembly…jar,和几个datanucleus相关的几个包

[mars@master spark-1.5.0]$ ll assembly/target/scala-2.10/
total 179660
-rw-rw-r-- 1 nanyue nanyue 183970627 May 26 10:46 spark-assembly-1.5.0-hadoop2.6.0.jar
[mars@master spark-1.5.0]$ ll lib_managed/jars/
total 3948
-rw-rw-r-- 1 nanyue nanyue  339666 May 26 10:43 datanucleus-api-jdo-3.2.6.jar
-rw-rw-r-- 1 nanyue nanyue 1890075 May 26 10:43 datanucleus-core-3.2.10.jar
-rw-rw-r-- 1 nanyue nanyue 1809447 May 26 10:43 datanucleus-rdbms-3.2.9.jar

在第二步添加spark-assembly包这一步中,使用你自己编译的包,并且在使用编译得到的datanucleus的几个包替换掉$HIVE_HOME/lib/下相同的包。

你可能感兴趣的:(BigData)