CDH impala + kudu 一个不错的sql 查询框架.
如果安装在 CDH 发行的hadoop 集群中,那是相当的容易.
直接CDH 安装界面点击几下就ok 了.
这个不表了.
如果投产的是 apache 发行的hadoop 版本. 那么编译过程中还是会遇到相当多的问题.
这里简单列一下给各位同行参考.
IMPALA 3.3.0 版本.
需求.
<1 >
IMPALA 的官网上有相关的硬件需求.
CPU 要求 SSSE4_2 以上指令集. 这个条件, 现在已经没有问题了. 主流cpu 都支持了.
2. python 版本要求. python 2.6.x 或者 python 2.7.x
3. os 版本. linux 7.x 版本.
这是硬性规定了. 代码中限制了这些硬性规定.
<2> . 关于 需求的python 虚拟机环境问题.
impala 需要自行构建一个 pythonenv 虚拟机. 子包含 Python 组件.
需要指定版本的 virtualenv-13.1.0.tar.gz
这个很重要. 比他更高版本的 对不起. 无法构建. 更低版本, 没有测试.
<3> python 需要的各种组件package .
因为 impala 开发团队. 自己构建了一个pip_down load 代码. 所以只能指定 .tar.gz 的源代码编译模式.
2. python 2.7.5 需要 安装 setuptool.
3. 不要在 os 的python 环境下 自作聪明的安装对应的python 包. 不管用.
4. 根据 apache-impala-3.3.0/infra/python/deps/ *.txt
指定的各个 pkg 以及对应的版本号.
5. 到 https://pypi.org/simple/xxxxx/ 下面下载指定版本的pkg 然后放到 apache-impala-3.3.0/infra/python/deps/
注意 只能使用 .tar.gz 格式的. 其他的将无法处理.
<4> 编译过程中的问题.
1. 上面的 python 包全部按照要求搞定后以后. 那么根据官方的. 文档 的安装命令.
cd ~/Impala
export IMPALA_HOME=`pwd`
$IMPALA_HOME/bin/bootstrap_system.sh
source $IMPALA_HOME/bin/impala-config.sh
$IMPALA_HOME/buildall.sh -noclean -notests
这里会遇到一个坑.
apache-impala-3.3.0/infra/python/deps/ 下面有个 pip_download.py
代码. 这个无论你是否设置 代理服务器. 都会报错.
暂时不清楚原因.
我在os层面设置了 . https_proxy , http_proxy . 报错. 指定的 代理服务器非法.
我修改 pip_download.py , 按照 python urllib3 代码里的格式指定 python 对象 的代理服务器. 也是报错.
鉴于 我们先前已经完成了. 所有的需要的 pkg 的下载. 这一步不要也罢.
处理方案: 直接在main() 的第一行 执行报错退出 我就是直接把第一行 代码注意改了下, 直接报python 语法错误.
然后退出.
然后安装程序 会调用 我们已经 下载的pkg 构建python 虚拟环境.
<5> C++ 编译过程中的问题.
上面的ptyhon虚拟环境构建ok了.
就会进行 c++/c 代码的build 了.
在 [ 98% ] 的时候 报错.
[ 98%] Linking CXX executable ../../build/debug/service/impalad
/data/soft/apache-impala-3.3.0/be/src/common/logging.cc:131: error: undefined reference to 'google::InstallLogMessageListenerFunction(void (*)(std::string*, bool*))'
../../../toolchain/openldap-2.4.47/lib/libldap.a(os-ip.o):os-ip.c:function ldap_int_poll: warning: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead
../../../toolchain/openldap-2.4.47/lib/libldap.a(os-ip.o):os-ip.c:function ldap_int_poll: warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead
collect2: error: ld returned 1 exit status
make[3]: *** [be/build/debug/service/impalad] Error 1
make[2]: *** [be/src/service/CMakeFiles/impalad.dir/all] Error 2
make[1]: *** [be/src/service/CMakeFiles/impalad.dir/rule] Error 2
make: *** [impalad] Error 2
这个地方应该可以归为 impala 的一个bug .
这个问题是因为 impala 调用了glog-0.3.4 pach 3 的logging.h 头文件.
如果os 层面安装了 glog 0.3.4 或者 glog 0.3.5 都将报错. 无法编译.
问题出在 glog-0.3.4-P3 的 logging.h 里多了一行. 定义.
GOOGLE_GLOG_DLL_DECL void InstallLogMessageListenerFunction(
void (*listener_func)(std::string* message, bool* changed));
导致这里出错.
解决方案:
1. 移除 os 层面安装的 glog 的头文件. 以及对应lib. 但是不确定是否能够成功编译. , 不过大概率可以编译通过.
2. 将 apache-impala-3.3.0/toolchain/glog-0.3.4-p3/include/glog copy 到/usr/local/include 下面
apache-impala-3.3.0/toolchain/glog-0.3.4-p3/lib/* copy 到 /usr/local/lib 下面.
然后重新编译 . 大概率应该会通过了.
<6> 测试过程中遇到的问题.
1. imapad 编译完成后. 应该会生成个各种测试. 这里需要配置 maven 的 代理服务器.
/etc/maven/setting.xml 里面配置http 跟https 的代理服务器.
如果单个项目失败了. 那么就去那个子目录下面 重新运行 mvn -B install -DskipTests
<7> 请一开始 就在 OS 层面设置 https , http 代理服务器.
<8> 祝你玩的愉快.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/133735/viewspace-2673049/ ,如需转载,请注明出处,否则将追究法律责任。