Hive on Spark

浏览: 3766

注:若需转载,请注明出处!

Hive on Spark

大数据平台搭建 hive 2.0.0 spark 1.5.0

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

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

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=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
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相关的参数;编译的时长与网络情况相关,如果失败了,多试几次应该可以的。

  1. 编译完成之后可以得到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/下相同的包。

推荐 3
本文由 MarsJ 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

练习下看,谢谢分享
spark-assembly.jar包可能会遇到很多坑,比如:
1、编译一次时间很长;
2、多带了参数导致编译出来的jar包仍然不能用
。。。。。。

要回复文章请先登录注册