用CDH5搭建hadoop集群

本文記錄搭建CDH的重難點,講解一些我能懂的原理,幫助大數據領域新人通過CDH,理解、構建大數據系統。

什麼是CDH5???

CDH5是cloudera公司出品的,包含hadoop生態園的多種工具的,一個「打包發行版」。

即cloudera公司在原本的hadoop等開源項目的基礎上,進行二次開發,從而得到了CDH。筆者做此文時,CDH的最高版本為CDH已經發行到第五代。

為什麼選擇CDH???

  • CDH將hadoop生態圈的幾種工具融合到了一起,在一定程度上解決了工具之間的兼容問題

  • CDH提供了一套可讀性比較高的日誌系統,使得運維人員可以快速定位錯誤
  • CDH支持自動化部署節點,使得集群易於擴展,可以很簡單的為集群添加工具。

CDH很適合新手入門

CDH5.10包含的工具有:HDFS、YARN、ZooKeeper、Oozie、Hive、Hue、HBase、Impala、Solr、Spark、Key-Value Store Indexer

如果你和我一樣,是個大數據領域的新晉學徒,不妨嘗試先用CDH快速的搭建集群,而後再使用中,熟悉各工具的原理。只要對工具的原理有所了解,即使脫離CDH轉而使用原生hadoop生態,也自然是得心應手的。

實驗環境:

推薦使用的操作系統為Centos7 64位,GNONE版。

Centos是linux眾多發行版中比較穩定的,適合做伺服器。Ubuntu是linux發行版中比較好用的,比較適合家用,用做伺服器的話坑會比Centos多一些,但是我依然會稍帶說一點ubuntu的配置方法。

Centos7的linux內核,版本號為el7,即enterprise linux(企業版linux),所以在CDH的網站下載資源時,應選擇標有Centos7或el7的版本。

在安裝Centos7時會要求選擇安裝的軟體,默認為最小安裝,只有命令行,可以選擇GNONE版,GNONE是一套還不錯的用戶圖形界面。

為CDH準備環境

  1. 使用root登錄
  2. 配置靜態ip
  3. 修改hostname與hosts
  4. 配置ssh免密碼登錄
  5. javaJDK
  6. 關閉防火牆
  7. 安裝mysql
  8. 統一集群時間

—————————————————————————————————————————

一、root登錄

目的:

這個是Cloudera官方文檔里寫明的,集群管理器要有超級管理員許可權,或者有運行sudo的許可權並配置sudo密碼。另外不root登錄會有各種各樣的許可權問題,運行的命令全要加sudo,所以一上來要做的第一件事情就是使用root登錄集群各主機。

—————————————————————————————————————————

二、配置靜態IP

目的:

集群中各節點要能互相訪問,因此各主機的IP不能輕易變化,所以要配置靜態IP

具體配置:

推薦使用圖形界面

# 文件坐標ubuntu: /etc/network/interfacescentos: /etc/sysconfig/network-scripts/ifcfg-ens33# centos7的配置實例BOOTPROTO="static" #dhcp改為static ONBOOT="yes" #開機啟用本配置 IPADDR=192.168.1.250 #靜態IP GATEWAY=192.168.1.1 #默認網關 NETMASK=255.255.255.0 #子網掩碼 DNS1=8.8.8.8 #DNS 配置 DNS2=114.114.114.114 #DNS 配置

注意:

  • 在使用ubuntu系統時,如果系統版本高於過等於14.04,dns是可以直接在interfaces文件里配的

  • 在使用centos系統時,如果使用圖形界面配置網路,記得要去配置文件里把參數ONBOOT的值改為true,否則系統啟動是不會自動聯網的。

拓展閱讀:

Ubuntu14.04 server靜態ip配置

Centos 7 學習之靜態IP設置

—————————————————————————————————————————

三、hosts、hostname

目的:

集群中各節點需要互相訪問,因此各主機都要有自己的名字(hostname),各主機都要有一份通訊錄(hosts),通訊錄要寫明各主機的名字(hostnames)與對應的IP地址。

集群中的主機名可根據主機的職責來命名,如集群管理者(cloudera manager)可命名為CM

,HDFS的主節點可命名為Master,子節點可命名為Slave1(2、3、4、5、6)。

具體配置:

# 文件坐標hosts: /etc/hostshostname: /etc/hostname# hosts,集群所有主機IP地址與對應主機名格式:IP(空)主機名例:127.0.0.1 localhost# hostname把主機名直接寫入此文件

