天天看點

Kudu + IMPALA 的安裝部署

Apache Kudu是由Cloudera開源的存儲引擎,可以同時提供低延遲的随機讀寫和高效的資料分析能力。

在存儲技術中,基于HDFS的存儲技術,比如Parquet,具有高吞吐量連續讀取資料的能力;而HBase和Cassandra等技術适用于低延遲的随機讀寫場景。KUDU則兼具兩者的優點。

使用者可以使用 Insert,Update和Delete API對KUDU表進行寫操作。而在讀操作方面,Kudu通過Scan操作來擷取資料。使用者可以通過指定過濾條件來擷取自己想要讀取的資料。

接下來本文将在三台伺服器127 、128和129 上做kudu的安裝部署,kudu的安裝部署允許一台或者多台機器跑kudu-master。一般建議跑一個master(無容錯機制)、三個master(允許一個節點運作出錯)或者五個master(允許兩個節點出錯)。

一台或者多台機器跑kudu-tserver。當需要使用副本,至少需要三個節點運作kudu-tserver服務。

Impala并沒有自己的存儲引擎,其負責解析SQL,并連接配接其底層的存儲引擎。在釋出之初Impala主要支援HDFS,Kudu釋出之後,Impala和Kudu更是做了深度內建。

1、檢視三台機子的linux核心以及ext檔案格式:

127

Kudu + IMPALA 的安裝部署

128

Kudu + IMPALA 的安裝部署

129

Kudu + IMPALA 的安裝部署

必須是ext4格式 否則會啟動失敗

2、安裝依賴包

yum -y install cyrus-sasl-plain lsb ntp
           

在yum.repos.d中加入cloudera-kudu.repo源

cloudera-kudu.repo源的連結下載下傳位址:http://kudu.apache.org/docs/installation.html

根據系統選擇是centos 6 或者centos 7 例如:172.30.81.127和172.30.81.113是centos 6 就下載下傳centos 6的cloudera-kudu.repo ;172.30.81.123是centos 7的cloudera-kudu.repo。

在yum.repos.d中加入cloudera-kudu.repo源:

Kudu + IMPALA 的安裝部署

檢視 cloudera-kudu.repo檔案

Kudu + IMPALA 的安裝部署

以127作為master,在127上安裝安裝kudu-master

yum install kudu kudu-master kudu-client0 kudu-client-devel -y
           
Kudu + IMPALA 的安裝部署

配置

Kudu + IMPALA 的安裝部署
# cat /etc/kudu/conf/master.gflagfile
# Do not modify these two lines. If you wish to change these variables,
# modify them in /etc/default/kudu-master.
--fromenv=rpc_bind_addresses
--fromenv=log_dir
注釋這兩行
#--fs_wal_dir=/var/lib/kudu/master
#--fs_data_dirs=/var/lib/kudu/master
修改為
--fs_wal_dir=/opt/kudu/master
--fs_data_dirs=/opt/kudu/master
設定權限
# mkdir /opt/kudu && chown kudu:kudu /opt/kudu
啟動
# /etc/init.d/kudu-master start
           
Kudu + IMPALA 的安裝部署

以128和129作為從機

需要修改/etc/hosts 在127 和 128 和129 内加入其他兩台機子的hostname 以及ip

安裝kudu-tserver

# yum install kudu kudu-tserver kudu-client0 kudu-client-devel -y
           
Kudu + IMPALA 的安裝部署

配置

# cat /etc/kudu/conf/tserver.gflagfile 
           
Kudu + IMPALA 的安裝部署
# Do not modify these two lines. If you wish to change these variables,
# modify them in /etc/default/kudu-tserver.
--fromenv=rpc_bind_addresses
--fromenv=log_dir
注釋以下兩行
#--fs_wal_dir=/var/lib/kudu/tserver
#--fs_data_dirs=/var/lib/kudu/tserver
修改為
--fs_wal_dir=/opt/kudu/tserver
--fs_data_dirs=/opt/kudu/tserver
--tserver_master_addrs=172.30.81.127:7051
設定權限
 mkdir /opt/kudu && chown kudu:kudu /opt/kudu
啟動前需要做ntp同步,使用這條指令:ntpdate us.pool.ntp.org
在三台機子中都啟動
# /etc/init.d/kudu-tserver start
           

安裝成功後 啟動成功的界面如下:

Web界面

Kudu + IMPALA 的安裝部署

Master界面:

Kudu + IMPALA 的安裝部署

T-server界面:

Kudu + IMPALA 的安裝部署

接下來進行Impala-kudu安裝

安裝Impala-kudu 需要如下安裝包:

Kudu + IMPALA 的安裝部署

使用rpm指令進行安裝,個别的需要使用 --nodeps 指令強制安裝

在主節點安裝 impala-kudu、 impala-kudu-catalog、impala-kudu-state-store、 impala-kudu-udf-deve 、bigtop-utils 、impala-kudu-server、impala-kudu-shell

Kudu + IMPALA 的安裝部署

