CDH5.8.2最安裝詳細教程


1 軟件准備

安裝環境:系統是CentOS7,64位,安裝過程中的所有軟件需適應這個系統。本文是使用root用戶安裝。

使用linux命令可查看自己的操作系統:

注意:如果在虛擬機上安裝CentOS7,使用了最小安裝,在啟動CM的時候可能可能會報pstree找不到的錯誤。

1 [root@master ~]# uname -a
2 Linux master 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

注意:本文中的linux命令如果直接復制執行容易導致不可用。

整體把握:對所有節點:解壓cm到/opt目錄下,解壓后會生成兩個目錄

1、cloudera  

2、cm-5.8.2

其中cloudera目錄下有兩個空目錄csd 和 parcel-repo ,其中parcel-repo是用來存放parcels(三個)文件的

或者也可以僅在master上解壓,然后scp到其它節點。

所以,master需要手動安裝的是CM和parels(三個文件), 而slave只需要安裝CM, 在CDH初始化的過程中會自動把parces等文件復制到slave節點上。

集群節點設定:

master,slave01 ,slave02,slave03

1.1 離線下載CDH和CM軟件包

以下軟件最好先離線下載好:

(1)到官網下載CDH的parcels,包括三個文件(每個版本都需要對應的以下三個文件),這三個文件是CDH主程序運行包,所有hadoop框架就在這些包中,僅需要在hadoop集群上的master節點上安裝的:

CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel

CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha1

manifest.json

(2)在官網下載CDH管理包CM,這個是在hadoop集群的所有節點上都需要安裝的管理集群的軟件包。

cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz

(3) CDH依賴jdk,需要下載比較新的版本的jdk,本安裝使用1.8版本:需要在hadoop集群的所有節點上安裝jdk。

jdk-8u45-linux-x64.tar.gz

