CM搭建Hadoop全分佈式

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 創建父目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章