CDH impala for Apache HADOOP 安裝編譯步驟.

babyyellow發表於2020-01-13

CDH impala   + kudu  一個不錯的sql 查詢框架. 


如果安裝在 CDH   發行的hadoop 叢集中,那是相當的容易. 


直接CDH  安裝介面點選幾下就ok 了. 


這個不表了. 


如果投產的是 apache 發行的hadoop 版本. 那麼編譯過程中還是會遇到相當多的問題. 


這裡簡單列一下給各位同行參考. 


IMPALA   3.3.0  版本. 


需求. 

<1 > 

IMPALA 的官網上有相關的硬體需求. 


  1. 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 . 


  1.   因為 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.  到 xxxxx/  下面下載指定版本的pkg  然後放到    apache-impala-3.3.0/infra/python/deps/ 

            注意 只能使用 .tar.gz 格式的. 其他的將無法處理. 



<4>  編譯過程中的問題. 


    1.   上面的 python 包全部按照要求搞定後以後.  那麼根據官方的. 文件 的安裝命令. 


        

  1. cd ~/Impala
  2. export IMPALA_HOME=`pwd`
  3. $IMPALA_HOME/bin/bootstrap_system.sh
  4. source $IMPALA_HOME/bin/impala-config.sh
  5. $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部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-2673049/,如需轉載,請註明出處,否則將追究法律責任。

相關文章