(4)安裝mysql數據庫服務,至少需要一個節點安裝mysql數據庫,為了平衡集群壓力,可以在所有節點安裝msyql服務,把有些服務分散放在其它節點上。 mysql服務的安裝可能有多種方式。本教程通過rpm和yum結合的方式。需要注意:mysql數據庫需要和(5)中的java驅動版本匹配。(可以參考博文:https://www.cnblogs.com/junzi/p/6893122.html

(5)在安裝了mysql服務的節點上安裝mysql數據庫的java驅動程序:

mysql-connector-java-5.1.46.tar.gz

2 基礎環境搭建

2.1 創建一台linux虛擬主機,我的是CentOS7系統

(1)VMware中新建一台虛擬linux電腦。建立過程中一定要記錄下來IP,子網掩碼,網關,DNS 。推薦虛擬機配置如下

(2)開機后使用ip add命令查看ip等信息

(3)更新yum源。執行命令:yum -y update 。如果更新或下載的網速較慢,可以更換為阿里的yum源或網易的yum源,這些國內的源。阿里雲的yum源地址:

文件下載地址: http://mirrors.aliyun.com/repo/Centos-7.repo

備份並替換系統的repo文件

cp Centos-7.repo /etc/yum.repos.d/ 
cd /etc/yum.repos.d/ 
mv CentOS-Base.repo CentOS-Base.repo.bak 
mv Centos-7.repo CentOS-Base.repo
#更新
yum clean all 
#服務器的包信息下載到本地電腦緩存起來
yum makecache 
yum update -y

(4) 修改hostnamemaster 。使用命令:

hostnamectl set-hostname master
#使用hostname命令查看生效
master

 

(5)修改靜態IP。(省略)

(6)關閉防火牆

#查看防火牆狀態:
firewall-cmd --state
#關閉防火牆:
systemctl stop firewalld.service
#禁止防火牆開機啟動: 
systemctl disable firewalld.service
#查看服務是否開機啟動: 
systemctl is-enabled firewalld.service

(7)關閉SELINUX

#查看關閉狀態
/usr/sbin/sestatus -v
#關閉方法
vi /etc/selinux/config
#修改文件里的SELINUX=disabled

(8)打開句柄限制,使用進入編輯配置文件命令:

vi /etc/security/limits.conf
#根據當前用戶名,添加
root soft nproc 20470
root hard nproc 163840
root soft nofile 10240
root hard nofile 655360
root soft stack 10240
#執行命令,編輯login配置文件
vi /etc/pam.d/login
#添加
session    required     pam_limits.so

(9)修改hosts文件。此步驟需要最好提前安排好其它節點的ip和hostname,提前添加到hosts配置文件中。在后面的步驟中能省略

示例:

 

#執行命令: 
vi /etc/hosts
#添加信息:
192.168.30.136 master
192.168.30.137 slave01
192.168.30.138 slave02
192.168.30.139 slave03

 

(10)如果是root用戶,需要各節點的root用戶的ssh。則需要額外修改一下配置:允許root用戶ssh,且不需要密碼。

 

#執行命令:
vi /etc/ssh/sshd_config
#調整PermitRootLogin參數值為yes

 

調整PermitRootLogin參數值為yes,並打開選項

 

 ②PermitEmptyPasswords選項打開,並修改值為yes

 

需要重啟ssh服務:

service sshd restart 
# 或者   
/etc/initd.d/sshd restart

2.2 克隆集群所需的機器

 

將以上2.1操作的主機作為master主機,完整克隆機器master, 克隆出來3台節點機器。三台節點機的hostname分別設定為:slave01 ,  slave02 ,  slave03。對所有節點機器,slave01 ,  slave02 ,  slave03。分別設置靜態ip,執行命令。

#修改主機名
hostnamectl set-hostname slave0x
#修改靜態IP,修改ip分別為137,138,139等指定ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33

2.3 打通master到其它節點的root用戶的ssh

ssh可以使用root用戶,也可以使用非root用戶。本教程使用root用戶安裝,執行root的ssh配置。CDH的ssh配置,僅需要master的單向ssh即可。即:master可以免密訪問其它slave節點。以下所有操作都是使用root用戶。感覺建立一個hadoop用戶,使用hadoop用戶安裝比較好。但是如果使用非root用戶,需要配置非root用戶和root用戶的免密切換。使用root用戶安裝會更順利,不會有權限問題。但即使是root用戶,在CDH中使用命令行的時候,也需要非root用戶,比如hdfs用戶,yarn用戶。

  • 登陸master節點

執行命令,產生密鑰

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  • 登陸其它slave節點
#在當前節點的當前用戶下生成.ssh目錄
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  • 再登陸master節點
#執行遠程復制命令,將master的公鑰放在其它slave節點上
scp ~/.ssh/authorized_keys root@slave0X:~/.ssh/
  • 再登陸所有節點(包括master和slaves)
#修改目錄權限
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

最后,驗證ssh命令是否生效。在master上分別免密登陸所有節點,包括自己。

2.4下載安裝所需輔助軟件或有用工具

所有集群的節點創建好后,並且分配了靜態ip后,開始執行安裝。【注意:軟件安裝需要在所有節點上分別獨立執行。如果是先安裝再克隆的話可能在后續中會報各種驚喜的錯誤】。這些軟件不一定全部會使用到,感興趣可以仔細研究。為了方便,我把這些軟件作為大數據應用上linux的常用軟件。總之,軟件有冗余,也是為了防止在安裝和使用CDH的時候不報錯。自定義安裝某些常用工具,執行命令:

yum install -y openssh-server vim gcc gcc-c++ glibc-headers bzip2-devel lzo-devel curl wget openssh-clients zlib-devel autoconf automake cmake libtool openssl-devel fuse-devel snappy-devel telnet unzip zip net-tools.x86_64 firewalld systemd lrzsz bzip2
#安裝第二批依賴包(即使與前面有重復也不影響)
yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb

 2.5 在所有節點上安裝jdk

需要在集群的所有節點上安裝jdk,【登錄所有節點】在所有節點上操作:

#查看是否自帶OpenJDK:
rpm -qa | grep java
#如果有,卸載自帶的JDK
rpm -e --nodeps 包名

 

開始安裝jdk:

  • 情況1:可以使用rpm安裝包安裝:

     先離線下載rpm安裝包 jdk-8u45-linux-x64.rpm  /usr/local/src中。執行命令:

 

rpm -ivh jdk-8u145-linux-x64.rpm
#-ivh:安裝時顯示安裝進度
#安裝目錄默認在  /usr/java, 配置環境變量在 /etc/profile 文件中,在文件尾部追加環境變量
export JAVA_HOME=/usr/java/jdk1.8.0_145
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 情況2: 使用離線安裝包jdk-8u45-linux-x64.tar.gz

cd /usr/local/src
#上傳安裝包
rz
#解壓
tar –xzf /usr/local/src/jdk-8u45-linux-x64.tar.gz –C /usr/java/
#配置環境變量
vim /etc/profile
#在文件末尾添加配置信息:
export JAVA_HOME=/usr/java/jdk1.8.0_145
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

以上兩種情況保存后刷新,執行命令:

source /etc/profile

完成后,在所有節點上驗證jdk是否安裝成功:執行命令:

 

java -version

 

2.6 安裝MySQL服務

只需要在master節點上安裝mysql服務。CDH的配置依賴mysql數據庫,當然也可以使用Oracle數據庫。

注意:最好在每個節點上都安裝mysql服務,因為有些hadoop的組件的服務依賴數據庫,這樣可以把這個組件的服務安裝到任何一個節點上,分擔master節點的壓力。

 【登陸所有節點,本次在所有節點上都安裝mysql】

#進入資源目錄
cd /usr/local/src
#獲取mysql源安裝包
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 
#安裝mysql源
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
#檢查mysql源是否安裝成功
yum repolist enabled | grep "mysql.*-community.*"
#用yum命令安裝mysql
yum install mysql-community-server
#配置mysql的文件目錄,查看MYSQL配置文件加載順序:
mysqld --help --verbose | grep -A1 -B1 cnf

 

  修改/etc/my.cnf 配置文件內的文件目錄

datadir=/data/mysql/data
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
log-error=/data/mysql/log/mysqld.log
 

 

 

其中:
SQL_MODE:通過對其正確的設置可以完成一些約束檢查的工作,設置時,在配置文件my.cnf 中配置進行全局的設置。
STRICT_TRANS_TALES(嚴格模式):
        只對支持事務的表啟用嚴格模式
NO_AUTO_CREATE_USER:
        禁止GRANT創建密碼為空的用戶。
NO_ENGINE_SUBSTITUTION:
        啟用后,若需要的存儲引擎被禁用或未編譯,則拋出錯誤;未啟用時將用默認的存儲引擎代替,並拋出一個異常。

 創建mysql文件目錄

[root@localhost jar]# mkdir -p /data/mysql/data
[root@localhost jar]# mkdir -p /data/mysql/log

生成首次登錄隨機密碼

mysqld --initialize
通過上面命令會在 /data/mysql/log/mysqld.log 中生成隨機碼,隨機碼用來首次登錄mysql。
ujkq0>4*/yMD

 

 修改mysql 文件目錄所有者為 mysql 用戶

chown -R mysql:mysql /data/mysql

啟動mysql

systemctl start mysqld.service

在使用啟動命令后如果報錯: Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

可能是沒有關閉SELinux。 解決辦法:vim /etc/selinux/config    修改SELINUX=disabled  。然后重啟即可

關閉並重啟mysql

systemctl stop mysqld.service
systemctl start mysqld.service

如果再次啟動報錯,就重啟Linux 系統。

用生成的隨機密碼登錄mysql

mysql -uroot -p'ujkq0>4*/yMD'

登錄后進入mysql 命令行

卸載mysql

如果啟動報錯,根據錯誤查看原因,如果實在解決不了,卸載mysql 重新裝。
查看已經安裝過的組件
rpm -qa | grep -i mysql

 

 

 

 用yum -y remove 卸載所有mysql

yum -y remove mysql57-community-release-el7-11.noarch yum -y remove mysql-community-common-5.7.19-1.el7.x86_64
卸載后再用  rpm -qa | grep -i mysql 查看,直至全部卸載
刪除/data/mysql 目錄
rm -rf /data/mysql

可參考: http://www.cnblogs.com/wy123/archive/2017/06/02/6932166.html

修改ROOT用戶密碼

用生成的隨機密碼登錄進入 mysql 命令行后,需要重置密碼。重置密碼前,先查看validate_password插件是否安裝,可通過查看參數,如果沒有安裝,則輸出將為空。
SHOW VARIABLES LIKE 'validate_password%';

如果不為空,在重置時不想密碼設置得那么復雜。需要設置validate_password_policy 參數:

set global validate_password_policy=0;
這樣,判斷密碼的標准就基於密碼的長度了。這個由validate_password_length參數來決定。
validate_password_length 默認是8所以密碼長度必須大於8。
如果為空,可直接設置密碼,密碼長度可小於8。
設置密碼:
set password=PASSWORD('12345678'); 

 設置完密碼后,需要用新密碼重新登錄

 修改user表,把Host表內容修改為%

進入mysql

use mysql;
update user set host='%' where host='localhost';
-- 刪除root用戶的其他host

 

創建CDH相關數據庫

create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database hue default charset utf8 collate utf8_general_ci; -- 授權: grant all privileges on *.* to 'root'@'%' identified by '12345678' with grant option; flush privileges;

 

 2.7 ntp時鍾同步(必須root用戶)

 集群設置:master是管理機,所有其它slave節點不能連網同步時間,僅通過與master主機連接實現與master的時間同步。在所有節點上安裝ntp服務。在master節點上開通ntp服務器功能,提供同步時間。參考博文:https://www.cnblogs.com/harrymore/p/9566229.html

 【登錄所有節點,包括master和slaves】

(1)檢查ntp是否安裝

rpm -qa|grep ntp

(2)如果沒有安裝,進行安裝

yum -y install ntp

(3)修改ntp配置文件

【登錄master節點】

vi /etc/ntp.conf

修改內容如下:

a) 修改1(授權192.168.1.0網段上的所有機器可以從這台機器上查詢和同步時間)

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 修改為
restrict 192.168.30.0 mask 255.255.255.0 nomodify notrap
#ip地址根據自己的網段進行配置

