- 概述
- 文件下載
- 環境搭建
- 安裝Cloudera Manger
- 日志查看
- Q&A
概述
大數據時代,Hadoop是熱門的Apache開源項目,公司大多基于其商業化從而滿足自身的數據作業需求。CDH(Cloudera’s Distribution, including Apache Hadoop),是Hadoop眾多分支中的一種,由Cloudera維護,整合Hadoop及一系列數據服務,關于CDH,官網給予的解釋如下:
Critical Capabilities for Data Warehouse Database Management Systems
官網提供安裝包、部署手冊以及API說明
安裝過程參考:
http://blog.csdn.net/jdplus/article/details/45920733
http://blog.csdn.net/a921122/article/details/51939692
基于其上,進行適當的修改和完善
文件下載
- Cloudera Manager 地址:http://archive.cloudera.com/cm5/cm/5/
這里下載的是5.13.1的版本,http://archive.cloudera.com/cm5/cm/5/cloudera-manager-centos7-cm5.13.1_x86_64.tar.gz - CDH安裝包
地址:http://archive.cloudera.com/cdh5/parcels
本文基于CentOS7,下載的parcels包及manifest文件對應的版本為e17:
CDH-5.13.1-1.cdh5.9.0.p0.23-el7.parcel
CDH-5.13.1-1.cdh5.9.0.p0.23-el7.parcel.sha1
manifest.json - JDBC
http://download.softagency.net/MySQL/Downloads/Connector-J/
mysql-connector-java-5.1.39.tar.gznote : JDBC目前已經有6.x,但與CDH 5.x存在不兼容,這里提供5.1.39下載包
環境搭建
1. 網絡配置(所有節點)
修改主機名:vim /etc/sysconfig/network
HOSTNAME=master
設置網絡為啟動后自動連接,相關的設置文件為vim /etc/sysconfig/network-scripts/ifcfg-ethXX/
ONBOOT=yes
修改IP與主機名的對應關系:vim /etc/hosts
192.168.39.31 master
192.168.39.20 node1
192.168.39.23 node2
2. 設置SSH無密碼訪問(所有節點)
執行一下命令,一路回車,生成無密碼的密鑰對。
# ssh-keygen -t rsa
將公鑰添加到認證文件中, 并設置authorized_keys的訪問權限
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# chmod 600 ~/.ssh/authorized_keys
通過scp命令將各節點的認證文件拷貝到所有其他節點使得各節點能夠相互訪問。
3. 安裝Oracle Java(所有節點)
Linux可能自帶OpenJDK,但運行CDH5需要使用Oracle的JDK,需要Java 7以上版本的支持。
1. 卸載自帶的OpenJDK 使用下述命令查詢相關的java包
# rpm -qa | grep java
使用-e選項填入包名卸載
# rpm -e --nodeps packageName
2. 安裝Oracle java Oracle的官網下載jdk的rpm安裝包,并使用rpm -ivh packageName安裝
3. 配置java環境變量 修改環境變量,vim /etc/environment(和/etc/profile區別,大家可自行去網上查找) 添加如下(使用rpm安裝的java在/usr/java/jdk1.8XXXX)
export JAVA_HOME=/usr/java/jdk1.8XXXX
執行命令使環境變量生效
# source /etc/environment
4. 安裝配置MySQL(主節點)
安裝mysql
# yum -y install mysql mysql-server mysql-devel
啟動mysqld
# service mysqld start
開機啟動
# chkconfig mysqld on
設置root用戶密碼
# mysql -u root -p xxxxxx
進入mysql命令行,創建以下數據庫:
#hive
> create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#activity monitor
> create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#hue
> create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#activity oozie (可選)
> create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
授權root用戶在主節點擁有所有數據庫的訪問權限
> grant all privileges on *.* to'root'@'master' identified by'xxxx'with grant option;
> flush privileges;
>
5. 關閉防火墻和SELinux
關閉防火墻
1.關閉集群所有服務器的防火墻
[root@ip-172-31-6-148~]# chkconfig iptables off
[root@ip-172-31-6-148~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@ip-172-31-6-148 ~]#
2.檢查集群所有服務器防火墻是否關閉
[root@ip-172-31-6-148~]# service iptables status
iptables: Firewall is not running.
[root@ip-172-31-6-148~]#
禁用SELinux
1.在集群所有節點執行如下命令
[root@ip-172-31-6-148~]# setenforce 0
2.修改集群所有節點配置文件/etc/selinux/config
[root@ip-172-31-6-148~]# vim /etc/selinux/config
# This file controls the state ofSELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policyis enforced.
# permissive - SELinux printswarnings instead of enforcing.
# disabled - No SELinux policy isloaded.
SELINUX=disabled
# SELINUXTYPE= can take one of thesetwo values:
# targeted - Targeted processes areprotected,
# mls - Multi Level Securityprotection.
SELINUXTYPE=targeted
3.驗證是否禁用成功
[root@ip-172-31-6-148~]# sestatus -v
SELinux status: disabled
[root@ip-172-31-6-148~]#
6. 配置時鐘同步
如果企業有自己的NTP Server則可以集群中所有節點可配置企業NTP Server,如果沒有自己的NTP服務器則在集群中選用一臺服務器作為NTP Server,其它服務器與其保持同步,配置如下:
1.在集群所有節點安裝NTP服務
[root@ip-172-31-6-148~]# yum -y install ntp
2.選擇集群一臺服務器作為NTP Server,配置如下
[root@ip-172-31-6-148~]# 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 #local clock
fudge 127.127.1.0 stratum 10
3.集群其它節點與其同步,配置如下:
[ip-172-31-5-190 ~]# vim /etc/ntp.conf
# Use public servers from thepool.ntp.org project.
#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 172.31.6.148
4.完成以上配置后,在集群所有節點執行如下命令
[root@ip-172-31-6-148~]# chkconfig --add ntpd
[root@ip-172-31-6-148~]# chkconfig ntpd on
[root@ip-172-31-6-148~]# service ntpd restart
Shutting down ntpd: [ OK ]
Starting ntpd: [ OK ]
[root@ip-172-31-6-148~]#
5.驗證所有節點NTP是否同步
[root@ip-172-31-5-190~]# ntpq -p
remote refid st t when pollreach delay offset jitter
==============================================================================
*ip-172-31-6-148210.23.25.77 2 u 448 1024 377 0.255 3.245 7.859
[root@ip-172-31-5-190~]#
Cloudera Manager安裝與集群配置
1. 主節點CM安裝
解壓:tar xzvf cloudera-manager*.tar.gz將解壓后的cm-5.13.1和cloudera目錄放到/opt目錄下。 建立數據庫:找到前面下載的mysql-connector-java-5.1.39.tar.gz,解壓后將mysql-connector-java-5.1.39-bin.jar放到每臺服務器/opt/cm-5.13.1/share/cmf/lib/和/opt/cloudera/parcels/CDH-5.13.1-1.cdh5.13.1.p0.2/lib/hive/lib/中。 初始化數據庫:
# /opt/cm-5.9/share/cmf/schema/scm_prepare_database.sh mysql cm -hnode1 -uroot -p123456 --scm-host node1 scm scm scm
note:在這里后面的參數分別是:數據庫類型 數據庫名稱 數據庫主機名 數據庫用戶名 密碼 --scm-host cmserver主機名 scm scm scm
2. Agent配置
修改/opt/cm-5.9/etc/cloudera-scm-agent/config.ini中的server_host為主節點的主機名。 同步Agent到其他所有節點: scp -r /opt/cm-5.9 root@node2:/opt/ 在所有節點創建cloudera-scm用戶
# useradd --system --home=/opt/cm-5.7.1/run/cloudera-scm-server/ --no -create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
3. 安裝CDH5
1. 準備Parcels 將CHD5相關的Parcel包放到主節點的/opt/cloudera/parcel-repo/目錄中(parcel-repo需要手動創建)。
相關的文件如下:
CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha1
manifest.json
最后執行命令,重命名.sha文件
# mv CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha1 CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha
2. 啟動CM
# /opt/cm-5.7.1/etc/init.d/cloudera-scm-server start
# /opt/cm-5.7.1/etc/init.d/cloudera-scm-agent start
其余命令還有stop(停止), status(狀態), restart(重啟)
4. CDH集群配置
Cloudera Manager Server和Agent都啟動以后,就可以進行CDH5的安裝配置。
打開瀏覽器,訪問master:7180/cmf/login
由于CM Server的啟動需要花點時間,這里可能要等待一會才能訪問成果,可能需要3-5分鐘,默認的用戶名和密碼均為admin
check:本機可以先curl -i master:7180/cmf/login測試,有返回結果后,在瀏覽器端,輸入ip:7180/cmf/login進行配置
note: 此處注意,若本機可curl連接上,但其他主機連接不上,考慮:主機防火墻是否正常關閉;兩臺主機是否在同一個局域網
note:以下圖借用CM 5.7安裝圖
當各Agent節點正常啟動后,可以在當前管理的主機列表中看到對應的節點。選擇要安裝的節點,點繼續。
下一步,出現parcel自檢測包名,如果本地Parcel包配置無誤,選目標版本(例如CM5.7.1),直接點繼續就可以了(若沒有出現對應版本,則重啟CM server和agent)。
pic3. parcel包版本檢測
繼續,如果配置本地Parcel包無誤,那么下圖中的已下載,應該是瞬間就完成了,然后就是耐心等待分配過程就行了,這個過程的速度就取決于節點之間的傳輸速度。
當前受管:假如在安裝的時候出現問題,如網絡連接中斷,機器死機,繼續安裝的時候可能會出現查詢不到機器,并且根據ip搜索機器的時候,出現“當前受管”的狀態為“是”,安裝失敗的機器不能再選擇了。
至此,所有節點部署完成
下一步主機檢查,遇到以下問題:
Cloudera 建議將 /proc/sys/vm/swappiness 設置為 10。當前設置為 60。使用 sysctl 命令在運行時更改該設置并編輯 /etc/sysctl.conf 以在重啟后保存該設置。
# echo 10 > /proc/sys/vm/swappiness
第二個警告,提示執行命令:
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
執行完畢,重啟后,警告依然,暫時不處理。
繼續之后,進入到安裝服務頁面
note:從這里開始,所有的服務,既可以通過下述自助來安裝一系列服務;也可以手動在CM管理頁面一個一個添加
之前安裝時選擇一次性安裝一系列服務,由于沒有新建hue數據庫導致hue服務安裝不上,所以后面選擇一個一個安裝,在前期搭建環境時這樣更好,起碼出現問題可以鎖定是哪個服務。
分步安裝服務步驟為:
點擊頁面上Cloudera MANAGER,回到主節點頁面
出現cluster1群集1,點擊下拉,選擇“添加服務”
HDFS,HIVE, HUE,Oozie, YARN, ZOOKEEPER是核心Hadoop的幾個服務,分別安裝,由于這些節點存在依賴關系,需注意先后順序(當然,安裝時CM會警告),順序是:
Zookeeper, hdfs, yarn, hive, oozie, hue
注意:在安裝hive, hue和oozie時,要將mysql驅動jar拷貝到相應位置
# cp /opt/cm-5.9/share/cmf/lib/mysql-connector-java-*-bin.jar /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/hive/lib/
# cp /opt/cm-5.9/share/cmf/lib/mysql-connector-java-*-bin.jar /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23 /lib/hue/lib/
# cp /opt/cm-5.9 /share/cmf/lib/mysql-connector-java-*-bin.jar /var/lib/oozie/
按需安裝完服務后,可在集群界面(即Cloudera MANAGER)看一下集群的狀況 [圖片上傳失敗...(image-73a4ff-1513586472070)]
綠色:良好
黃色:運行不良
紅色:存在問題
查看日志
CM雖然配置麻煩,但日志齊全,每個操作,都能找到相應的運行日志,日志對于配合、調試和查看任務進度都有很大的幫助
群集日志入口為
各服務節點也有日志入口,支持日志篩選
分為stdout(所有日志), stderr(錯誤日志), 在細節上支持分級別(INFO, TRACE, DEBUG等)篩選
Q&A
ps. 這部分有截取網上的解決方案,也有自己遇到的問題
在部署完成以后,會出現大量問題,其中有大量警告,是由于var/log/*的權限問題造成的。
在master上,運行chmod -R 777對應的文件夾修改權限即可。出現oozie和hive不能成功啟動
一般是因為缺少jdbc,復制到相應位置即可,位置請?;蛘呤怯捎趍ysql數據庫中的表造成的,可能是表已經存在了service monitor和host monitor都無法啟動
一般也是由于var/log/*的權限問題造成的service monitor和host monitor正常啟動,但是無法獲取到圖表數據
注銷admin重新進入,或者等一下hdfs不能正常啟動
可能是因為/dfs的權限原因,提高/目錄的權限hdfs和yarn的端口不再是9000和10020,默認的是8020和8021
如果使用Windows遠程調試,請保證host文件(C:/Windows/System32/drivers/hosts)和集群上的host文件內容一致。
主機崩潰怎么辦?
一般來說崩潰了,直接重啟就好。不過一定記得要再次啟動cm的agent和server服務通過CM啟動Hive報錯 org.apache.hadoop.hive. metastore.HiveMetaException: Failed to load driver
這種情況,是缺少jdbc驅動,添加jdbc驅動到相應的lib下面。hive的lib路徑是/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/hive/lib放置好lib之后,啟動hive,接著出現java.sql.SQLException:Column name pattern can not be NULL or empty.
原因是,一開始使用的jdbc lib是6.x的最新版本,但5.x和6.x在連接時針對某些默認值的檢測值不同,將CM內用到的所有jdbc lib修改為5.x之后解決了這個錯誤啟動hdfs后,報警:群集中有704個副本不足的塊,百分比副本不足的塊:100%。臨界閾值:40%
解決方案:通過命令更改已經上傳的文件的副本數(使用hdfs用戶)
12.python連接hive時, Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: no
安裝3個庫
cyrus-sasl-plain
cyrus-sasl-devel
cyrus-sasl-gssapi