hadoop,hbase,zookeeper錯誤日誌及部分解決辦法(1)

iteye_3156發表於2011-12-29

沒有全部遇到過。也沒有經過測試。收集至此,以備以後遇到問題作為參考之用。

hadoop-0.20.2 & hbase-0.90.1叢集啟動錯誤問題解決:

問題如下:org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol org.apache.hadoop.hdfs.protocol.ClientProtocol version mismatch. (client = 42, server = 41) 

        at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:364)
        at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:113)
        at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:215)
        at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:177)

……………………………………

2011-01-21 00:14:41,550 INFO org.apache.hadoop.hbase.master.HMaster: Aborting

初步認為是hadoop-0.20.2 & hbase-0.90.1版本問題造成的,hbase-0.90.1/lib中hadoop-core-0.20-append- r1056497.jar使用的hadoop-core-0.20,因此將其替換為hadoop-0.20.2-core.jar即可

Hbase重啟之後就無法啟動的現象
當我們使用Hbase 0.20.2的時候,遇到了2個奇怪的問題。

我們使用了數臺機器構建了一個叢集,並且按照Hadoop/Hbase的"Getting Started"安裝配置了Hadoop和Hbase。之後能夠正常啟動Hadoop和Hbase,並且建立table和插入資料。

不過,當我們訪問Master的頁面時: http://10.37.17.252:60010/master.jsp ,我們發現了第一個問題:在regionserver區域,出現了2個127.0.0.1的regionserver,但是我們並沒有在conf/regionservers將master設定為regionserver:

Region Servers
Address Start Code Load
127.0.0.1:60030 1263383321075 requests=0, regions=0, usedHeap=0, maxHeap=0
127.0.0.1:60030 1263383321096 requests=0, regions=0, usedHeap=0, maxHeap=0

………………………………

但是,雖然出現了以上的怪現象,但是hbase似乎仍然能夠正常工作。只是,當我們打算重啟hbase的時候,我們發現了第二個問題:我們嘗試執行bin/stop-hbase.sh,之後,又執行啟動hbase的指令碼:bin/ start-hbase.sh,這一次,當我們訪問master頁面的時候http://10.37.17.252:60010/master.jsp,出現瞭如下的錯誤

HTTP ERROR: 500
Trying to contact region server null for region , row ", but failed after 3 attempts.
Exceptions:

org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed setting up proxy to /10.37.17.248:60020 after attempts=1

…………………………

此時,Hbase能夠進入shell,但是無法執行任何操作。於是再次試圖關閉hbase的時候,卻發現無法停止master,那個"stop master"後面的“.”出現了許許多多,仍然無法停止master節點。於是我們不得不強制kill掉master。Hbase就這樣掛掉了。。。。。

Hbase重啟之後就無法啟動的原因分析
經過多方排查,最後我在嘗試使用netstat -an檢視埠占用情況的時候發現:
在WAMDM1節點上,regionserver佔用的60020埠占用為:127.0.0.1:60020
而在WAMDM2節點上, regionserver佔用的60020埠占用為:10.37.17.249:60020
我感覺頗為蹊蹺,之後便檢查/etc/hosts檔案,果然發現在WAMDM1和WAMDM2下的hosts檔案不同。在WAMDM1的hosts檔案中的內容為:

127.0.0.1 WAMDM1 localhost.localdomain localhost
10.37.17.248 WAMDM1.ruc.edu.cn WAMDM1
10.37.17.249 WAMDM2.ruc.edu.cn WAMDM2
10.37.17.250 WAMDM3.ruc.edu.cn WAMDM3
10.37.17.251 WAMDM4.ruc.edu.cn WAMDM4
10.37.17.252 WAMDM5.ruc.edu.cn WAMDM5

大家注意第一行。我們在使用配置Hadoop/Hbase的時候,常常使用主機名來代替IP使用,但是在WAMDM1的機器上,WAMDM1被對映為127.0.0.1,於是master和regionserver之間的通訊就出錯。這也就是為什麼我們經常在日誌中以及錯誤提示中看到如下資訊:

Server at /10.37.17.248:60020 could not be reached after 1 tries, giving up.

org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed setting up proxy to /10.37.17.248:60020 after attempts=1

  at org.apache.hadoop.hbase.ipc.HBaseRPC.waitForProxy(HBaseRPC.java:424)

………………

Hbase重啟之後就無法啟動的解決辦法
於是,我將所有機器的/etc/hosts檔案,都改為了如下配置:

127.0.0.1 localhost
10.37.17.248 WAMDM1.ruc.edu.cn WAMDM1
10.37.17.249 WAMDM2.ruc.edu.cn WAMDM2
10.37.17.250 WAMDM3.ruc.edu.cn WAMDM3
10.37.17.251 WAMDM4.ruc.edu.cn WAMDM4
10.37.17.252 WAMDM5.ruc.edu.cn WAMDM5
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

