1. 程式人生 > >Centos7部署HDP叢集------

Centos7部署HDP叢集------

備註:此部落格為轉載,原作者地址請點選此處

之前安裝大資料元件都是一個一個手動安裝的,最多弄一個指令碼自動安裝。手動安裝麻煩不說,還沒有可以監控叢集的視覺化介面,而且元件的穩定性也是個問題。
所以我們應該試一試HDP和CDH這種企業級的hadoop技術棧。 CDH用的人最多,我本來想安裝一個社群版的CDH,可惜社群版的官網開啟之後樣式亂了,根本沒法兒看。所以我選擇了HDP。HDP是完全免費的,而且基本上跟apache的hadoop保持同步。HDP使用ambari來安裝,ambari雖然功能相對弱了一些,不過我感覺基本夠用了。可以安裝各種服務,可以監控叢集狀態,這正是我想要的功能。此外,它還可以二次開發,這就是開源的好處。

因為是個人學習用,所以我在自己的筆記本上裝了3個虛擬機器。

硬體要求

  • 固態硬碟可用空間>=105G,機械硬碟的話不要這樣玩,因為實在是太卡了。
  • 記憶體>=8G
  • 系統最好是Win10,因為自帶了open ssh的客戶端。否則的話你就需要安裝一個ssh客戶端,比如開源版本的PuTTY

準備3臺虛擬機器

1.VMWare安裝CentOS7.5(DVD版),注意安裝的時候SEFTWARE SELECTION要選擇GNOME Desktop版本,切記!不然裝好系統後沒有桌面!
每臺虛擬機器給2G記憶體。
裝好之後開啟terminal,切換到root使用者:su - root

注意本文所有操作均使用root使用者,因為安裝ambari需要root使用者!
2.修改主機名echo "hdp001" > /etc/hostname。 重啟後生效,先別重啟,我們等下再重啟。
3.配置橋接網路

ifconfig #檢視一下閘道器的名字是ens33,有的是eth0
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改BOOTPROTO=static
新增IPADDR=192.168.0.104
新增PREFIX0=24
新增GATEWAY=192.168.0.1
新增DNS1=8.8.8.8
新增ONBOOT=yes

/etc/init.d/network restart #重啟網路

右鍵虛擬機器>>設定>>硬體>>網路介面卡>>網路連線>>選擇橋接模式
4.配置共享目錄
先安裝VMWare Tools(略)如果你在虛擬機器裡打不開那個DVD,右鍵虛擬機器>>設定>>硬體>>CD/DVD>>連線>>勾選“使用物理驅動器(自動檢測)
右鍵虛擬機器>>設定>>選項>>共享資料夾>>右邊勾選“總是啟用”>>資料夾裡點“新增”,新增一個資料夾,比如資料夾的名字叫CentOS_Share
弄好之後,虛擬機器裡是看不到共享的資料夾的

cd /mnt/hgfs/
# 檢視一下有哪些共享的目錄,顯示CentOS_Share
vmware-hgfsclient
# 掛在共享資料夾,這一步顯示錯誤
mount -t vmhgfs .host:/  /mnt/hgfs
# 安裝一下這個工具
yum install open-vm-tools-devel -y
# 再次執行一下就好了
vmhgfs-fuse .host:/ /mnt/hgfs

5.重啟系統
6.配置系統映象源
備份一下:CentOS-Base.repo sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
下載淘寶映象倉庫:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
更新軟體包快取:yum makecache
關機:shutdown
7.克隆2個虛擬機器:虛擬機器>>管理>>克隆>>完全複製
克隆後按照上面的步驟配置另兩臺虛擬機器。另兩臺虛擬機器的主機名為hdp002, hdp003,IP為192.168.0.105, 192.168.0.106
注意設定共享目錄,只需要在hdp001上設定就可以了,這個是為了後面拷貝tar包方便。
至此3臺虛擬機器都已經準備完畢

準備安裝環境

注意本文每一步都是有原因的,完全按照官方文件的要求來的。

1.配置ssh免金鑰
hdp001上執行:

ssh-keygen
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]

2.修改每臺機器的hosts檔案:

vim /etc/hosts
192.168.0.104 hdp001
192.168.0.105 hdp002
192.168.0.106 hdp003

3.每臺機器安裝ntp服務:
CentOS7預設已經安裝了ntp服務。
檢視服務狀態:systemctl status ntpd, 預設沒有開啟該服務。
hdp001上配置ntp.conf:

vim /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 10
# 10~15都是可以的,表示網路時間服務提供者來自於區域網。0表示為頂級

另外兩臺機器同理:註釋掉那4行,然後在末尾新增:

server hdp001
fudge 127.127.1.0 stratum 10

每臺機器禁用CentOS自帶的chronyd:

systemctl stop chronyd.service
systemctl disable chronyd.service

每臺機器啟動ntp服務:

systemctl start ntpd
systemctl enable ntpd.service #設定開機啟動服務

4.每臺機器禁用防火牆:

systemctl stop firewalld
systemctl disable firewalld

5.每臺機器禁用SELinux和PackageKit,並檢查umask Value
禁用SELinux:

setenforce 0
# 檢視狀態: current mode permissive 就對了
sestatus
# 永久禁用
vim /etc/selinux/config
SELINUX=disabled

禁止packagekit離線更新服務的辦法:

systemctl status packagekit-offline-update.service  # 檢視狀態,預設就是關閉的
systemctl disable packagekit-offline-update.service # 關閉
# 也可以用下面這種方式禁用它
vim /etc/yum/pluginconf.d/refresh-packagekit.conf   
enabled=0

檢查umask: umask, 預設就是0022,不用改了

6.每臺機器修改ulimit

vim /etc/security/limits.conf 
* soft noproc 127093
* hard noproc 127093
* soft nofile 127093
* hard nofile 127093

vim /etc/security/limits.d/20-nproc.conf
#* soft nproc 4096
#root soft nproc unlimited

  •      soft    nproc     127098
    
  •      hard    nproc     204800</code></pre>
    

重啟後生效,暫時先別重啟

7.每臺機器安裝oracle jdk1.8
到這裡下載jdk的安裝包

# 安裝
rpm -ivh jdk-8u171-linux-x64.rpm
# 配置JAVA_HOME
vim /etc/profile
JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
source /etc/profile
# 選擇預設jdk版本為oracle jdk
alternatives --config java

8.下載hdp安裝包
網路不太好,很容易出問題,還是離線安裝好一些。
ambari-2.6.2.0-centos7.tar.gz
HDP-2.6.5.0-centos7-rpm.tar.gz
HDP-UTILS-1.1.0.22-centos7.tar.gz
HDP-GPL-2.6.5.0-centos7-gpl.tar.gz
HDP-GPL是新出來的。新版hadoop使用了LZO資料壓縮庫,這個協議跟HDP棧的協議不相同,所以需要這玩意。

9.hdp001上搭建http伺服器
可以安裝apache的httpd。不過我覺得每必要,因為它只需要一個最簡單的http伺服器就可以了。我們可以做:

# 新建/var/www/html資料夾
mkdir -p /var/www/html
# 將第8步下載的tar包解壓到這個目錄下
tar -zxvf xxx.tar.gz -C /var/www/html
# 開啟http服務
cd /var/www/html
python -m SimpleHTTPServer

就這樣一句話就開啟了一個http伺服器,注意埠號是 8000

10.每臺機器建立本地yum倉庫

wget -O /etc/yum.repos.d/ambari.repo http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.6.2.0/ambari.repo
wget -O /etc/yum.repos.d/hdp.repo http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.6.5.0/hdp.repo
wget -O /etc/yum.repos.d/hdp.gpl.repo http://public-repo-1.hortonworks.com/HDP-GPL/centos7/2.x/updates/2.6.5.0/hdp.gpl.repo

vim /etc/yum.repos.d/ambari.repo
[Updates-Ambari-2.6.2.0]
name=Ambari-2.6.2.0-Updates
baseurl=http://hdp001:8000/ambari/centos7/2.6.2.0-155
gpgcheck=0
gpgkey=http://public-repo-1.hortonworks.com/ambari/centos6/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1

