1. 程式人生 > >Impala安裝手冊

Impala安裝手冊

    鄙人最近準備離職,所以把之前工作中積累的一些東西整理下發上來,其中一部分發在公司內刊上,一部分是組內交流文件,標“原創”的都是本人原創,轉載請註明謝謝!

    Impala這個東西在我們實踐應用中還是不錯的,查詢速度可以,就是穩定性一般,做好監控的話沒有問題。我們裝的是配套CDH5u3的2.1版本,裝其他版本不是不可以,只不過cloudera不保證一定可用,需要自己解決一些坑,如果有明確需求要使用新特性的,就裝最新版本。比如CDH5u3配套的Spark是1.2,但我們自己裝的就是1.6的。本篇提供的安裝方法是基於rpm的,缺點是需要裝一堆依賴的東西(如hadoop等即使你已有但不是通過rpm裝的),從官網下原始碼獨立裝也可以。另外裡面的IP是我們自己叢集的IP,需換成讀者自己的。

參考文件:

http://www.cloudera.com/content/cloudera/en/documentation/cloudera-impala/latest/topics/impala_noncm_installation.html

http://blog.csdn.net/zhong_han_jun/article/details/45563505

1、下載impala軟體包

要下載和hadoop主版本匹配的包,我們應下CDH5.3適用的包

http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/5.3.0/

下完後,可以在本地構建yum源來安裝,也可以拷到每臺機器後直接

rpm安裝,這裡採用的是後一種方式。

]

2impala主機包分發

這裡把impala-state-storeimpala-catalog所在的機器稱為impala主機。參考文獻中impala主機用的是namenode,考慮到namenode記憶體佔用可能會比較大,我們沒有選擇namenode,而是選擇10.100.10.15

將下載的軟體包中除impala-server-2.1.0+cdh5.3.0+0-1.cdh5.3.0.p0.32.el6.x86_64.rpmimpala-shell-2.1.0+cdh5.3.0+0-1.cdh5.3.0.p0.32.el6.x86_64.rpm的其餘軟體包拷貝到此機器的

/software/impala/下。

3impala從機包分發

這裡把impala-serverimpala-shell所在的機器稱為impala從機,除10.100.10.15以外的所有datanode都當作從機。

將下載的軟體包中除impala-state-store-2.1.0+cdh5.3.0+0-1.cdh5.3.0.p0.32.el6.x86_64.rpmimpala-catalog-2.1.0+cdh5.3.0+0-1.cdh5.3.0.p0.32.el6.x86_64.rpm的其餘軟體包拷貝到此機器的/software/impala/下。

以下4-6步需要在所有主機、從機上執行:

4、安裝軟體包(以下所有命令如果提示沒許可權的,前面加sudo

cd /software/impala

rpm -ivh --nodeps *.rpm

全部裝完後再檢查下機器上有沒有python,沒有的話執行:

yum install python

因為安裝包會向/usr/bin/下加入hadoophive等的快捷方式,會定位到新安裝的hadoophive目錄,而我們想繼續用原來的,只需要將/usr/bin/下的快捷方式改名即可:

cd /usr/bin

mv hadoop-0.20 hadoop-0.20.bak

mv yarn yarn.bak

mv mapred mapred.bak

mv hdfs hdfs.bak

mv hadoop hadoop.bak

mv hbase hbase.bak

mv hiveserver2 hiveserver2.bak

mv hive hive.bak

mv beeline beeline.bak

另外需要修復/usr/lib/impala/lib目錄下5個錯誤的軟連結:

cd /usr/lib/impala/lib

sudo ln -sf/usr/lib/hadoop-mapreduce/hadoop-mapreduce-client-common.jarhadoop-mapreduce-client-common-2.5.0.jar

sudo ln -sf/usr/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient.jarhadoop-mapreduce-client-jobclient-2.5.0.jar

sudo ln -sf/usr/lib/hadoop-mapreduce/hadoop-mapreduce-client-shuffle.jarhadoop-mapreduce-client-shuffle-2.5.0.jar

sudo ln -sf/usr/lib/hadoop-yarn/hadoop-yarn-client.jar hadoop-yarn-client-2.5.0.jar

sudo ln -sf/usr/lib/hadoop-yarn/hadoop-yarn-server-nodemanager.jarhadoop-yarn-server-nodemanager-2.5.0.jar

5、修改hdfs的配置檔案

/software/hadoop/etc/hadoop/hdfs-site.xml下增加以下配置,以啟用shortcircuit readblocks metadata功能(以下是正式環境中加好的檔案):

<property>

<name>dfs.client.read.shortcircuit</name>

<value>true</value>

</property>

<property>

<name>dfs.domain.socket.path</name>

<value>/var/run/hadoop-hdfs/dn._PORT</value>

</property>

<property>

<name>dfs.client.file-block-storage-locations.timeout.millis</name>

<value>10000</value>

</property>

<property>

<name>dfs.datanode.hdfs-blocks-metadata.enabled</name>

<value>true</value>

</property>

在每個節點上建立/var/run/hadoop-hdfs,因為hdfs-site.xml檔案的dfs.domain.socket.path引數指定了這個目錄,並修改其許可權和組歸屬,否則datanode無法啟動:

mkdir /var/run/hadoop-hdfs(正常的話此目錄已建好)

chmod 755 /var/run/hadoop-hdfs

chown hdfs:root /var/run/hadoop-hdfs

全部修改完後重啟namenode,用hdfs賬號登入10.100.10.6,執行:

/software/hadoop/sbin

./stop-dfs.sh

./start-dfs.sh

(注:網上教程中的方法都是將hadoophdfs-site.xml拷貝到impala配置目錄下,只修改impala的那一份,這是有問題的,經測試shortcircuit readblocks metadata兩個功能都需要兩者的hdfs-site.xml都有相關引數才行,否則會報錯。

其中,hadoophdfs-site.xml中不配blocks metadataimpala執行查詢時報警告:

WARNINGS: Backend 0:Unknown disk id.This will negatively affect performance.Check your hdfs settings to enable block location metadata.

Backend 1:Unknown disk id.This will negatively affect performance.Check your hdfs settings to enable block location metadata.

hadoophdfs-site.xml中不配shortcircuitread相關的3個引數,impala執行查詢時報異常,但查詢可以完成:

java.net.ConnectException: connect(2) error: No such file or directory when trying to connect to '/var/run/hadoop-hdfs/dn.50010'
at org.apache.hadoop.net.unix.DomainSocket.connect0(Native Method)
at org.apache.hadoop.net.unix.DomainSocket.connect(DomainSocket.java:250)
at org.apache.hadoop.hdfs.shortcircuit.DomainSocketFactory.createSocket(DomainSocketFactory.java:163)
at org.apache.hadoop.hdfs.BlockReaderFactory.nextDomainPeer(BlockReaderFactory.java:719)
at org.apache.hadoop.hdfs.BlockReaderFactory.createShortCircuitReplicaInfo(BlockReaderFactory.java:441)
at org.apache.hadoop.hdfs.shortcircuit.ShortCircuitCache.create(ShortCircuitCache.java:783)
at org.apache.hadoop.hdfs.shortcircuit.ShortCircuitCache.fetchOrCreate(ShortCircuitCache.java:717)
at org.apache.hadoop.hdfs.BlockReaderFactory.getBlockReaderLocal(BlockReaderFactory.java:394)
at org.apache.hadoop.hdfs.BlockReaderFactory.build(BlockReaderFactory.java:305)
at org.apache.hadoop.hdfs.DFSInputStream.blockSeekTo(DFSInputStream.java:574)
at org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:797)
at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:851)
at org.apache.hadoop.fs.FSDataInputStream.read(FSDataInputStream.java:143)
W0722 09:47:57.458355 14437 ShortCircuitCache.java:808] ShortCircuitCache(0x6571120a): failed to load 1073745586_BP-1992671808-10.1.12.106-1425868259525

6、建立impala配置檔案連結

impala可複用hadoophive的配置檔案,但需要位於指定目錄,所以做軟連結即可。

ln -s /software/hive/conf/hive-site.xml/etc/impala/conf/

ln -s /software/hive/conf/hive-env.sh/etc/impala/conf/

ln -s /software/hadoop/etc/hadoop/core-site.xml/etc/impala/conf/

ln -s /software/hadoop/etc/hadoop/hdfs-site.xml/etc/impala/conf/

7、修改impala配置檔案

vi /etc/default/impala

主要就是改IP的地方,因為每臺機器都一樣,可以改好後統一上傳覆蓋原始檔案。下面這個是例子:

(注:我們是使用預設的impala賬號來啟停impala服務,如果需要用其他賬號,需要根據實際環境修改impala相關指令碼檔案/etc/init.d/impala-state-store/etc/init.d/impala-server/etc/init.d/impala-catalog,修改其中的SVC_USER引數。)

以下步驟在特定機器上執行:

8、複製mysql JDBC包(不一定需要這步,啟動catalog報找不到mysql錯的話才需要)

10.100.10.15上執行即可:

cp/software/hive/lib/mysql-connector-java-5.1.18-bin.jar /var/lib/impala

9、啟動主機上的impala服務

還是在10.100.10.15上執行:

service impala-state-store start

service impala-catalog start

正常的話應該/var/log/impalaERROR日誌裡都正常。(catalogd.ERROR裡可能有“DirectSQL failed, falling back to ORM”這樣的異常,應該是hive元資料升級的遺留問題,目前沒發現有什麼影響)

10、啟動從機上的impala服務

在其餘datanode上執行:

service impala-server start

正常的話,執行impala-shell後能看到如下介面:

執行命令以載入hive元資料:

invalidate metadata;

11、配置Hue中使用impala

Hue的伺服器(我們是10.100.10.2),找到hue.ini,並修改impala所屬的配置:

vi /software/hadoop-versions/hue-3.7.0-cdh5.3.0/desktop/conf/hue.ini

重新啟動Hue服務:

ps -ef |grep hue|awk '{print $2}' |xargs kill -9 

nohup /software/hue/build/env/bin/supervisor> supervisor.log &