同時,為了保險起見,我在stop-hbase.sh中,也加入停止regionservers的命令(雖然在網上查不到停止regionservers的必要性,以及這個指令碼存在bug的證據,但是這樣改經過測試是沒有問題的):

"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" --hosts "${HBASE_REGIONSERVERS}" stop regionserver 

這個命令需要加在stop master之前。至於不加入這個停止regionservers的命令是否可行,在未來我會進一步測試。

通過以上修改,出現兩個127.0.0.1的Regionserver的問題,以及Hbase重啟就掛的問題得到徹底解決!

Hbase重啟之後就無法啟動的問題解決之後的反思
從這次問題解決中吸取如下教訓:

在配置分散式系統的時候,一定要注意各個機器之間配置的統一性,包括主機名(hosts檔案)、使用者名稱、Hadoop/Hbase各種配置檔案等,對於不一致的情況,一定要特別仔細的檢查,然後統一起來。已經不止一次在這方面吃虧了,希望大家切記!!!!

轉自:http://www.wangzhongyuan.com/archives/788.html

在重新啟動HBase服務的時候可能會出現如下的錯誤:

INFO ipc.HbaseRPC: Server at /227.23.56.100:60020 could not be reached after 1 tries, giving up.

出現這個錯誤的原因可能會有很多,比如各個配置檔案中的地址不一致等,但我這裡給出的一個可能原因是埠號被其他某一程式佔用,或者還是HBase程式使用著,但此服務(或說此埠)已經不再可用,解決的方式為:通過此埠查詢到對應的程式,然後殺死對應的程式,再重啟HBase服務,你會發現上面出現的錯誤將消失,服務啟動正常。

具體步驟為:

 

1、  lsof -i:60020                  2、  kill -9 PID(程式ID)                      3、  重啟HBase服務。

FAILED: Error in metadata: MetaException(message:org.apache.hadoop.hbase.MasterNotRunningExceptio

n: dfsname1.cptrue.com:60000

最近在做資料探勘方面的事情,需要hive+hbase表,但是使用hive連結hbase現有的資料庫時,總是拋異常。

FAILED: Error in metadata: MetaException(message:org.apache.hadoop.hbase.MasterNotRunningExceptio

n: dfsname1.cptrue.com:60000
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getMaster(HConnectionManager.java:394)
        at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:83)
        at org.apache.hadoop.hive.hbase.HBaseStorageHandler.getHBaseAdmin(HBaseStorageHandler.java:74)

………………………………

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
下面是我的hiveql語句

hive> create EXTERNAL table hbase_table_log(key string, label bigint) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'          
    > with SERDEPROPERTIES ("hbase.columns.mapping"=":key, b:label")                                                    
    > TBLPROPERTIES("hbase.table.name" = "log");    

 解決方案:這個問題基本就是hive+hbase版本的問題,你需要將你所使用的hbase的jar包拷貝到hive的lib目錄下進行替換,這還不算結束,你需要將hbase-site.xml拷貝到conf目錄下面。在不重啟hive的情況下,重新建立external table,恭喜,執行成功!!!

這裡需要注意的地方是with下面的mapping,它對應的值":key,b:label",不能出現空格,否則它會告訴你

FAILED: Error in metadata: MetaException(message:Column Family  b is not defined in hbase table log)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

希望大家日後遇到這個問題的時候,可以順利解決!

FAILED: Error in metadata: MetaException(message:org.apache.hadoop.hbase.MasterNotRunningException: CNC-JN-R-541:60000 

出現這個錯誤的原因是我引入的hbase包和hive自帶的hive包衝突,刪除hive/lib下的 hbase-0.89.0-SNAPSHOT.jar, OK了。

FAILED: Error in metadata: MetaException(message:Column Family department is not defined in hbase table hello)

當使用hive相關管理已經存在的hbase 多列table時,出現上面錯誤,而且列族“department ”的確存在,最終發現原因是:在hive中使用CREATE EXTERNAL TABLE 建立表的時候,"hbase.columns.mapping"的值中不能包含空格

 

 解決方法:報錯上說org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed 15 actions: NotServingRegionException: 15 times, servers with issues: rhel6-15:60020,我把rhel6-15的regionserver程式殺掉在重啟,在把這臺機子上的regionserver程式殺掉在重啟,問題解決!!!(記得做了一點是把所有機器regionserver程式殺掉,Hmaster也殺掉,然後重啟hbase用./hbase-start.sh),驗證一點就是如果這臺regionserver不起的話往這臺機子上的資料會很小,幾乎沒有!!在所有regionserver上發現root和meta表是分離到不同的regionsever上的

 

來自: http://hi.baidu.com/xinfeng999/blog/item/56cf00fa4c46f7929f51460b.html

相關文章