zoukankan      html  css  js  c++  java
  • 编译impala2.0.0

    使用redhat5.8没编译成功,改用redhat6.4最终编译成功。

    参考官方的文档https://github.com/cloudera/Impala/tree/v1.2.2

    不知道官方的readme.md在新的版本为什么删掉了。。。囧

    准备条件

    安装必须要的包,jdk,llvm,maven

    注意它要求用oracle的jdk,redhat默认是openjdk,可以参考这里安装 http://unix.stackexchange.com/questions/63587/how-to-install-g-4-7-2-c11-on-centos-5-x

    安装boost

    CentOS 6.4上预装的是boost 1.41,但是impala需要更高版本的boost库(Note: Impala requires Boost 1.4.2 or later),所以先卸载掉boost 1.41

    rpm -e `rpm -qa|grep boost`
    cd boost_1_46_1
    sh ./bootstrap.sh
    #注意要加上 cxxflags=-fPIC 参数,否则后面编译失败
    ./bjam --libdir=/usr/lib64 threading=multi --layout=tagged install cxxflags=-fPIC
    #编译静态库,不知道有没有用...
    ./bjam --layout=tagged --libdir=/usr/lib64 cxxflags=-fPIC 
    link=static threading=multi runtime-link=static install

    编译impala

    把代码下载下来,由于不是直接从git下载来的,所以用git init初始化一次。另外注意里面有clean的选项,使用git来clean会导致一些代码被删掉。

    sh ./buildall.sh -noclean -skiptests

    bulitall.sh实际会用到bin下面的脚本,可以都看一下

    报错处理

    Linking CXX executable ../../build/debug/common/atomic-test
    /usr/bin/ld: cannot find -lboost_date_time
    collect2: ld returned 1 exit status
    make[2]: *** [be/build/debug/common/atomic-test] Error 1
    make[1]: *** [be/src/common/CMakeFiles/atomic-test.dir/all] Error 2

    我们用的是mt(多线程)的库,所以要改一下
    修改了be/CMakeLists.txt的216行,将原有的:
    -lrt -lboost_date_time
    改为
    -lrt -lboost_date_time-mt
    如果要静态编译,要把-lboost_date_time去掉(这里我需要静态编译,所以把它去掉了)
    修改./CMakeLists.txt,加入date_time-mt

    find_package(Boost REQUIRED COMPONENTS thread regex-mt system-mt filesystem-mt date_time-mt)

    修改./CMakeLists.txt找到 Boost_DEBUG 这一行,加上着一些

    set(Boost_DEBUG FALSE)
    set(Boost_USE_STATIC_LIBS   ON)
    set(Boost_USE_STATIC_RUNTIME ON)
    set(Boost_USE_MULTITHREADED ON)
    add_definitions(-DBOOST_ALL_NO_LIB)

    编译后的文件在 be/bulid里面,编译出来的东西有200MB+,和官方的比20MB吓尿了好吧。
    执行strip –strip-debug impalad 会变成30MB+

    报错Could NOT find JNI (missing: JNI_INCLUDE_DIRS)

    修改cmake_modules/FindJNI.cmake文件

    找到JAVA_AWT_LIBRARY_DIRECTORIES,增加路径(和你jdk位置相关)
    /usr/java/jdk1.7.0_67-cloudera/jre/lib/amd64/
    找到JAVA_AWT_INCLUDE_DIRECTORIES,增加路径
    /usr/java/jdk1.7.0_67-cloudera/include
    其他路径注释掉
    另外我还设定了几个路径
    set(JAVA_INCLUDE_PATH
     /usr/java/jdk1.7.0_67-cloudera/include
    )
    set(JAVA_INCLUDE_PATH2
     /usr/java/jdk1.7.0_67-cloudera/include/linux/
    )
    set(JAVA_AWT_INCLUDE_PATH
     /usr/java/jdk1.7.0_67-cloudera/include
    )

    cdh4.5 hive的bug

    impala2.0.0通过yum方法安装中,会使用cdh4.5的lib
    cdh4.5中,org.apache.hadoop.hive.metastore.HiveMetaStoreClient有个bug,在每次连接metastore的时候都会等3秒钟,可以从catalog的日志看到,如果用background-load的方法会很慢。
    照着 cdh4.6的代码改就可以了。一个低级的错误http://www.grepcode.com/file/repository.cloudera.com/content/repositories/releases/org.apache.hive/hive-metastore/0.10.0-cdh4.6.0/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java#314
    把编译好的包替换掉,目录在/usr/lib/impala里

    参考

    https://github.com/cloudera/Impala/tree/v1.2.2
    http://blog.csdn.net/vah101/article/details/32343471
    http://blog.chinaunix.net/uid-21519621-id-3952587.html
    编译release版本 http://johnjianfang.blogspot.com/2013/06/build-impala-release.html

  • 相关阅读:
    php基础设计模式(注册树模式、工厂模式、单列模式)
    微信公众平台实现获取用户OpenID的方法
    如何成为一名优秀的工程师(语义篇)
    操作系统死锁原因及必要条件
    Word中怎样删除分节符而不影响前节页面设置
    当代码变更遇上精准测试的总结
    Windows网络命令
    linux shell编程
    Oracle远程登录命令
    数据库别名AS区别
  • 原文地址:https://www.cnblogs.com/qiumingcheng/p/6563506.html
Copyright © 2011-2022 走看看