使用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

编译impala2.0.0的更多相关文章

  1. linux下编译gcc6.2.0

    linux下编译gcc6.2.0 在archlinx的下gcc已经更新到6.2.1了,win10的WSL下还是gcc4.8.官方源没有比较新的版本,于是自己编译使用. GCC6的几个新特性 GCC 6 ...

  2. vs2016x64&&qt5.7.1编译osg3.4.0&&osgEarth2.7

    此文仅备忘: 1.安装VS2013_Cn_Ult 2.安装qt-opensource-windows-x86-msvc2013_64-5.7.1 设置环境变量QTDIR,并将其bin加入到path中. ...

  3. VS2015编译Qt5.7.0生成支持XP的静态库(很不错)

    一.编译工具 1.VS2015 编译Qt5.7.0的所需VS版本:Visual Studio 2013 (Update1)或Visual Studio 2015 (Update2).因为Update补 ...

  4. vs2013编译boost1.55.0 32/64位

    在使用vs2013编译boost-1.55.0之前,先要给boost做下修改: boost_1_55_0\boost\intrusive\detail\has_member_function_call ...

  5. 编译hadoop2.6.0

    具体情况比较曲折:hadoop2.6.0编译不过 错误如下: 这个kms模块始终编译不过,最后得出结论国内的aliyun maven仓库有问题, 在编译hadoop2.2.0 可以通过,因为这个版本的 ...

  6. linux下编译qt5.6.0静态库——configure配置

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  7. vs2010下编译osip2和eXosip2的4.0.0版的静态库及搭建开发环境

    转载于:http://blog.csdn.net/lbc2100/article/details/48293911 本文为参考网上的动态库的方式,进行静态库的实现,在此对动态库的作者表示感谢. 第一步 ...

  8. Ubuntu12.04-x64编译Hadoop2.2.0和安装Hadoop2.2.0集群

      本文Blog地址:http://www.cnblogs.com/fesh/p/3766656.html   本文对Hadoop-2.2.0源码进行重新编译(64位操作系统下不重新编译会有版本问题) ...

  9. Win10 + VS2015 下编译 Qt5.6.0

    近期由于另外一个项目需要用 vs2015 ,于是把 Qt 也升级到了 5.6.0 .由于项目需要兼容 Windows xp ,所以需要自己编译 Qt .这里大致整理一下编译的过程. 安装 Active ...

随机推荐

  1. C#开源定时回调库PETimer的使用

    PETimer PETimer开源项目GitHub地址:点击跳转 PETimer 1.双端通用:基于C#语言实现的高效便捷计时器,可运行在服务器(.net core/.net framework)以及 ...

  2. HTML5 开发APP 第一章

    当今天下,移动端基本上是安卓和苹果的天下,基本上没微软什么事,作为微软忠实的支持者,也要顺势而变. 但安卓和IOS  开发是两个完全不同的世界,有没有一种技术,开发完以后可以运行在任意终端呢,答案是有 ...

  3. TCP和UDP的最完整的区别【转】

    来源:https://blog.csdn.net/li_ning_/article/details/52117463 TCP UDPTCP与UDP基本区别  1.基于连接与无连接  2.TCP要求系统 ...

  4. [Swift实际操作]八、实用进阶-(8)使用performSegue在故事板页面之间进行数据传递

    本文将演示故事板页面之间的数据传递.首先在一个空白项目中,打开项目自带的故事板文件(Main.storyboard).故事板中已经拥有了一个视图控制器,点击选择该视图控制器.然后依此点击[Editor ...

  5. Windows 下目录切换以及挂载小技巧

    Windows 下目录切换以及挂载小技巧 一.前言: 作为几年的 Linux 老用户,再购买了一款新的本本只支持 Windows(主要是Linux下的驱动)操作系统后,加之发现 Windows 提供 ...

  6. IntelliJ IDEA 如何将一个 filename.java 文件直接运行

    IntelliJ IDEA 如何将一个 filename.java 文件直接运行 前言: ​ 出于考证需要,手头有许多 *.java 文件需要进行运行.然后出于对 JetBrains 全家桶的喜爱,选 ...

  7. python学习笔记之使用threading模块实现多线程(转)

    综述 Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势 ...

  8. Linux CentOs 下 安装 mysql nginx redis

    SCP 的使用 来源于: https://blog.csdn.net/qq_30968657/article/details/72912070 scp [参数] <源地址(用户名@IP地址或主机 ...

  9. nginx高性能WEB服务器系列之八--nginx日志分析与切割

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  10. php中签名公钥、私钥(SHA1withRSA签名)以及AES(AES/ECB/PKCS5Padding)加密解密详解

    由于http请求是无状态,所以我们不知道请求方到底是谁.于是就诞生了签名,接收方和请求方协商一种签名方式进行验证,来取得互相信任,进行下一步业务逻辑交流. 其中签名用得很多的就是公钥私钥,用私钥签名, ...