公司給分配了3台新的虛擬機,打算從頭配置一下zookeeper,kafka,storm,hadoop,hbase的環境。
(以后配置mongodb,spark的時候,在陸續更新,目前(2016/4/21)只接觸這么多)
配置的過程中發生了一些問題。這里共享一下筆記。當然,我做配置的時候的原則是:
只配置知道的,不知道的就不去配置。雖然會發生問題,但是在解決問題的過程中,能達到學習的目的。
所以,我在配置的過程中,才發生了下面這么多的弱智的問題。略有愧疚。所以,往往前期要比別人花上更多的時間和精力。
-----------------------
軟件版本:(不同版本的問題有可能不一樣,這里的解決方法僅供參考,出現問題概不負責)
【zookeeper】:zookeeper-3.4.6.tar.gz
【kafka】:kafka_2.9.2-0.8.1.1.tgz
【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
需要注意以下兩點:
1、hadoop-env.sh中已經郵PID_DIR的屬性了,修改它的值就可以,yarn-env.sh需要自己追加屬性
2、記住要先關閉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--