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的内網IP> master.bd.cn
<slave1.bd.cn的内網IP> slave1.bd.cn
<slave2.bd.cn的内網IP> slave2.bd.cn
二、配置三台ECS之間無密碼SSH登陸
1. 将之前下載下傳的.pem私鑰上傳到三台機器的/root/.ssh/目錄下。
# 重命名密鑰
mv xxx.pem id_rsa
# 修改檔案權限
chmod 600 id_rsa
2. 然後分别通過ssh通路進行驗證,例如:
ssh [email protected]
如果登陸不成功,請自行排查問題。
三、挂載資料盤到/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主要分為以下幾步:
- 通過實體分區建立PV
- 通過PV建立VG
- 在VG上建立LV
- 格式化LV
- 挂載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.jsonCHD5 相關的 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 [email protected]:/opt/
scp cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz [email protected]:/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 [email protected]:/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 [email protected]:/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 登入後
免費版本的 CM5 已經去除 50 個節點數量的限制。
各個 Agent 節點正常啟動後,可以在目前管理的主機清單中看到對應的節點。
選擇要安裝的節點,點繼續。如果配置本地 Parcel 包無誤,那麼下圖中的已下載下傳,應該是瞬間就完成了,然後就是耐心等待配置設定過程就行了,大約 10 多分鐘吧,取決于内網網速。
點選繼續,開始安裝。
可看到檢查有兩個問題。
1)已啟用透明大頁面壓縮,可能會導緻重大性能問題。請運作
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
以禁用此設定,然後将同一指令添加到 /etc/rc.local 等初始化腳本中,以便在系統重新開機時予以設定。
2)不支援openjdk,手工安裝oracle jdk
下載下傳oracle jdk 1.8 rpm安裝包
下載下傳位址上傳到3台ECS上,執行安裝
yum install jdk-8u181-linux-x64.rpm
解決後,重新檢測。如果出現問題,請重新安裝CDH,見本文最後章節《CDH安裝失敗了,如何重新安裝》
這一步需要我們手工建立對應的資料庫,暫時都用一個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
重新測試連結,通過後,繼續
自行修改,繼續
通過Cloudera Manager添加Hive服務,在啟動Hive的時候遇到錯誤:
.org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver
這種情況是缺少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 自動複制,是以執行:
cp mysql-connector-java-5.1.38.jar /usr/share/java/mysql-connector-java.jar
然後重試,完成
可能遇到的一些問題:
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"
然後在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服務。