之前安裝大數據組件都是一個一個手動安裝的,最多弄一個腳本自動安裝。手動安裝麻煩不說,還沒有可以監控集群的可視化界面,而且組件的穩定性也是個問題。
所以我們應該試一試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 root@192.168.0.104
ssh-copy-id root@192.168.0.105
ssh-copy-id root@192.168.0.106
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
重啟后生效,暫時先別重啟
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的一些基本操作的。
我是仔細閱讀官方文檔一步一步做的,期間補了很多課,收獲了很多,做完一遍感覺以后都不會再做這些事了。
希望本文對你有幫助。