一、集羣規劃
實際工作中搭建CDH集羣的話,原則上來說,機子越多越好,如果資源有限的話,建議前期最好4臺機子,4臺機子的話,針對hadoop集羣而言 可以設置爲1主3從,
如果考慮到HA的話,就需要最少5臺機子,本案例採用的服務器配置如下
IP | 主機名 | CPU | 內存 | 硬盤 | 角色 |
---|---|---|---|---|---|
172.20.9.1 | hadoop1 | 8h | 64g | 50g | cm-server、NameNode、SecondaryNameNode、Yarn ResourceManager |
172.20.9.2 | hadoop2 | 8h | 32g | 50g | DataNode、NodeManager |
172.20.9.3 | hadoop3 | 8h | 32g | 50g | DataNode、NodeManager |
二、安裝部署
這裏部署就用3臺機子來演示
1、主機名配置
所有節點都需要配置
# 這裏我設置的是hadoop1、hadoop2、hadoop3
hostnamectl set-hostname <主機名>
2、綁定主機名與IP的映射關係
所有節點都需要配置
vim /etc/hosts
# 這裏的主機名和IP要對應你自己的主機名IP
172.20.9.1 hadoop1
172.20.9.2 hadoop2
172.20.9.3 hadoop3
做完上一步後最好ping一下所有機器的主機名,看看是否ping的通
3、關閉集羣內所有機子的防火牆
如果集羣內的所有機器都是內網環境的,直接關閉防火牆是沒啥問題的,如果是外網環境,就不能關閉防火牆了,而是開放端口, 以下命令需要在所有機子執行,臨時和永久自己選擇一種即可
# 臨時關閉,重啓後又會打開
systemctl stop firewalld
# 永久關閉
systemctl disable firewalld
4、配置免密登錄
# 主節點生成祕鑰
ssh-keygen -t rsa
# 然後在主節點上將生成的祕鑰複製到其他節點上,這裏把自己也做爲免密
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop1
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop2
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop3
上面的執行完畢後,可以在主節點通過ssh <主機名>
進行免密登錄到子節點了
5、搭建ntp時間服務器
需要保證集羣內所有節點的時間一致,否則集羣會不穩定,在集羣內所有節點上安裝ntp服務,同步一個ntp時間服務器
首先在hadoop1節點操作
yum -y install ntp
vim /etc/ntp.conf
# 註釋掉這四行
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 增加這一行,然後保存退出
server ntp.aliyun.com
其他節點也重複剛剛的操作
yum -y install ntp
vim /etc/ntp.conf
# 註釋掉這四行
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 增加這一行,然後保存退出
server ntp.aliyun.com
啓動並添加到開機啓動項, 集羣中每個節點都需要執行
service ntpd start
systemctl enable ntpd.service
配置好了之後,我們可以驗證下現在同步的時間服務器,可以隨便用一臺節點試試,需要等待個幾分鐘,出現下面的結果就說明成功了
6、所有節點安裝JDK
這裏採用JDK8 點擊下載
下載成功後的JDK上傳到每臺節點上
rpm -ivh jdk-8u212-linux-x64.rpm
默認會安裝到/usr/java
目錄, 驗證是否安裝成功 java -version
7、Hadoop1安裝Mysql
# 卸載原裝的mariadb
rpm -qa|grep mariadb
# 把上一條命令返回的內容拿來繼續下一條命令
rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64
下載Mysql安裝包,這裏我們下載5.7.31版本的 點擊下載 ,
下載成功後上傳到Hadoop1機器上然後解壓安裝包
tar -xvf mysql-5.7.31-1.el7.x86_64.rpm-bundle.tar
進行安裝
rpm -ivh mysql-community-common-5.7.31-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-libs-5.7.31-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-client-5.7.31-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-server-5.7.31-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm --force --nodeps
開始配置Mysql
初始化mysql
mysqld --initialize --user=mysql
如果執行上面命令初始化mysql失敗,提示報錯信息: mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
那麼需要執行:yum install -y libaio 然後在初始化
獲取Mysql生成的隨機密碼,在文件/var/log/mysqld.log
文件中
cat /var/log/mysqld.log |tail -1
設置Mysql開機啓動
systemctl start mysqld.service
重啓Mysql否則連接不上
systemctl restart mysqld
連接Mysql並修改初始化密碼
# 連接
mysql -uroot -p
# 修改root用戶的密碼爲 abc123
alter user user() identified by "abc123";
初始化數據庫,一共需要用到這些數據庫
mysql> create database cmserver default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on cmserver.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database metastore default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.01 sec)
mysql> grant all on metastore.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database rman default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on rman.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database oozie default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on oozie.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database hue default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on hue.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
最後創建/usr/share/java
目錄,將Mysql的驅動jar包放入到裏面,這一步需要在集羣內的所有節點上操作
mkdir -p /usr/share/java
jar包一定要重命名, 每個節點都要
mv mysql-connector-java-5.1.49.jar mysql-connector-java.jar
8、在hadoop1節點安裝httpd服務
yum install -y httpd
# 啓動httpd服務
systemctl start httpd
# 添加到開機啓動
systemctl enable httpd.service
9、在hadoop1節點配置cloudera-manager相關包
創建目錄
mkdir -p /var/www/html/cloudera-repos/cm6
下載cloudera相關文件, 地址:https://archive.cloudera.com/cm6/6.2.1/redhat7/yum/RPMS/x86_64/
然後將這些下載後的文件上傳到hadoop1節點,最終服務器上的文件效果是
10、配置cloudera-manager的yum源並添加到其他節點上
下載createrepo,下載地址爲:http://www.rpmfind.net/linux/rpm2html/search.php?query=createrepo 找到centos7的,下載成功後上傳到hadoop1節點
的opt目錄下
安裝createrepo
rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm --force --nodeps
下載deltarpm, 不然在後面創建repo的時候會提示缺少這個模塊,同樣上傳到opt目錄, 點擊下載
安裝
rpm -ivh python-deltarpm-3.6-3.el7.x86_64.rpm --force --nodeps
回到cm6的目錄,執行創建repo
createrepo .
這時候cm6目錄會出現一個repodata
目錄
完成創建repodata
後,在集羣中的所有節點
去配置新的yum源
# 添加新的yum源
vim /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name=Cloudera Manager,Version
baseurl=http://hadoop1/cloudera-repos/cm6
gpgcheck=1
# 清除yum緩存
yum clean all
yum makecache
配置完後訪問下,以確保base_url是正確的,地址爲http://hadoop1/cloudera-repos/cm6/
, 如果你本機沒有配置hostname與IP的綁定關係,那麼就輸入IP去訪問, 訪問成功後會進入到如下圖所示的頁面
11、安裝cloudera-manager相關服務
安裝CDH集羣,需要先安裝Cloudera-Manager(下面簡稱CM),通過CM提供的web界面來安裝,非常快捷
-
在hadoop1節點操作
在安裝之前,先執行以下這個命令,否則安裝相關服務的時候會報錯
rpm --import http://hadoop1/cloudera-repos/cm6/RPM-GPG-KEY-cloudera
安裝cloudera-manager-daemons
、clouera-manager-agent
這兩個服務,由於hadoop1節點
作爲cm的server節點,所以需要多安裝個cloudera-manager-server
服務
yum install -y cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
-
在hadoop2節點操作
在安裝之前,一樣先執行以下這個命令,否則安裝相關服務的時候會報錯
rpm --import http://hadoop1/cloudera-repos/cm6/RPM-GPG-KEY-cloudera
安裝cloudera-manager-daemons
、clouera-manager-agent
這兩個服務
yum install -y cloudera-manager-daemons cloudera-manager-agent
-
在hadoop3節點操作
在安裝之前,一樣先執行以下這個命令,否則安裝相關服務的時候會報錯
rpm --import http://hadoop1/cloudera-repos/cm6/RPM-GPG-KEY-cloudera
安裝cloudera-manager-daemons
、clouera-manager-agent
這兩個服務
yum install -y cloudera-manager-daemons cloudera-manager-agent
安裝完CM以後,在/opt
目錄會出現cloudera
目錄,這時候需要將cdh的安裝包上傳到/opt/cloudera/parcel-repo
目錄下,可以選擇直接點擊下載,
也可以前往地址進行自己下載: https://archive.cloudera.com/cdh6/6.2.1/parcels/
首先將CDH安裝包自行上傳到hadoop1節點的/opt/cloudera/parcel-repo
目錄中,然後進入到hadoop1節點的/opt/cloudera/parcel-repo
目錄,生成sha文件
sha1sum CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel | awk '{print $1}' > CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha
然後將CDH的安裝包和新生成的sha文件通過scp命令拷貝到hadoop2和hadoop3節點,由於hadoop2和hadoop3只有/opt/cloudera/目錄,所以需要我們先手動在這兩個節點上創建目錄
mkdir -p /opt/cloudera/parcel-repo
在hadoop1節點執行遠程拷貝,進入到/opt/cloudera/parcel-repo
目錄
scp CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel hadoop2:/opt/cloudera/parcel-repo
scp CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel hadoop3:/opt/cloudera/parcel-repo
scp CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha hadoop3:/opt/cloudera/parcel-repo
scp CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha hadoop2:/opt/cloudera/parcel-repo
12、hadoop1節點啓動CM和安裝CDH集羣
- 初始化CM
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql cmserver root abc123
- 啓動CM
service cloudera-scm-server start
過個幾分鐘,就可以訪問CM的web界面了,一般5~10分鐘,端口爲7180
- 安裝CDH集羣
通過訪問http://hadoop1:7180
進入web界面,如果本機未配置IP和主機名的映射關係,則通過IP去訪問
賬號和密碼都是admin
,登錄進來之後會出現這個頁面,點擊繼續
選擇默認的即可
稍等一會,就會進入這個頁面,點擊繼續
接下來是集羣名稱,也可以使用默認的
輸入集羣中的所有主機名,然後點擊搜索按鈕,然後選中所有主機,點擊繼續按鈕
輸入自定義存儲庫,確認版本爲6.2.1,點擊繼續
JDK安裝頁直接點擊繼續,因爲之前我們已經安裝好了,不需要這裏再次安裝,這時候到了設置SSH密碼的步驟了,這時候我們輸入集羣中節點的密碼,然後繼續
接下來會進入到cm-agent的安裝頁面,需要稍等一會,5~10分鐘左右,安裝成功後會自動到安裝CDH
全部安裝成功後是這樣的效果,然後繼續下一步
點擊兩個高級選項,開始檢測
檢查第一個檢測的結果
檢查第二個檢測的結果
根據這裏提示的去更改即可
先在hadoop1節點上修改,然後在其他節點上操作
sysctl vm.swappiness=10
echo 'vm.swappiness=10'>> /etc/sysctl.conf
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
vim /etc/rc.local
# 將下面這兩行配置添加到文件末尾即可
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
修改完畢後點擊重新運行進行重新檢測,這時候檢測結果正常了,然後選中箭頭指向的那個,點擊繼續
選擇適合自己的方案,這裏就選擇自定義了,方便演示,而且spark和flink後期也是運行於yarn,因此就先自定義選擇hdfs和yarn,點擊繼續後,cdh會自動進行角色分配,將剛纔選擇的大數據組件安裝到不同節點上
前期不是很熟悉的情況下,最好還是採用自動分配的方案,這裏我們也什麼都不修改了, 然後點擊繼續按鈕
在這裏要輸入數據庫名稱和賬號密碼,然後點擊測試連接按鈕,連接成功的話,在每一行的後面都會出現successful
,如果有錯誤,就需要看具體的錯誤信息了。這些數據庫我們在安裝mysql的時候都已經創好了, 測試通過後點擊繼續
這裏根據情況修改,這裏我們採用默認的不做修改,點擊下一步
等待大數據組件啓動
安裝成功後效果是這樣的, 點擊繼續
到此整個大數據集羣就安裝成功了
三、管理CDH
前面我們已經搭建好了CDH集羣,這時候在通過地址去訪問,就可以看到下面的界面了,地址是你安裝集羣的節點IP,端口7180
可以看到界面上有一些警告(扳手圖標)和安全隱患(感嘆號圖標),關於警告我們可以動態觀察,不一定要馬上處理,對於安全隱患還是要處理下,此時界面中有一個安全隱患,直接點擊感嘆號查看詳細信息
這裏面的警告信息是針對hdfs的糾刪碼機制
的警告,這個是hadoop3.0的新特性(hdfs的存儲策略)
,糾刪碼機制可以節省HDFS的存儲空間,不過需要至少9個DataNode,目前我們只有兩個DataNode,所以不能使用這種策略, 點擊
這個警告信息,然後點擊修改他的存儲策略
更改他的默認存儲策略爲No default .... 表示不使用糾刪碼機制
保存更改後點擊去掉檢測
去掉勾選並保存更改
這時頁面將不存在警告信息了,這時點擊界面的左上角Cloudera Manager文字回到主頁面
發現還有個警告信息,這時候我們去解決這個警告信息
這時候我們點擊這個扳手圖標查看這個錯誤信息,發現是提示我們Hdfs的Block塊的副本數不足,因爲HDFS的數據默認是需要存儲3份
,我們這裏只有兩臺DataNode,所以纔出現了這個警告,如果在多一個DataNode是不會出現這個警告的,
不過也不會影響我們的使用,如果你們有足夠多的機子的話,那是不會出現這個警告的
點擊這個警告信息,我們進去查看詳細的錯誤,發現多了一個警告信息,說我們採用了過期的配置,這是因爲我們前面修改了默認的存儲策略,所以這時候我們需要重啓下, 點擊箭頭所指向的藍色字體
可以發現詳細的配置變更記錄,這時候點擊右下方的重啓過時服務
允許他重新部署客戶端配置,然後點擊立即重啓
等個1-2幾分鐘,重啓成功後的效果如下
點擊完成回到主頁面,可以看到沒有過期配置需要重啓的提示圖標了
但是發現hdfs旁邊還是有個警告,看到很不舒服,這時候我們點擊那個扳手,再點擊suppress,然後在彈出的界面點擊確認即可
這時候在回到主頁面就看到旁邊的警告信息了,剩下的就是一些JVM的配置了,這個按需更改即可
四、使用CDH中HDFS
不管是自己手動搭建官方的Hadoop集羣,還是通過CDH集羣來安裝,操作HDFS都是一樣的,接下來演示一下操作HDFS,登錄到hadoop1節點
-
查看文件
-
創建文件
發現報錯權限不足,創建失敗。在CDH環境中,Hadoop平臺的最高權限用戶是HDFS,屬於supergroup組。默認HDFS是會開啓權限認證的,所以操作時,我們可以設置下當前服務器的Hadoop用戶環境
# 編輯系統環境變量
vim /etc/profile
# 在最後面增加下面這行,然後保存退出
export HADOOP_USER_NAME='hdfs'
# 刷新配置
source /etc/profile
然後再去執行剛剛創建文件夾的命令,發現沒問題了,可以查看下文件列表,發現多出了剛創建的文件夾
五、停止和啓動cm以及cdh集羣
1、停止
先停止CDH集羣,在去停止CM
2、啓動
和停止相反,啓動的時候先啓動CM再去啓動CDH
手冊到此結束啦,謝謝您的觀看