<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

    Impala是由Cloudera開(kāi)發(fā)的高性能實(shí)時(shí)計(jì)算工具,相比Hive性能提升了幾十、甚至近百倍,基本思想是將計(jì)算分發(fā)到每個(gè) Datanode所在的節(jié)點(diǎn),依靠?jī)?nèi)存實(shí)現(xiàn)數(shù)據(jù)的緩存進(jìn)行快速計(jì)算,類(lèi)似的系統(tǒng)還有Berkeley的Shark。從實(shí)際測(cè)試來(lái)看,Impala效率確實(shí) 不錯(cuò),由于Impala大量使用C++實(shí)現(xiàn),不使用CDH的Image而自己編譯安裝要費(fèi)不少功夫,這里記錄一下安裝配置過(guò)程和碰到的一些問(wèn)題。我在測(cè)試 時(shí)候使用的是CentOS6.2。
    一些基本的安裝步驟在這里,但我在安裝的時(shí)候碰到一些問(wèn)題,這里再詳細(xì)說(shuō)明一下過(guò)程。

    1.安裝所需的依賴(lài)lib,這一步?jīng)]有什么不同

    sudo yum install boost-test boost-program-options libevent-devel automake libtool flex bison gcc-c++ openssl-devel make cmake doxygen.x86_64 glib-devel boost-devel python-devel bzip2-devel svn libevent-devel cyrus-sasl-devel wget git unzip

    2.安裝LLVM,按照流程做即可,注意要在多臺(tái)機(jī)器上編譯安裝Impala的話,只用在一臺(tái)機(jī)器上執(zhí)行下面藍(lán)色的部分,再把llvm分發(fā)到多臺(tái)機(jī)器上執(zhí)行后面紅色部分的指令就可以了,沒(méi)必要每個(gè)機(jī)器都通過(guò)svn下載一遍源代碼,很費(fèi)時(shí)。

    wget http://llvm.org/releases/3.2/llvm-3.2.src.tar.gz
    tar xvzf llvm-3.2.src.tar.gz
    cd llvm-3.2.src/tools
    svn co http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_32/final/ clang
    cd ../projects
    svn co http://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_32/final/ compiler-rt
    cd ..
    ./configure –with-pic
    make -j4 REQUIRES_RTTI=1
    sudo make install

    3.安裝Maven,這個(gè)沒(méi)什么好說(shuō)的,按照步驟,設(shè)置一下環(huán)境變量即可,Maven是為了后面build impala源代碼用的。

    wget http://www.fightrice.com/mirrors/apache/maven/maven-3/3.0.4/binaries/apache-maven-3.0.4-bin.tar.gz
    tar xvf apache-maven-3.0.4.tar.gz && sudo mv apache-maven-3.0.4 /usr/local

    修改~/.bashrc,增加maven環(huán)境變量

    export M2_HOME=/usr/local/apache-maven-3.0.4
    export M2=$M2_HOME/bin
    export PATH=$M2:$PATH

    更新環(huán)境變量,查看mvn版本是否正確

    source ~/.bashrc
    mvn -version

    4.下載Impala源代碼

    git clone https://github.com/cloudera/impala.git

    5.設(shè)置Impala環(huán)境變量,編譯時(shí)需要

    cd impala
    ./bin/impala-config.sh

    6.下載impala依賴(lài)的第三方package

    cd thirdparty
    ./download_thirdparty.sh

    注意這里其中一個(gè)包c(diǎn)yrus-sasl-2.1.23可能下載失敗,可以自行搜索(CSDN里面就有)下載下來(lái)然后解壓縮到thirdparty 文件夾,最好是在執(zhí)行完download_thirdparty.sh之后做這一步,因?yàn)閐ownload_thirdparty.sh會(huì)把所有目錄下下 載下來(lái)的tar.gz給刪除掉。

    7.理論上現(xiàn)在可以開(kāi)始build impala了,但是實(shí)際build過(guò)程中可能會(huì)出現(xiàn)問(wèn)題,我碰到的問(wèn)題和 Boost相關(guān)的(具體錯(cuò)誤不記得了),最后發(fā)現(xiàn)是由于boost版本太低導(dǎo)致的,CentOS 6.2系統(tǒng)默認(rèn)yum源中的boost和boost-devel版本是1.41,但是impala編譯需要1.44以上的版本,因此需要做的是自己重新編 譯boost,我用的是boost 1.46版本。

    #刪除已安裝的boost和boost-devel
    yum remove boost
    yum remove boost-devel
    #下載boost
    #可以去(http://www.boost.org/users/history/)下載boost
    #下載后解壓縮
    tar xvzf boost_1_46_0.tar.gz
    mv boost_1_46_0 /usr/local/
    cd /usr/include
    ./bootstrap.sh
    ./bjam
    #執(zhí)行后若打印以下內(nèi)容,則表示安裝成功
    # The Boost C++ Libraries were successfully built!
    # The following directory should be added to compiler include paths:
    # /usr/local/boost_1_46_0
    # The following directory should be added to linker library paths:
    # /usr/local/boost_1_46_0/stage/lib
    #現(xiàn)在還需要設(shè)置Boost環(huán)境變量和Impala環(huán)境變量

    export BOOST_ROOT=’/usr/local/boost_1_46_0′
    export IMPALA_HOME=’/home/extend/impala’

    #注意一下,這里雖然安裝了boost,但是我在實(shí)際使用的時(shí)候,編譯還是會(huì)報(bào)錯(cuò)的,報(bào)的錯(cuò)誤是找不到這個(gè)包:#libboost_filesystem-mt.so,這個(gè)包是由boost-devel提供的,所以我的做法是把boost-devel給重新裝上
    #我沒(méi)有試過(guò)如果之前不刪除boost-devel會(huì)不會(huì)有問(wèn)題,能確定的是按這里寫(xiě)的流程做是沒(méi)問(wèn)題的

    yum install boost-devel

    8.現(xiàn)在終于可以編譯impala了

    cd $IMPALA_HOME
    ./build_public.sh -build_thirdparty
    #編譯首先會(huì)編譯C++部分,然后再用mvn編譯java部分,整個(gè)過(guò)程比較慢,我在虛擬機(jī)上大概需要1-2個(gè)小時(shí)。
    #Impala編譯完后的東西在be/build/debug里面

    9.啟動(dòng)impala_shell需要用到的python包

    #第一次執(zhí)行impalad_shell可能會(huì)報(bào)錯(cuò),這里需要安裝python的兩個(gè)包:thrift和prettytable,使用easy_install即可
    easy_install prettytable
    easy_install thrift

    10.如果你以為到這里就萬(wàn)事大吉就太天真了,在配置、啟動(dòng)、使用Impala的時(shí)候還會(huì)有很多奇葩的問(wèn)題;

    問(wèn)題1:Hive和Hadoop使用的版本
    CDH對(duì)版本的依賴(lài)要求比較高,為了保證Impala正常運(yùn)行,強(qiáng)烈建議使用Impala里面thirdparty目錄中自帶的Hadoop(native lib已經(jīng)編譯好的)和Hive版本。
    Hadoop的配置文件在$HADOOP_HOME/etc/hadoop中,要注意的是需要啟用native lib

    #修改hadoop的core-site.xml,除了這個(gè)選項(xiàng)之外,其他配置和問(wèn)題2中的core-site.xml一致
    <property>
      <name>hadoop.native.lib</name>
      <value>true</value>
      <description>Should native hadoop libraries, if present, be used.</description>
    </property>

    問(wèn)題2:Impala的配置文件位置
    Impala默認(rèn)使用的配置文件路徑是在bin/set-classpath.sh中配置的,建議把CLASSPATH部分改成

    CLASSPATH=\
    $IMPALA_HOME/conf:\
    $IMPALA_HOME/fe/target/classes:\
    $IMPALA_HOME/fe/target/dependency:\
    $IMPALA_HOME/fe/target/test-classes:\
    ${HIVE_HOME}/lib/datanucleus-core-2.0.3.jar:\
    ${HIVE_HOME}/lib/datanucleus-enhancer-2.0.3.jar:\
    ${HIVE_HOME}/lib/datanucleus-rdbms-2.0.3.jar:\
    ${HIVE_HOME}/lib/datanucleus-connectionpool-2.0.3.jar:

    即要求Impala使用其目錄下的Conf文件夾作為配置文件,然后創(chuàng)建一下Conf目錄,把3樣?xùn)|西拷貝進(jìn)來(lái):core-site.xml、hdfs-site.xml、hive-site.xml。
    core-site.xml的配置,下面幾個(gè)選項(xiàng)是必須要配置的,

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://10.200.4.11:9000</value>
    </property>
    <property>
    <name>dfs.client.read.shortcircuit</name>
    <value>true</value>
    </property>
    <property>
    <name>dfs.client.use.legacy.blockreader.local</name>
    <value>false</value>
    </property>
    <property>
    <name>dfs.client.read.shortcircuit.skip.checksum</name>
    <value>false</value>
    </property>
    </configuration>

    hdfs-site.xml的配置

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <property>
    <name>dfs.block.local-path-access.user</name>
    <value>${your user}</value>
    </property>
    <property>
    <name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
    <value>true</value>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>${yourdatadir}</value>
    </property>
    <property>
       <name>dfs.client.use.legacy.blockreader.local</name>
       <value>false</value>
    </property>
    <property>
       <name>dfs.datanode.data.dir.perm</name>
       <value>750</value>
    </property>
    <property>
        <name>dfs.client.file-block-storage-locations.timeout</name>
        <value>5000</value>
    </property>
    <property>
        <name>dfs.domain.socket.path</name>
        <value>/home/extend/cdhhadoop/dn.8075</value>
    </property>
    </configuration>

    最后是hive-site.xml,這個(gè)比較簡(jiǎn)單,指定使用DBMS為元數(shù)據(jù)存儲(chǔ)即可(impala必須和hive共享元數(shù)據(jù),因?yàn)閕mpala無(wú) 法create table);Hive-site.xml使用mysql作為metastore的說(shuō)明在很多地方都可以查到,配置如下:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://10.28.0.190:3306/impala?createDatabaseIfNotExist=true</value>
      <description>JDBC connect string for a JDBC metastore</description>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
      <description>Driver class name for a JDBC metastore</description>
    </property>

    <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>root</value>
      <description>username to use against metastore database</description>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>root</value>
      <description>password to use against metastore database</description>
    </property>
    </configuration>

    記得把mysql-connector的jar包給拷貝到hive的lib里面去,同樣也要拷貝給impala ( 拷貝至$IMPALA_HOME/fe/target/dependency)

    11.啟動(dòng)Impala。到此,Impala是可以正常啟動(dòng)的。這里說(shuō)明一下,官方文檔沒(méi)有說(shuō)很清楚Impala的Service之間是如何互相協(xié)調(diào)的,按照官方的步驟,最后通過(guò)如下方法來(lái)在一臺(tái)機(jī)器上啟動(dòng)Impala Service:

    #啟動(dòng)單機(jī)impala service
    ${IMPALA_HOME}/bin/start-impalad.sh -use_statestore=false
    #啟動(dòng)impala shell
    ${IMPALA_HOME}/bin/impala-shell.sh

    然后impala-shell就可以連接到localhost進(jìn)行查詢了;注意,這里只是單機(jī)查詢,可以用來(lái)驗(yàn)證你的Impala是否正常work 了;如何啟動(dòng)一個(gè)Impala集群,跳到第12步。這里繼續(xù)說(shuō)一下可能遇到的問(wèn)題,我遇到的一個(gè)比較奇葩的問(wèn)題是show tables和count(1)沒(méi)有問(wèn)題,但是select * from table的時(shí)候impala在讀取數(shù)據(jù)的時(shí)候就崩潰了(有時(shí)報(bào)錯(cuò)could not find method close from class org/apache/hadoop/fs/FSDataInputStream with signature ()V ),這里修改了兩個(gè)地方解決這個(gè)問(wèn)題:

    a.修改impala的set-classpath.sh并移除$IMPALA_HOME/fe/target/dependency目錄中除了hadoop-auth-2.0.0-*.jar之外所有hadoop-*開(kāi)頭的jar包。

    #把impala dependency中和hadoop相關(guān)的包給弄出來(lái),只保留auth
    mv $IMPALA_HOME/fe/target/dependency/hadoo* $IMPALA_HOME
    mv $IMPALA_HOME/hadoop-auth*.jar mv $IMPALA_HOME/fe/target/dependency
    #修改bin/set-classpath.sh,將$HADOOP_HOME中的lib給加入,在set-classpath.sh最后一行export CLASSPATH之前#添加
    for jar in `ls $HADOOP_HOME/share/hadoop/common/*.jar`; do
    CLASSPATH=${CLASSPATH}:$jar
    done
    for jar in `ls $HADOOP_HOME/share/hadoop/yarn/*.jar`; do
    CLASSPATH=${CLASSPATH}:$jar
    done
    for jar in `ls $HADOOP_HOME/share/hadoop/hdfs/*.jar`; do
    CLASSPATH=${CLASSPATH}:$jar
    done
    for jar in `ls $HADOOP_HOME/share/hadoop/mapreduce/*.jar`; do
    CLASSPATH=${CLASSPATH}:$jar
    done
    for jar in `ls $HADOOP_HOME/share/hadoop/tools/lib/*.jar`; do
    CLASSPATH=${CLASSPATH}:$jar
    done

    b.注意到Impala對(duì)待table的時(shí)候只能夠使用hive的默認(rèn)列分隔符,如果在hive里面create table的時(shí)候使用了自定義的分隔符,Impala servive就會(huì)在讀數(shù)據(jù)的時(shí)候莫名其妙的崩潰。

    12.啟動(dòng)Impala 集群
    Impala實(shí)際上由兩部分組成,一個(gè)是StateStore,用來(lái)協(xié)調(diào)各個(gè)機(jī)器計(jì)算,相當(dāng)于Master,然后就是Impalad,相當(dāng)于Slave,啟動(dòng)方法如下:

    #啟動(dòng)statestore
    #方法1,直接利用impala/bin下面的這個(gè)python腳本
    #這個(gè)腳本會(huì)啟動(dòng)一個(gè)StateStore,同時(shí)啟動(dòng)-s個(gè)數(shù)量的Impala Service在本機(jī)
    $IMPALA_HOME/bin/start-impala-cluster.py -s 1 –log_dir /home/extend/impala/impalaLogs
    #方法2,手動(dòng)啟動(dòng)StateStore
    $IMPALA_HOME/be/build/debug/statestore/statestored -state_store_port=24000

    #啟動(dòng)impala service
    #在每個(gè)編譯安裝了impala的節(jié)點(diǎn)上執(zhí)行命令
    #參數(shù)-state_store_host指定啟動(dòng)了stateStore的機(jī)器名
    #-nn即namenode,指定hadoop的namenode
    #-nn_port是namenode的HDFS入口端口號(hào)
    $IMPALA_HOME/bin/start-impalad.sh -state_store_host=m11 -nn=m11 -nn_port=9000

    正常啟動(dòng)之后,訪問(wèn)http://${stateStore_Server}:25010/ 可以看到StateStore的狀態(tài),其中的subscribers頁(yè)面可以看到已經(jīng)連接上的impala service node;

    13.使用Impala客戶端
    這一步最簡(jiǎn)單,隨便找一個(gè)機(jī)器啟動(dòng)

    $IMPALA_HOME/bin/impala-shell.sh
    #啟動(dòng)之后可以隨便連接一個(gè)impala service
    connect m12
    #連接上之后就可以執(zhí)行show tables之類(lèi)的操作了
    #需要注意的是,如果hive創(chuàng)建表或更新了表結(jié)構(gòu),impala的節(jié)點(diǎn)是不知道的
    #必須通過(guò)客戶端連接各個(gè)impala service并執(zhí)行refresh來(lái)刷新metadata
    #或者重啟所有impala service
    posted on 2013-06-29 17:12 ivaneeo 閱讀(1734) 評(píng)論(1)  編輯  收藏 所屬分類(lèi):

    Feedback

    # re: Cloudera Impala TarBall 編譯、安裝與配置 2013-07-14 22:19 laoyang
    我按照您說(shuō)的步驟運(yùn)行,也安裝了boost_1_46_0,但是編譯后還是報(bào)了錯(cuò)誤,如下:
    make[2]: *** [be/build/debug/exprs/expr-test] 錯(cuò)誤 1
    make[1]: *** [be/src/exprs/CMakeFiles/expr-test.dir/all] 錯(cuò)誤 2
    make: *** [all] 錯(cuò)誤 2
    您遇到過(guò)嗎?求解釋?zhuān)。。?nbsp; 回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲国产精品VA在线看黑人| 国产免费不卡视频| 国产免费A∨在线播放| a级毛片免费观看在线| 国产高潮久久免费观看| 免费一级毛suv好看的国产网站| 国产偷国产偷亚洲高清在线| 日韩精品视频在线观看免费| 国产精品免费久久久久久久久| 国产在线观看免费视频软件| 久操免费在线观看| 8x成人永久免费视频| 日本阿v免费费视频完整版| 一区二区无码免费视频网站| 免费鲁丝片一级在线观看| 国产精品色午夜视频免费看| 国产免费av片在线播放| 亚洲人成无码www久久久| 亚洲午夜久久久久久噜噜噜| 亚洲AV人无码综合在线观看| 亚洲精品不卡视频| 亚洲日本一线产区和二线产区对比| 国产精品亚洲а∨无码播放不卡 | 亚洲精品欧洲精品| 亚洲色图激情文学| 特级毛片全部免费播放| 国产一级在线免费观看| 免费A级毛片无码视频| 无码中文在线二区免费| 亚洲国产成人VA在线观看| 亚洲国产成人高清在线观看| 亚洲欧洲尹人香蕉综合| 亚洲AV成人片无码网站| eeuss免费影院| 在线观看永久免费| 日韩一区二区在线免费观看| 亚洲欧洲∨国产一区二区三区| 亚洲欧洲日韩综合| 免费无码国产V片在线观看| 色猫咪免费人成网站在线观看| 最新仑乱免费视频|