1.1 環境配置
使用XShell軟件,創建5個會話窗口,五個服務器的地址分別是:
1.1.1 配置主機名、hosts文件
# 主機名
# 配置各節點的主機名
[root@main-master ~]# vim /etc/sysconfig/network
#查看
[root@main-master ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=main-master
# 配置hosts
[root@main-master ~]# vim /etc/hosts
#在配置文件上加各節點IP
# 一定要保留127.0.0.1,否則cm分發會心跳錯誤
127.0.0.1 localhost
1.1.2 配置各節點之間的ssh免密玥
# 在各個節點生成自己的公鑰和私鑰
[root@main-master ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[root@data1 packages]# cd ~
# 將自己的公鑰分發給其他節點,包括自己分發給自己
首先在main-master節點上
[root@main-master ~]# ssh-copy-id -i .ssh/id_rsa.pub main-master
[root@main-master ~]# ssh-copy-id -i .ssh/id_rsa.pub back-master
[root@main-master ~]# ssh-copy-id -i .ssh/id_rsa.pub datanode1
[root@main-master ~]# ssh-copy-id -i .ssh/id_rsa.pub datanode2
[root@main-master ~]# ssh-copy-id -i .ssh/id_rsa.pub datanode3
然後依次在每個節點執行上述命令
1.1.3 安裝jdk環境
# 安裝jdk環境
# rpm 安裝
[root@main-master soft]# rpm -i jdk-8u221-linux-x64_2.rpm
# 環境變量配置
vim /etc/profile
# 在配置文件裏增加
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin
# 使環境變量生效
. /etc/profile
1.1.4 關閉防火牆
#需要注意的是,每次節點掛掉重啓後,都需要關閉防火牆
[root@main-master ~]# service iptables stop
#檢查是否已經關閉
[root@hadoop1 ~]# chkconfig iptables off
1.1.5 SELINUX關閉
[root@main-master ~]# setenforce 0
# SELINUX=disabled
[root@main-master ~]# vi /etc/selinux/config
1.1.6 配置內網ntp服務器
# 選定一臺節點當ntp主服務器,其他節點同步本節點時間
# 修改ntp主服務器配置如下:
[root@main-master ~]# vim /etc/ntp.conf
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
#restrict default kod nomodify notrap nopeer noquery
#restrict -6 default kod nomodify notrap nopeer noquery
restrict default nomodify
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#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 127.127.1.0
fudge 127.127.1.0 stratum 10
# 修改其他服務器ntp配置 # 其他節點的server服務器均註釋,換爲以下內容:
[root@back-master ~]# vim /etc/ntp.conf
[root@datanode1 ~]# vim /etc/ntp.conf
[root@datanode2 ~]# vim /etc/ntp.conf
[root@datanode3 ~]# vim /etc/ntp.conf
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#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 hadoop
#允許時間服務器(上游時間服務器)修改本機時間
restrict hadoop nomodify notrap noquery
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient # broadcast client
# 手動同步時間一次,之後開啓ntp服務自動更新
ntpdate hadoop
# 在所有節點啓動ntp服務
[root@main-master ~]# service ntpd start
Starting ntpd: [ OK ]
# 設置ntp服務開機啓動
[root@hadoop ~]# chkconfig ntpd on
# 查詢ntp服務是否開啓成功
[root@hadoop ~]# ntpq -p
remote refid st t when poll reach delay offset jitter ==============================================================================
*LOCAL(0) .LOCL. 10 l 13 64 1 0.000 0.000 0.000
1.2 創建本地源、並將本地源作爲其他節點的yum源
# 創建本地源
# 將安裝光盤掛載,使用其內的依賴包。
# 創建iso文件夾,和cdron文件夾
mkdir /mnt/iso
mkdir /mnt/cdron
# 將ISO鏡像文件文件上傳至/mnt/iso中
# 將iso文件,掛在在/mnt/cdron下:
mount -o loop /mnt/iso/centos.iso /mnt/cdron
# 將/mnt/cdron目錄下所有的文件複製到/opt/下,即將yum源倉庫放在/opt目錄下
cp -rv /mnt/cdron/* /opt/
# 切換到/opt/目錄下:刪除*.html、刪除CentOS/repodata/TRANS.TBL
cd /opt
rm -rf *.html
rm -rf repodata/TRANS.TBL
# 安裝createrepo工具
## 切換到 /mnt/cdron/Packages 下
## 首先安裝deltarpm、其次python-deltarpm、最後createrepo
## 切換到/opt/repodata/中,複製c6-x86_64-comps.xml的文件名。
## 生成YUM通用數據庫
createrepo -g /opt/repodata/b4e0b9342ef85d3059ff095fa7f140f654c2cb492837de689a58c581207d9632c6-x86_64-comps.xml /opt/
# 創建本地源文件
vi /etc/yum.repos.d/local-yum.repo
# 內容如下:
[local-yum]
name=local-yum
baseurl=file:///opt/
enabled=1
gpgcheck=0
# 先將網絡yum源的配置文件更名(讓其失效)
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
# 清除yum源緩存
yum clean all
# 完成本地源創建
# 將本地源作爲其他節點的yum源
# 在本地源節點上,安裝httpd服務
[root@main-master ~]# yum install -y httpd
# 修改httpd配置,將默認根路徑指向本地源中的opt目錄。
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
DocumentRoot "/opt"
# This should be changed to whatever you set DocumentRoot to.
<Directory "/opt">
# 修改/opt目錄的屬主和屬組爲apache
[root@main-master ~]# chown -R apache.apache /opt/
# 刪除默認的歡迎主頁
rm /etc/httpd/conf.d/welcome.conf
# 重啓httpd服務
service httpd restart
# 完成本地源的http服務搭建
# 將其他節點的yum源修改爲之前的本地源
cd /etc/yum.repos.d
# 將默認的yum源備份即關閉
mv CentOS-Base.repo CentOS-Base.repo.bak
# 新建本地源文件
vim local-yum.repo
# 修改內容爲
[local-yum]
name=local-yum
baseurl=http://main-master
enabled=1
gpgcheck=0
#清楚yum安裝包和緩存
# yum clean all
# yum makecache
1.4 安裝系統依賴包
# 在三個datanode節點均安裝如下依賴包
yum install -y chkconfig python bind-utils psmisc libxslt zlib sqlite cyrussasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb
1.5 安裝mysql
yum install mysql-server
service mysqld start
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
mysql> delete from user where host !='%';
mysql> flush privileges
2. 安裝過程
2.1 創建安裝目錄,並上傳cm壓縮包,並解壓
# 安裝包地址:http://archive.cloudera.com/cm5/cm/5/
# 在所有節點,創建CM的安裝路徑
mkdir /opt/cloudera-manager
# 上傳安裝包到一臺服務器,並解壓
[root@main-master soft]# tar xf cloudera-manager-el6-cm5.12.2_x86_64.tar_2.gz -C /opt/cloudera-manager/
# 並在其他節點執行相同操作
2.2 修改agent配置
[root@main-master cloudera-scm-agent]# pwd
#目錄
/opt/cloudera-manager/cm-5.12.2/etc/cloudera-scm-agent
# 修改默認的cm服務端節點,本例中是main-master。
[root@main-master cloudera-scm-agent]# vim vim config.ini
# Hostname of the CM server.
server_host=main-master
2.3 創建用戶cloudera-scm
# 三個節點均需要創建
useradd --system --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
2.4 創建cdh的倉庫目錄
# 在server節點
mkdir -p /opt/cloudera/parcel-repo
chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
# 在所有agent節點
mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
2.5 配置CM Server數據庫
# 拷貝mysql jar文件到目錄 /usr/share/java/
# 注意jar包名稱要修改爲mysql-connector-java.jar
[root@main-master soft]# cp mysql-connector-java-5.1.26-bin.jar /usr/share/java/mysql-connector-java.jar
# 連接server上的mysql數據庫,建立一個msyql用戶 # cmadmin - 123456
mysql> grant all on *.* to 'cmadmin'@'%' identified by '123456' with grant option;
# 執行CM數據庫配置腳本
cd /opt/cloudera-manager/cm-5.4.3/share/cmf/schema/
格式:數據庫類型、數據庫、數據庫服務器、用戶名、密碼、cm server服務器
[root@main-master schema]# ./scm_prepare_database.sh mysql cmtemp -h main-master -ucmadmin -p123456 --scm-host main-master scm scm scm
2.6 將cdh文件,放入server節點的本地倉庫中
[root@main-master parcel-repo]# pwd /opt/cloudera/parcel-repo
[root@main-master parcel-repo]# ll /opt/soft/
[root@main-master parcel-repo]# mv /opt/soft/CDH-5.12.2-1.cdh5.12.2.p0.4-el6.parcel* ./
[root@main-master parcel-repo]# mv /opt/soft/manifest.json ./
[root@main-master parcel-repo]# ll
2.7 將server節點的cm文件手動分發到其他節點
[root@main-master soft]# pwd
#目錄
/opt/soft
[root@main-master soft]# scp cloudera-manager-el6-cm5.12.2_x86_64.tar_2.gz back-master:`pwd`
[root@main-master soft]# scp cloudera-manager-el6-cm5.12.2_x86_64.tar_2.gz datanode1:`pwd`
[root@main-master soft]# scp cloudera-manager-el6-cm5.12.2_x86_64.tar_2.gz datanode2:`pwd`
[root@main-master soft]# scp cloudera-manager-el6-cm5.12.2_x86_64.tar_2.gz datanode3:`pwd`
[root@main-master cloudera-scm-agent]# pwd
#目錄
/opt/cloudera-manager/cm-5.12.2/etc/cloudera-scm-agent
[root@main-master cloudera-scm-agent]# scp config.ini back-master:`pwd`/
[root@main-master cloudera-scm-agent]# scp config.ini datanode1:`pwd`/
[root@main-master cloudera-scm-agent]# scp config.ini datanode2:`pwd`/
[root@main-master cloudera-scm-agent]# scp config.ini datanode3:`pwd`/
2.8 啓動CM Server、Agent
# Sever首次啓動會自動創建表以及數據,不要立即關閉或重啓,否則需要刪除所有表及數據重新安裝
# 在server端,啓動server
[root@main-master init.d]# pwd
#目錄
/opt/cloudera-manager/cm-5.12.2/etc/init.d
[root@main-master init.d]# ll
[root@main-master init.d]# ./cloudera-scm-server start
# 在所有agaent節點,啓動agent
[root@main-master init.d]# ./cloudera-scm-agent start
#新開一個main-master命令窗口 去日誌查看初始化進程
[root@main-master cloudera-scm-server]# pwd
#目錄
/opt/cloudera-manager/cm-5.12.2/log/cloudera-scm-server
[root@main-master cloudera-scm-server]# tail -f cloudera-scm-server.log
# 當看到jetty服務啓動時,說明server啓動成功;
# 查看 hadoop:7180頁面
# 用戶名和密碼均爲 admin
# 如果失敗,則去mysql刪除上步中的temp數據庫,重新開始初始化
3 CM安裝配置
在 main-master:7180 頁面中,選擇 Cloudera Express 免費版。
如果之前只啓動了server,那麼需要在本頁面搜索其他主機,進行集羣劃分。
由於我們自己啓動了agent,那麼這裏會出現“管理的主機”,勾選構成集羣即可。
此處選擇安裝的cdh的源,以及cdh的安裝版本。
然後會自動將cdh文件分發到個節點,進行安裝和配置
安裝完進入下一步
3.1、主機檢查
進行主機檢查,會顯示集羣中存在的問題。一一進行解決。
1. Cloudera 建議將 /proc/sys/vm/swappiness 設置爲最大值 10 。當前設置爲 60 。使用 sysctl 命令在運行時更改該設置並編輯 /etc/sysctl.conf ,以在重啓後保存該設置。您可以 繼續進行安裝,但 Cloudera Manager 可能會報告您的主機由於交換而運行狀況不良。
# 在每個節點都執行如下語句
[root@main-master init.d]# echo 10 > /proc/sys/vm/swappiness
2. 已啓用透明大頁面壓縮,可能會導致重大性能問題。請運行
echo never > /sys/kernel/mm/transparent_hugepage/defrag 和 echo never > /sys/kernel/mm/transparent_hugepage/enabled 以禁用此設置,然後將同一命令添加到 /etc/rc.local 等初始化腳本中,以便在系統重啓時予以設置。
# 在每個節點都執行如下語句
[root@main-master init.d]# echo never > /sys/kernel/mm/transparent_hugepage/defrag [root@main-master init.d]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 並將如上兩條語句寫入到如下文件中
[root@main-master init.d]# vim /etc/rc.local
3.2、最小規模集羣
最小規模的集羣包含:
hdfs 、yarn、zookeeper
因此我們勾選自定義組件如下:
3.3 開啓高可用(ha)
選中hdfs選卡,開啓高可用。
輸入集羣服務名稱。
選擇集羣的兩個namenode節點和journal節點。
這裏我們選擇三臺datanode來安裝jn節點。
進行ha模式的搭建,會報namenode的格式化失敗,由於namenode已經格式化了一次並運行了,所以 會失敗,但並沒有影響。
完成搭建
此時可以看到,我們設置的main-master和back-master的50070端口都已經打開。而且一個處於active 狀態,一個處於standby。
集羣中的secondary namenode角色已經消失。
至此,高可用的最小模式的hdfs框架已經搭建完成。
每次登陸服務器前,進行以下操作。然後登陸ip:7180
可以查看組件的運行狀況
啓動配置過程中遇到的問題:
啓動Hadoop時候datanode沒有啓動的原因及解決方案
啓動YARN時,ResourceManager 和 NodeManager報錯 Error found before invoking supervisord dictionary update s
Canary 測試無法爲 /tmp/.cloudera_health_monitoring_canary_files 創建父目錄