版本規划
安裝VirtualBox
然后直接一路下一步
選擇一下安裝路徑
這時VirtualBox會自動運行,主界面如下 :
安裝VirtualBox Extension Pack
VirtualBox的一些高級特性依賴於VirtualBox Extension Pack,接下來我們安裝它。
在VirtualBox的主界面點擊"全局設定",會彈出全局設定窗口,如下圖所示:
在全局這頂窗口,切換到"擴展"選項卡,然后點擊"添加"按鈕,如下圖所示:
在彈出窗口中找到並選擇Oracle_VM_VirtualBox_Extension_Pack,然后點擊“打開”,如下圖所示:
在彈出窗口中找到並選擇Oracle_VM_VirtualBox_Extension_Pack,然后點擊“打開”
等待一小會安裝成功后會彈出確認窗口,點擊"確定"即可
至此擴展包就安裝好了 。
新建虛擬機
文件夾要專門指定一個空間充足的目錄,類型一定要選Linux,版本一定要選擇Red Hat 64-bit(CentOS
是Red Hat的社區版,64位才可以支持大內存,32 位最多支持4G內存)
我們先制定2G內存,后面可以改的
VMDK類型可以分割為2G的小文件便於分享給別人,或者上傳到網盤,如果你自己搭建可以
選擇VDI
磁盤空間大小選擇"動態分配",然后點擊下一步,如下圖所示
這里關於兩種分配方式特殊說明如下:
⚠注意:這里設置的是可以使用的最大空間,並不是真正的占用,所以可以設置大一些避免后面不夠用。
點擊創建之后,一個叫node01的虛擬機就創建好了
特別注意:沒必要一次性創建一堆虛擬機,如果操作系統需求是一樣的,可以采用虛擬機克隆,后
面會詳述,這樣可以避免很多工作,這也是虛擬機的一大好處 。
虛擬機高級設置
有了一台虛擬機,接下來我們進行一些高級設置以便於后面使用。
選擇要設置的虛擬機,然后點擊“設置”
調節內存大小
網絡設置
切換到“網絡”選項卡,連接方式選擇"橋接網卡",界面名稱實際上是選擇你要橋接的物理網卡
四種網絡連接模式:
安裝操作系統CentOS7
點擊選擇一個虛擬光盤文件
最后我們就能看到光盤插進光驅了,點擊"OK"即可:
啟動虛擬機
這個要默認的就好
這個選擇默認的
禁用Kdump
然后我們就看見 Kdump已經禁用了 :
網絡和主機名設置
自定義分區
用戶設置
修改root用戶密碼
創建hadoop用戶作為管理員
等安裝結束后
配置網絡
測試網絡連接情況
#安裝網絡工具包
yum -y install net-tools
#Ambari用到的下載工具
sudo yum -y install wget
通過軟件SecureCRT進行遠程連接
首先需要在 SecureCRT設置默認路徑:
Options -> Session Options -> Terminal -> Xmodem/Zmodem ->Directories
賦予hadoop用戶sudo權限
在工作中一般不會讓我們通過root用戶來操作,因此我們給hadoop用於賦予sudo權限 :
切換到root用戶
並輸入命令
visudo
這時會進入/etc/sudoers文件的編輯頁面,增加如下配置即可
hadoop ALL=(ALL) NOPASSWD: ALL #以下這行一定要注釋掉以免被覆蓋(hadoop用戶屬於wheel組) #%wheel ALL=(ALL) ALL
配置固定IP
前面我們已經設置為橋接網絡,也就是說虛擬機會把宿主機的指定網卡當做“交換機”,首先我們再次看
下當前IP:
sudo vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
作以下修改
修改完重啟下網絡服務:
sudo service network restart
這個時候需要把遠程終端的地址修改一下
再ping一下baidu,測試一下網絡連接情況
配置hosts文件
sudo vi /etc/hosts
添加以下內容
注意:最前面兩行一定不要刪除,避免出現各種奇怪的網絡問題
防火牆設置
#禁止防火牆開機啟動
sudo systemctl disable firewalld
#關閉防火牆
sudo systemctl stop firewalld
#查看防火牆狀態
sudo systemctl status firewalld
禁用SELinux
檢查SELinux狀態
getenforce
只要返回的不是disabled就說明SElinux打開着
臨時禁用(不需要重啟,但必須操作一下 )
sudo setenforce 0
永久禁用
sudo vi /etc/selinux/config
將SELINUX=enforcing改為 SELINUX=disabled:
umask設置
umask用於設置在Linux上創建新文件或文件夾時授予的默認權限或基本權限。 大多數Linux發行版將
022設置為默認umask值。 umask值022授予新文件或文件夾的755權限。 umask值027授予新文件或
文件夾的750權限。
Ambari,HDP和HDF支持的umask值為022( 等價於0022),027(等價於0027)。 這些值必須在所
有主機上設置。
sudo vim /etc/profile
在最后一行添加
使環境變量生效
文件描述符配置
Linux操作系統會對每個進程能打開的文件數進行限制(某用戶下某進程),Hadoop生態系統的很多組件
一般都會打開大量的文件,因此要調大相關參數(生產環境必須調大,學習環境稍微大點就可以)
可以用如下命令檢查當前用戶下一個進程能打開的文件數:
ulimit -Sn
ulimit -Hn
注意:上面的命令只能檢查當前用戶hadoop。
如果數字小於10000就需要加大
sudo vi /etc/security/limits.conf
添加以下內容
* soft nofile 655350 * hard nofile 655350
重啟使系統生效
sudo systemctl reboot
SSH優化
CentOS7下,每次遠程SSH連接都需要5秒左右,通過如下操作可以優化:
sudo vi /etc/ssh/sshd_config
查找GSSAPIAuthentication 賦值為no
查找UseDNS,賦值為 no(該項默認不啟用的,要把前面的#刪除掉 )
保存退出,並重啟ssh服務
sudo systemctl restart sshd
SSH免密
ssh-keygen cd .ssh cat id_rsa.pub >> authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
安裝Java
配置環境變量
sudo vim /etc/profile
添加以下內容
export JAVA_HOME=/usr/local/jdk export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
使環境變量生效
source /etc/profile
克隆出一台新虛擬機
到目前為止作為,一台標准的干凈的大數據節點就完全創建被設置好了,為了便於后續擴展成多個節
點,我們先基於node01克隆出一個標准虛擬機備用
先將node01關閉
sudo systemctl poweroff
然后
給克隆出的虛擬機命名為node02,選擇一個路徑,Mac地址設定一定要選擇“為所有網卡重新生成mac
地址”,然后點擊“下一步”,
復制過程需要持續幾分鍾
可以看到復制好了。
准備本地yum源
我們的思路是把HDP所需要的RPM安裝包都下載到本地創建一個本地yum源,后續安裝就直接使用本
地yum源,這樣速度比較快,也可以在內網操作
准備HDP相關文件
需要從以下地址下載相關文件:
Ambari相關安裝包:
http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.4.0/ambari-2.7.4.0-centos7.tar.gz
HDP安裝:
http://public-repo-1.hortonworks.com/HDP/centos7/3.x/updates/3.1.4.0/HDP-3.1.4.0-centos7-rpm.tar.gz
HDP-UTIL安裝包:
http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.22/repos/centos7/HDP-UTILS-1.1.0.22-centos7.tar.gz
HDP-GPL文件:
http://public-repo-1.hortonworks.com/HDP-GPL/centos7/3.x/updates/3.1.4.0/HDP-GPL-3.1.4.0-centos7gpl.tar.gz
拿到這些包之后,使用FileZilla上傳到node01的hadoop用戶主目錄下即可
安裝Apache
#安裝Apache sudo yum -y install httpd #講Apache設置為開機啟動 sudo systemctl enable httpd #啟動Apache sudo systemctl start httpd
修改本地的hosts文件
添加以下內容
打開瀏覽器訪問地址: http://node01
HDP安裝包部署到Apache
#移動所有包到/var/www/html/下: cd /var/www/html/ sudo mv ~/ambari-2.7.4.0-centos7.tar.gz /var/www/html/ sudo mv ~/HDP-3.1.4.0-centos7-rpm.tar.gz /var/www/html/ sudo mv ~/HDP-GPL-3.1.4.0-centos7-gpl.tar.gz /var/www/html/ sudo mv ~/HDP-UTILS-1.1.0.22-centos7.tar.gz /var/www/html/
#解壓縮 sudo tar -zxvf ambari-2.7.4.0-centos7.tar.gz sudo tar -zxvf HDP-3.1.4.0-centos7-rpm.tar.gz sudo tar -zxvf HDP-GPL-3.1.4.0-centos7-gpl.tar.gz sudo tar -zxvf HDP-UTILS-1.1.0.22-centos7.tar.gz
#安裝壓縮包清理 sudo rm -r ambari-2.7.4.0-centos7.tar.gz sudo rm -r HDP-3.1.4.0-centos7-rpm.tar.gz sudo rm -r HDP-GPL-3.1.4.0-centos7-gpl.tar.gz sudo rm -r HDP-UTILS-1.1.0.22-centos7.tar.gz
#更改目錄權限
sudo chmod -R ugo+rX /var/www/html/
配置使用本地yum源
在node01上執行: cd /etc/yum.repos.d/ sudo vi ambari.repo
ambari.repo內容如下
[ambari-repo] name=ambari baseurl=http://node01/ambari/centos7/2.7.4.0-118/
gpgcheck=0 enabled=1
驗證
yum repolist
安裝MySQL
下載安裝包
sudo wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
安裝mysql源
sudo yum -y install mysql57-community-release-el7-11.noarch.rpm
安裝mysql服務器
sudo yum -y install mysql-community-server
設置為開機啟動
sudo systemctl enable mysqld
啟動Mysql
sudo systemctl start mysqld
查看mysql狀態
sudo systemctl status mysqld
查看臨時root臨時密碼 sudo grep 'temporary password' /var/log/mysqld.log
利用臨時密碼登錄mysql
現在我們修改root用戶密碼:
set global validate_password_policy=0; set global validate_password_mixed_case_count=0; set global validate_password_number_count=3; set global validate_password_special_char_count=0; set global validate_password_length=3; ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'; exit
安裝MySQL的Java驅動
將MySQL的java驅動mysql-connector-java-8.0.18.jar上傳到node01的用戶主目錄,並移動到一個目錄下: sudo mkdir -p /usr/share/java sudo mv ~/mysql-connector-java-8.0.18.jar /usr/share/java
部署AmbariServer
在node01上執行
sudo yum -y install ambari-server
創建Ambari數據庫資源
Ambari在配置的時候需要MySQL來存儲數據,因此我們來創建相關數據庫資源,進入MySQL
執行如下命令:
set global validate_password_policy=0; set global validate_password_mixed_case_count=0; set global validate_password_number_count=3; set global validate_password_special_char_count=0; set global validate_password_length=3; create database ambari; CREATE USER 'ambari'@'%' IDENTIFIED BY 'bigdata'; GRANT ALL ON ambari.* TO 'ambari'@'%'; FLUSH PRIVILEGES; use ambari; source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql; exit
配置AmbariServer
執行如下命令開始設置Ambari-Server:
sudo ambari-server setup
是否自定義ambari-server的運行用戶
我們保持默認root用戶即可,所以輸入n並回車
在上圖中,我們選擇2,代表自定義java,然后回車
我們需要指定自己安裝的java的路徑/usr/local/jdk,然后回車
上圖提示是否下載並安裝LZO的包,我們輸入y並回車
是否進入數據庫高級設置,我們輸入y然后回車
在選擇數據庫的環節,我們選擇3也就是MySQL,然后回車
MySQL的相關配置我們均采用默認值,默認用戶和db都是ambari,密碼是bigdata,然后回車(它會自
動創建):
我們需要指定MySQL的驅動包所在的路徑/usr/share/java/mysql-connector-java-8.0.18.jar,
然后回車
我們選擇可以遠程連接該數據庫(y),然后回車就配置完畢了
調大node01的內存
先把node01關機
sudo systemctl poweroff
如果你准備一直單機運行可以把內存調整到12G,前提是你的物理宿主機器起碼16G內存
啟動Ambari-Sever
sudo ambari-server start
如果出現錯誤,一定要查看日志
vi /var/log/ambari-server/ambari-server.log
然后訪問以下地址;
用戶名密碼默認是admin/admin,如果看到如下界面就代表ambari真正啟動好了
部署Amabri集群
點擊Ambari主界面中的"Launch Install Wizard",啟動安裝向導
接下來我們要給集群起個名字
版本選擇
接着要把滾動條往下拉,把無用的其他操作系統的倉庫刪掉
只保留redhat7,其他的都刪除掉
最終我們只保留"readhat7"的倉庫,接下來要把直接部署yum本地倉庫的地址填進去,同時不要勾選下
面的兩個高級選項
HDP-3.1 http://node01/HDP/centos7/3.1.4.0-315/
HDP-3.1-GPL http://node01/HDP-GPL/centos7/3.1.4.0-315/
HDP-UTILS-1.1.0.22 http://node01/HDP-UTILS/centos7/1.1.0.22/
我們按照下圖所示注冊主機到Ambari
把node01的私鑰復制過來
上面的私鑰要拷貝完整,一點也不能少,最后一行也不要換行。
點擊右下角按鈕開始注冊,會彈出提示窗口,點擊”CONTINUE“即可
自動開始注冊
點擊這里去查看一些警告
它這里就警告chronyd沒有在1個節點上運行也就是沒在node01上運行,chronyd是CentOS7默認的時
間同步服務(CentOS6的NTP),因為我們暫時一個節點無需時鍾同步,所以不用管,直接點ClOSE。
然后直接點擊右下角的”NEXT“,這時會彈出窗口,問你有警告是否忽略(chronyd的警告),我們選擇”
OK“會自動進入下一步
選擇要安裝的服務
Amabri管大數據的各個組件叫做 Service,在這異步要選擇同時安裝的服務,當然我們也可以先不選后
面再選。
在這里我們選擇安裝下Hadoop相關的服務,其余的服務就取消掉對話框的對勾(它默認選了一堆,一定
要去掉,好多用不到)
在這里要特別注意,在Ambari里Hadoop被當做多個服務例如HDFS、YARN等,如果你選擇的服務依賴
於其他服務他會提示的,你點擊確認后會自動勾選,然后下一步即可 。
分配Mater服務安裝到哪些主機
接下來Ambari會讓你選擇Master服務要安裝到哪些主機,所謂Master服務,是指的各個服務的Master
服務,例如HDFS的Master服務就是namenode,因為我們就一個節點,所以保持不動直接下一步
分配Slave服務和Client安裝到哪些主機
接下來是一些自定義Service的配置,首先會讓你設置一些服務的密碼 ,為了方便,這里統一用admin
這里要注意,隨着前面你選的Service的不同,這里也會不同,點擊”next“會讓你確認一些服務的目錄,
我們先保持默認,直接”next“
然后是確認各個service運行在操作系統的哪個用戶下,我們也保持默認
點擊下一步,會讓我們確認其他的配置,我們保持默認直接點NEXT
注意,這里隨着你前面選擇的service的不同會有很大差異,比如你要選擇了了Hive,它一定會要你輸入
MySQL相關信息,所以不要死記硬背 。
在Review環節我們要仔細檢查之前的配置,沒有問題就點擊”DEPLOY“正式開始部署了
部署過程需要花較長時間,隨時可以看到進度
再部署完服務之后,Ambari會自動啟動服務並進行冒煙測試,測試通過看到如下界面就代表成功安裝
好了,點擊”NEXT“即可
把這邊的進程都每個手動啟動一下,因為剛啟動的時候有些警告
部署HBase
之前在不是Amabri集群的過程中安裝了HDFS、YARN,包括Zookeeper集群,接下來我們通過增加服
務的方式安裝下HBase 。
接下來的步驟就跟我們前面部署Ambari集群的方式稍微有點類似,首先要選擇服務,這里我們當然選
擇HBase然后后"NEXT"(當然也可以一次性選擇多個Service一起部署)。
這一步不用動,因為就一個節點 ,直接next,
分配Slave服務和Client安裝到哪些主機
這一步就勾選RegionServer和Client即可
自定義服務
這一步我們保持配置不變,點“next”
Review環節直接點“DEPLOY
部署啟動與測試
整個安裝過程會持續一段時間,在部署完服務之后,Ambari會自動啟動服務並進行冒煙測試,測試通
過看到如下界面就代表成功安裝好了,點擊”NEXT“即可
部署Hive
Hive的部署過程跟HBase基本一樣,其他服務亦如此,不過Hive的元數據一般選擇存放在MySQL,所
以我們要在MySQL里單獨為Hive創建用戶和庫以便於管理
在node01上,進入MySQL
set global validate_password_policy=0; set global validate_password_mixed_case_count=0; set global validate_password_number_count=3; set global validate_password_special_char_count=0; set global validate_password_length=3; create database hive; CREATE USER 'hive'@'%' IDENTIFIED BY 'hive'; GRANT ALL ON hive.* TO 'hive'@'%'; FLUSH PRIVILEGES; exit
告訴Hive組件MySQL驅動在哪里
sudo ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java-8.0.18.jar
在Ambari主界面按照下圖操作啟動安裝向導
這里我們選擇Hive然后后"NEXT"
這一步不用動,因為就一個節點
這一步就勾選Client即可:
自定義服務
這一步我們保持配置不變,除了hive,我們能看到如下圖的提示
我們點擊“HIVE”選項卡切換到Hive配置頁
在Hive配置頁,我們要切換到DATABASE子選項卡,然后往下滾動頁面去配置數據庫的信息,
測試連接
部署啟動與測試
整個安裝過程會持續一段時間,在部署完服務之后,Ambari會自動啟動服務並進行冒煙測試,測試通
過看到如下界面就代表成功安裝好了,點擊”NEXT“即可
在Ambari界面我們發現因為安裝Hive,后台自動更新了一些服務的配置,因此需要重啟
如果重啟所有服務不行,可以一個個手動重啟的,我就是遇到這樣的問題,我自己一個個服務手動重啟了
Service自動啟動
有時候我們希望托管給Ambari的服務可以自動啟動
擴容到3個節點
在node02的基礎上我們再復制出一個節點node03
注意:千萬不要從node01復制,那樣會特別大而且里面有Ambari
節點網絡配置
配置node02的靜態ip
配置node03的靜態ip
修改完了分別重啟node02和node03的網絡
sudo systemctl restart network
配置node02和node03的主機名
由於是克隆過來的,主機名還是node01,因此我們需要修改
永久修改hostname執行如下命令:
sudo vim /etc/hostname
分別輸入node02 node03
配置hosts文件
sudo vi /etc/hosts
node02和node03防火牆設置
分別進行以下操作
#禁止防火牆開機啟動
sudo systemctl disable firewalld
#關閉防火牆
sudo systemctl stop firewalld
#查看防火牆狀態
sudo systemctl status firewalld
禁用node02和node03 SELinux
分別操作
臨時禁用 sudo setenforce 0
sudo vi /etc/selinux/config
將SELINUX=enforcing改為 SELINUX=disabled:
分別重啟node02和node03
重啟后,在三台機器都配置hosts文件
配置三台機器的SSH免密
先把node02和node03用戶主目錄下的隱藏文件夾.ssh刪掉,這個是復制虛擬機過來
然后分別在node02和node03重新生成
ssh-keygen cd .ssh cat id_rsa.pub >> authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
免密
我們所謂的免密就是拿集群中的一台機器作為管理節點,讓那后讓他可以ssh免密碼到其他節點執行命
令,這對我們維護一個多節點的集群非常有意義。我們當然以node01為管理節點,所以要實現node01
到其他節點的免密
拿到node01的公鑰
cat ~/.ssh/id_rsa.pub
把node01的公鑰添加到node02和node03的
vi authorized_keys
添加到node02的公鑰
添加到node03的公鑰
然后node01分別到node02和node03 ssh連接一次
因為我們需要三個節點都能相互ssh通訊的,因此我們把每個節點的公鑰都相互交換
每個節點的公鑰都賦值
時鍾同步
在三個節點分別執行
sudo ntpdate pool.ntp.org
納入Ambari管理
這一步我們要先把新節點node02-node03納入到Amabri進行管理
接下來進開始在新加的節點上自動安裝ambari-agent了,安裝完畢之后點下一步
配置保持默認