0.緒論
之前完全沒有接觸過大數據相關的東西,都是書上啊,媒體上各種吹噓啊,我對大數據,集群啊,分布式計算等等概念真是高山仰止,充滿了仰望之情,覺得這些東西是這樣的:
當我搭建的過程中,發現這些東西是這樣的:
對於初學者來說,我認為缺點如下:
- 1.需要控制,配置的東西太多,並且配置對應並不是很清晰(以后優化集群是否會有很高含金量?)
- 2.整個集群,我覺的從硬件到軟件整體來說還是穩定性有待提高,尤其CDH 集群這塊一會這個主機失去聯系,一會NameNode掛,一會monitor掛,整個使用過程就是在不斷的掛,看日志,挑錯。基本離自動化,智能化還有很大距離。
CDH集群測試主要包括以下幾個方面的內容:
1.裝機(pxe),搭建服務器集群基礎環境
2.安裝CDH集群,調試集群的健康狀況,使集群可用
3.測試集群性能,優化集群,使用測試框架(如Intel的HiBench框架)測試集群性能
1.基礎建設簡稱基建
上一篇文章,我們已經介紹了集群安裝操作系統的大殺器:
在批量安裝完畢系統之后,本節主要圍繞搭建CDH集群的基礎建設進行介紹,基礎建設簡稱基建,主要是為了支撐CDH集群后序工作流暢進行的一系列Linux系統的設置工作,基礎建設工作沒有做好,后面安裝使用集群過程中會出現很多莫名奇妙的錯誤。基建主要包括,免密登錄,時間同步,格式化硬盤,掛載目錄等一些設置,下面為大家分別介紹:
1.1 建立主機分發腳本
新建一個host文件里面逐行設置為主機ip
eg.
192.168.1.1
192.168.1.2
192.168.1.3
新建一個自定義腳本文件:
#!/bin/sh
host= `cat host`
for i in $host
do
echo $i
#將需要分發的命令復制在此處
Done
1.2 免密碼登陸
配置免密碼登錄
1. 執行ssh-keygen命令,點擊兩次“回車”,生成/root/.ssh/id_rsa.pub文件;(使用腳本分發下面兩條命令)
2. cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
3. scp -r /root/.ssh $hostname:/root/
1.3 配置主機基礎環境
修改默認語言為英文
vi /etc/sysconfig/i18n
LANG=”en_US.UTF-8”修改host文件
scp /etc/hosts root@$i:/etc
關閉防火牆以及SELinux
ssh $i ‘service iptables stop’
ssh $i ‘chkconfig iptables off’
ssh $i ‘service ip6tables stop’
ssh $i ‘chkconfig ip6tables off’
ssh $i ‘setenforce 0’
ssh $i ‘echo ‘service iptables stop’ >> /etc/rc.local’
ssh $i ‘echo ‘service ip6tables stop’ >> /etc/rc.local’
ssh $i ‘sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config’同步時間 啟動ntp服務,每5分鍾向服務器同步一次(還需修改時間服務器上的部分配置,具體請百度)
ssh $i ‘cat >>/var/spool/cron/root << EOF
*/5 * * * * /usr/sbin/ntpdate serverIP> /dev/null 2>&1
EOF’
ssh $i ‘echo ‘SYNC_HWCLOCK=yes’ >> /etc/sysconfig/ntpd’
ssh $i ‘hwclock -w’修改用戶句柄限制
ssh $i ‘cat >> /etc/security/limits.conf << EOF
hadoop soft nofile 65000
hadoop hard nofile 65000
hadoop soft nproc 401408
hadoop hard nproc 401408
* soft nofile 65000
* hard nofile 65000
* soft nproc 401408
* hard nproc 401408
EOF’建立掛載目錄(根據自己的硬盤個數)
ssh $i ‘mkdir /data01 /data02 /data03 /data04 /data05 /data06 /data07 /data08 /data09 ‘
格式化硬盤(需批量執行,此處腳本有待升級)
ssh $i
‘parted /dev/sdb mklabel gpt
yes
parted /dev/sdb mkpart primary 0% 100%
mkfs.ext4 -T largefile /dev/sdb1修改/etc/fstab文件
ssh $i ‘cat >> /etc/fstab << EOF
/dev/sdb1 /data01 ext4 defaults,noatime 0 0掛載目錄
ssh $i
‘mount /dev/sdb1 /data01關閉swap交換分區
ssh $i ‘swapoff -a’
ssh $i ‘sysctl -w vm.swappiness=0’
ssh $i ‘echo ‘vm.swappiness=0’ >> /etc/sysctl.conf’關閉大內存頁面
ssh $i ‘cat >> /sys/kernel/mm/transparent_hugepage/defrag << EOF
never
EOFssh $i ‘cat >> /etc/rc.local << EOF
echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
EOF卸載自帶的java環境,可以根據自己的java版本卸載
檢查集群機器是否安裝過openJDK,如果有安裝過,請卸載,執行命令 :rpm -qa | grep jdk
rpm -e xxx #xxx為上一步輸出的rpm包名ssh $i
‘rpm -e –nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
rpm -e –nodeps java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64
rpm -e –nodeps java-1.6.0-openjdk-devel-1.6.0.0-1.66.1.13.0.el6.x86_64
rpm -e –nodeps java-1.6.0-openjdk-javadoc-1.6.0.0-1.66.1.13.0.el6.x86_64’安裝pscp和scala包
ssh $i ‘rpm -i /root/rpms/pssh-2.3.1-5.el6.noarch.rpm /root/rpms/scala-2.10.4.rpm’
配置java1.8.0_66環境
scp -r /usr/java/jdk1.8.0_66 root@$i:/usr/java/
ssh $i ‘rm -rf /usr/java/lastest’
ssh $i ‘ln -s /usr/java/jdk1.8.0_66 /usr/java/lastest’ssh $i ‘cat >> /etc/profile << EOF
JAVA_HOME=/usr/java/jdk1.8.0_66
CLASS_PATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
export JAVA_HOME
PATH=\$HOME/bin:\$JAVA_HOME/bin:\$PATH
export PATH
export CLASS_PATH
EOF’scp /etc/profile root@$i:/etc/
ssh $i ‘source /etc/profile’done
時間同步
ssh $i ‘service ntpd stop
ntpdate lcgm2
ssh $i ‘hwclock -w’
ssh $i ‘chkconfig ntpd on’
done配置yum源,開啟http服務
Yum源先mount在var/www/html/下面,在
/etc/yum.repos.d/rhel-source.repo文件修改內容
一些可能用到的命令:
建立多級目錄: mkdir -p /x/xx
查看系統是否開啟cloudera相關服務:chkconfig –list|grep cloudera
查看eth0網卡網絡速度:ethtool eth0|grep -i speed
2.安裝配置Cloudera-Manager(離線)
在線安裝方式由於需要安裝的安裝包過大,時間可能非常長,建議大家下載安裝包進行離線安裝。主要安裝Cloudera Manager Server 和Agent。
2.1 離線倉庫安裝准備
在cloudrea下載離線倉庫,下載地址
下載cm5:
https://archive.cloudera.com/cm5/repo-as-tarball/5.8.0/cm5.8.0-centos6.tar.gz
下載cdh5:
https://archive.cloudera.com/cdh5/parcels/5.8.0/
列表:
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
下載驗證:https://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.8.0/repodata/
下載安裝腳本:
http://archive.cloudera.com/cm5/installer/latest/cloudera-manager-installer.bin
2.2 主節點解壓安裝
cloudera manager的目錄默認位置在/opt下,解壓:tar xzvf cloudera-manager*.tar.gz將解壓后的cm-5.*和cloudera目錄放到/opt目錄下(類似在windows把軟件安裝在D:/software)。
為Cloudera Manager 5建立數據庫,可以用Mysql,或者自帶的postgresql ,本文采用自帶的數據庫進行測試。
配置離線倉庫地址:
- 開啟apache服務:service httpd start
- 將下載的cloudera倉庫移到/var/www/html目錄下,調整目錄結構:
cdh5目錄結構:
cm5目錄結構:
chmod u+x cloudera-manager-installer.bin,然后./*.bin該文件相關啟動腳本,就可以進入安裝界面進行安裝啦。
service cloudera-scm-server start (這個啟動有點慢,可以關注日志變動情況 )
service cloudera-scm-agent start
其中,日志所在路徑是
/var/log/cloudera-scm-server/cloudera-scm-server.log
啟動server后,使用:
/sbin/iptables -I INPUT -p tcp –dport 7180 -j ACCEPT ( 打開7180端口 )
2.3 配置集群
- 1.根據CM引導界面,用戶名admin ,密碼admin。選擇Cloudera Express 免費版。點擊下一步到為CDH集群安裝指定主機。
2.輸入需要安裝集群的機器IP地址,包括Cloudera Manager Server 機器。
3.選擇集群的安裝方式,選擇使用數據包,CDH版本選擇自定義,並輸入yum源地址(基建中已經配置了的)
(上圖鏈接地址https可能會出錯)
升級過程中遇到的問題
提示Error Cannot retrieve repository metadata [repomod.xml] for cloudera-cdh5.Please verify its path and try again
(1) 檢查機器的yum及cloudera的yum源配置是否正確
(2) 在Cloudera升級步驟(5)中填寫的apache上cm5包地址是否正確,協議應該使用http而不是https,不然就會出現這種錯誤
(3) 若沒有顯示本地parcel包,可能是路徑填寫錯誤,可以根據配置的遠程yum地址重新填寫。
4.集群安裝狀態,可以看到每台集群的安裝狀態,如果正常則進入下一步。
5.選擇要安裝的CDH組件,我們選擇安裝HBase、HDFS、Hive、Spark、YARN、Zookeeper服務。點擊繼續(hibench測試主要需要這幾個組件),角色服務分配參考如下:
- 6. CM會檢測安裝環境,可能會提示一處安裝警告,比如:
cloudera 建議將/proc/sys/vm/swappiness設置為0,當前設置為60,
則我們需要在集群每台機器上執行命令:
echo 0> /proc/sys/vm/swappiness
王道就是有錯就看日志調試。
7.選擇集群機器的角色分配,對於默認的選擇都可以選擇在Master機器上,當然像Second NameNode可以選擇在非NameNode機器上。注意Cloudera Management Service都選Master。
8.數據庫配置。根據創建數據表選擇所對應的服務即可。
9.集群設置。選擇默認,集群開始安裝,完成,訪問集群serverIP:7180/cmf,ok。
2.4 集群基本優化
2.4.1 關閉Linux THG服務
檢查集群中的各個主機的THG(對虛擬化等的內存資源分配是有好處的,但是對hadoop離線計算IO密集型操作是沒有優勢的,關閉THG可加快處理速度)
1.查看THG
cat /sys/kernel/mm/redhat_transparent_hugepage/defrag
2.關閉THG
echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
2.4.2 設置linux內核參數:vm.swappiness
vm.swappiness值的范圍為0~100,作用是控制應用數據在物理內存和虛擬內存之間的交換,值越低,交換的越少。默認值為60。
查看集群各個主機的此參數值:
cat /proc/sys/vm/swappiness
建議調整值為1:
sysctl -w vm.swappiness=1
2.4.3 配置HDFS
點擊HDFS -> 配置 -> 高級:hdfs-site.xml 的 HDFS 服務高級配置代碼段(安全閥),加入配置使用公平隊列
<property>
<name>ipc.8020.callqueue.impl</name>
<value>org.apache.hadoop.ipc.FairCallQueue</value>
</property>
2.4.4 配置Yarn資源
關於Yarn內存分配與管理,主要涉及到了ResourceManage(集群資源調度協調)、ApplicationMatser(任務資源配置)、NodeManager(YARN節點代理配置)這幾個概念,相關的優化也要緊緊圍繞着這幾方面來開展。
點擊Yarn -> 資源管理:
設置ApplicationMaster Java最大堆棧:800M(AM內存默認1G)
容器內存yarn.nodemanager.resource.memory-mb
計算一個節點需要分配的容器內存方法:
主機內存-操作系統預留內存(12G) - Cloudera Manager Agent(1G) - HDFS DN(1G) – Yarn NM(1G)
= 主機內存-15G
如果安裝了hive.需減掉12G左右內存.
如果安裝了hbase.還需減掉12-16G內存。
如果安裝impala.還需減掉至少16G內存。
例:64G內存主機,如果安裝了hbase,hive,則建議分配的容器內存大約為:25~30G
容器虛擬CPU內核yarn.nodemanager.resource.cpu-vcores
計算一個節點需要分配的容器虛擬內核方法:
(主機cpu核數 – 系統預留1 – Cloudera1 – HDFS1 – Yarn NN 1) * 4
Hbase : -1
例:24核機器,為yarn分配可用cpu核數大約20核左右,按照 核數:處理任務數=1:4(比例可酌情調整),建議分配為80。由於本次集群CPU計算能力沒達到官網建議的比例的要求,大約分配的比例為1:2,分配的核數為30核左右。高級配置中:mapred-site.xml 的 MapReduce 客戶端高級配置代碼段(安全閥)
<property>
<name>mapreduce.tasktracker.outofband.heartbeat</name>
<value>true</value>
</property>
2.4.5 配置oozie
點擊oozie –> 配置 -> 高級 : oozie-site.xml 的 Oozie Server 高級配置代碼段(安全閥),增加配置:
<property>
<name>oozie.launcher.fs.hdfs.impl.disable.cache</name>
<value>true</value>
</property>
<property>
<name>oozie.action.max.output.data</name>
<value>5000000</value>
</property>
2.4.6 配置Oozie HA(用HAproxy負載均衡)
- Web界面操作略
- error:
Oozie could not be start
REASON:java.lang.noSuchFieldError:EXTERNAL_PROPERTY
ERROR: java.lang.noSuchFieldError:EXTERNAL_PROPERTY
Org.cod… jaskson…
導致上面錯誤是oozie的jaskson版本低,替換成1.9.13版本即可
只替換jackson-mapper-asl和jackson-core-asl即可
替換步驟:
1.
先將192.168.188.13的兩jar包拷貝到/opt/cloudera/parcels/CDH/lib/oozie下
2.
find . -name “jackson*” | grep -e “^./lib” | xargs -i dirname {} | sort |uniq | xargs -i cp jackson-* {}
3.
find . -name “jackson*” | grep -e “^./lib” | xargs -i dirname {} |sort | uniq | xargs -i mv {}/jackson-mapper-asl-1.8.8.jar .
4.
find . -name “jackson*” | grep -e “^./lib” | xargs -i dirname {} |sort | uniq | xargs -i mv {}/jackson-core-asl-1.8.8.jar .
2.4.7 其他優化
1.DRF策略
默認配置下,CPU核數和內存是1:1G的比例來啟動任務的。可通過調整參數yarn.nodemanager.resource.memory-mb進行調整
2.每個container的分配多少內存和cpu
當應用程序向resource manager 申請資源(即申請container )時, RM分配給一個container 多大的內存是按照一個最小單位進行分配的。 例如, 我們設置分配的最小單位為4GB, 則RM分配出來的container的內存一定是4G的倍數。 假設現在有一個程序向RM申請 5.1G的內存, 則RM會分配給它一個8GB的container去執行。
yarn.scheduler.minimum-allocation-mb=4096
在實際執行map reduce的job中, 一個container實際上是執行一個map 或者reduce task的jvm的進程。 那么這個jvm在執行中會不斷的請求內存,假設它的物理內存或虛擬內存占用超出了container的內存設定, 則node manager 會主動的把這個進程kill 掉。
這里需要澄清一點, JVM使用的內存實際上分為虛擬內存和物理內存。 JVM中所有存在內存中的對象都是虛擬內存, 但在實際運行中只有一部分是實際加載在物理內存中的。 我們使用linux的top 可以看到 VM, RES, 前者是虛擬內存,后者可以看成近似是實際占用的物理內存。 因此在設置mapreduce的task的 jvm opts 參數時, 應將heap size 設置的比container允許的最大虛擬內存小。 這樣jvm 不會因為申請過多的內存而被node manager 強制關閉。 當然設置最大heap size 如果在執行中被超過, jvm就會報 OutOfMemoryException。
同時還有一個參數,設定了RM可以分配的最大的container是多大。 假設應用程序向RM申請的資源超過了這個值, RM會直接拒絕這個請求。
yarn.scheduler.maximum-allocation-mb
3.HiBench集群性能測試
在大數據領域中,集群的性能很大程度上我認為主要是由整體的網絡,數據吞吐量決定的,在使用HiBench測試時候發現,使用傳統電口千兆網絡的任務運行時間比光網任務運行時間要慢10s左右。HiBench的基准測試集是用來衡量一個大數據平台(基於Hadoop)性能的基准測試集,包含了文件系統的IO性能,系統的批處理吞吐,數據倉庫用的OLAP分析算子,機器學習的處理能力,以及流處理系統的能力。
切換到光纖后,需要修改機器機器ip,這時候cdh居然沒法啟動了,百度之后,發現如果使用自帶數據庫postgresql,需要修改hosts表中記錄的元數據信息:修改CDH集群ip
3.1 簡介
hibench作為一個測試hadoop的基准測試框架,提供了對於hive:(aggregation,scan,join),排序(sort,TeraSort),大數據基本算法(wordcount,pagerank,nutchindex),機器學習算法(kmeans,bayes),集群調度(sleep),吞吐(dfsio),以及新加入5.0版本的流測試:
we provide following streaming workloads for SparkStreaming, Storm .
一個完整的TeraSort測試需要按以下三步執行:
- 用TeraGen生成隨機數據
- 對輸入數據運行TeraSort
- 用TeraValidate驗證排好序的輸出數據
所有hibench測試基本都是這樣的流程,生成數據,運行,輸出結果。
3.2 配置並編譯HiBench
從GitHub下載HiBench開源包,本篇會基於HiBench-5.0為例。https://github.com/intel-hadoop/HiBench。如果是基於CDH 5.5測試,建議使用HiBench-5.0,其中包含了Spark 1.5的編譯包。
編譯
- 添加JAVA_HOME 環境變量
- 注釋掉${HIBENCH_HOME} /src/streambench/pom.xml中兩行
<!-- <module>stormbench</module> -->
<!-- <module>samzabench</module> -->
- 調用編譯腳本:${HIBENCH_HOME}/bin/build-all.sh
配置
編輯 HiBench Configuration File:
cd ${HIBENCH_HOME}/conf
cp 99-user_defined_properties.conf.template 99-user_defined_properties.conf
編譯配置文件,如下修改一些參數:
hibench.hadoop.home /opt/cloudera/parcels/CDH/lib/hadoop
hibench.hadoop.mapreduce.home /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce
hibench.spark.home /opt/cloudera/parcels/CDH/lib/spark
hibench.hdfs.master hdfs://cdh-node-11.cdhtest.com
hibench.hadoop.configure.dir /etc/hadoop/conf
hibench.masters.hostnames master # Resource Manager addresses
hibench.slaves.hostnames hostname…# Node Manager addresses
hibench.spark.master yarn-client
hibench.spark.version spark1.6
spark.kryoserializer.buffer 2000m # 否則會出現大量spark.kryoserializer.buffer.mb被啟用的警告
hibench.streamingbench.zookeeper.host zookeeper-hostnames
hibench.streamingbench.brokerList all-hostnames
hibench.streamingbench.kafka.home /opt/cloudera/parcels/KAFKA修改benchmarks.lst文件,只運行有必要的測試集,例:
#aggregation
#join
#kmeans
#pagerank
#scan
#sleep
sort
wordcount
#bayes
terasort
#nutchindexing
dfsioe修改language.lst文件,只運行有必要的語言
cd ${HIBENCH_HOME}/conf
在language.lst文件中,將以下兩行刪除
spark/java
spark/python修改load-config.py文件,確保Bench在運行時能找到唯一的包:
$HiBench-Home/bin/functions/load-config.py
將hadoop-mapreduce-client-jobclient*-tests.jar改為hadoop-mapreduce-client-jobclient-tests.jar
Bench在運行時有一些固化的目錄和CDH不一致,需要建立目錄引用
建立目錄引用
mkdir -p /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/share/hadoop
cd /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/share/hadoop
ln -sf /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce mapreduce2Bench會在HDFS根目錄下生成文件,將HDFS的根目錄權限修改為777:
sudo -u hdfs hadoop fs -chmod 777 /
(可選)如果在Kerberos啟用的狀況下,請增加以下步驟:
# 設置環境變量
export HIBENCH_HOME=/root/Downloads/HiBench-master
export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera
export JAVA_LIBRARY_PATH=$JAVA_LIBRARY_PATH:/opt/cloudera/parcels/CDH/lib/hadoop/lib/native
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/cloudera/parcels/CDH/lib/hadoop/lib/native
export SPARK_YARN_USER_ENV=”JAVA_LIBRARY_PATH=$JAVA_LIBRARY_PATH,LD_LIBRARY_PATH=$LD_LIBRARY_PATH”# 重新登錄Kerberos
kdestroy
kinit -k -t
運行
- 命令行輸入
${HIBENCH_HOME}/bin/run-all.sh
3.3 HiBench基本優化配置
**優化基本原則** 在固定數據量的前提下,一般設置成讓MapReduce作業在一輪Map、Reduce內結束,否則會增加MapReduce進程的調度開銷。但如果輸入的數據量過大,有可能會因為單個Map或者Reduce的內存消耗過大而到時嚴重的GC問題,這個需要在運行時對Map或者Reduce任務進程需要監測。 **YARN基本配置**– | – |
---|---|
NodeManager | Container vCores數量就是系統的virtual core的數量 Container Memory配置成節點上可用內存的75%到80%之間(如128GB的機器,可以設置96GB) |
ResourceManager | Fair Scheduler調度器 最小容器內存1GB 最小容器CPU 1個核 最大容器內存=NodeManager Container內存的75%~80% 最大容器CPU=NodeManager Container CPU的75%~80% 增量內存512MB 增量CPU 1個核 |
Gateway | mapreduce.map/reduce.max.mb = 2GB mapreduce.map/reduce.java.opts = max.mb * 0.8 |
附錄(CDH 相關目錄結構功能簡介)
**1.相關目錄****2.配置**/var/log/cloudera-scm-installer : 安裝日志目錄。
/var/log/* : 相關日志文件(相關服務的及CM的)。
/usr/lib64/cmf/ : Agent程序代碼。
/var/lib/cloudera-scm-server-db/data : 內嵌數據庫目錄。
/usr/bin/postgres : 內嵌數據庫程序。
/etc/cloudera-scm-agent/ : agent的配置目錄。
/etc/cloudera-scm-server/ : server的配置目錄。
/etc/clouder-scm-server/db.properties 默認元數據庫用戶名密碼配置
/opt/cloudera/parcels/ : Hadoop相關服務安裝目錄。
/opt/cloudera/parcel-repo/ : 下載的服務軟件包數據,數據格式為parcels。
/opt/cloudera/parcel-cache/ : 下載的服務軟件包緩存數據。
/etc/hadoop/* : 客戶端配置文件目錄。
- Hadoop配置文件:
配置文件放置於/var/run/cloudera-scm-agent/process/目錄下。如:
/var/run/cloudera-scm-agent/process/193-hdfs-NAMENODE/core-site.xml
這些配置文件是通過Cloudera Manager啟動相應服務(如HDFS)時生成的,內容從數據庫中獲得(即通過界面配置的參數)。
在CM界面上更改配置是不會立即反映到配置文件中,這些信息會存儲於數據庫中,等下次重啟服務時才會生成配置文件。且每次啟動時都會產生新的配置文件。
CM Server主要數據庫為scm基中放置配置的數據表為configs。里面包含了服務的配置信息,每一次配置的更改會把當前頁面的所有配置內容添加到數據庫中,以此保存配置修改歷史。
scm數據庫被配置成只能從localhost訪問,如果需要從外部連接此數據庫,修改
vim /var/lib/cloudera-scm-server-db/data/pg_hba.conf
文件,之后重啟數據庫。運行數據庫的用戶為cloudera-scm。
- 查看配置內容
直接查詢scm數據庫的configs數據表的內容。
訪問REST API: http://hostname:7180/api/v4/cm/deployment,返回JSON格式部署配置信息。
- 配置生成方式
CM為每個服務進程生成獨立的配置目錄(文件)。所有配置統一在服務端查詢數據庫生成(因為scm數據庫只能在localhost下訪問)生成配置文件,再由agent通過網絡下載包含配置文件的zip包到本地解壓到指定的目錄。
配置修改
CM對於需要修改的配置預先定義,對於沒有預先定義的配置,則通過在高級配置項中使用xml配置片段的方式進行配置。而對於/etc/hadoop/下的配置文件是客戶端的配置,可以在CM通過部署客戶端生成客戶端配置。數據庫
Cloudera manager主要的數據庫為scm,存儲Cloudera manager運行所需要的信息:配置,主機,用戶等。CM結構
CM分為Server與Agent兩部分及數據庫(自帶更改過的嵌入Postgresql)。它主要做三件事件:
管理監控集群主機。
統一管理配置。
管理維護Hadoop平台系統。
實現采用C/S結構,Agent為客戶端負責執行服務端發來的命令,執行方式一般為使用python調用相應的服務shell腳本。Server端為Java REST服務,提供REST API,Web管理端通過REST API調用Server端功能,Web界面使用富客戶端技術(Knockout)。
Server端主體使用Java實現。
Agent端主體使用Python, 服務的啟動通過調用相應的shell腳本進行啟動,如果啟動失敗會重復4次調用啟動腳本。
Agent與Server保持心跳,使用Thrift RPC框架。升級
在CM中可以通過界面向導升級相關服務。升級過程為三步:
1.下載服務軟件包。
2.把所下載的服務軟件包分發到集群中受管的機器上。
3.安裝服務軟件包,使用軟鏈接的方式把服務程序目錄鏈接到新安裝的軟件包目錄上。卸載
sudo /usr/share/cmf/uninstall-scm-express.sh, 然后刪除/var/lib/cloudera-scm-server-db/目錄,不然下次安裝可能不成功。開啟postgresql遠程訪問
CM內嵌數據庫被配置成只能從localhost訪問,如果需要從外部查看數據,數據修改vim /var/lib/cloudera-scm-server-db/data/pg_hba.conf文件,之后重啟數據庫。運行數據庫的用戶為cloudera-scm。
參考文獻
1.CDH官方文檔
2.http://www.cloudera.com/documentation.html
3.CDH5.8官方文檔 http://www.cloudera.com/documentation/enterprise/latest.html
4.http://blog.selfup.cn/1631.html#comment-403
5.https://github.com/intel-hadoop/HiBench