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

128
129
必須是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源:
檢視 cloudera-kudu.repo檔案
以127作為master,在127上安裝安裝kudu-master
yum install kudu kudu-master kudu-client0 kudu-client-devel -y
配置
# 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
以128和129作為從機
需要修改/etc/hosts 在127 和 128 和129 内加入其他兩台機子的hostname 以及ip
安裝kudu-tserver
# yum install kudu kudu-tserver kudu-client0 kudu-client-devel -y
配置
# cat /etc/kudu/conf/tserver.gflagfile
# 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界面
Master界面:
T-server界面:
接下來進行Impala-kudu安裝
安裝Impala-kudu 需要如下安裝包:
使用rpm指令進行安裝,個别的需要使用 --nodeps 指令強制安裝
在主節點安裝 impala-kudu、 impala-kudu-catalog、impala-kudu-state-store、 impala-kudu-udf-deve 、bigtop-utils 、impala-kudu-server、impala-kudu-shell
在子節點安裝 impala-kudu、impala-kudu-server、impala-kudu-shelll 、 impala-kudu-udf-deve 、bigtop-utils。
在安裝好之後、就可以發現在 /etc/default 和 /etc/impala 生成配置檔案/etc/default 路徑下會新生成兩個檔案 bigtop-utils impala
在bigtop-utils 檔案中配置 java路徑即可:
在impala 檔案中隻需要修改以下兩項,将ip改為主機節點IP IMPALA_CATALOG_SERVICE_HOST=172.30.81.127
IMPALA_STATE_STORE_HOST=172.30.81.127
/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'
);
Web頁面
可能遇到的問題報錯
1、如果不是檔案系統不是ext4 kudu啟動會遇到如下問題:
Log error日志
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 檔案系統不能支援
2、可能遇到權限錯誤:
切換到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服務