注意:

  • 上古時代的centos,其hostname需要在/etc/sysconf/network中配置。

  • 因為集群中每台機器的hosts是相同的,所以hosts文件只需要配置一遍,用拷貝或ssh發送置各節點即可

—————————————————————————————————————————

四、ssh

目的:

集群之間的連接依靠ssh,腳本調用ssh是不會輸入密碼驗證的,所以要做到集群之間各主機的ssh互相免密碼。

具體步驟:

# sheel中運行↓生成一對密鑰,公鑰(id_rsa.pub)私鑰(id_rsa)。# 之後一路回車,因為是用root登錄的,所以公鑰與私鑰的位置在/root/.ssh中ssh-keygen -t rsa# 把公鑰放進authorized_keys文件夾中cd /root/.sshcat ./id_rsa.pub >> ./authorized_keys# 把整個包含公鑰私鑰的文件發送到集群的各個節點,# 無論公鑰私鑰最開始由誰生成,只要各節點擁有統一的一套公鑰私鑰,就可以保證互相免密碼scp -r /root/.ssh slave1:/root/# 驗證,執行↓命令,slave1替換成相應的主機名,# 各主機之間互相登錄,均不需要驗證密碼,則說明配置成功ssh slave1

請注意:

  • 為了方便我一般直接把整個.ssh文件發過去,如上所示。但是在某些版本的Linux里,公鑰私鑰要打包進壓縮包再傳,否則驗證失敗,原因不明。
  • centos7自帶的ssh默認配置不允許免密碼登錄,需要取消文件/etc/ssh/sshd_conf中RSAAuthentication yes與PubkeyAuthentication yes這兩項前面的#
  • slave1替換成目標主機的hostname,因為CDH需要root許可權,所以各節點均全程使用root用戶執行安裝,所以.ssh文件夾在/root下,如果不使用root用戶操作,.ssh文件夾生成在用戶的home中。

—————————————————————————————————————————

五、javaJDK

注意:

  • 安裝之前要卸載openJDK,否則各種bug,卸載方法見下面拓展閱讀

  • 我習慣把環境變數配置到/etc/profile中,但是後面出現了spark讀不到JAVA_HOME的問題,有人說要把環境變數配置到/etc/environment里。下面是兩種配置的區別,大家自己理解吧。

/etc/environment是設置整個系統的環境,而/etc/profile是設置所有用戶的環境,前者與登錄用戶無關,後者與登錄用戶有關。

  • 但是在上面兩種配置方法都使用了的情況下,依然有某些腳本報讀不到JAVA_HOME,在/etc/sudoers 的最後一行增加:Defaults env_keep+=JAVA_HOME,此處的JAVA_HOME換成你的javaJDK路徑

拓展閱讀:

卸載CentOS7-x64自帶的OpenJDK並安裝Sun的JDK7的方法 - 多米諾 - 博客園

—————————————————————————————————————————

六、防火牆

目的:

因為CDH包含了很多工具,因此集群各主機都要開放很多埠,可以對照Cloudera官方文檔配置防火牆,也可以先關掉防火牆往下做,日後再配。

linux的防火牆包括selinux、firewall,早期版本的centos不使用firewall而是使用iptables。

具體配置:

# selinux配置文件坐標:/etc/selinux/config# 把其中參數SELINUX的值改為disabled即可# 關閉firewall的方法:# 禁止開機啟動防火牆systemctl disable firewalld.service# 關閉防火牆systemctl stop firewalld.service

擴展閱讀:

防火牆的詳細配置方法請參見:

CentOS7使用firewalld打開關閉防火牆與埠 - 莫小安 - 博客園

selinux的詳細配置方法請參見:

第十六章、程序管理與 SELinux 初探

—————————————————————————————————————————

七、mysql

注意:

  • 資料庫其實裝在哪都無所謂的,只要能訪問的到就行。

主要任務:

創建三個資料庫,賦予許可權

# hive資料庫create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci# 集群監控資料庫create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci# hue資料庫create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci# 授權用戶登錄grant all on *.* to root@"%" Identified by "你的密碼";flush privileges;

擴展閱讀:

安裝方法、設置等命令請參考:CentOS 7 安裝 MySQL

—————————————————————————————————————————

八、ntp

我感覺吧:

時間是統一的就行吧。為什麼網上找到的教程都要我搭本地ntp伺服器啊,我linux已裝好就自動設置時間了啊。

不知道為什麼centos7上配置ntp伺服器,區域網內同步速度奇慢無比,彷彿不能用。據友人說,在ubuntu上配ntp就毫無障礙。

簡略配置:

