欢迎关注大数据技术架构与案例微信公众号:过往记忆大数据
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
过往记忆大数据

Hive 1.2.1源码编译

  Hive 1.2.1源码编译依赖的Hadoop版本必须最少是2.6.0,因为里面用到了Hadoop的org.apache.hadoop.crypto.key.KeyProviderorg.apache.hadoop.crypto.key.KeyProviderFactory两个类,而这两个类在Hadoop 2.6.0才出现,否者会出现以下编译错误:

[ERROR] /home/q/spark/apache-hive-1.2.1-src/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java:[43,36] package org.apache.hadoop.crypto.key does not exis
[ERROR] /home/q/spark/apache-hive-1.2.1-src/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java:[41,36] package org.apache.hadoop.crypto.key does not exist
[ERROR] /home/q/spark/apache-hive-1.2.1-src/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java:[42,48] package org.apache.hadoop.crypto.key.KeyProvider does not exist

  Hive 1.2.1默认的Hadoop版本是2.6.0(2.6.0),不修改就行。

  Hive 1.2.1依赖的Spark版本最高只能是Spark 1.4.1,如果你修改到Spark 1.5.x版本编译的时候会出现以下错误:

[ERROR] /home/q/spark/apache-hive-1.2.1-src/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java:[441,11] org.apache.hive.spark.client.RemoteDriver.ClientListener is not abstract and does not override abstract method onBlockUpdated(org.apache.spark.scheduler.SparkListenerBlockUpdated) in org.apache.spark.scheduler.SparkListener

spark 1.2.1默认的Spark版本是1.3.1,1.3.1。如果没有特殊情况,不修改pom.xml文件即可一次性编译成功。

编译的时候需要按照配置好Maven,如果在编译时出现类似的内存不够问题,请设置如下配置

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

上面弄完之后,我们可以用下面命令编译:

mvn clean package -Phadoop-2 -DskipTests

如果一切顺利的话,可以得到以下的编译结果:

