Hi everyone,
We would like to use Hbase and Hadoop.
But when we tried to use real data with our test setup, we saw a
lot of
crashes and could not succeed to insert the amount of data we are
trying to
insert into an Hbase table.
Our goal is to have about 100 million of rows in one table, with
each row
having about 100byte of raw data.
Our testsetup consists of the following servers:
3 x HP DL385 with 4GB RAM, 2x2,8Ghz Opterons and Smartarray RAID5
with an
capacity of 400GB. (all used as datanodes, and one of them also as
the
namenode)
1 x HP DL380 with 3GB RAM, 2x3,4Ghz Dualcore Xeons and Smartarray
RAID5
with an capacity of 320GB for hbase (master and regionserver).
We used hadoop 0.16.4 with a replaction level of 2 and hbase 0.1.3.
Hbase is configured to use 2GB of heap space.
The table was created with the following query:
create table logdata (logtype MAX_VERSIONS=1 COMPRESSION=BLOCK,
banner_id
MAX_VERSIONS=1, contentunit_id MAX_VERSIONS=1, campaign_id
MAX_VERSIONS=1,
network MAX_VERSIONS=1, geodata MAX_VERSIONS=1 COMPRESSION=BLOCK,
client_data MAX_VERSIONS=1 COMPRESSION=BLOCK, profile_data
MAX_VERSIONS=1
COMPRESSION=BLOCK, keyword MAX_VERSIONS=1 COMPRESSION=BLOCK, tstamp
MAX_VERSIONS=1, time MAX_VERSIONS=1);
there problem is, that the regionserver runs out of heap space and
throws
the following exception after inserting a few million rows (not
always the
same number of rows, ranging from 3 to about 10 million):
Exception in thread "org.apache.hadoop.dfs.DFSClient
[EMAIL PROTECTED]"
java.lang.OutOfMemoryError: Java heap space
at java.io.DataInputStream.<init>(DataInputStream.java:42)
at
org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:
186)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:578)
at org.apache.hadoop.ipc.Client.call(Client.java:501)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:198)
at org.apache.hadoop.dfs.$Proxy1.renewLease(Unknown Source)
at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
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:82)
at
org
.apache
.hadoop
.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:
59)
at org.apache.hadoop.dfs.$Proxy1.renewLease(Unknown Source)
at
org.apache.hadoop.dfs.DFSClient$LeaseChecker.run(DFSClient.java:596)
at java.lang.Thread.run(Thread.java:619)
Exception in thread "ResponseProcessor for block
blk_7988192980299756280"
java.lang.OutOfMemoryError: Java heap space
Exception in thread "IPC Server Responder" Exception in thread
"org.apache.hadoop.io.ObjectWritable Connection Culler" Exception
in thread
"IPC Client connection to /192.168.1.117:54310"
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
any idears why we always see this crashes and if hbase should be
able to
handle this amount of data in the setup we use?
On a side note, we also observe that hbase seems to have a large
storage
overhead.
When we insert about 1GB of rawdata into hbase, it uses about 8GB
of HDFS
space (when taking into account the replication).
Is this large overhead expected?
/Marcus