Cloudera Manager、CDH零基礎入門、線路指導

天府雲創發表於2017-04-01


問題導讀:
1.什麼是cloudera CM 、CDH?
2.CDH、CM有哪些版本?
3.CDH、CM有哪些安裝方式?
4.CDH如何開發?



 

我們知道cloudera CDH 是為簡化hadoop的安裝,也對對hadoop做了一些封裝。那麼我們就像嘗試學習cloudera。
cloudera本質hadoop的封裝,那麼學起來,應該不難。不就是下載下來,然後自動安裝,最後管理hadoop生態系統的一些服務。
的確是這樣的,但是也沒有我們想象的那麼簡單。

基礎知識
那麼我們就開始第一步吧,第一步之前,那就是你的基礎,這個是很關鍵的,如果不會使用Linux,那麼你需要看一下另外一篇文章:零基礎學習hadoop到上手工作線路指導(初級篇)。可以看看Linux的基礎知識模組。需要掌握的內容還是不少的:




Linux掌握了,那麼我們是否需要掌握虛擬機器的基礎知識,在搭建hadoop叢集中,可以這些是必須掌握的,那麼cloudera是否需要,也是需要的,這裡就不在羅列了,詳細參考零基礎學習hadoop到上手工作線路指導(初級篇)。但是cloudera CM的安裝比起hadoop叢集的安裝對硬體的要求更高。記憶體至少10G,為什麼會這麼多,如果少於10G是否可以,答案是可以的,但是後面你會遇到各種問題,或許都找不到答案。
對於cloudera-scm-server就需要至少4G的記憶體,cloudera-scm-agent的記憶體至少也需要1.5G以上。那麼如果你的機器是8G的,還是很吃力的。
在安裝的過程中,後面有很多的服務安裝遇到問題的可能性是很大的。

什麼是CDH

hadoop是一個開源專案,所以很多公司在這個基礎進行商業化,Cloudera對hadoop做了相應的改變。
Cloudera公司的發行版,我們將該版本稱為CDH。


很多新手問的最多的問題是,哪個是收費的,那個是免費的。
Cloudera Express版本是免費的
Cloudera Enterprise是需要購買註冊碼的

更多內容:
Cloudera Hadoop什麼是CDH及CDH版本介紹

CDH(Cloudera)與hadoop(apache)對比

大資料架構師基礎:hadoop家族,Cloudera產品系列等各種技術





官網介紹
 
當我們學習的時候,我們該如何學習,有兩種方式:第一種:先理論,後實踐
第二種:先實踐,後理論

上面兩種方式各有各的場合,如果你要去面試、考試、搞理論思想類,第一種方式是沒有問題的。因為這些都是停留在思想層面的。
對於一個程式設計技術人員來講,本人覺得第二種方式更加的短平快。
上面兩種方式都有些絕對,最佳的方式就是實踐與理論相結合。
這裡撰文一下,引用孔子的一句話
學而不思則罔 思而不學則殆

只看書,不實踐,或則只倒騰部署、停留在某些問題得不到解決,但是又不去看書、百度、谷歌查詢解決問題,這樣也是不行的。



好了,開始我們的官網:
官網是我們學習標準,所以我們首先要記住官網地址:
主頁:
http://www.cloudera.com/content/cloudera/en/home.html
進入官網我們可以做些什麼事情:
1.提供API
2.檢視部署文件
3.下載安裝包
那麼我們如何查詢API,如何查詢部署文件,如何下載安裝包?
詳細可以檢視
cloudera(CDH)官網介紹:安裝包、離線包該如何下載、官方文件等介紹






安裝包下載:
同時附上各個版本包的地址:
Cloudera文件彙總
http://www.cloudera.com/content/support/en/documentation.html
CDH4、CDH5包彙總
http://archive.cloudera.com/cdh4/
http://archive.cloudera.com/cdh5/
CM4、CM5包彙總
http://archive.cloudera.com/cm4/
http://archive.cloudera.com/cm5/

官網CDH5下載
http://www.cloudera.com/content/ ... /cdh/cdh-5-1-0.html

以前版本地址:
CDH1~CDH3
http://archive-primary.cloudera.com/cdh/