b) 修改2(集群在局域網中,不使用其他的網絡時間

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 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

c) 添加3 (當該節點丟失網絡連接,依然可以作為時間服務器為集群中的其他節點提供時間同步

server 127.127.1.0
fudge 127.127.1.0 stratum 10

d) 修改/etc/sysconfig/ntpd 文件

vim /etc/sysconfig/ntpd
#增加內容如下(讓硬件時間與系統時間一起同步)
SYNC_HWCLOCK=yes

e) 重新啟動ntpd服務

service ntpd status
service ntpd start
#在master上設置ntpd服務開機啟動:
chkconfig ntpd on

【登錄其它所有slaves節點上】

a) 在slave節點上設置ntpd服務關閉,且關閉開機啟動

#在slave節點上設置ntpd服務關閉,且關閉開機啟動
service ntpd stop
chkconfig ntpd off

b) 其它slave節點的同步設置,同步master的時間 【必須root用戶操作】

#配置10分鍾與時間服務器同步一次
crontab –e
#編寫定時任務如下:
*/10 * * * * /usr/sbin/ntpdate master
#修改任意機器的時間,驗證同步功能
date -s "2017-9-11 11:11:11"
#十分鍾后查看機器是否與時間服務器同步
date

 遇到的問題:以上ntp服務配置完成后,可能在CM管理界面會出現slaves節點的 “時鍾偏差” 報錯提示。雖然設定了定時同步時間,但是CM會檢查每個節點上的ntp服務是否使用,因為以上的配置中我們關閉了。之所以關閉也是因為,如果開啟了ntp服務,那么在從節點上執行ntpdate master的命令時會報錯:

