hadoop+hbase+zookeeper環境搭建過程總結

     安裝的環境要求:我用的是x86_64的CentOS6.3 linux操作系統,安裝過程很簡單,一路默認即可。

     搭建開發環境是學習一門新技術的首先要面對的,當然技術的選型也是相當重要,剛開始搭建環境的時候公司讓用cloudera manager CDH4自動在cloudera官網下載安裝hadoop、hbase、zookeeper等,但是這個過程在網速不好的情況下是相當的緩慢。(在天朝訪問國外的網站,你懂得),公司的網速很悲催,導致我杯具的裝了很久,到後來經過各種查資料發現原來將rpm包從官網下載先來之後再安裝是多麼的快了,現在將如何在本地建立安裝文件資源庫分享給大家,步驟如下:

      Step 1: 安裝repo:命令如下:yum install createrepo

    Step 2: 準備安裝所需的rpm文件到一個目錄下,例如、usr/repo

    Step 3: 創建本地資源庫:在usr/repo目錄下執行如下命令:createrepo .  即可在當前目錄下創建repodata的文件夾,其中的xml文件包含所有想要添加到庫的文件。

    Step 4: 創建本地服務器,通過如下命令安裝httpd 服務:

yum installhttpd CentOS 6.3 自帶此服務,一般不需安裝,通過如下命令啓動httpd服務: service httpd start

    Step 5: 發佈服務:將之前創建的資源文件夾repo複製到服務器的發佈目錄,通常是 var/www/html下,命令如下:  mv /usr/repo /var/www/html                chmod -R ugo+rX /var/www/html/repo

    Step 6: 創建客戶端的repo文件,在etc/ yum.repos.d/下創建自己的repo文件,格式如下:

                 [myrepo]

                 name=myrepo

                 baseurl=http://master1/repo  指出資源的URL路徑

                 enabled=1

                 gpgcheck=0

     Step 7: 客戶端測試,通過瀏覽器輸入baseurl地址,訪問服務器資源。

     注意:安裝要啓動的服務:httpd sshd


    自動安裝的過程就是這樣,但是後來呢,總監說自動安裝的方式不利於剛開始學習,讓我們從源碼安裝開始,一步一步學習怎麼樣配置,OK,好吧,還得繼續搭建環境,悲催的我經歷過各種配置把好不容易整好的環境推翻了,重新來搞。作爲一名好學的程序猿,我忍。繼續,從官網下載hadoop-2.0.3-alpha 、hbase-0.94.5-security、zookeeper-3.4.5,然後從hadoop開始配置,由於最終這個配置以失敗而告終,這個配置的過程我就不詳細的介紹了。基本上跟大多數的分佈式搭建環境的步驟類似。只是由於hadoop2.x系列和1.0x系列包結構變化太大,導致在這個過程中浪費了許多時間,hadoop集羣安裝完成之後,一切正常。只是在納悶爲什麼jobtracker的50030端口爲何啓動不起來,後來在官方文檔中找到,原來到2.0x以後就改成 ResourceManager了,端口也變爲8088了。hadoop算是正常啓動了,也嘗試的運行了下經典的wordcount,一切ok。接下來就是安裝hbase了,hbase的配置文件相對於hadoop來說已經相當少了,很容易就能配好,但是呢,由於hbase-0.94.5-security所依賴的是hadoop-core-1.0.4.jar.而現在公司讓用的最新版的hadoop-2.0.3-alpha裏面竟然沒有找到一個帶有core的jar包,怎麼辦,悲催了。。。版本衝突問題搞了兩天,其中編譯過源碼,將hadoop-2.0.3-alpha裏所有的lib拷貝過去都試過了,還是版本衝突導致HMaster無法啓動,(我推測可能是由於在拷貝的jar包的過程中遺漏了哪個jar文件吧,理論上來說這個方法是可行的呀),沒辦法,跟總監說明了情況之後,他建議用cloudera公司的CDH4源碼安裝的方式,因爲cloudera公司的源碼是採用了官方穩定的版本,然後自己再修復了部分BUG才放出來的。其中cloudera公司已經將版本兼容問題給我們解決了,俺們這些程序猿就不用去擔心搞了半天的環境最終敗給版本衝突了。

      好吧,第三次環境搭建開始了,首先還是去官網下安裝包,hadoop-2.0.0-cdh4.2.0 、 hbase-0.94.2-cdh4.2.0 、    zookeeper-3.4.5-cdh4.2.0下載完成之後這次的搭建就很容易了,畢竟前面已經配置過一次了。hadoop的分佈式環境很順利的就完成了,然後到hbase了,hbase的配置少,很快就配好了,配好之後,啓動hbase,擦,有錯誤,啓動不起起來,怎麼回事?看看日誌吧,