[INFO] Reactor Summary:
[INFO] 
[INFO] Hive ............................................... SUCCESS [  3.227 s]
[INFO] Hive Shims Common .................................. SUCCESS [  1.923 s]
[INFO] Hive Shims 0.20S ................................... SUCCESS [  0.797 s]
[INFO] Hive Shims 0.23 .................................... SUCCESS [  3.250 s]
[INFO] Hive Shims Scheduler ............................... SUCCESS [  0.967 s]
[INFO] Hive Shims ......................................... SUCCESS [  0.916 s]
[INFO] Hive Common ........................................ SUCCESS [  2.660 s]
[INFO] Hive Serde ......................................... SUCCESS [  1.846 s]
[INFO] Hive Metastore ..................................... SUCCESS [  3.906 s]
[INFO] Hive Ant Utilities ................................. SUCCESS [  0.320 s]
[INFO] Spark Remote Client ................................ SUCCESS [  5.191 s]
[INFO] Hive Query Language ................................ SUCCESS [ 25.649 s]
[INFO] Hive Service ....................................... SUCCESS [  1.492 s]
[INFO] Hive Accumulo Handler .............................. SUCCESS [  2.095 s]
[INFO] Hive JDBC .......................................... SUCCESS [  6.638 s]
[INFO] Hive Beeline ....................................... SUCCESS [  0.865 s]
[INFO] Hive CLI ........................................... SUCCESS [  0.928 s]
[INFO] Hive Contrib ....................................... SUCCESS [  0.725 s]
[INFO] Hive HBase Handler ................................. SUCCESS [  2.840 s]
[INFO] Hive HCatalog ...................................... SUCCESS [  0.489 s]
[INFO] Hive HCatalog Core ................................. SUCCESS [  1.226 s]
[INFO] Hive HCatalog Pig Adapter .......................... SUCCESS [  1.003 s]
[INFO] Hive HCatalog Server Extensions .................... SUCCESS [  0.847 s]
[INFO] Hive HCatalog Webhcat Java Client .................. SUCCESS [  0.820 s]
[INFO] Hive HCatalog Webhcat .............................. SUCCESS [  3.950 s]
[INFO] Hive HCatalog Streaming ............................ SUCCESS [  0.803 s]
[INFO] Hive HWI ........................................... SUCCESS [  0.709 s]
[INFO] Hive ODBC .......................................... SUCCESS [  0.584 s]
[INFO] Hive Shims Aggregator .............................. SUCCESS [  0.060 s]
[INFO] Hive TestUtils ..................................... SUCCESS [  0.090 s]
[INFO] Hive Packaging ..................................... SUCCESS [  1.220 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11:19 min
[INFO] Finished at: 2015-11-09T19:33:33+08:00
[INFO] Final Memory: 99M/881M
[INFO] ------------------------------------------------------------------------

编译时长根据你网络环境,最好配置成公司的Maven仓库。当然,如果你需要将编译好的文件进行打包,可以运行下面的命令:

mvn clean package -Phadoop-2 -DskipTests -Pdist

上面的命令运行完成之后,会在$HIVE_SRC/packaging/target目录下产生以下几个文件:

drwxr-xr-x 2 iteblog iteblog     4096 May  9 13:13 antrun
drwxr-xr-x 3 iteblog iteblog     4096 May  9 13:14 apache-hive-1.2.1-bin
-rw-r--r-- 1 iteblog iteblog 92836488 May  9 13:14 apache-hive-1.2.1-bin.tar.gz
-rw-r--r-- 1 iteblog iteblog 17360091 May  9 13:14 apache-hive-1.2.1-jdbc.jar
-rw-r--r-- 1 iteblog iteblog 14318686 May  9 13:14 apache-hive-1.2.1-src.tar.gz
drwxr-xr-x 4 iteblog iteblog     4096 May  9 13:14 archive-tmp
drwxr-xr-x 3 iteblog iteblog     4096 May  9 13:13 maven-shared-archive-resources
drwxr-xr-x 3 iteblog iteblog     4096 May  9 13:13 tmp
drwxr-xr-x 2 iteblog iteblog     4096 May  9 13:13 warehouse
本博客文章除特别声明,全部都是原创!
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Hive 1.2.1源码编译】(https://www.iteblog.com/archives/1527.html)
喜欢 (6)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!
(11)个小伙伴在吐槽
  1. 楼主您好,我这边也是编译hive,但是不知道为什么一直出现:
    [WARNING] The requested profile "hadoop-2" could not be activated because it does not exist.
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project hive-serde: Compilation failure
    [ERROR] An unknown compilation problem occurred
    不知道您是否可以给给些建议 多谢您了

    夏洛特猫2016-05-10 11:32 回复
    • 你Hive源码是不是从Github里面下载的?

      w3970907702016-05-10 14:57 回复
      • 多谢您的回复 github上和apache-hive 提供的源码都试过了 都是报一样的错

        夏洛特猫2016-05-10 15:00 回复
        • 不科学啊,你的编译命令是什么?我上面例子就是编译Hive 1.2.1源码的。

          w3970907702016-05-10 15:29 回复
          • 命令:mvn clean package -Phadoop-2 -DskipTests
            我的maven版本-3.3 和3.6都试过,java为1.7.0.
            Hive版本apache-hive-1.2.1-src 和hive_on_spark 都进行过编译都包那个错
            pom中制定maven-compiler-plugin的版本也是不行。。。不知道这原因出在哪

            夏洛特猫2016-05-10 15:40
      • 补充下楼主,我的maven版本-3.3 和3.6都试过,Hive版本apache-hive-1.2.1-src 和hive_on_spark 都进行过编译都包那个错。。。

        夏洛特猫2016-05-10 15:03 回复
  2. 你好,我从GITHUB上下载了HIVE ON SPARK分支进行编译,可是编译之后,LIB目录下是空的,没有JAR包。
    我直接把HIVE_HOME指向编译的文件夹,配置好之后无法运行。提示缺少”hive-exec-*.jar"。
    我查了一下,有这么一个文件”./ql/target/hive-exec-2.0.0-SNAPSHOT.jar“。但是不在LIB目录下。

    编译了之后我也没有看到有什么目录存放编译结果的呀。
    我是用“mvn clean package -Phadoop-2.6 -Dhadoop.version=2.6.0 -DskipTests"进行编译的。

    不知道编译之后应该如何使用?

    __TENG__2016-05-09 10:33 回复
    • 如果你需要打包,可以运行mvn clean package -Phadoop-2 -DskipTests -Pdist编译的命令,运行完成之后,会在$HIVE_SRC/packaging/target目录下产生apache-hive-1.2.1-bin.tar.gz、apache-hive-1.2.1-bin、apache-hive-1.2.1-jdbc.jar以及apache-hive-1.2.1-src.tar.gz文件,这就是你需要的吧?

      w3970907702016-05-09 13:16 回复
      • 你好,我用我的那个命令,编译后/packaging/target目录下只有:antrun、maven-shared-archive-resources、tmp、warehouse这几个文件夹,是因为我编译命令里缺少“-Pdist”吗?
        另外,一定要用“-Phadoop-2”么?不能使用“-Phadoop-2.6 -Dhadoop.version=2.6.0”?虽然我的HADOOP的版本是2.7.1.
        我先按你的命令试一下吧。编译一次要好几个小时。好像是网络太渣的原因。0.0
        谢谢了。
        其实我就是想修改HIVE的引擎为SPARK。按http://www.iteblog.com/archives/1493 一文进行设置,也和底下评论一样出现“RPC channel is closed.”的问题。所以我就GITHUB上 https://github.com/apache/hive/tree/spark,下载SPARK分支试试了。

        __TENG__2016-05-09 13:25 回复
        • 如果你使用的是Hadoop 2.x必须使用-Phadoop-2,-Dhadoop.version=2.6.0这个参数相当于没有设置,因为Hive编译不支持这个参数;而且现在Hive默认依赖的Hadoop版本就是2.6.0了,所以不需要你再设置了,不过如果你需要修改成别的版本,可以到Hive源码的pom.xml文件修改hadoop-23.version参数为你需要的Hadoop版本。

          如果你需要使用Hive on Spark,Spark和Hive的版本一定要对上。建议你使用Hive 1.2.1+Spark 1.4.1,详细的配置步骤可以参见本博客的《Hive on Spark编程入门指南》文章,Github master分支上面的不一定稳定,祝你成功。

          w3970907702016-05-09 13:47 回复
          • 编译完成了(这次居然这么快)
            [INFO] ------------------------------------------------------------------------
            [INFO] BUILD SUCCESS
            [INFO] ------------------------------------------------------------------------
            [INFO] Total time: 19:20 min
            [INFO] Finished at: 2016-05-09T13:45:52+08:00
            [INFO] Final Memory: 300M/1092M
            [INFO] ------------------------------------------------------------------------
            [WARNING] The requested profile "hadoop-2" could not be activated because it does not exist.
            出现如上警告,不知道有没有关系。 /packaging/target目录下也有相应的gz文件了。一会配置一下试试。
            另,
            我现在是用HIVE1.2.1+SPARK1.6.1。现在编译的HIVE是github上的spark分支,不是MASTER分支。
            我之前也按博客的内容进行编译。运行HIVE后,执行SQL也出现了“RPC channel is closed.”的问题。我看评论中有人在讨论,也没出个结果。不过我是用SPARK1.6.1,不知道是否有关系。
            我一会再试试用SPARK1.4.1。感觉版本的因素好大,关于编译我其实不太懂这些参数什么的,谢谢指点。

            __TENG__2016-05-09 13:54