[root@slave01 ~]# ntpdate master
19 Dec 22:07:14 ntpdate[9787]: the NTP socket is in use, exiting

可能是ntp的端口沖突問題。解決辦法:

#step1: 將定時任務的命令修改為
*/10 * * * * /usr/sbin/ntpdate -u master
#step2:開啟slaves所有節點的ntp服務並開機啟動
service ntpd start
chkconfig ntpd on

以上兩步操作完稍等片刻,CM界面就不報錯了。

參考:https://blog.csdn.net/qq_28351465/article/details/82995616

3 Cloudera Manager的安裝

CM用於管理集群,需要將cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz   上傳到所有節點。

3.1 上傳並解壓CM安裝包

【登錄所有節點,包括master和slaves】,所有集群中的機器都需要安裝。

解壓cm到/opt目錄下,生成兩個目錄

1、cloudera   2、cm-5.8.2 。

其中cloudera目錄下有兩個空目錄csd 和 parcel-repo ,其中parcel-repo是用來存放CDH主程序的,即parcels(三個)文件。也可以僅上傳到master后再解壓,然后scp到其它節點的 /opt目錄下

#先上傳到master節點的/usr/local/src目錄下
#切換目錄
cd /usr/local/src
#上傳
rz
#scp到其它所有機器上的/usr/local/src目錄下
#復制到slave01節點
scp /usr/local/src/cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz root@slave01:/usr/local/src/
#復制到slave02節點
scp /usr/local/src/cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz root@slave02:/usr/local/src/
#復制到slave03節點
scp /usr/local/src/cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz root@slave03:/usr/local/src/
#解壓所有的CM包在各自節點的/opt目錄下,在所有節點上執行
tar -xzf /usr/local/src/cloudera-manager-centos7-cm5.8.2_x86_64.tar.gz -C /opt

 

