Hive On Spark官方文档:https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started
首先,之前凭借自己的错觉以为使用官网提供好的安装包之后就可以,后来各种实验各种问题。最后下决心进行自己编译源码进行安装。经过两天的摸索最终还是成功了!!功夫还是不负有心人的,以后要多多有耐心,细心做事。
接下来言归正传,正如hive官网说的hive on spark,hive的版本要without hadoop,所以需要自行编译spark。此处没有想象那么困难,要有动手的勇气和激情,很多问题都会迎刃而解,编译源码,第一步就是下载源码,个人推荐去GitHub上下载需要的源码包,因为这个更新的及时,官网下载的源码有时候没有及时更新,会让你走很多弯路。下面就说一下源码编译过程:
由于国内使用maven非常卡,所以推荐maven仓库配置成阿里巴巴的仓库,速度非常给力的。
仓库地址如下:
alimaven
central
aliyun maven
http://maven.aliyun.com/nexus/content/repositories/central/
编译Spark源码一定要参考官网文档,网上博客有时候老旧可能让你陷入困境。笔者深有体会。
如果想修改Spark的scala类库版本等可以修改Saprk-source根目录的pom文件。
配置一下maven的参数,防止编译过程内存溢出。
export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
使用如下脚本:
make-distribution.sh --name custom-spark --tgz --mvn ${MAVEN_HOME}/bin/mvn -Phadoop-2.4 -Phive -Phive-thriftserver -Pmesos -Pyarn
其中参数含义分别为:
--name custom-spark //指定压缩包名字
--tgz //生成tgz的部署包
--mvn ${MAVEN_HOME}/bin/mvn //指定使用自己本地配置的mvn,不指定默认使用spark-source/build下面的mvn
最后生成的安装包早Spark源码根目录。
到此,假设你已经编译好了Spark安装包,部署即可。
接下来,Github下载hive源码,此处要修改Hive依赖的Spark版本和Hadoop以及Scala类库版本。
修改好版本(修改pom.xml)之后便可以进行编译,使用mvn clean package -Pdist -Dmaven.test.skip=true编译即可。(可以跳过测试步骤,否则太慢)
Hive官方编译文档:
$ git clone https://git-wip-us.apache.org/repos/asf/hive.git $ cd hive $ mvn clean package -Pdist $ cd packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin $ ls LICENSE NOTICE README.txt RELEASE_NOTES.txt bin/ (all the shell scripts) lib/ (required jar files) conf/ (configuration files) examples/ (sample input and query files) hcatalog / (hcatalog installation) scripts / (upgrade scripts for hive-metastore)
最后输出目录:
packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin
例如我的输出目录:
/home/daxin/installData/source/hive-2.1.1/packaging/target/apache-hive-2.2.0-SNAPSHOT-bin/apache-hive-2.2.0-SNAPSHOT-bin
假定此时你已经编译好Hive源码。
安装MySQL数据库,创建数据库,同时安装Hive(安装过程另写博文补充)。
安装好执行:schematool -dbType MySQL -initSchema 把之前创建的元数据都同步到mysql 里。
此处遇见的:“schematool -dbType MySQL -initSchema ” 命令直接复制输入进去之后,竟然报错。
File /home/daxin/bigdata/Hive/scripts/metastore/upgrade/MySQL/upgrade.order.MySQLnot found
参见:http://blog.csdn.net/dax1n/article/details/58614516
后来去 /home/daxin/bigdata/Hive/scripts/metastore/upgrade/MySQL/看文件也确实存在,只不过文件名字大小写不一致,后来
怀疑schematool -dbType MySQL -initSchema中MySQL的问题,自己改成:schematool -dbType mysql -initSchema
最后元数据同步数据库完毕之后启动元数据服务,之后启动Hive脚本设置set hive.execution.engine=spark;
启动元数据服务:hive --service metastore &
创建表:
create table t_u(id string,age int ,salary double) row format delimited fields terminated by ' ' lines terminated by '\n' stored as textfile ;
create table t_s(id string,age int ,salary double) row format delimited fields terminated by ' ' lines terminated by '\n' stored as textfile ;
导入数据:
load data inpath '/uu' into table t_s;
load data inpath '/uu' into table t_u;
之后写一个查询测试:select u.age from t_u u ,t_s s where u.age =s.age;
竟然又报错了:
Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/Iterable
此时不过还是喜悦的,感觉离success已经不远了。最后发现是hive没有加载spark jars原因,解决方案:在hive脚本中加载spark jars即可,具体步骤参见:
http://blog.csdn.net/dax1n/article/details/58252094
此时在输入:select u.age from t_u u ,t_s s where u.age =s.age;
Hadoop YARN 界面:
Spark Job界面:
到此已经完成安装!