當我們看到安裝的時候,同時也困擾著我們,我們該選擇哪個安裝包。

首先需要介紹下CM(Cloudera Manager)及CDH的安裝方式:

CM(Cloudera Manager)有三種安裝方式:

1.第一種使用cloudera-manager-installer.bin安裝
這種安裝方式,只要從官網下載cloudera-manager-installer.bin,然後執行這個bin檔案,剩下的就是等待下載和安裝。但是這個時間不是一般的長,最好吃個飯,睡個覺,最後看到還在安裝過程中。此帖安裝步驟及遇到問題記錄很詳細,可參考
Cloudera Manager5及CDH5線上(cloudera-manager-installer.bin)安裝詳細文件


Cloudera Manager5及CDH5安裝指導(終極線上安裝)

遇到的問題:
當我們安裝完畢CM,那麼我們就要新增主機,主機新增完畢,我們會看到安裝進度:

 


但是並不是每個人都能看到上面進度,而是看到下面錯誤:
Detecting Cloudera Manager Server...
Detecting Cloudera Manager Server...
BEGIN host -t PTR 192.168.1.198
198.1.168.192.in-addr.arpa domain name pointer localhost.
END (0)
using localhost as scm server hostname
BEGIN which python
/usr/bin/python
END (0)
BEGIN python -c 'import socket; import sys; s = socket.socket(socket.AF_INET); s.settimeout(5.0); s.connect((sys.argv[1], int(sys.argv[2]))); s.close();' localhost 7182
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused
END (1)
could not contact scm server at localhost:7182, giving up
waiting for rollback request

上面錯誤該如何解決:
可以使用下面方法解決:
  1. mv /usr/bin/host /usr/bin/host.bak
複製程式碼



2.第二種使用rpm、yum、apt-get方式線上安裝
這種安裝方式,在網上看的有點眼花繚亂,可能是因為我們對yum、apt、rpm瞭解的不多造成的,對於Linux基礎缺乏的,可以參考:yum與rpm、apt的區別:rpm的缺陷及yum的優勢,總的來說:由於rpm依賴關係不好,所以產生了yum,而yum和apt則都是Linux的包管理工具,並且解決了包與包的依賴關係。

這裡列出一些安裝文件
ubuntu 12.04 安裝 Cloudera Manager5及CDH5(Mysql)【新增yum源方式安裝叢集】

遇到問題1:記憶體過小
使用yum安裝因為mysql的配置至少需要對Cloudera server 4G的記憶體,否則mysql的重啟過程中,就會遇到unknown instance.

遇到問題2:介面無法訪問
介面無法訪問,分為兩種情況
一種是Cloudera-manager-server沒有完全起來

當我們執行下面命令:
 


如果現在,輸入url,訪問web,可能會是無法訪問
host/ip:7180,我這裡是172.16.77.60:7180

 


大概需要等10分鐘左右,介面就可以訪問了。

 

一種則是許可權問題
所以我們初次安裝儘量使用root.還有我們需要會看日誌。

Linux日誌的位置:
下面為server日誌

 


下面為agent日誌
 

同時在我們安裝服務的過程中,我們還需要會檢視角色日誌,這樣從web介面就是可以看到,因為在我們安裝過程中,服務的安裝沒有那麼順利。
這裡暫時沒有截圖,我們只要記住角色日誌,在介面中找到即可。 


遇到問題3:無法找到cloudera agent客戶端

我們使用下面命令安裝了agent
  1. sudo apt-get install cloudera-manager-agent cloudera-manager-daemons
複製程式碼
當然還有很多其它需要安裝,當我們的agent安裝成功後,為什麼我們的的介面中不能發現agent.


本來我們有三臺,但是卻只有一臺,而且是cloudera server本地的agent





這是因為我們的在安裝的過程中,agent都指向了本地localhost.
我們開啟配置檔案
  1. sudo nano  /etc/cloudera-scm-agent/config.ini
複製程式碼


修改
server_host為server ip地址
server_port為7180

下圖CDH即為cloudera server的hostname



修改完畢:
首先重啟Agent
sudo service cloudera-scm-agent restart
然後重啟server
sudo service cloudera-scm-server restart
這時候會發現已經生效。
更詳細內容可以參考
記錄cloudera Manager安裝Cloudera-Scm-Agent如何指向Cloudera-Scm-Server