# 在所有節點安裝ntpyum install ntp# 開機啟動ntp服務chkconfig ntpd on# 去網上同步時間以確保master的時間是準確的,# 這個是官方的ntp伺服器中國站↓ntpdate -u cn.pool.ntp.org

擴展閱讀:

服務配置詳情見CentOS 7 中使用NTP進行時間同步

配置完後發現無法開機啟動ntp,解決方法請見RHEL7/CentOS7 NTP開機無法啟動的解決方法

—————————————————————————————————————————

正式安裝CDH

  1. 下載CDH離線包
  2. 啟動CDH的管理台

—————————————————————————————————————————

一、CDH的離線包

這些包都是什麼??

CDH的離線包包括集群管理器(cloudera manager),parcel包,parcel.sha文件,以及manifest.json 文件。

其中cloudera manager是一個管理器,你可以藉助它快速地部署諸如hdfs、hive、hbase等工具;你可以很方便地為集群添置一台新主機,或踢掉一台老機器;它還提供了一套使用的日誌轉載系統,可以把冗長的java報錯以簡明扼要的方式展示給你,又可以在指定的位置保存原始的報錯供你慢慢分析。實乃運維排錯必備之良品(# 滑稽

parcel包是一個壓縮包,涵括了所有CDH所支持的工具。下載了這個包,你就可以體驗離線安裝各種各樣的工具。好吧只是把安裝時需要的資源提前下載好而已,這樣的好處主要在於,你可以用迅雷快速地下載這些資源,而不必為repo一條條地配置鏡像站點,要知道「網速慢」可不總是配兩條鏡像地址就能解決的問題。

manifest.json 文件里寫了某種大概關於版本的信息,看不懂。

parcel.sha文件里寫了你所用的是哪個版本的parcel包,想必用來確定你的版本的,所以請對著版本正確下載。

下載地址:

  • 管理器官方鏈接,請看好操作系統版本和管理器本體版本:Index of /cm5/cm/5
  • parcel包、parcel.sha1文件和json三個文件的官方鏈接:Index of /cdh5/parcels/5.10

請對著操作系統版本下載,parcel和parcel.sha1。parcel.sha1下載好後請改名,去掉一個最後那個1(one)

—————————————————————————————————————————

二、啟動CDH的管理台

1、在每台主機上,解壓clouedera manager壓縮包到/opt目錄下。

2、在agent上配置server的地址或hostname。

對於整個CDH集群來說,有一個伺服器(server)用來監控、管理整個集群。自然地,其他受管理的主機就都是用戶(agent)了。為了讓agent能在網路中找到server,我們要配置某個文件,把server的位置或名字告訴agent。

# 文件位置(↓這個位置根據版本要改噢)/opt/cm-5.10.0/etc/cloudera-scm-agent/config.ini將server_host的值改為server的hostname

3、告訴主節點如何連接資料庫

# 在主節點上運行sheel指令如下,文件夾的名字要根據版本號改,資料庫的配置根據實際改/opt/cm-5.10.0/share/cmf/schema/scm_prepare_database.sh mysql -h資料庫地址 -u資料庫賬號 -p資料庫密碼 --scm-host clouderaManager的伺服器名(本機hostname) scm scm scm

4、下載JDBC(java操作資料庫的jar包)並放入各節點

JDBC地址:Download Connector/J

放到/opt/cm-5.10.0/share/cmf/lib/

5、啟動

# 在server/opt/cm-5.10.0/etc/init.d/cloudera-scm-server start# 在agent/opt/cm-5.10.0/etc/init.d/cloudera-scm-agent start

至此,訪問server的7180埠應能進入web管理台頁面

問題解決思路:

於是,順風順水的日子至此為止了,之前步驟中所有的錯誤操作,都會在此爆發。

如果你的7180埠無法訪問,請檢查防火牆,檢查文件許可權,檢查在上面的配置過程中有沒有拼寫錯誤。等等,要知道任何一個細節處的小錯誤都有可能導致你的web界面無法訪問

如果你的資料庫連接不上請確認JDBC放置到了正確的地方,確認資料庫的配置是允許CDH所處網段訪問的。

報找不到JAVA_HOME請確認/etc/sudoers和/etc/profile中正確地配置了JAVA_HOME

—————————————————————————————————————————


推薦閱讀:

入場比特幣堪比大冒險?他用一千多種交易數據給你定心丸
分散式資料庫數據一致性原理說明與實現
HDFS中的Namenode和Datanode
大數據行業的浮躁
如何自學大數據?先對自己來一個深度剖析

TAG:大數據 | 分散式系統 | 計算機科學 |