yum update

11.每臺機器重啟
上面設定了ulimit和執行緒數還沒有重啟,所以這裡重啟一下。 如果不想重啟,請自行百度解決辦法。

至此,所有準備都齊全了

安裝ambari

hdp001上安裝ambari-server:
yum install ambari-server

啟動server之前必須先配置:
ambari-server setup

  • Customize user account for ambari-server daemon: n (使用root使用者)
    選擇Custom JDK。因為我們已經提前在每臺機器上安裝好jdk了,這時候輸入JAVA_HOME的地址:/usr/java/jdk1.8.0_171-amd64

  • LZO資料壓縮庫: n

  • Enter advanced database configuration: n (安裝預設的PostgreSQL)
    預設的資料庫名稱是 ambari
    預設的使用者名稱密碼是 ambari/bigdata

  • Proceed with configuring remote database connection properties [y/n]: y (我安裝的時候沒有這一項,可能老版本有這一項)

配置結束之後先別急著啟動,需要改幾個配置,否則啟動不起來。

每臺機器做如下修改:

vim /etc/ambari-server/conf/ambari.properties
# 設定啟動超時時間,預設是50秒,時間太短了,在虛擬機器裡跑50秒根本就不夠
server.startup.web.timeout=300
vim /etc/ambari-agent/conf/ambari-agent.ini
# CentOS7.5自帶的openssl版本是openssl-1.0.2,不加這一句,後面install ambari的時候總是失敗。官方文件竟然沒有提這個!
force_https_protocol=PROTOCOL_TLSv1_2

hdp001上啟動ambari-server
ambari-server start
檢視狀態:ambari-server status

hdp001上登入ambari: http://localhost:8080 預設賬戶密碼:admin/admin

Launch Install Wizard:
輸入叢集名稱:hdpbd
選擇版本2.6,選擇本地倉庫,輸入base url:

http://hdp001:8000/HDP/centos7/2.6.5.0-292
http://hdp001:8000/HDP-UTILS/centos7/1.1.0.22

輸入主機名:

hdp001
hdp002
hdp003

點下一步的時候提示不是全域名,沒關係,我們是區域網本來就不需要配什麼全域名

輸入hdp001的私鑰,讓hdp001能夠與另兩臺機器通訊(明明配置過免金鑰登入,不明白為什麼這裡還要輸入hdp001的私鑰):

cat /root/.ssh/id_rsa

配置好了之後就可以安裝服務了。 安裝服務的時候,有的服務會依賴其它的服務,提示你必須勾選,那就按照它要求的來就好了。
安裝服務的時候會選擇master和slave。我的master自然是hdp001這臺主機了。
datanode我勾選了三臺機器。
有的服務有必填的選項,會變紅,輸入一個使用者名稱和密碼就可以了
有的服務比如hive要求記憶體不小於512M,那就修改一下就好了,其它的就不管他了

驗證服務

服務裝好後,預設服務是沒有啟動的。點選"Actions"啟動服務即可。
我啟動了 zookeeper和kafka。

hdp001上執行:

cd /usr/hdp/2.6.5.0-292/kafka
# 建立topic
bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic ttt --replication-factor 1 --partitions 1
# 傳送資料,注意埠號是6667喲
bin/kafka-console-producer.sh --broker-list hdp001:6667 --topic ttt
# 另啟一個terminal,接收資料
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic ttt --from-beginning

安裝這些東西很煩,這種事一般都由專業的運維人員來做。但是我們還是要熟悉一下linux的一些基本操作的。
我是仔細閱讀官方文件一步一步做的,期間補了很多課,收穫了很多,做完一遍感覺以後都不會再做這些事了。

希望本文對你有幫助。

標籤: hdp, ambari, centos7, 大資料, 叢集 好文要頂 « 上一篇: MapReduce論文學習
» 下一篇: 用antd和webview打造一款大資料客戶端程式