在子節點安裝 impala-kudu、impala-kudu-server、impala-kudu-shelll 、 impala-kudu-udf-deve 、bigtop-utils。

Kudu + IMPALA 的安裝部署

在安裝好之後、就可以發現在 /etc/default 和 /etc/impala 生成配置檔案/etc/default 路徑下會新生成兩個檔案 bigtop-utils impala

在bigtop-utils 檔案中配置 java路徑即可:

Kudu + IMPALA 的安裝部署

在impala 檔案中隻需要修改以下兩項,将ip改為主機節點IP IMPALA_CATALOG_SERVICE_HOST=172.30.81.127

IMPALA_STATE_STORE_HOST=172.30.81.127

Kudu + IMPALA 的安裝部署

/etc/impala 路徑先會有這兩個空檔案夾 conf conf.dist

将Hadoop和hive中的配置檔案*.xml 檔案拷貝到 conf.dist 下面,之後做如下操作在core-site.xml和hdfs-site.xml檔案中增加如下配置

執行拷貝

cp /etc/hadoop/conf/*.xml /etc/impala/conf
cp /etc/hive/conf/hive-site.xml /etc/impala/conf
           

添加附屬組

usermod -G hive,hdfs,hadoop impala
           

impala在hdfs上的目錄并設定權限

sudo -u hdfs hadoop fs -mkdir /user/impala 
sudo -u hdfs hadoop fs -chown impala /user/impala
           

設定scoket path

在每個節點上建立/var/run/hadoop-hdfs

mkdir -p /var/run/hadoop-hdfs 
           

注意:該檔案夾可能已經存在,應當确認用impala是否有權限進行讀寫

如果已經存在,将使用者impala加入該檔案所屬的組,并修改該檔案組的權限即:

chmod 775 /var/run/hadoop-hdfs 
           

修改配置檔案

在/etc/hadoop/conf/core-site.xml增加

<property>
	<name>dfs.client.read.shortcircuit</name> <value>true</value>
</property>
<property>
	<name>dfs.client.read.shortcircuit.skip.checksum</name>
    <value>false</value>
</property>
<property> 
	<name>dfs.datanode.hdfs-blocks-metadata.enabled</name> 
	<value>true</value>
</property>
           

在/etc/hadoop/conf/hdfs-site.xml增加

<property>
	<name>dfs.datanode.hdfs-blocks-metadata.enabled</name> 
	<value>true</value>
</property>
<property> 
	<name>dfs.block.local-path-access.user</name> 
	<value>impala</value>
</property>
<property>
	<name>dfs.client.file-block-storage-locations.timeout.millis</name>
	<value>60000</value>
</property>
           

接下來就可以啟動服務了

$ sudo service impala-state-store start 
$ sudo service impala-catalog start 
$ sudo service impala-server start
           

啟動:impala-shell

測試語句:

CREATE TABLE kaka_first
(
	id BIGINT,
	name STRING
)
DISTRIBUTE BY HASH INTO 16 BUCKETS
TBLPROPERTIES(
 'storage_handler' = 'com.cloudera.kudu.hive.KuduStorageHandler',
'kudu.table_name' = 'kaka_first',
'kudu.master_addresses' = '172.30.81.127:7051',
'kudu.key_columns' = 'id'
);
           
Kudu + IMPALA 的安裝部署

Web頁面

Kudu + IMPALA 的安裝部署
Kudu + IMPALA 的安裝部署

可能遇到的問題報錯

1、如果不是檔案系統不是ext4 kudu啟動會遇到如下問題:

Log error日志

Kudu + IMPALA 的安裝部署

Running on machine: xdp.yeexun.com

Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg

F0402 15:31:01.463018 17507 tablet_server_main.cc:72] Check failed: _s.ok() Bad status: IO error: Could not create new FS layout: Unable to create block manager: Error during hole punch test. The log block mana

ger requires a filesystem with hole punching support such as ext4 or xfs. On el6, kernel version 2.6.32-358 or newer is required. To run without hole punching (at the cost of some efficiency and scalability), r

econfigure Kudu with --block_manager=file. Refer to the Kudu documentation for more details. Raw error message follows: Unexpected pre-punch file size for /opt/kudu/tserver/data/hole_punch_test_file: expected 1

6384 but got 0

官網上可以查詢到這個錯誤的解決方案:

http://kudu.apache.org/docs/troubleshooting.html 沒法啟動的原因應該是 EXT3 檔案系統不能支援

Kudu + IMPALA 的安裝部署

2、可能遇到權限錯誤:

Kudu + IMPALA 的安裝部署

切換到hdfs所在的使用者住

輸入 hdfs dfsadmin -safemode leave 可以解決

3、時間同步錯誤

Running on machine: localhost.localdomain

Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg

F0402 19:00:55.215814 4907 tablet_server_main.cc:72] Check failed: _s.ok() Bad status: Service unavailable: Cannot initialize clock: Error reading clock. Clock considered unsynchronized

用需要做ntp同步,使用這條指令:ntpdate us.pool.ntp.org

Ntp同步前需先停止ntp服務,之後再重新開機ntpd服務