hbase多使用者入庫,regionserver下線問題

來源:互聯網
上載者:User

近期對hbase多使用者插入資料時,regionserver會莫名奇妙的關閉,regionserver的日誌有很多異常:

如下:

org.apache.hadoop.hbase.DroppedSnapshotException: region: t,12130111020202,1369296305769.f14b9a1d05ae485981f6a8579f1324fb.
        at org.apache.hadoop.hbase.regionserver.HRegion.internalFlushcache(HRegion.java:1000)
        at org.apache.hadoop.hbase.regionserver.HRegion.internalFlushcache(HRegion.java:905)
        at org.apache.hadoop.hbase.regionserver.HRegion.flushcache(HRegion.java:857)
        at org.apache.hadoop.hbase.regionserver.MemStoreFlusher.flushRegion(MemStoreFlusher.java:394)
        at org.apache.hadoop.hbase.regionserver.MemStoreFlusher.flushOneForGlobalPressure(MemStoreFlusher.java:202)
        at org.apache.hadoop.hbase.regionserver.MemStoreFlusher.run(MemStoreFlusher.java:222)

2013-05-23 00:48:27,671 WARN org.apache.hadoop.hbase.regionserver.Store: Failed open of hdfs://cloudgis4:9000/hbase/t/c85d7d3bc3a55a93a147f5c4f07f87b8/imageFamily/2223460197050463756.74f68489b6ea43b520c2adca643cbbdb; presumption is that file was corrupted at
flush and lost edits picked up by commit log replay. Verify!
java.io.IOException: Filesystem closed
        at org.apache.hadoop.hdfs.DFSClient.checkOpen(DFSClient.java:241)
        at org.apache.hadoop.hdfs.DFSClient.access$800(DFSClient.java:74)
        at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.read(DFSClient.java:2037)
        at java.io.DataInputStream.readFully(DataInputStream.java:178)
        at java.io.DataInputStream.readLong(DataInputStream.java:399)
        at org.apache.hadoop.hbase.io.hfile.HFile$FixedFileTrailer.deserialize(HFile.java:1526)
        at org.apache.hadoop.hbase.io.hfile.HFile$Reader.readTrailer(HFile.java:885)
        at org.apache.hadoop.hbase.io.hfile.HFile$Reader.loadFileInfo(HFile.java:819)
        at org.apache.hadoop.hbase.regionserver.StoreFile$Reader.loadFileInfo(StoreFile.java:1003)
        at org.apache.hadoop.hbase.regionserver.StoreFile.open(StoreFile.java:382)
        at org.apache.hadoop.hbase.regionserver.StoreFile.createReader(StoreFile.java:438)

ABORTING region server serverName=cloudgis1,60020,1369232412016, load=(requests=1662, regions=111, usedHeap=3758, maxHeap=4991): Replay of HLog required. Forcing server shutdown

2013-05-23 00:48:20,081 INFO org.apache.hadoop.hdfs.DFSClient: Exception in createBlockOutputStream java.net.SocketException: Too many open files
在網上查了很久也沒有解決辦法,把日誌從頭看了一遍,發現一句話:

2013-05-23 00:48:16,939 WARN org.apache.hadoop.hdfs.DFSClient: Failed to connect to /192.168.3.6:50010, add to deadNodes and continuejava.net.SocketException: Too many open files

原來linux對開啟檔案數有限制,而datanode無法開啟檔案,所以就回報異常,regionserver也關閉了。解決方案如下:

HBase是資料庫,會在同一時間使用很多的檔案控制代碼。大多數linux系統使用的預設值1024是不能滿足的,會導致FAQ: Why do I see "java.io.IOException...(Too many open files)" in my logs?異常。還可能會發生這樣的異常

      2010-04-06 03:04:37,542 INFO org.apache.hadoop.hdfs.DFSClient: Exception increateBlockOutputStream java.io.EOFException      2010-04-06 03:04:37,542 INFO org.apache.hadoop.hdfs.DFSClient: Abandoning block blk_-6935524980745310745_1391901      

所以你需要修改你的最大檔案控制代碼限制。可以設定到10k. 你還需要修改 hbase 使用者的 nproc,如果過低會造成 OutOfMemoryError異常。 [2] [3].

需要澄清的,這兩個設定是針對作業系統的,不是Hbase本身的。有一個常見的錯誤是Hbase啟動並執行使用者,和設定最大值的使用者不是一個使用者。在Hbase啟動的時候,第一行日誌會現在ulimit資訊,所以你最好檢查一下。 [4]


如果你使用的是Ubuntu,你可以這樣設定:

在檔案 /etc/security/limits.conf 添加一行,如:

hadoop  -       nofile  32768

可以把 hadoop 替換成你運行Hbase和Hadoop的使用者。如果你用兩個使用者,你就需要配兩個。還有配nproc hard 和 soft limits. 如:

hadoop soft/hard nproc 32000

.

在 /etc/pam.d/common-session 加上這一行:

session required  pam_limits.so

否則在 /etc/security/limits.conf上的配置不會生效.

還有登出再登入,這些配置才會生效!

一個 Hadoop HDFS Datanode 有一個同時處理檔案的上限. 這個參數叫 xcievers (Hadoop的作者把這個單詞拼錯了). 在你載入之前,先確認下你有沒有配置這個檔案conf/hdfs-site.xml裡面的xceivers參數,至少要有4096:

      <property>        <name>dfs.datanode.max.xcievers</name>        <value>4096</value>      </property>      

對於HDFS修改配置要記得重啟.

如果沒有這一項配置,你可能會遇到奇怪的失敗。你會在Datanode的日誌中看到xcievers exceeded,但是運行起來會報 missing blocks錯誤。例如: 10/12/08 20:10:31 INFO hdfs.DFSClient: Could not obtain block blk_XXXXXXXXXXXXXXXXXXXXXX_YYYYYYYY from any node: java.io.IOException: No live nodes
contain current block. Will get new block locations from namenode and retry...
 [5]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.