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源來安裝,也可以拷到每臺機器後直接
]
2、impala主機包分發
這裡把impala-state-store和impala-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.rpm和impala-shell-2.1.0+cdh5.3.0+0-1.cdh5.3.0.p0.32.el6.x86_64.rpm的其餘軟體包拷貝到此機器的
3、impala從機包分發
這裡把impala-server和impala-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.rpm和impala-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/下加入hadoop、hive等的快捷方式,會定位到新安裝的hadoop、hive目錄,而我們想繼續用原來的,只需要將/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 read和blocks 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
(注:網上教程中的方法都是將hadoop的hdfs-site.xml拷貝到impala配置目錄下,只修改impala的那一份,這是有問題的,經測試shortcircuit read和blocks metadata兩個功能都需要兩者的hdfs-site.xml都有相關引數才行,否則會報錯。
其中,hadoop的hdfs-site.xml中不配blocks metadata,impala執行查詢時報警告:
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.
hadoop的hdfs-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可複用hadoop和hive的配置檔案,但需要位於指定目錄,所以做軟連結即可。
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/impala下ERROR日誌裡都正常。(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 &