更多文件可以參考:
Cloudera Manager 和 CDH 4 終極安裝(一)

ClouderaManager以及CHD5.1.0叢集部署安裝

Cloudera Manager (centos)離線安裝詳細介紹

CM5、CDH5安裝(CDH5半自動離線安裝)

Cloudera Manager 5 和 CDH5 本地(離線)安裝指南

Cloudera Manager 和 CDH5 本地(離線)安裝指導




3.第三種使用是Tarballs的方式

這種方式網上資料很少
安裝的命令如下:
  1. $ tar xzf cloudera-manager*.tar.gz -C /opt/cloudera-manager
複製程式碼
這個跟hadoop的安裝方式是一樣的
安裝的方法詳細可參考:


這裡在列出官網給出的三種安裝方式:


如果想安裝CM,這次再次強調一定要有足夠的記憶體。並且我們安裝完畢CM,一般會

4.安裝失敗處理
上面如果我們安裝失敗該如何處理:
使用 cloudera-manager-installer.bin(Parcles)安裝失敗後解除安裝cloudera

解除安裝 Cloudera Manager 5.1.x.和 相關軟體【官網翻譯:高可用】
5.目錄結構:
由於我們大多采用線上安裝的方式,所以出血,我們根本不知道cloudera安裝在了什麼位置,詳細可以參考下面內容

解析Cloudera Manager內部結構、功能包括配置檔案、目錄位置等
亦可參考下面帖子:
解除安裝 Cloudera Manager 5.1.x.和 相關軟體【官網翻譯:高可用】









CDH安裝方式:

Yum/Apt包,Tar包,RPM包,CM安裝
這些包的下載,可以在上文安裝包彙總中可以找到。
CDH1~CDH3
http://archive-primary.cloudera.com/cdh/

CDH4~CDH5
http://archive.cloudera.com/cdh4/
http://archive.cloudera.com/cdh5/


安裝文件,下面可以參考
Linux(ubuntu12.04)單節點偽分佈安裝CDH5.1.X及提交wordcount到yarn高可靠文件
各個版本Linux單節點偽分佈安裝CDH5.1.X及提交wordcount到yarn高可靠文件


Hadoop CDH5 手動安裝偽分散式模式
通過CM方式安裝,大多在安裝CM的時候,已經安裝了CDH。




CDH開發

安裝完畢,我們還想開發提到開發,我們就想到eclipse外掛,其實我們在開發過程中,外掛作用就是幫助我們能夠方便的看到在Linux的檔案。
所以開發方式也有兩種,
一種外掛開發
我們如何找到eclipse外掛,可以參考
cloudera CDH(5)開發方式及CDH eclipse外掛編譯總結


一種是無外掛開發
無外掛開發,也就是直接新增開發包

可以參考:hadoop開發方式總結及操作指導

先總結到此,希望大家有所收穫。




有的同學反映寫的不夠細,這裡在補充一些內容:
Cloudera Manager Server啟動後又掛掉的原因總結

我們安裝CDH的時候,會碰到cloudera server啟動後又掛掉了,這是什麼原因?
檢視日誌:包下面問題

可是明明已經安裝jdk,並且已經設定了JAVA_HOME
  1. java -version
複製程式碼


也能返回版本
這是怎麼回事,猜測cloudera server(5)認oracle jdk,對於sun jdk也需要是線上安裝(至於是不識別sun jdk還未驗證)。同時還必須是jdk1.7.





 



也就是需要執行下面命令:
  1. sudo apt-get -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold -y install oracle-j2sdk1.7
複製程式碼
原因是在後面執行scm-server資料庫配合的時候,如果找不到Java_home可能會初始化失敗。
Java_home預設安裝路徑如下。
  1. /usr/lib/jvm/java-7-oracle-cloudera
複製程式碼

從上面我們得出,如果想安裝順序,我們最好使用下面命令來安裝jdk1.7
sudo apt-get -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold -y install oracle-j2sdk1.7

執行上面命令,那麼還需要做下面工作:



然後我們接著執行命令:
  1. service cloudera-scm-server restart
複製程式碼

認為終於好了,但是不幸的是,這次堅持了不到兩分鐘又掛掉了。


這次為什麼會掛掉,不得不檢視日誌了:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creati
ng bean with name 'entityManagerFactoryBean': FactoryBean threw exception on obj

ect creation; nested exception is javax.persistence.PersistenceException: org.hi
bernate.exception.GenericJDBCException: Could not open connection
        at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.
doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
        at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.
getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getObje
ctForBeanInstance(AbstractBeanFactory.java:1440)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBe
an(AbstractBeanFactory.java:247)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:192)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver
.resolveReference(BeanDefinitionValueResolver.java:322)
        ... 17 more
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.Gener
icJDBCException: Could not open connection
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityMan
agerImpl.java:1387)
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityMan
agerImpl.java:1310)
        at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException
(AbstractEntityManagerImpl.java:1397)
        at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:62)
        at com.cloudera.enterprise.AbstractWrappedEntityManager.beginForRollback
AndReadonly(AbstractWrappedEntityManager.java:85)
        at com.cloudera.enterprise.dbutil.DbUtil.isInnoDbEnabled(DbUtil.java:472
)



2014-09-22 17:51:27,328 ERROR [main:spi.SqlExceptionHelper@147] An attempt by a 
client to checkout a Connection has timed out.
2014-09-22 17:51:27,339  INFO [main:support.DefaultListableBeanFactory@422] Dest
roying singletons in org.springframework.beans.factory.support.DefaultListableBe
anFactory@715dcdeb: defining beans [commandLineConfigurationBean,entityManagerFa
ctoryBean,com.cloudera.server.cmf.TrialState,com.cloudera.server.cmf.TrialManage
r,com.cloudera.cmf.crypto.LicenseLoader]; root of factory hierarchy
2014-09-22 17:51:27,341 ERROR [main:cmf.Main@202] Server failed.
org.springframework.beans.factory.BeanCreationException: Error creating bean wit
h name 'com.cloudera.server.cmf.TrialState': Cannot resolve reference to bean 'e
ntityManagerFactoryBean' while setting constructor argument; nested exception is
org.springframework.beans.factory.BeanCreationException: Error creating bean wi
th name 'entityManagerFactoryBean': FactoryBean threw exception on object creati
on; nested exception is javax.persistence.PersistenceException: org.hibernate.ex
ception.GenericJDBCException: Could not open connection
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver
.resolveReference(BeanDefinitionValueResolver.java:328)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver
.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
        at org.springframework.beans.factory.support.ConstructorResolver.resolve
ConstructorArguments(ConstructorResolver.java:616)
        at org.springframework.beans.factory.support.ConstructorResolver.autowir
eConstructor(ConstructorResolver.java:148)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBean(AbstractAutowireCapableBeanFactory.java:456)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb
ject(AbstractBeanFactory.java:293)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr
y.getSingleton(DefaultSingletonBeanRegistry.java:222)

看完日誌,你是否還是雲裡霧裡,這不得不說一下,我們該如何利用日誌。
日誌的作用是什麼?日誌的作用是提示,它大部分會給我們明確說遇到了什麼問題,比如許可權拒絕,等,但是有些你是看不明白的,那我們該如何處理?只能靠你的靈感了,沒有靈感怎麼辦?那就需要自己縷順序,自己是怎麼安裝、怎麼操作的,然後從中能夠發現問題。漸漸的你就能培養出靈感了。

上面其實我只知道報的是一個Java異常,而且還跟連結有關係。
靈感來了,就像到了,是因為沒有執行下面命令:

配置cloudera-manager-server資料庫
  1. sudo /usr/share/cmf/schema/scm_prepare_database.sh mysql  -uroot -p --scm-host localhost scm scm scm_password
複製程式碼
但是又出問題了,如下:





其實這個問題已經解決了,安裝我們可以進入上面步驟。
當我們安裝完畢,ok了,終於好了:

當我們看到下面內容的時候,all done,說明我們配置成功了。



然後我們再次重啟
  1. service cloudera-scm-server restart
複製程式碼

ok始終在堅挺著,沒有掛機,問題得到解決

相關文章