公司給分配了3臺新的虛擬機,打算從頭配置一下zookeeper,kafka,storm,hadoop,hbase的環境。html
(之後配置mongodb,spark的時候,在陸續更新,目前(2016/4/21)只接觸這麼多)java
配置的過程當中發生了一些問題。這裏共享一下筆記。固然,我作配置的時候的原則是:node
只配置知道的,不知道的就不去配置。雖然會發生問題,可是在解決問題的過程當中,能達到學習的目的。linux
因此,我在配置的過程當中,才發生了下面這麼多的弱智的問題。略有愧疚。因此,每每前期要比別人花上更多的時間和精力。web
-----------------------mongodb
軟件版本:(不一樣版本的問題有可能不同,這裏的解決方法僅供參考,出現問題概不負責)apache
【zookeeper】:zookeeper-3.4.6.tar.gz分佈式
【kafka】:kafka_2.9.2-0.8.1.1.tgzoop
【storm】:apache-storm-0.9.5.tar.gz學習
【hadoop】:hadoop-2.7.1.tar.gz
【hbase】:hbase-1.2.1-bin.tar.gz
-----------------------
(1)查看zookeeper.out的日誌發現了以下錯誤。
後來發現是個人配置文件中,將dataDir的路徑寫錯了,修改以後就再也不出現這個錯誤。
這裏其實只是個人一個最單純的錯誤,留下這個錯誤的目的是:養成查看日誌的習慣。大多數問題經過查看日誌是能夠找到緣由的。
(2)查看zookeeper.out的日誌發現了以下錯誤。
日誌中提示是端口發生了衝突,嘗試更換了一下端口。問題解決。
大多數狀況下,咱們都會使用zookeeper自帶的端口號,當集羣中啓動的服務不少的時候,是會發生端口號衝突的。
(3)hadoop的配置文件不知道該如何配置。(無圖)
hadoop的集羣構建的時候,基本上都須要配置下面幾個文件:
hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
可是,根據Hadoop的版本不一樣,有可能配置的內容會有些許區別,網上的配置方法也衆說紛紜。
固然,仍是要感謝網上的人能將配置項加上中文翻譯的。
我最初配置的時候,是打算參考正確答案(官網),結果官網上羅列了不少的配置項,
後來諮詢了一些大牛獲得以下結論:(固然,這個結論仍是須要驗證的)
①、官網上的配置項是一個「合集」,每一項都介紹的很詳細。可是,其實大部分都用不上,最低配其實大部分指定點路徑就好了。
②、除開JAVA_HOME等必須配置的項目以外,即便什麼都不配,按理說也能夠啓動起來。
總結來講:配置文件須要按需配置
(4)中止hadoop的時候出現"「no datanode to stop"的錯誤
網上大概有三個方法來解決這個問題,我這裏偷懶羅列一下。我此次是用第③種方法解決的。
【第一種解決方法】
①、刪除「/usr/hadoop/tmp」裏面的內容:rm -rf /usr/hadoop/tmp
②、從新建立「/usr/hadoop/tmp」文件夾。
③、刪除「/tmp」下以「hadoop」開頭文件。
④、從新格式化hadoop:hadoop namenode -format
⑤、從新啓動hadoop
【第二種解決方法】
修改每一個Slave的namespaceID,使其與Master的namespaceID一致。
或者
修改Master的namespaceID使其與Slave的namespaceID一致。
Master的「namespaceID」位於「/usr/hadoop/tmp/dfs/name/current/VERSION」文件裏面,
Slave的「namespaceID」位於「/usr/hadoop/tmp/dfs/data/current/VERSION」文件裏面。
【第三種解決方法】
在從新格式化分佈式目錄及對應文件時,須要將NameNode及DataNode上所配置的dfs.name.dir對應的路徑刪掉或移除,不然hadoop沒法正常工做。
根據某資料所說的,這是爲了不因爲格式化而刪掉已有且有用的的hdfs數據,因此格式化前dfs.name.dir對應的路徑應當是不存在的。
(5)中止hadoop的時候出現"no nodemanager to stop"的錯誤
網上找到了一篇很牛的博客(不知道是否是原創)
看了這篇博客以後,總算知道了PID的意義和配置的必要性。配置一下以後,果然解決了。
我修改了兩個文件的PID的保存位置:
①、hadoop-env.sh
②、yarn-env.sh
須要注意如下兩點:
一、hadoop-env.sh中已經郵PID_DIR的屬性了,修改它的值就能夠,yarn-env.sh須要本身追加屬性
二、記住要先關閉Hadoop再修改,否則你修改完又沒法關閉了。
(6)nodemanager啓動後一段時間自動關閉
略有感慨,老是有大牛可以寫出很是透徹的分析。此次也找到了一篇很好的博客:
http://my.oschina.net/u/1451042/blog/223235
按照博客上的說法,若是不在yarn-site.xml中追加yarn.resourcemanager.hostname,
nodemanager啓動後要經過心跳機制按期與RM通訊,不然RM會認爲NM死掉,會中止NM的服務。
以下如所示,修改yarn-site.xml後,問題解決。
(7)HBase的regionServer沒法經過Master節點啓動
現象以下圖所示,Master節點到時能夠啓動了,Slave節點未能與Master一同啓動。
下圖中左面是Master節點的進行狀態,右面是Slave節點的進程狀態。
緣由是hbase-site.xml中【hbase.cluster.distributed】屬性沒有配置。
若是不設置這個屬性,就不能構成徹底集羣模式。像下圖所示追加屬性以後,ReginServer正常啓動。
(8)HBase的RegionServer過會就自動關閉
按照上述問題6中配置完成以後,過了一會我又去看了一下進程狀態,發現Slave節點的RegionServer進行忽然消失了。
(經過問題1養成了查看Log的好習慣)將原來的Log日誌所有刪除掉,從新啓動Hbase,嘗試實時監控Slave端的Log日誌,
發現Log中出現大量的下面的日誌:
從Log中能看出來,貌似一直在嘗試與ZK集羣建創建鏈接,但是鏈接不上。因而乎,想到了配置文件中的須要追加zookeeper的配置。
向下面這樣修改以後,再次監控上面的Log,發現不在出現這個問題了。
注意:在配置zookeeper的地址的時候,若是不寫明後面的端口號,默認爲2181,因爲我修改過默認端口號,因此必須寫明。
若是沒有修改過端口號,value中寫[master,slave1,slave2]或者[192.168.1.179,192.168.1.180,192.168.1.181]均可以。
另外有一點也須要注意,若是須要zookeeper和hbase分別單獨啓動,不須要Hbase啓動的時候自動去啓動zookeeper時,
須要在hbase-env.sh的屬性【HBASE_MANAGES_ZK】設置爲false。默認是true的。修改後以下:
(9)啓動hadoop的時候,老是提示下面的警告
在公司的時候,使用的版本是2.7.1沒有出現這個問題,週末在家搞的時候,使用的是本身機器上的虛擬機,
hadoop的版本爲2.5.1,就會出現這個問題。
在網上查看了一下相關信息,說是因爲本地庫沒有加載成功的緣由,使用hadoop checknative查看了一下,確實是有問題。
比較蛋疼的是,在網上找到的文章中,都是說在hadoop-env.sh中加入如下下面配置就能夠解決。
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/"
結果嘗試了幾回以後沒有效果。開啓hadoop的debug模式以後,檢測了一下啓動Log。有以下提示:
說明系統中的glibc的版本和libhadoop.so須要的版本不一致致使。查看一下系統的libc版本。顯示版本爲2.12
*後來在網上找到一個與我同樣的問題的博客:http://blog.sina.com.cn/s/blog_4eca88390102vn86.html
到網站【http://ftp.gnu.org/gnu/glibc/】上下載【glibc-2.14.tar.bz2】和【glibc-linuxthreads-2.5.tar.bz2】上傳到Linux上。
(待更新)
--END--