3臺阿里雲ECS安裝CDH大資料叢集過程(CentOS7.4+獨立資料盤)

ykbjfree發表於2018-08-03

0x、環境說明

直接購買3臺阿里雲的ECS(配置4C/32G/30G系統盤+1T資料盤)

購買時先在阿里雲生成一個金鑰對,把.pem私鑰儲存到本地,然後購買時選擇使用金鑰進行無密碼SSH登陸,注意統一使用該金鑰對進行映象部署。

服務開通後,進行如下操作。

一、配置hostname和hosts

1. 三臺機器分別設定hostname為(需要重啟ECS):

  • master.bd.cn
  • slave1.bd.cn
  • slave2.bd.cn

2. 然後三臺的/etc/hosts統一配置如下對映:

<master.bd.cn的內網IPmaster.bd.cn
<slave1.bd.cn的內網IPslave1.bd.cn
<slave2.bd.cn的內網IPslave2.bd.cn

二、配置三臺ECS之間無密碼SSH登陸

1. 將之前下載的.pem私鑰上傳到三臺機器的/root/.ssh/目錄下。

# 重新命名金鑰
mv xxx.pem id_rsa
# 修改檔案許可權
chmod 600 id_rsa

2. 然後分別通過ssh訪問進行驗證,例如:

ssh root@slave1.bd.cn

如果登陸不成功,請自行排查問題。

三、掛載資料盤到/opt目錄(後面CDH會部署到這裡)

1. 建立物理分割槽

我們只有一個資料盤,預設的位置是在/dev/vdb

可以有以下幾種方法檢視當前系統中的磁碟:

fdisk -l
lsblk
parted -l

 對/dev/vdb進行分割槽:

fdisk /dev/vdb

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x4710ccf3.

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition`s system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): 11943039
Partition 1 of type Linux and of size 5.7 GiB is set

Command (m for help): wq
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

2. 基於物理分割槽建立邏輯卷

邏輯卷(LVM)

當我們建立了了一個分割槽之後,它的大小便固定了,這個不利於之後的擴充套件,為此有了LVM,它可以動態地改變分割槽的大小。

LVM中主要有以下三個概念:

  • PV(Physical Volume):即物理分割槽或者磁碟。
  • VG(Volume Group):卷組,多個PV組成一個VG,VG就像一個池子一樣。
  • LV(Logic Volume):邏輯卷,在VG上建立出來的對機器可見的分割槽,有自己的檔案系統。

雖然LVM可以使用裸盤作為PV,但是並不推薦這麼做,推薦先對磁碟進行分割槽,在用於LVM。

LVM使用步驟

使用LVM主要分為以下幾步:

  1. 通過物理分割槽建立PV
  2. 通過PV建立VG
  3. 在VG上建立LV
  4. 格式化LV
  5. 掛載LV

ECS Centos7.4預設沒有lvm管理包,先安裝lvm

yum install lvm*

通過命令建立PV

pvcreate /dev/vdb1

# 建立名為LVMVG的組
vgcreate LVMVG /dev/vdb1 

# 建立並將所有空間分配給lv1
lvcreate -l 100%FREE -n lv1 LVMVG

# 格式化lv1
mkfs.ext4 /dev/LVMVG/lv1

3. 將邏輯卷掛載到/opt目錄

mount /dev/LVMVG/lv1 /opt

# 配置自動掛載
echo /dev/LVMVG/lv1 /opt ext4 defaults 0 0 >> /etc/fstab

其他一些命令:

# umount
umount /opt

# 刪除LV/VG/PV
lvremove /dev/LVMVG/lv1
vgremove LVMVG
pvremove /dev/vdb1

 

四、安裝JDK和Mysql

1. 3臺ECS都要安裝JDK (注意,請直接安裝oracle jdk,不要使用openjdk,不然CDH不支援,後續還需要重新安裝jdk)

yum install java-1.8.0-openjdk

2. master.bd.cn主節點單獨安裝mysql

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
yum localinstall mysql57-community-release-el7-8.noarch.rpm
yum install mysql-community-server
systemctl start mysqld
systemctl enable mysqld
systemctl daemon-reload

# 檢視root初始密碼
grep `temporary password` /var/log/mysqld.log

# 登陸mysql
mysql -p

# 修改root密碼
mysql> ALTER USER   `root`@`localhost` identified by `密碼<數字+大小寫字母+特殊字元+最少8位>`;
mysql> flush privileges;

# 開啟遠端登陸
mysql> grant all privileges on *.*  to  `root`@`%`  identified by `密碼`  with grant option;
mysql> flush privileges;
mysql> exit;

五、安裝依賴包

yum -y install chkconfig
yum -y install bind-utils
yum -y install psmisc
yum -y install libxslt
yum -y install zlib
yum -y install sqlite
yum -y install cyrus-sasl-plain
yum -y install cyrus-sasl-gssapi
yum -y install fuse
yum -y install portmap
yum -y install fuse-libs
yum -y install redhat-lsb

 

六、準備CDH離線安裝

Cloudera Manager 下載目錄

http://archive.cloudera.com/cm5/cm/5/

CDH 下載目錄

http://archive.cloudera.com/cdh5/parcels/5.15.0/

manifest.json 下載

http://archive.cloudera.com/cdh5/parcels/5.15.0/manifest.json

CHD5 相關的 Parcel 包放到主節點的/opt/cloudera/parcel-repo/目錄中

CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1 重新命名為 CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha

這點必須注意,否則,系統會重新下載 CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel 檔案

在3臺ECS上均建立資料夾/opt/cloudera-manager

mkdir /opt/cloudera-manager

把下載好的cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz安裝包上傳至 master.bd.cn 節點/opt/目錄

在 master.bd.cn 節點拷貝 cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz 到所有節點:

scp cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz root@slave1.bd.dp:/opt/
scp cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz root@slave2.bd.dp:/opt/

所有ECS節點解壓安裝 Cloudera Manager Server & Agent

cd /opt
tar xvzf cloudera-manager*.tar.gz -C /opt/cloudera-manager

 

七、開始部署SCM

1. 建立使用者 cloudera-scm(所有節點)

cloudera-scm 使用者說明,摘自官網:

Cloudera Manager Server and managed services are configured to use the user account cloudera-scm by default, creating a user with this name is the simplest approach. This created user, is used automatically after installation is complete.

Cloudera管理器伺服器和託管服務被配置為在預設情況下使用使用者帳戶Cloudera-scm,建立具有這個名稱的使用者是最簡單的方法。建立使用者,在安裝完成後自動使用。

執行:在所有節點建立cloudera-scm使用者

useradd --system --home=/opt/cloudera-manager/cm-5.15.0/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

2. 配置 CM Agent

修改 master.bd.cn節點/opt/cloudera-manager/cm-5.15.0/etc/cloudera-scm-agent/config.ini中的server_host為主節點的主機名。

在 master.bd.cn 操作將 master.bd.cn節點修改後的 (複製到所有節點)

scp /opt/cloudera-manager/cm-5.15.0/etc/cloudera-scm-agent/config.ini root@slave1.bd.cn:/opt/cloudera-manager/cm-5.15.0/etc/cloudera-scm-agent/config.ini

scp /opt/cloudera-manager/cm-5.15.0/etc/cloudera-scm-agent/config.ini root@slave2.bd.cn:/opt/cloudera-manager/cm-5.15.0/etc/cloudera-scm-agent/config.ini

3. 配置 CM Server 的資料庫

在主節點 master.bd.cn 初始化CM5的資料庫:

下載 mysql 驅動包:

cd /opt/cloudera-manager/cm-5.15.0/share/cmf/lib
wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

初始化資料庫: 

cd /opt/cloudera-manager/cm-5.15.0/share/cmf/schema/

./scm_prepare_database.sh mysql -hmaster.bd.dp -uroot -p密碼 --scm-host master.bd.dp cm scm 密碼

引數說明:

引數 說明
mysql 資料庫用的是mysql,如果安裝過程中用的oracle,那麼該引數就應該改為oracle
-hhadoop1 資料庫建立在hadoop1主機上面,也就是主節點上面.
-uroot 以root使用者執行mysql
-p123456 mysql使用者
–scm-host CMS的主機,一般是和mysql安裝的主機是在同一個主機上
最後三個引數 分別為資料庫名稱、資料庫使用者名稱、資料庫密碼
   

4. 配置CDH本地安裝源

建立 Parcel 目錄

master.bd.cn 節點建立目錄/opt/cloudera/parcel-repo

然後將下載好的檔案

CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel
CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1
manifest.json

拷貝到該目錄下。

mkdir -p /opt/cloudera/parcel-repo
chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
cd /opt/cloudera/parcel-repo

重新命名,CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1 否則,系統會重新下載 CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel

mv CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1 CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha

 

slave1.bd.cn和slave2.bd.cn 節點建立目錄/opt/cloudera/parcels,執行:

mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels

 

5. 啟動 CM Manager&Agent 服務
注意,mysql 服務啟動,防火牆關閉

master.bd.cn節點執行:

/opt/cloudera-manager/cm-5.15.0/etc/init.d/cloudera-scm-server start
/opt/cloudera-manager/cm-5.15.0/etc/init.d/cloudera-scm-agent start

slave1和slave2節點執行:

/opt/cloudera-manager/cm-5.15.0/etc/init.d/cloudera-scm-agent start

訪問 http://master.bd.cn:7180 若可以訪問(使用者名稱、密碼:admin),則安裝成功。

Manager 啟動成功需要等待一段時間,過程中會在資料庫中建立對應的表需要耗費一些時間。

 

八、開始安裝CDH

CM Manager && Agent 成功啟動後,登入前端頁面進行 CDH 安裝配置。

admin / admin 登入後

97968a09ab74a704b9da7a546c65243052e.jpg

17277ef21fca56746829685201ac66f7006.jpg

免費版本的 CM5 已經去除 50 個節點數量的限制。

f3fc87a0c44bb16ee779f2f8cda6476415b.jpg

各個 Agent 節點正常啟動後,可以在當前管理的主機列表中看到對應的節點。

17fd5d70e8631c299c0d7939b2ed924eabc.jpg

選擇要安裝的節點,點繼續。如果配置本地 Parcel 包無誤,那麼下圖中的已下載,應該是瞬間就完成了,然後就是耐心等待分配過程就行了,大約 10 多分鐘吧,取決於內網網速。

74fe1dd4c41417e92f1aaad1e7e2fde0900.jpg

點選繼續,開始安裝。

d1f427a7888a970c65f012ca710eb415f50.jpg

48e66308d1fcae59121173f64322b7a63d1.jpg

 

519d8d935a16cac095b85c8bbb803ac6de5.jpg

可看到檢查有兩個問題。

1)已啟用透明大頁面壓縮,可能會導致重大效能問題。請執行    

echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled  

以禁用此設定,然後將同一命令新增到 /etc/rc.local 等初始化指令碼中,以便在系統重啟時予以設定。

037730072c86836240e101b17cd0e30d5bd.jpg

2)不支援openjdk,手工安裝oracle jdk

d8879f49c30b2c1fc0b93a9fd982b259a43.jpg

下載oracle jdk 1.8 rpm安裝包 下載地址

上傳到3臺ECS上,執行安裝

yum install jdk-8u181-linux-x64.rpm

解決後,重新檢測。如果出現問題,請重新安裝CDH,見本文最後章節《CDH安裝失敗了,如何重新安裝》

78b858efb97d0fd930a798763911fc234d4.jpg

19116445af9d6f3203ee8b153d476704bfd.jpg

1aed06e95430131ce680637fbe77b76824e.jpg

898f4805703b820709abe4d3a3c5eb91b73.jpg

這一步需要我們手工建立對應的資料庫,暫時都用一個mysql服務,修改資料庫主機均為master.bd.cn。

建立資料庫,推薦使用utf8mb4字符集,並分配scm使用者許可權給hive庫(當然也可以新建個hive使用者)

CREATE DATABASE `hive` CHARACTER SET `utf8mb4`;

GRANT Select, Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Index, Insert, Lock Tables, References, Show View, Trigger, Update ON `hive`.* TO `scm`@`master.bd.dp`;
CREATE DATABASE `hue` CHARACTER SET `utf8mb4`;

GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `hue`.* TO `scm`@`master.bd.dp`;
CREATE DATABASE `am` CHARACTER SET `utf8mb4`;

GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `am`.* TO `scm`@`master.bd.dp`;
CREATE DATABASE `oozie` CHARACTER SET `utf8mb4`;

GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `oozie`.* TO `scm`@`master.bd.dp`;

點選測試,如果報錯:

JDBC driver cannot be found. Unable to find the JDBC database jar on host : slave2.bd.dp.

需要下載jdbc到lib目錄下:

cd /opt/cloudera-manager/cm-5.15.0/share/cmf/lib/

wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

重新測試連結,通過後,繼續

d9dc8c103027cd98a67a12d5e78d4372999.jpg

自行修改,繼續

3b52f0eb08a292858935c62c0bc699ff4f6.jpg

通過Cloudera Manager新增Hive服務,在啟動Hive的時候遇到錯誤:

.org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver

94314822f9f731eace74531b47cc5649106.jpg

這種情況是缺少jdbc驅動,於是新增jdbc驅動到相應的包下面。報的錯中提示了lib路徑,新增一下即可。(注意,最好所有節點都這樣執行一次)

cd /opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/lib/hive/lib/

wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

然後點選“Resume”重試。

很可能oozie也沒有,注意看日誌資訊,是從 /usr/share/java/mysql-connector-java.jar 自動複製,所以執行:

42fb863c89a45837642c3b98dab4380d04c.jpg

cp mysql-connector-java-5.1.38.jar /usr/share/java/mysql-connector-java.jar

然後重試,完成

66c66f6d5378cc7b1094de942f547985c49.jpg

1c529f2eef298dd77bb8e42500bee66a58f.jpg

可能遇到的一些問題:

1. hue的load balancer無法啟動

解決:安裝httpd和mod_ssl

yum -y install httpd

yum -y install mod_ssl

2. HDFS NFS Gateway 無法啟動、掛載失敗問題

解決:HDFS NFS Gateway工作需要依附 rpcbind 服務,所以啟動前需要確定rpcbind服務正常開啟。 service rpcbind start
但是HDFS NFS 服務會與系統自帶的NFS服務衝突,所以在啟動前需要關閉系統自帶的NFS服務。service nfs stop

service nfs stop
service rpcbind start

3. HDFS-副本不足的塊

原因是設定的副本備份數與DataNode的個數不匹配。

我們在之前理論篇中已經說明了dfs. replication屬性預設是3,也就是說副本數—塊的備份數預設為3份。

但是我們這裡叢集只有兩個DataNode。所以導致了達不到目標—副本備份不足。

解決方法

這種情況下的修復有2個步驟,1是設定目標備份數為2,2是通過命令更改當前備份數。

副本不足和副本過多都可以用這2個步驟解決,主要是跟DataNode的個數對應。

設定目標備份數為2

點選叢集-HDFS-配置

搜尋dfs. replication,設定為2後儲存更改。

dfs.replication這個引數其實只在檔案被寫入dfs時起作用,雖然更改了配置檔案,但是不會改變之前寫入的檔案的備份數。

所以我們還需要步驟2

在cm0中通過命令更改備份數:

su hdfs
hadoop fs -setrep -R 2 /

這裡的-R 2的數字2就對應我們的DataNode個數。

如果遇到safe mode無法執行,則先執行解除safemode命令:

hadoop dfsadmin -safemode leave

 

九、安裝 Kafka 元件

1. 配置並分配 Kafka parcel 包
    在 Web 頁面中,主機 -> Parcel 裡面會列出當前叢集以配置和分配的 parcel 包,目前只配置了 CDH5,Kafka 單獨存在於其他 parcel 包中,所以需要單獨載入 parcel ,然後分配到叢集內各節點。 

Cloudera官方Kafka元件的parcel包下載地址為:http://archive.cloudera.com/kafka/parcels/latest/ 照舊下載 percel 檔案,以及該檔案的 sha1 串,然後重新命名 ***.sha1 為 ***.sha 方可。

下載好以上兩個檔案後,放到 master.bd.cn 節點的 /opt/cloudera/parcel-repo/ 目錄下 

無需重啟 server 守護程式,在頁面即可線上重新整理、分配、啟用。

2. 叢集內安裝 Kafka 服務

這裡需要確認和修改 2 個預設配置

  • 複製程式,預設為1,修改為 3(視業務量而定)
  • 分割槽數,預設分割槽數為 50,這裡暫且保留。
  • 刪除舊topic,預設開啟,不做更改。

業務埠為 9092 。

啟動可能會遇到OOM的錯誤,導致無法啟動

Fatal error during KafkaServerStartable startup. Prepare to shutdown
java.lang.OutOfMemoryError: Java heap space

解決:

登入到kafka執行的節點,修改kafa啟動指令碼:

vi /opt/cloudera/parcels/KAFKA-3.1.0-1.3.1.0.p0.35/lib/kafka/bin/kafka-server-start.sh

新增最後一行啟動命令前一行新增 export KAFKA_HEAP_OPTS=”-Xmx1G -Xms1G”

de4c883c57ba9f6a210b7652233533c1a31.jpg

然後在CM中重試即可。

 

附1:CDH安裝失敗了,如何重新安裝

1> 刪除Agent節點的UUID 

      # rm -rf /opt/cloudera-manager/cm-5.15.0/lib/cloudera-scm-agent/*

2>  清空主節點CM資料庫

      進入主節點的Mysql資料庫,然後drop database cm;

3> 刪除Agent節點namenode和datanode節點資訊

     # rm -rf /opt/dfs/nn/*

     # rm -rf /opt/dfs/dn/*

4> 在主節點上重新初始化CM資料庫

5> 執行啟動指令碼

     主節點:# /opt/cloudera-manager/cm-5.15.0/etc/init.d/cloudera-scm-server start

     Agent節點:# /opt/cloudera-manager/cm-5.15.0/etc/init.d/cloudera-scm-agent start

過一會兒,即可通過主節點的7180埠重新進行CDH的安裝 http://主節點IP:7180/cmf/login。

附2:HUE執行Oozie-Sqoop1命令式找不到msyql driver問題

cd /opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/lib/sqoop/
wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

然後重啟Oozie和Hue服務。


相關文章