3.2 創建cloudera-scm用戶

【登錄所有節點】,在所有節點上創建cloudera-scm用戶

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

         --system 創建一個系統賬戶

         --home 指定用戶登入時的主目錄,替換系統默認值/home/<用戶名>

         --no-create-home 不要創建用戶的主目錄

         --shell 用戶的登錄 shell 名

         --comment 用戶的描述信息

        注意:

         Cloudera Manager默認用戶為cloudera-scm,創建具有此名稱的用戶是最簡單的方法。 安裝完成后,將自動使用此用戶

3.3 配置CM-agent

【登錄所有節點】

vim /opt/cm-5.8.2/etc/cloudera-scm-agent/config.ini
#修改server_host為master
server_host=master

3.4 配置CM的數據庫

【登錄所有安裝mysql的節點】

 添加mysql connector包

#先登錄master
cd /usr/local/src
rz
#上傳mysql-connector-java-5.1.46.tar.gz
#分發到其它節點
scp /usr/local/src/mysql-connector-java-5.1.46.tar.gz root@slave01:/usr/local/src
scp /usr/local/src/mysql-connector-java-5.1.46.tar.gz root@slave02:/usr/local/src
scp /usr/local/src/mysql-connector-java-5.1.46.tar.gz root@slave03:/usr/local/src
#對所有節點解壓
tar -xzf mysql-connector-java-5.1.46.tar.gz
#移動jar包
mkdir /usr/share/java
cd /usr/local/src/mysql-connector-java-5.1.46
cp mysql-connector-java-5.1.46-bin.jar /usr/share/java
cd /usr/share/java
#必須修改為名稱為mysql-connector-java.jar的包名,否則找不到
ln -s mysql-connector-java-5.1.46-bin.jar mysql-connector-java.jar

【只登錄master】,集群中cm庫只能有一個。所以只在一個節點上操作

在mysql中創建cm庫

執行命令:

/opt/cm-5.8.2/share/cmf/schema/scm_prepare_database.sh mysql cm -hmaster -uroot -p12345678 --scm-host master scm scm scm

參數解釋依次是:

mysql數據庫用的是mysql,如果安裝過程中用的oracle,那么該參數就應該改為oracle

cm:表示在mysql數據庫中創建cm database

-h:Database host 表示安裝數據庫的主機名 (我是在在master上安裝的MySQL數據庫,所以我指定了master)

-u: mysql數據庫用戶名

-p: mysql數據庫登錄密碼

--scm-host master :CMS的主機,一般是和mysql安裝的主機是在同一個主機上

最后三個scm參數是:數據庫名,數據庫用戶名,數據庫密碼 

執行完創建cm庫的命令后,只有當看到All done, your SCM database is configured correctly!這句話時,表明命令操作是成功的.在執行這行命令后,會遇到很多問題,最常見到的是用戶權限問題,這個自行百度吧,或者查看我的另一篇博客:安裝CDH過程中所遇到的問題整理。

 3.5 將cdh三個安裝文件上傳到master的parcel-repo目錄下

【登錄master節點】

cd /opt/cloudera/parcel-repo/
rz
#上傳CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel
#上傳CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha1
#上傳manifest.json
#修改CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha1的文件名為CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha
mv CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha1 CDH-5.8.2-1.cdh5.8.2.p0.3-el7.parcel.sha

3.6 啟動CM:

【在master節點上】啟動cm-server

[root@master parcel-repo]# /opt/cm-5.8.2/etc/init.d/cloudera-scm-server start
Starting cloudera-scm-server:                              [  確定  ]
[root@master parcel-repo]# 

【在所有節點上,包括master和slaves】啟動cm-agent

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

注意:啟動過程非常慢,Manager 啟動成功需要等待一段時間,過程中會在數據庫中創建對應的表需要耗費一些時間。

一段時間過后,可以使用下列命令在master上查看7180端口是否已經啟動:  netstat -anp | grep 7180   如果查看被占用則表示安裝成功了!!!

進入瀏覽器輸入地址,例如:http://192.168.30.136:7180  可以登錄cm管理集群,安裝cdh子功能。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM