1.搭建環境
-
兩台筆記本電腦A和B,自帶內存分別為12G和8G,安裝VMware 12。
-
A開一個虛擬機,2*CPU,8G內存,使用橋接網卡模式,安裝CentOS6.5,充當主機Master。
-
B開兩個虛擬機,1*CPU,2G內存,使用橋接網卡模式,安裝CentOS6.5,充當分機Slave1,Slave2。
-
兩台電腦通過網線連接到學校內網,使用內網網絡環境搭建,三台虛擬機的root密碼必須一致。
2.安裝前的准備
首先先下載以下安裝包
- cloudera-manager-el6-cm5.8.0_x86_64.tar.gz (Cloudera Manager 安裝包,el6代表使用的CentOs6.x,cm-5.8.0代表使用的Cloudera Manager版本為5.8.0)
- CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel (CDH離線資源包)
- CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel.sha1
- manifest.json
- cm5.8.0-centos6.tar.gz (里面有一些必要的環境)
- mysql-connector-java-5.1.6-bin.jar (JDBC)
下載路徑分別為
http://archive.cloudera.com/cm5/cm/5/
http://archive.cloudera.com/cdh5/parcels/5.8.0/
http://archive.cloudera.com/cm5/repo-as-tarball/5.8.0/
注意:不要圖方便少下什么,或者少安裝什么,尤其是JDK一定要安裝官方的,要不會導致后面Spark配制出錯,這個地方我們起碼失敗了5、6次,一定要全部下下來,重來的代價會更高
3.安裝前的配置
首先進入root權限:輸入su
,再輸入密碼即可
3.1.配置主機名
分別修改各節點/etc/sysconfic/network文件,設置主機名為Master,Slave1,Slave2。
找到HOSTNAME可進行修改,名字以方便識別主節點和分節點為標准。
修改完后執行service network restart
重啟服務。
使用hostname
進行驗證。
如果沒有生效,那就重啟虛擬機。
3.2.關閉防火牆
執行命令:service iptables stop
再執行:chkconfig iptables off
使用chkconfig --list|grep iptables
檢查是否全關
如果為iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
則說明關完了
3.3.綁定ip與主機名
先查看ifconfig
三台虛擬機的ip。
分別在三台虛擬機上打開並更改hosts
vi /etc/hosts
輸入如下
192.168.30.21 Master
192.168.30.22 Slave1
192.168.30.23 Slave2
配置完后,3台虛擬機互ping ip和主機名,驗證是否配置成功。
3.4.配置ssh免密碼登錄(默認已安裝ssh)
在Master中使用ssh-keygen -t rsa
生成秘鑰,一路回車.
cd ~/.ssh
找到id_rsa.pub
,將其寫入到authorized_keys
中.
輸入cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
.
輸入ssh Master
看看是否已經免秘鑰,第一次可能要輸密碼和輸一個yes.
成功后同理在其他兩台機子上輸入ssh-keygen -t rsa
生成秘鑰。
將生成的秘鑰如果是圖形化的界面直接粘貼到Master的authorized_keys
中,再由Master使用scp分發給其他兩台主機。
如果不是圖形化,那就用putty,xshell等等登錄虛擬機粘貼,如果沒有,那就用scp傳。
使用scp將authorized_keys
傳給slave1和slave2,輸入scp ~/.ssh/authorized_keys root@slave1:~/.ssh
把slave1改為slave2及傳給2。
互相使用ssh hostname
登錄對方看看是否免秘鑰,不行檢查authorized_keys
是否正確。
3.5.關閉SELINUX
setenforce 0 #臨時生效
或
修改/etc/selinux/config 文件的 SELINUX=disabled #重啟生效
3.6.安裝Mysql(master節點)
首先使用rpm -qa|grep -i mysql
檢查是否安裝了Mysql,如果有
使用rpm -e 包名
刪除Mysql包。
然后下載MySQL包
http://dev.mysql.com/downloads/mysql/#downloads
我使用的是MySQL-5.5.49-1.linux2.6.x86_64.rpm-bundle.tar這個文件,解壓它得到
MySQL-client-5.5.49-1.linux2.6.x86_64.rpm
MySQL-devel-5.5.49-1.linux2.6.x86_64.rpm
MySQL-embedded-5.5.49-1.linux2.6.x86_64.rpm
MySQL-server-5.5.49-1.linux2.6.x86_64.rpm
MySQL-shared-5.5.49-1.linux2.6.x86_64.rpm
MySQL-shared-compat-5.5.49-1.linux2.6.x86_64.rpm
MySQL-test-5.5.49-1.linux2.6.x86_64.rpm
使用rpm -ivh MySQL*
全部安裝,一個都不能少,要不可能會導致后面報錯!
然后使用/usr/bin/mysql_secure_installation
改mysql密碼。
輸入mysql -u root -p
進入mysql。
首先創建用戶
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive'; CREATE USER 'hue'@'%' IDENTIFIED BY 'hue'; CREATE USER 'oozie'@'%' IDENTIFIED BY 'oozie';
在創建數據庫
CREATE DATABASE hive; CREATE DATABASE hue; CREATE DATABASE oozie;
最后賦予各個用戶權限
GRANT ALL ON hive.* TO 'hive'@'%' GRANT ALL ON hue.* TO 'hue'@'%' GRANT ALL ON oozie.* TO 'oozie'@'%'
3.7.安裝JDK
解壓cm5.8.0-centos6.tar.gz
后打開里面的rpm
文件夾,里面應該有一個JDK 1.6
和一個 Oracle JDK
,兩個都要安裝上。然后輸入java -version
應該可以看到
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)
3.8.配置NTP服務(所有節點)
安裝NTP服務,使用yum install ntp
安裝
修改ntp配置vi /etc/ntp.conf
Master設置server 210.72.145.44 #這是中國國家授時中心的IP
Slave1~2設置server master
設置開機時自動運行時間服務chkconfig ntpd on
啟動或停止時間服務
service ntpd start
service ntpd stop
service ntpd restart
查看ntp服務狀態watch ntpq -p
4.安裝Cloudera Manager Server和Agent
4.1.創建cloudera-manager文件夾(1~7步在三個節點都要進行)
mkdir /opt/cloudera-manager
4.2.在master節點解壓安裝包至/opt/cloudera-manager默認目錄
tar -zxvf cloudera-manager-el6-cm5.8.0x8664.tar.gz -C /opt/cloudera-manager
4.3.創建用戶
useradd --system --home=/opt/cloudera-manager/cm-5.8.0/run/cloudera-scm-server --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
4.4.創建log文件夾
mkdir /var/log/cloudera-scm-server
chown cloudera-scm:cloudera-scm /var/log/cloudera-scm-server
4.5.修改agent指向的sever地址
進入到cd /opt/cloudera-manager/cm-5.8.0/etc/cloudera-scm-agent
使用vim config.ini
將server_host=localhost
改為server_host=master
4.6.創建存放parcel的文件夾
mkdir -p /opt/cloudera/parcel-repo
chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
4.7.創建run/cloudera-scm-agent文件夾
mkdir /opt/cloudera-manager/cm-5.8.0/run/cloudera-scm-agent
如果有則不用創建。
以下開始是在Master上進行!
4.8.為Cloudera Manager 5建立數據庫
將mysql-connector-java-5.1.6-bin.jar文件放到/opt/cm-5.8.0/share/cmf/lib/中。
cp mysql-connector-java-5.1.6-bin.jar /opt/cloudera-manager/cm-5.8.0/share/cmf/lib/
4.9.在master節點初始化CM5的數據庫
/opt/cloudera-manager/cm-5.8.0/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -proot --scm-host localhost scm scm scm
4.10.准備Parcels,用以安裝CDH5
將CHD5相關的Parcel包放到主節點的/opt/cloudera/parcel-repo/目錄中(parcel-repo需要手動創建)。
相關的文件如下:
- CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel
- CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel.sha1
- manifest.json
最后將CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel.sha1,重命名為CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel.sha,這點必須注意,否則,系統會重新下載CDH-5.3.8-1.cdh5.3.8.p0.5-el6.parcel.sha文件。
4.11.執行啟動腳本
在master節點啟動服務端:
/opt/cloudera-manager/cm-5.8.0/etc/init.d/cloudera-scm-server start
在所有節點啟動Agent:
/opt/cloudera-manager/cm-5.8.0/etc/init.d/cloudera-scm-agent start
等待5分鍾,分別使用
/opt/cloudera-manager/cm-5.8.0/etc/init.d/cloudera-scm-server status
/opt/cloudera-manager/cm-5.8.0/etc/init.d/cloudera-scm-agent status
檢查server和agent狀態。如果出錯,比如死掉了之類的,去
/opt/cloudera-manager/cm-5.8.0/log
里面查看日志,看看是哪里報錯了
如果agent報錯是以下這樣
Traceback (most recent call last):
File "/opt/cloudera-manager/cm-5.8.0/lib64/cmf/agent/build/env/lib/python2.6/site-packages/cmf-5.8.0-py2.6.egg/cmf/agent.py", line 2163, in connect_to_new_supervisor self.get_supervisor_process_info() File "/opt/cloudera-manager/cm-5.8.0/lib64/cmf/agent/build/env/lib/python2.6/site-packages/cmf-5.8.0-py2.6.egg/cmf/agent.py", line 2185, in get_supervisor_process_info self.identifier = self.supervisor_client.supervisor.getIdentification() File "/usr/lib64/python2.6/xmlrpclib.py", line 1199, in __call__ return self.__send(self.__name, args) File "/usr/lib64/python2.6/xmlrpclib.py", line 1489, in __request verbose=self.__verbose File "/opt/cloudera-manager/cm-5.8.0/lib64/cmf/agent/build/env/lib/python2.6/site-packages/supervisor-3.0-py2.6.egg/supervisor/xmlrpc.py", line 470, in request '' ) ProtocolError: <ProtocolError for 127.0.0.1/RPC2: 401 Unauthorized>
重啟虛擬機即可解決,是因為有什么程序占用了那個端口。
5.配置CDH集群
PS:由於某些原因,安裝的時候我的主機名也就是Master是叫yao5,不要在意
驗證都正常工作后,就在瀏覽器打開http://master:7180進入CDH管理界面,由於CM Server的啟動需要花點時間,這里可能要等待一會(我最久等了20分鍾)才能訪問,默認的用戶名和密碼均為admin。
5.1.為CDH群集安裝指定主機
在為CDH群集安裝指定主機這一步(忘截圖了==|||),要能直接在當前管理的主機能看到三台機子,分別為Master,Slave1,Slave2.才說明安裝正確了,如果搜不到,說明可能是你偷懶直接復制cm-5.8.0
這個文件夾給其他主機了,因為在啟動的時候會生成一個SSID
,是這個機子唯一的,所以搜索的時候可能會出問題。
5.2.群集安裝
接下來是群集安裝,這一步點選使用Parcel(建議)
,將網絡地址全部刪除,退出來后要能看到可以選擇本地包才說明本地配置對了,如果沒看到,可能有以下幾個原因
- 未將CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel.sha1,重命名為CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel.sha
cloudera
,parcel-repo
和parcels
三個文件夾的權限設置沒有設置好。
安裝完成后如上圖。
5.3.檢查主機正確性
如果出現和上圖一樣,就說明離成功又近了一步,如果出現了其他錯誤,比如出現JAVA版本不一致,想想你是不是自己安JDK了,這個地方會導致后面Spark安裝失敗,沒有例外,因為這里我們起碼重裝了5次,才發現必須用官方給的JDK。
按照給出的方式修改,輸入
echo 10 > /proc/sys/vm/swappiness
echo never > /sys/kernel/mm/transparent_hugepage/defrag
如果你想重啟后不出問題,可以按上面的修改其他那些文件。
修改完后點擊重新運行,得到以下樣子
是不是看起來很舒服。
5.4.選擇在集群上安裝的服務
我們選擇安裝含Spark的內核
5.5.自定義角色分配
注意將DataNode選成所有主機,還有下面的Zookeeper選成所有主機,其他默認就可以了。
5.6.數據庫設置
之前已經配置過數據庫,直接像上面那樣填即可,可能會在Hue測試連接的時候失敗,那就是你沒有安裝完MySQL包里share,最好全部安裝,防止報各種奇怪的錯。
5.7.所需目錄結構
默認即可,不用改動什么。
5.8.等待初始化和啟動服務
這個地方初始化可能會出各種問題
1.Spark報錯,一般都是JDK未使用官方版本。
2.Hive,Hbase,Hue等報錯,類似於下圖
解決辦法也就是將mysql-connector-java-5.1.6-bin.jar拷貝到hive存放jar文件的目錄重試即可。
cp mysql-connector-java-5.1.6-bin.jar /opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/lib/
3.Oozie報錯,顯示timeout,這里是因為網絡環境太差,傳輸很慢,所以要把超時時間設置久一點,我們將超時時間調到了300s。
如上圖出現報錯,瀏覽器打開另一個標簽頁,進入http://master:7180,點擊oozie組件,搜索oozie_upload_sharelib_cmd_timeout parameter 和 change it to something bigger 然后將270改為600即可解決。
最后安裝成功
6.調試CDH集群
安裝完成后會因為電腦過卡,內存過小,硬盤空間不夠等等問題導致會有很多運行狀態不佳的主機
經過將內存閾值,分配空間閾值,報警閾值調小后即可解決,最后等待一會便可以達到全綠,滿足強迫症的你。
輸入http://master:8888 可以進入Hue中,使用Hive,Pig和Oozie
在終端輸入spark-shell
可以進入Spark-shell.
我們可以使用hdfs hadoop jar \/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \pi 10 100
來測試mapreduce
,運行結果如下