2017-08-17 46 views
1

我正在嘗試創建約589個表並進行隨機插入。我開始按表格處理表格:所以我創建一個表格,然後製作所有插入內容,然後創建另一個表格,直到獲取所有數據。HBase的RegionServer崩潰

這種解決方案的體系結構是:

  • Python客戶端位於一臺計算機,其攝取HBase的數據。
  • Cloudera服務器託管HBase獨立配置,它是與客戶端位於同一臺機器並通過其IP地址標識的VM。該服務器的特性如下:64GB存儲空間,4GB RAM和1個CPU。
  • 客戶端與HBase Thrift Server進行通信。

所以這裏的問題是,當我嘗試攝取所有這些數據量時。在regionserver關閉之前,客戶端只能創建並插入大約300MB(大約創建了45個表,並插入相應的行,然後服務器在第46個表的數據提取時崩潰)。我已經用不同的機器特性測試了所有這些,所攝入數據的大小因機器而異(如果機器有更多的內存,將會插入更多的數據[已經用不同的虛擬機硬件特性測試了這一點))。我懷疑它來自Java堆內存的管理,所以我試圖做出不同的配置。但它並沒有讓它變得更好。這裏是我的HBase的主要配置:

HBase的-site.xml中

<property> 
    <name>hbase.rest.port</name> 
    <value>8070</value> 
    <description>The port for the HBase REST server.</description> 
    </property> 

    <property> 
    <name>hbase.cluster.distributed</name> 
    <value>true</value> 
    </property> 

    <property> 
    <name>hbase.rootdir</name> 
    <value>hdfs://quickstart.cloudera:8020/hbase</value> 
    </property> 

    <property> 
    <name>hbase.regionserver.ipc.address</name> 
    <value>0.0.0.0</value> 
    </property> 

    <property> 
    <name>hbase.master.ipc.address</name> 
    <value>0.0.0.0</value> 
    </property> 

    <property> 
    <name>hbase.thrift.info.bindAddress</name> 
    <value>0.0.0.0</value> 
    </property> 

    <property> 
    <name>hbase.hregion.max.filesize</name> 
    <value>10737418240</value> <!-- 10 GB --> 
    </property> 

    <property> 
    <name>hbase.hregion.memstore.flush.size</name> 
    <value>33554432</value> <!-- 32 MB --> 
    </property> 

    <property> 
    <name>hbase.client.write.buffer</name> 
    <value>8388608</value> 
    </property> 

<property> 
    <name>hbase.client.scanner.caching</name> 
    <value>10000</value> 
</property> 

<property> 
    <name>hbase.regionserver.handler.count</name> 
    <value>64</value> 
</property> 

hbase-env.sh

# The maximum amount of heap to use. Default is left to JVM default. 
export HBASE_HEAPSIZE=4G 

# Uncomment below if you intend to use off heap cache. For example, to allocate 8G of 
# offheap, set the value to "8G". 
# export HBASE_OFFHEAPSIZE=1G 

# Extra Java runtime options. 
# Below are what we set by default. May only work with SUN JVM. 
# For more on why as well as other possible settings, 
# see http://wiki.apache.org/hadoop/PerformanceTuning 
export HBASE_OPTS="-XX:+UseConcMarkSweepGC" 

# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+ 
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m" 
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=4g -XX:MaxPermSize=4g" 

這裏是我從主得到的錯誤服務器日誌:

util.JvmPauseMonitor:在JVM或主機(例如GC)檢測暫停:暫停 約1016msNo GC的檢測

,並沒有出現在RegionServer的日誌。

另一方面,當我嘗試創建只有一個表,並插入更多的數據這個工程!

請問如何解決這個問題的任何好的想法?

在此先感謝。

回答

0

您的虛擬機的內存太低。嘗試將其升高到至少12GB。你忘記了Java進程的堆只是一個內存佔用的一部分。通過設置HBASE_HEAPSIZE = 4G,您希望HBase能夠分配所有虛擬機的內存。虛擬機還需要運行Linux守護程序和除HBase之外的Cloudera服務。