SOP - 封閉網路環境中安裝設定 CDH
安裝設定CDH叢集
- 1Objective
- 2Definition
-
3Scope
- 3.1環境基本資訊
-
4Planning before Work
- 4.1CDH安裝環境用的硬體最低規格
-
4.2硬碟分割規劃原則
- 4.2.1硬碟分割實際規劃範例(HDD: 100 GB)
- 4.3Cluster規劃原則
- 4.4Hadoop角色服務配置原則
-
5Hardware Preparation
- 5.1設定封閉式網路環境
-
5.2建置虛擬機器
- 5.2.1基礎環境
- 5.2.2設定可連接外部網路的主機
-
6OS Installation
- 6.1安裝作業系統
-
6.2設定CDH環境需要的作業系統
- 6.2.101. 網路介面檢查
- 6.2.202. 所有主機與IP皆能互認
- 6.2.303. 設定系統語系
- 6.2.404. 移除 OpenJDK
- 6.2.505. 關閉 SELinux 與 Linux Firewall
- 6.2.606. NTP修改並啟動
- 6.2.707. 關閉 IPv6功能
- 6.2.808. 修改 CentOS Linux 參數 vm.swappiness Linux Kernel Parameter
- 6.2.909. 增加 disable defrag 設定
- 6.2.1010. 關閉虛擬網路卡
- 6.2.1111. 確認修改皆正確後,請重新開機
-
7Repo Server Buildup
-
7.1Pre-requisite
- 7.1.1Resource List
- 7.1.2Environment Pre-check list
-
7.2Repo Server Setup
- 7.2.1將所有安裝檔案上傳到Repo Server
- 7.2.2安裝HTTPD服務
- 7.2.3安裝CREATEREPO程式
- 7.2.4建置作業系統安裝檔儲存庫(OS Install Packages Repository)
- 7.2.5建置ClouderaManagerService安裝檔儲存庫(CMS Packages Repository)
- 7.2.6建置CDH Parcel檔儲存庫(CDH Parcel Repository)
- 7.2.7(未裝過)建置工具安裝包儲存庫(Tool Package Repository)
- 7.2.8最後Repo Server驗證
-
7.3Repo Client Setup
- 7.3.1設定客戶端使其正確使用「作業系統安裝檔儲存庫」
- 7.3.2設定客戶端使其正確使用「CMS Repository」
- 7.3.3Repo Client驗證
- 7.4重新開機
-
7.1Pre-requisite
-
8External Database Installation (PostgreSQL)
- 8.1確認需求的資料庫版本(PostgreSQL)
- 8.2安裝PostgreSQL
- 8.3設定PostgreSQL
- 8.4新增DB
- 8.5離開並重啟PostgreSQL
- 8.6驗證
-
9Cloudera Hadoop (CDH) Wizard Installation
- 9.1安裝Oracle JDK
-
9.2安裝CM Server & CM Agent
- 9.2.1安裝 CM Server
- 9.2.2安裝 CM Agent
- 9.2.3設定並啟動 CM Server & CM Agent
- 9.2.4驗證
- 9.3CDH Wizard安裝畫面
-
10Verification
- 10.1基本驗證
-
10.2功能性驗證
- 10.2.1HDFS
- 10.2.2YARN
- 10.2.3Impala
- 10.2.4Hive
- 10.2.5HBase
-
10.3效能驗證
- 10.3.1Network IO
- 10.3.2Disk IO
- 10.3.3HDFS
- 10.3.4MapReduce
Objective
在封閉網路環境安裝設定CDH叢集。
Definition
- 封閉網路環境:無網際網路存取權限之環境。
- $表示可自訂的變數,無限制,其中XXX可代表任意字元。
Scope
安裝環境基本資訊
項目 |
說明 |
|
1 |
ESXi機器 |
Taipei |
2 |
作業系統 |
CentOS 7.3 x86_64-Everything-1611 |
3 |
CDH網路環境 |
在封閉式網路環境 |
4 |
外部資料庫 |
Yes, PostgreSQL 9.2.18 (CentOS 7.3 built-in version) |
5 |
Repo server |
Yes (build on Master Host-01) |
6 |
CDH version |
5.7~5.14 |
7 |
Cluster Number |
Total 5 hosts
|
Planning before Work
CDH 測試環境最低硬體規格
不適合用來執行真實的資料處理活動,建議作為練習環境建置使用。
Master Host |
Worker Host |
||
1 |
CPU |
1 |
1 |
2 |
Memory |
16 GB |
16 GB |
3 |
HDD |
100 GB |
100 GB |
硬碟分割規劃原則
檔案系統掛載點 |
Partition 容量 |
|
Master Host |
Worker Host |
|
/boot |
200 MB |
|
swap |
8 GB (測試環境) |
|
/ |
最小容量必須>=20GB |
|
/var |
剩餘的60% |
剩餘的40% |
/tmp |
剩餘的40% |
剩餘的60% |
硬碟分割實際規劃範例(HDD: 100 GB)
檔案系統掛載點 |
Partition 容量 |
|
Master Host |
Worker Host |
|
/boot |
200 MB |
|
swap |
8 GB |
|
/ |
40 GB |
|
/var |
31.2 GB |
20.6 GB |
/tmp |
20.6 GB |
31.2 GB |
Cluster規劃原則
Host |
hostname |
Main service |
Master Host-01 |
NameNode01 |
|
Master Host-02 |
NameNode02 |
|
Worker Host-01 |
DataNode01 |
Hadoop worker roles service |
Worker Host-02 |
DataNode02 |
Hadoop worker roles service |
Worker Host-03 |
DataNode03 |
Hadoop worker roles service |
Hadoop角色服務配置原則
Host |
hostname |
Hadoop/Cloudera Service Role |
Master Host-01 |
NameNode01 |
|
Master Host-02 |
NameNode02 |
|
Worker Host-01 |
DataNode01 |
|
Worker Host-02 |
DataNode02 |
|
Worker Host-03 |
DataNode03 |
|
Hardware Preparation
設定封閉式網路環境
- 登入ESXi主機『Taipei』
-
設定『資源集區』
-
在主機『$』之下建立『資源集區』:
- 名稱為『$』
- CPU資源共用率為『正常/ 保留0 / 可擴充的保留/ 無限制』
- 記憶體資源共用率為『正常/ 保留0 / 可擴充的保留/ 無限制』
-
在主機『$』之下建立『資源集區』:
-
設定『封閉網路環境(vSwitch)』
- 在主機『$』之下,右側『組態』分頁之中,點選『硬體』區塊中的『網路功能』,而後並在右上角按『新增網路』
- 連線類型:『虛擬機器』
- 選擇『建立vSphere Standard Switch』並移除勾選所有網路卡,會在下面的預覽看到實體介面卡為『無介面卡』。
- 網路標籤輸入為『$』
- 在『預覽』中確認其設定後按下『完成』
- 驗證:回到『組態』分頁,,點選『硬體』區塊中的『網路功能』,而後往下捲動並找到方才設定的vSwitch。
建置虛擬機器
- N:有N台虛擬機器需要被建置
- 硬體的規格(CPU / Memory / HDD)如上述章節『Planning before Work - CDH安裝測試環境用的硬體規格』
基礎環境
點選主機『$』並在其右側頁面中選擇『建立新的虛擬機器』,詳細設定如下,此動作在N台虛擬機上重複
- 組態:自訂
- 名稱:『$』
- 儲存區:『datastore1』
- 虛擬機器版本:『8』(Note: 以當下最新的版本為主)
- 客體作業系統:『Linux』& 版本:『CentOS 4/5/6/7 (64-bit)』
- 虛擬通訊端數目:『1』& 每個虛擬通訊端的核心數目:『1』
- 記憶體大小: 16 GB
- 網路連線:『1』,NIC 1選擇『$』,介面卡:『E1000』
- SCSI控制器:『LSI Logic 平行』
- 磁碟:『建立新的虛擬硬碟』
- 磁碟大小:『100 GB』,磁碟佈建:『完整佈建消極式歸零』,位置:『與虛擬機器儲存一起』
- 虛擬裝置節點:『SCSI (0:0)』,模式:不勾獨立
- 再次檢視以上資訊,無誤後按下『完成』
設定可連接外部網路的主機
- 從ESXi Client上選擇一台主機當作跳板機,從外部直接連線。
- (使用Master Host的第一台當作範例)
-
在Master Host的第一台,選擇『編輯設定』,新增另一張網路卡
- 『網路標籤』選擇『${VM Network}』 (${VM Network} 為ESXi主機可以外連的網路名稱)
- 介面卡:『E1000』
- 按下『確定』即可
OS Installation
安裝作業系統
以下步驟所有虛擬機皆相同
- 當作業系統ISO檔上傳到ESXi的主機內資料夾存放
- 在所有虛擬機上掛載ISO檔
- 將所有虛擬機器開機
- 開機畫面中,選擇『Install CentOS Linux 7』
-
進入CentOS的安裝畫面,詳細設定如下(以下只列出有改的,其他使用預設)
- 語言:『English (US)』
- DATE&TIME:『Asia/ Taipei』
- SOFTWARE :『Local media』
- SOFTWARE SELECTION:『GNOME Desktop』
-
INSTALLATION DESTINATION:在『Other Storage Options』下選擇『I will configure partitioning』
- 接著會進入硬碟分割的畫面,partitioning scheme選擇『Standard Partition』
-
硬碟分割容量請參考章節『Planning before Work - 硬碟分割規劃』,表格『硬碟分割實際規劃範例(HDD: 100 GB)』
- 裝置類型:『標準分割區』
- 檔案系統:『xfs』
- 更詳細的操作方式可參考鳥哥的硬碟分割操作
- 設定root帳號密碼:『$』&使用者帳號密碼:『$/ $』(勾選『Mark this user administrator』)
- 重開機
- 確認可以登入
- 關機,並卸載ISO檔
設定CDH環境需要的作業系統
- 以下步驟不管是否為虛擬機或實體機,皆相同。
- 以下步驟皆使用root帳號。
- 以下步驟基本上為全部的機器皆要設定,除非有特別指名。
01. 網路介面檢查
關掉NetworkManager
CMD
systemctl disable NetworkManager.service ;
systemctl stop NetworkManager.service ;
chkconfig network on # 因為network不是標準的 systemd 的程序
# 驗證指令
systemctl is-active NetworkManager.service ;
systemctl is-enabled NetworkManager.service
設定網路介面如下
- 修改網路卡設定檔(範本如下),路徑為/etc/sysconfig/network-scripts/
vi ifcfg-XXX (只有在對外跳板機需要設定)
DEVICE=ens34 # 不變
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no # 這個很重要,不然會怪怪的,明明有設定卻無效
IPADDR=192.168.1.111 # 此為連外網路的IP
NETMASK=255.255.255.0
GATEWAY=192.168.1.1 # 連外網路的Gateway
DNS1=8.8.8.8 # 此為連外網路的DNS
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT=no
vi ifcfg-YYY (所有主機皆要設定)
DEVICE=ens32 # 不變
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no # 這個很重要,不然會怪怪的,明明有設定卻無效
IPADDR=$ # 此為內部IP,因為是封閉式網路,所以可以自行決定範圍
NETMASK=255.255.255.0
DNS1=$ # 指向Repo server,要用內部IP
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT=no
修改主機名稱檔案(/etc/sysconfig/network)
vi /etc/sysconfig/network
HOSTNAME=$
重啟服務
CMD
systemctl restart network
驗證
- 用指令ifconfig檢查所設定的IP是否正確
-
檢查"/etc/resolv.conf"
- Repo Server:確認DNS為8.8.8.8
- 其他主機:確認DNS為$
02. 所有主機與IP皆能互認
請在/etc/hosts加入所有主機與IP
(以下為範例)
vi /etc/hosts
2.2.2.1 namenode01
2.2.2.2 namenode02
2.2.2.3 datanode03
2.2.2.4 datanode04
2.2.2.5 datanode05
驗證
每台主機要互相可以ping的到,但是需要重開機才生效,最後再驗證
CMD
ping -c 10 $
03. 設定系統語系
CMD
export LANGUAGE=en_US.UTF-8 ;
export LANG=en_US.UTF-8 ;
export LC_ALL=en_US.UTF-8
驗證
CMD
locale
04. 移除OpenJDK
檢查現有OpenJDK套件 (若一定要使用Open JDK, 請參考:http://www.athemaster.com/resources/57)
CMD
rpm -qa | grep jdk
移除指令(以下範例指令,實際上要以找到的套件名稱為準)
CMD
yum remove -y java-*-openjdk-* ;
yum remove -y copy-jdk-configs-*
驗證
用以下指令檢查,確認沒有OpenJDK套件被找到
CMD
rpm -qa | grep jdk
05. 關閉 SELinux 與Linux Firewall
檢查
用以下指令確認Firewall服務的狀態,預設應該為啟動
CMD
systemctl is-active firewalld
檢查檔案/etc/sysconfig/selinux,預設為enforcing
cat /etc/sysconfig/selinux
SELINUX=enforcing
關閉SELinux
CMD
sed -i 's/^SELINUX.*/SELINUX=disabled/' /etc/selinux/config
關閉Linux Firewall
CMD
systemctl stop firewalld ;
systemctl disable firewalld
驗證
以下指令確認Firewall服務沒有被啟動
CMD
systemctl is-active firewalld ;
systemctl is-enabled firewalld
檢查檔案/etc/sysconfig/selinux,為disable
cat /etc/sysconfig/selinux
SELINUX=disabled
06. NTP修改並啟動
- 目的:選一台主機當ntp server,其他台(NTP Client)則指到ntp server。
- NTP Server上也要設置NTP Client
檢查
以下指令確認NTP服務的狀態
CMD
systemctl is-active ntpd
在NTP Server上修改/etc/ntp.conf,內容如下
vi /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 127.127.1.0
fudge 127.127.1.0 stratum 8
在NTP Client上修改/etc/ntp.conf,內容如下
vi /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 $
重啟服務
CMD
systemctl enable ntpd ;
systemctl start ntpd
驗證
1.以下指令確認NTP服務有被啟動
CMD
systemctl status ntpd ;
# 也可以用以下兩個指令檢查
systemctl is-active ntpd ;
systemctl is-enabled ntpd
2.檢查NTP,應該會看到同步的資訊,範例如下
CMD
[kenlin@namenode01 ~]$ ntpstat
synchronised to local net at stratum 9
time correct to within 11 ms
polling server every 64 s
3.另一種方式檢查NTP,指令為ntpq -p
3.1 NTP Server端會看到類似以下的資訊,remote為LOCAL
CMD: ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*LOCAL(0) .LOCL. 8 l 62 64 377 0.000 0.000 0.000
3.2 NTP Client端會看到類似以下的資訊,remote為$
CMD: ntq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*namenode01 LOCAL(0) 9 u 102 1024 377 0.180 -0.002 0.026
07. 關閉IPv6功能
檢查
(預設應為0)
cat /proc/sys/net/ipv6/conf/all/disable_ipv6 ;
cat /proc/sys/net/ipv6/conf/default/disable_ipv6
vi /etc/sysctl.conf
應為找不到,預設無此設定
關閉IPv6設定
CMD
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 ;
echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6 ;
echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf ;
echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf ;
sed -i 's/^udp6/#udp6/' /etc/netconfig ;
sed -i 's/^tcp6/#tcp6/' /etc/netconfig
驗證
應為1
cat /proc/sys/net/ipv6/conf/all/disable_ipv6 ;
cat /proc/sys/net/ipv6/conf/default/disable_ipv6
cat /etc/netconfig
udp6 & tcp6那兩行被標註掉
vi /etc/sysctl.conf
# 新增了以下兩行
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
08. 修改CentOS Linux 參數vm.swappiness Linux Kernel Parameter
檢查
(預設應為1)
cat /proc/sys/vm/swappiness
(預設應為1)
sysctl -a |grep vm.swappiness
vi /etc/sysctl.conf
應為找不到,預設無此設定
修改參數
CMD
sysctl -w vm.swappiness=0 ;
echo 0 > /proc/sys/vm/swappiness ;
echo "vm.swappiness=0" >> /etc/sysctl.conf
驗證
應為0
cat /proc/sys/vm/swappiness
應為0
sysctl -a |grep vm.swappiness
vi /etc/sysctl.conf
vm.swappiness=0
09. 增加disable defrag 設定
根據Cloudera Hadoop的建議,只需要關閉THP defrag即可,因為會影響到效能跟工作負載,請參考 Optimizing Performance in CDH
檢查
cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
disable defrag 設定
CMD
echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
在開機時關閉此設定
CMD
chmod +x /etc/rc.d/rc.local ;
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.local
驗證
cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
cat /etc/rc.local
#確認有以下這行
echo never > /sys/kernel/mm/transparent_hugepage/defrag
10. 關閉虛擬網路卡
- CentOS 7之後的版本建議執行,因為CentOS 7之後的版本預設會開啟虛擬網路卡,則會造成CDH安裝後的警訊。
- CentOS在選擇『KVM and/or "Gnome Boxes" 』可能會安裝虛擬網卡,目的可以做為路由器使用NAT不同網段,但不在我們需求內因此可關閉。
關掉虛擬介面
virsh net-destroy default ;
virsh net-undefine default
驗證
使用指令ifconfig查看,虛擬網路卡(virbr0-nic.2)被拿掉。
11. 確認修改皆正確後,請重新開機
清除快取
CMD
yum clean all
重開機
reboot
驗證
- 再次確認以上設定是否正確
- 每台主機名稱要正確並且要互相可以ping的到,但是需要重開機才生效
CMD
ping -c 5 $
Repo Server Buildup
- 自行下載套件(CMS版本建議比較CDH新,因為升級不用停服務,再有license的情況下)
- 選擇一台當Repo Server,Repo Client全部皆要設定(包括Server那台)
- createrepo是一個主要工具
Pre-requisite
Resource List
實際安裝版本需參考專案資源列表(Project Resource List)
-
OS安裝資源
- 安裝光碟或ISO檔
- CMS安裝資源
-
CDH安裝資源
- 下載檔:CDH Parcel和CDH Parcel的Json檔
-
下載點語法:
- http://archive-primary.cloudera.com/cdh5/parcels/$/CDH-$.cdh$-$.parcel
- http://archive-primary.cloudera.com/cdh5/parcels/$/manifest.json
- 範例:
-
工具安裝包資源(若是有需要的才要下載)
- JDK for CM,
-
DB for CM
- MySQL
- Oracle
- PostgreSQL
Environment Pre-check list
每一台機器都必須具備以下條件:
- 需已安裝OpenSSH。
- 關閉防火牆服務。(步驟請參考章節- "OS Installation" , 子章節"設定CDH環境需要的作業系統",第五節"關閉 SELinux 與Linux Firewall")
- 關閉SELinux。(步驟請參考章節 - "OS Installation" , 子章節 "設定CDH環境需要的作業系統",第五節"關閉 SELinux 與 Linux Firewall")
- 網路設定正確。例:網卡,HOSTNAME,Network Config等。
- 停用所有yum.repos.d之設定檔,指令如下
cd /etc/yum.repos.d
mkdir -p /etc/yum.repos.d/old_repo
mv -v *.repo old_repo/
ls -la /etc/yum.repos.d/ # 檢查所有repo檔是否都在"old_repo"資料夾內
Repo Server Setup
將所有安裝檔案上傳到Repo Server
1. 在Repo Server上建立資料匣
CMD
mkdir -p /tmp/res
2.上傳所有於「Resource list」之檔案(CMS安裝資源 / CDH 安裝資源 / 工具安裝包資源)到Repo Server,指令為
CMD
scp -rp $ root@$:/tmp/res/
3.掛載OS安裝資源 (以虛擬機器為例)
3.1 確認光碟ISO的路徑
CMD
df -h
3.2 範例:ISO檔案在"/run/media/kenlin/CentOS 7 x86_64"
Sample Result
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 40G 2.9G 38G 8% /
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.8G 100K 7.8G 1% /dev/shm
tmpfs 7.8G 17M 7.8G 1% /run
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/sda3 32G 12G 21G 36% /var
/dev/sda6 21G 793M 20G 4% /tmp
/dev/sda1 197M 147M 51M 75% /boot
tmpfs 1.6G 20K 1.6G 1% /run/user/1000
/dev/sr0 7.8G 7.8G 0 100% /run/media/kenlin/CentOS 7 x86_64
安裝HTTPD服務
1.檢查有無安裝 (如已安裝,請跳至「確認HTTP已安裝/設定完成/啟動無誤」步驟)
CMD
systemctl status httpd
2.安裝HTTPD,移至$/Packages目錄,爾後使用RPM安裝相關套件。使用以下指令
此為範例,版本要依當時情況而定
cd $/Packages ;
rpm -ivh apr-1.4.8-3.el7.x86_64.rpm ;
rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm ;
rpm -ivh apr-util-ldap-1.5.2-6.el7.x86_64.rpm ;
rpm -ivh httpd-tools-2.4.6-45.el7.centos.x86_64.rpm ;
rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm ;
rpm -ivh httpd-2.4.6-45.el7.centos.x86_64.rpm
3.設定於開機時啟動httpd服務
CMD
systemctl enable httpd
4.啟動httpd服務
CMD
systemctl start httpd
5.確定服務已啟動
CMD
systemctl status httpd
# 也可以分別用以下兩個指令查看
systemctl is-active httpd ;
systemctl is-enabled httpd
安裝CREATEREPO程式
1.檢查服務有無安裝
CMD
rpm -qa|grep createrepo
2.若無,請安裝
CMD
cd $/Packages/
rpm -ivh createrepo-*.rpm
3.檢查是否安裝成功跟版本
CMD
createrepo --version
建置作業系統安裝檔儲存庫(OS Install Packages Repository)
1.建立儲存庫檔案路徑。
CMD
mkdir $
2.複製OS安裝資源從至目的路徑(儲存庫檔案路徑)。
CMD
cp -rfv $/* $
3.設定目的路徑內檔案存取權限。
CMD
chmod -R 777 $
4.設定目的路徑內檔案擁有者及群組。
CMD
chown -R root:root $
5.查是否完整複製至目的地
CMD
diff -r $ $
6.檢查檔案權限、擁有者、群組
CMD
ls -la $
7.確認「作業系統安裝檔儲存庫」設定完成
CMD
wget http://127.0.0.1/centoscd/
建置ClouderaManagerService安裝檔儲存庫(CMS Packages Repository)
1.建立儲存庫檔案路徑
CMD
mkdir -p $
2.移至CM安裝壓縮檔之所在檔案位置。
CMD
cd $
3.解壓縮此檔至目的路徑(儲存庫檔案路徑)。
CMD
tar zxvf $ -C $
4.設定目的路徑內檔案存取權限。
CMD
chmod -R ugo+rX $
5.設定目的路徑內檔案擁有者及群組。
CMD
chown -R root:root $
6.建立Repo
CMD
createrepo $
7.檢查檔案權限、擁有者、群組
CMD
ls -la $
8.確認「ClouderaManagerService安裝檔儲存庫」設定完成
CMD
wget http://127.0.0.1/cm5/
建置CDH Parcel檔儲存庫(CDH Parcel Repository)
1.建立儲存庫檔案路徑
CMD
mkdir -p $
2.移至CDH安裝資源檔之所在檔案位置。
CMD
cd $
3.移動CDH PARCEL及MENIFEST檔案至目的路徑(儲存庫檔案路徑)。
CMD
mv $ $ $
4.設定檔案存取權限。
CMD
chmod -R ugo+rX $
5.設定檔案擁有者及群組。
CMD
chown -R root:root $
6.檢查檔案權限、擁有者、群組
CMD
ls -la $
7.確認「CDH Parcel檔儲存庫」設定完成
CMD
wget http://127.0.0.1/cdh5/
(未裝過)建置工具安裝包儲存庫(Tool Package Repository)
1.建立儲存庫檔案路徑
CMD
mkdir -p $. 2.移至CDH安裝資源檔之所在檔案位置。
CMD
cd $
3.移動Tooll儲存庫檔案路徑
CMD
mv $ $
4.設定檔案存取權限。
CMD
chmod -R ugo+rX $
5.設定檔案擁有者及群組。
CMD
chown -R root:root $
6.檢查檔案權限、擁有者、群組
CMD
ls -la $
7.確認「CDH Parcel檔儲存庫」設定完成
CMD
wget http://127.0.0.1/tools/
最後Repo Server驗證
透過瀏覽器連結Repo路徑,並且可以看到檔案目錄
URL
http://${Reop IP}/centoscd
http://${Reop IP}/cm5
http://${Reop IP}/cdh5
http://${Repo IP}/tools
Repo Client Setup
設定客戶端使其正確使用「作業系統安裝檔儲存庫」
1.建立相對應之「.repo」檔
CMD
cd /etc/yum.repos.d
vi $
1.1 內容為
$
[CentOSCD]
name=CentOSCD
baseurl=http://$/centoscd/ # 要為內部IP
enabled=1
gpgcheck=0
2.確認客戶端設定正確
CMD
yum clean all
yum repolist
設定客戶端使其正確使用「CMS Repository」
1.建立相對應之「.repo」檔
CMD
cd /etc/yum.repos.d
vi $
1.1 內容為
$
[cm]
name=cm
baseurl=http://$/cm5/ # 要為內部IP
enabled=1
gpgcheck=0
2.確認客戶端設定正確
CMD
yum clean all
yum repolist
Repo Client驗證
會顯示各Repo的套件數量,CentOS約有9000多個,而CM為21個。
(以下是範例)
Sample Result
[kenlin@namenode01 ~]$ yum repolist
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
repo id repo name status
!CentOSCD CentOSCD 9,363
!cm cm 21
repolist: 9,384
重新開機
- Repo Server關機
- 移除光碟/ISO檔案
- 將Repo Server開機
External Database Installation (PostgreSQL)
- 此章節步驟不管在虛擬機或實體機上皆相同。
- 外部資料庫建議安裝在跟CM Server同一台(Utility Host or Master Host),以減少除錯的複雜性。(高可用性優先者,可以安裝到其他Host)
- 以下步驟在Master Host-01上執行
確認需求的資料庫版本(PostgreSQL)
1.查詢官方文件(CDH 5 and Cloudera Manager 5 Requirements and Supported Versions),確認待安裝的CDH版本跟資料庫的版本是否支援
2.原則上優先確認作業系統對應的版本。
CMD
yum info postgresql
3.若是符合要求就使用。
安裝PostgreSQL
CMD
sudo yum install -y postgresql-server
設定PostgreSQL
1.初始化
CMD
postgresql-setup initdb
2.編輯/var/lib/pgsql/data/pg_hba.conf
vi /var/lib/pgsql/data/pg_hba.conf
#host all all 127.0.0.1/32 ident
#host all all ::1/128 ident
host all all 0.0.0.0/0 md5
3.編輯/var/lib/pgsql/data/postgresql.conf
vi /var/lib/pgsql/data/postgresql.conf
listen_addresses = '*'
shared_buffers = 256MB
wal_buffers = 8MB
checkpoint_segments = 16
checkpoint_completion_target = 0.9
4.設定開機後開啟PostgreSQL
CMD
systemctl enable postgresql
5.重啟PostgreSQL
CMD
systemctl restart postgresql
新增DB
1.進入DB
CMD
sudo -u postgres psql
2.新增以下各服務的使用者跟資料庫 (role, password, DB)
CMD
postgres=# create role scm login password 'scm';
postgres=# create database scm owner scm encoding 'UTF-8';
postgres=# create role amon login password 'amon_password';
postgres=# create database amon owner amon encoding 'UTF-8';
postgres=# create role rman login password 'rman_password';
postgres=# create database rman owner rman encoding 'UTF-8';
postgres=# create role hive login password 'hive_password';
postgres=# create database metastore owner hive encoding 'UTF-8';
postgres=# create role sentry login password 'sentry_password';
postgres=# create database sentry owner sentry encoding 'UTF-8';
postgres=# create role nav login password 'nav_password';
postgres=# create database nav owner nav encoding 'UTF-8';
postgres=# create role navms login password 'navms_password';
postgres=# create database navms owner navms encoding 'UTF-8';
3.新增METASTORE DB的設定
CMD
postgres=# ALTER DATABASE METASTORE SET standard_conforming_strings = off;
4.建立Hue服務的使用者跟資料庫 (role, password, DB)
CMD
postgres=# create database hue;
postgres=# c hue;
postgres=# create user hue with password 'hue_password';
postgres=# grant all privileges on database hue to hue;
5.建立Oozie服務的使用者跟資料庫 (role, password, DB)
CMD
postgres=# CREATE ROLE oozie LOGIN ENCRYPTED PASSWORD 'oozie' NOSUPERUSER INHERIT CREATEDB NOCREATEROLE;
postgres=# CREATE DATABASE "oozie" WITH OWNER = oozie ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = -1;
離開並重啟PostgreSQL
CMD
postgres=# q;
$ systemctl restart postgresql
驗證
1.登入資料庫
CMD
sudo -u postgres psql
2.檢查各使用者是否有被建立 (以下是範例)
CMD
postgres=# du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
amon | | {}
hive | | {}
hue | | {}
nav | | {}
navms | | {}
oozie | Create DB | {}
postgres | Superuser, Create role, Create DB, Replication | {}
rman | | {}
scm | | {}
sentry | | {}
3.檢查各資料庫是否有被建立 (以下是範例)
CMD
postgres=# l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
amon | amon | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
hue | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | hue=CTc/postgres
metastore | hive | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
nav | nav | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
navms | navms | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
oozie | oozie | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
rman | rman | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
scm | scm | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
sentry | sentry | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(12 rows)
Cloudera Hadoop (CDH) Wizard Installation
- 此章節步驟不管在虛擬機或實體機上皆相同。
- 如前述,CM Server 建議安裝在Utility Host or Master Host (namenode standby)
- 為保險起見,CM Agent也會在此步驟安裝,因為在CDH Wizard也會安裝。
-
以下步驟
- CM Server在一台Master Host上
- CM Agent在所有主機上
安裝Oracle JDK
1.查看Oracle JDK的安裝版本,應為使用作業系統內建的版本。
CMD
yum search oracle-j2sdk
2.安裝Oracle JDK (以下是範例,實際上必須依照上述找到的版本安裝)
CMD
yum install -y $
3.驗證:確認Oracle JDK已被安裝,且版本要為update$,表示為安裝CM repo版本。
Sample Result
[kenlin@namenode01 ~]$ rpm -qa |grep oracle-j2sdk
oracle-j2sdk1.7-1.7.0+update67-1.x86_64
安裝CM Server & CM Agent
安裝CM Server
1.安裝Cloudera Manager Server
CMD
yum install -y cloudera-manager-daemons cloudera-manager-server
2.確認Cloudera Manager & Cloudera Agent已被安裝
All Master Host & Worker Host
rpm -qa|grep cloudera
安裝CM Agent
1.安裝Clouera Manager Agent,會連帶有一推相關套件被安裝
CMD
yum install -y cloudera-manager-agent cloudera-manager-daemons
2.確認Cloudera Manager & Cloudera Agent已被安裝
All Master Host & Worker Host
rpm -qa|grep cloudera
設定並啟動CM Server & CM Agent
1.在Master host 上,將CM DB與CM Server連結,指令如下:
CMD
/usr/share/cmf/schema/scm_prepare_database.sh postgresql scm scm scm
2.在Master Host上,啟動CM Server
CMD
service cloudera-scm-server start
3.在所有機器上,啟動CM Agent
CMD
service cloudera-scm-agent start
驗證
1.在Master Host上,檢查CM Server是否有成功被啟動:
CMD
service cloudera-scm-server status
2.在所有機器上,檢查CM Agent是否有成功被啟動:
CMD
service cloudera-scm-agent status
CDH Wizard安裝畫面
-
登入Web Wizard安裝畫面
- URL → http://$:7180
- 帳號/ 密碼:admin / admin
- EULA畫面,按下『Continue』
- Edition畫面,選擇版本『Cloudera Enterprise Dat Hub Edition Trial』
- 感謝畫面,按下『Continue』
-
選擇hostname
- 請輸入所有機器的hostname並且按下搜尋
- 確認所搜尋到的host是否為正確,勾選後按下『Continue』
-
設定Repo
- 選擇『Choose Method』後面的『More Option』,進入到另外一個畫面,在『Remote Parcel Repository URLs』中第一個位置中加入私人Repo Server 『http://${Reop IP}/cdh5/parcel/$』(注意:要為私有網路IP)
- 回到設定頁面,在『Select the specifc relase of the Cloudera mangager Agent you want to install on your hosts』中選擇『Custom Repository』,輸入『http://${Reop IP}/cm5』
- JDK安裝畫面,勾選『Install Oracle Java SE Development Kit(JDK)』,按下『continue』
- Enable Single User Mode畫面,不要勾選,按下『Continue』
- 『Provide SSH login credentials』畫面,輸入$& $,建議用root帳號,按下『Continue』
- 開始安裝,等待裝完,並確認皆安裝正確(綠色),按下『Continue』
- 『Installing Selected Parcels』畫面,等待安裝完畢後,按下『Continue』
- 『Inspect hosts for corretness』畫面,確認皆為綠色,,按下『Finish』
-
『Choose the CDH 5 services that you want to install on your cluster』,選擇『core hadoop』,按下『Continue』
- 在此選擇『core hadoop』,但服務的選擇會依每個客戶每個環境有所不同,請依需求選擇安裝。
-
『Customize Role Assignments』,請依據章節『Scope - Cluster實際規劃範例』,按下『continue』
- 以上是範例,服務的設定會依每個客戶每個環境有所不同,請依需求選擇安裝。
- 『Database Setup』畫面,輸入各資料庫的帳號密碼,按『test connection』確認連線成功後,按下『continue』
- 『Review Changes』畫面,以上確認各個資訊正確,按下『Continue』
- 『First Run Command』畫面確認他跑完且正確(綠勾勾),,按下『Continue』
- 結束安裝畫面,按下『Finish』
Verification
- 此章節步驟不管在虛擬機或實體機上皆相同。
-
要測試以下功能,必須在有服務的主機上。
- 例如:YARN服務安裝在Master Host-02 / All Worker Host上,就要在Master Host-02/ All Worker Host上測試。不能在沒有安裝YARN服務的Master Host-01上測試。
基本驗證
會到Web管理主畫面 (http://$:7180),檢查是否有亮紅燈的情況。
- 若有,請一個個查看並解決
- 若無,恭喜你,安裝成功 。可以開始進行功能性與效能性驗證
功能性驗證
HDFS
CMD
$ echo "This is a test for HDFS' operation." > /tmp/test.txt
$ cat /tmp/test.txt
$ sudo -u hdfs hadoop fs -ls /
$ sudo -u hdfs hadoop fs -put /tmp/test.txt /tmp
$ mv /tmp/test.txt /tmp/test_org.txt
$ sudo -u hdfs hadoop fs -get /tmp/test.txt /tmp
$ cat /tmp/test.txt
|
驗證:1和7的檔案內容相同 |
YARN
CMD
sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
Impala
1.進入 impala-shell
CMD
$ sudo -u hdfs impala-shell
$ connect ${Impala Daemon};
2.建立 table
CMD
create table test(id int, name string);
3.插入資料到 table
CMD
insert into table test values(1, "athemaster");
4. 檢查 table
CMD
select * from test;
5. 刪除 table
CMD
drop table test;
Hive
1.進入 Hive shell
CMD
$ beeline
beeline>!connect jdbc:hive2://$:$ $ $
[小秘笈 Tip]
$ → 安裝Hive服務那台機器的IP
$ → 10000
$ → hdfs
$ → (null)
2. 建立 table
CMD
$ create table test(id int, name string);
3. 插入資料到 table
CMD
insert into table test values(1, "athemaster");
4.檢查 table
CMD
select * from test;
5.刪除 table
CMD
drop table test;
HBase
1.進入 HBase shell
CMD
$ hbase shell
2.建立 table
CMD
create 'Contacts', 'Personal', 'Office'
3.插入資料到 table
CMD
$ put 'Contacts','1000','Personal:Name','John Dole'
$ put 'Contacts','1000','Personal:Phone','1-425-000-0001'
$ put 'Contacts','1000','Office:Phone','1-425-000-0002'
$ put 'Contacts','1000','Office:Address','1111 San Gabriel Dr.'
$ scan 'Contacts'
4.讀取 data
CMD
$ get 'Contacts','1000'
5.刪除 table
CMD
$ disable 'Contacts'
$ drop 'Contacts'
效能驗證
Network IO
1.下載netperf.tar.gz並上傳到Master Host上/tmp
範例
scp -rp netperf.tar.gz kenlin@192.168.1.111:/tmp/
2.從Master Host傳檔案到另外一台Worker Host
3.解壓縮到/tmp
CMD
cd /tmp
tar zxvf netperf.tar.gz
4.移動/tmp/netperf-2.7.0/usr_bin/到/usr/local/bin
CMD
sudo mv -v /tmp/netperf-2.7.0/usr_bin/* /usr/local/bin/
5.Master Host當Server,執行以下指令啟動server
CMD
netserver -4 -L $ -p 60000
6.Worker Host當Client,執行如下
CMD
[root@datanode04 ~]# netperf -H $ -p 60000 -l 60 -t TCP_STREAM
[netperf指令解釋]
-H host:指定遠端運行netserver的host IP地址。
-l testlen:指定測試的時間長度(秒)
-t testname:指定進行的測試類型,包括TCP_STREAM,UDP_STREAM?等等。
TCP_STREAM: 從client到server採用TCP傳輸的速度。
UDP_STREAM: 從client到server採用UDP傳輸的速度。
Disk IO
1.Linux硬碟寫入速度測試
CMD
time dd if=/dev/zero of=/var/test bs=2k count=1000000
2.Linux硬碟讀取速度測試
CMD
time dd if=/var/test of=/dev/null bs=2k
3.移除測試資料
CMD
rm -rfv /var/test
HDFS
1.打包CDH Percal檔
CMD
cd /var/www/html/cdh5/parcels/5.7
cp -rfv CDH-5.7.0-1.cdh5.7.0.p0.45-el7.parcel CDH-5.7.0-1.cdh5.7.0.p0.45-el7.parcel-1
tar cvf /tmp/test CDH-5.7.0-1.cdh5.7.0.p0.45-el7.parcel-1
chmod 777 /tmp/test
2.執行驗證,指令如下
CMD
time cat test
time sudo -u hdfs hadoop fs -ls /
time sudo -u hdfs hadoop fs -put /tmp/test /tmp
time mv -v /tmp/test /tmp/test_org
time sudo -u hdfs hadoop fs -get /tmp/test /tmp
time diff /tmp/test /tmp/test_org
3.還原環境
CMD
rm -rfv /tmp/test*
rm -rfv /var/www/html/cdh5/parcels/5.7/CDH-5.7.0-1.cdh5.7.0.p0.45-el7.parcel-1
MapReduce
CMD
sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
關於 Athemaster
炬識科技股份有限公司 (AthemasterCO., Ltd.)融合商業軟體與開源技術,滿足客戶在企業數據儲存、處理與分析上現在與未來的需求。企業級Hadoop解決方案領導廠商 Cloudera Inc. 的市場行銷戰略合作夥伴、亞太技術服務合作夥伴、銀級代理商。