Thu Mar 21 20:54:06 CST 2013 Starting master on master
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63643
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

怎麼就這麼一點,加載了個啓動信息就沒了?奇怪了怎麼搞的。怎麼辦,配置文件沒有問題啊,一個一個檢查吧,

hbase-site-xml沒有問題啊,hbase-env.sh好像也沒有問題啊,可是爲什麼就是連加載都不加載呢?肯定是環境沒配好,就在hbase-env.sh裏面找吧,

  export JAVA_HOME=/usr/java/jdk1.6.0_31
  export HBASE_OPTS="$HBASE_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"
  export HBASE_MANAGES_ZK=false
 # export HBASE_HOME=/root/hahoop/hbase-0.94.2-cdh4.2.0
  export HADOOP_HOME=/root/hadoop/hadoop-2.0.0-cdh4.2.0
  export HBASE_LOG_DIR=/root/hadoop/hbase-0.94.2-cdh4.2.0/logs
  export HBASE_CLASSPATH=/root/hadoop/hadoop-2.0.0-cdh4.2.0/etc/hadoop

經過苦苦掙扎之後發現多配了個HBASE_HOME,很奇怪,看別人的教程都是這麼配的呀,奇怪的問題,算了,先把HBASE_HOME註釋掉吧,不糾結了,重新啓動看看,這下應該可以啓動了吧。。。。。HMaster還是沒能啓動起來,怎麼辦,hbase的環境配置快整死我了,大晚上上還在加班,爲了能趕緊回去休息還是看日誌吧,這次最起碼日誌裏面有錯誤信息了,也就證實了剛纔的確是因爲多配了HBASE_HOME的原因。來看看錯誤信息吧:

2013-03-21 21:48:48,057 WARN org.apache.hadoop.hdfs.DFSClient: DataStreamer Exception
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /hbase/hbase.version could only be replicated to 0 nodes instead of minReplication (=1).  There are 2 datanode(s) running and no node(s) are excluded in this operation.
	at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget(BlockManager.java:1325)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2258)
	at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:481)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:297)
	at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:44080)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453)
	at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1002)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1695)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1691)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:396)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
	at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1689)

	at org.apache.hadoop.ipc.Client.call(Client.java:1225)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:202)
	at $Proxy15.addBlock(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:164)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:83)
	at $Proxy15.addBlock(Unknown Source)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTranslatorPB.java:290)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java:1150)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1003)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:463)
2013-03-21 21:48:48,059 WARN org.apache.hadoop.hbase.util.FSUtils: Unable to create version file at hdfs://master:9000/hbase, retrying: File /hbase/hbase.version could only be replicated to 0 nodes instead of minReplication (=1).  There are 2 datanode(s) running and no node(s) are excluded in this operation.
	at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget(BlockManager.java:1325)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2258)
	at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:481)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:297)
	at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:44080)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453)
	at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1002)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1695)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1691)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:396)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
	at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1689)
然後就是各種google找資料啊,最後在一個小日本的網站上看到原來是由於在配置hadoop的時候dfs.replication配置的是三,而我的hbase regionservers只配置了兩個,所以纔會導致出現這種情況。據說這是hbase0.91以前的GUG,我運氣好,剛好趕上了。終於在我的堅持不懈下,HMASTER啓動起來了,打開master:60010,終於看到了親愛的master-status頁面了。這次終於搞好了,雖然當時有那麼一絲興奮感,但是現在覺着這麼簡單的環境搭建浪費了那麼多時間,挺失敗的。好了,環境搭建就到這,現在,開始HBASE的學習之旅吧!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章