It appears that for multiple simulations loads using the IndexTables probably not the best choice?
-chris On Apr 30, 2010, at 2:39 PM, Jean-Daniel Cryans wrote: > Yeah more handlers won't do it here since there's tons of calls > waiting on a single synchronized method, I guess the IndexedRegion > should use a pool of HTables instead of a single one in order to > improve indexation throughput. > > J-D > > On Fri, Apr 30, 2010 at 2:26 PM, Chris Tarnas <c...@email.com> wrote: >> Here is the thread dump: >> >> I cranked up the handlers to 300 just in case and ran 40 mappers that loaded >> data via thrift. Each node runs its own thrift server. I saw an average of >> 18 rows/sec/mapper with no node using more than 10% CPU and no IO wait. It >> seems no matter how many mappers I throw the total number of rows/sec >> doesn't go much above 700 rows/second total, which seems very, very slow to >> me. >> >> Here is the thread dump from a node: >> >> http://pastebin.com/U3eLRdMV >> >> I do see quite a bit of waiting and some blocking in there, not sure how >> exactly to interpret it all though. >> >> thanks for any help! >> -chris >> >> On Apr 29, 2010, at 9:14 PM, Ryan Rawson wrote: >> >>> One thing to check is at the peak of your load, run jstack on one of >>> the regionservers, and look at the handler threads - if all of them >>> are doing something you might be running into handler contention. >>> >>> it is basically ultimately IO bound. >>> >>> -ryan >>> >>> On Thu, Apr 29, 2010 at 9:12 PM, Chris Tarnas <c...@email.com> wrote: >>>> They are all at 100, but none of the regionservers are loaded - most are >>>> less than 20% CPU. Is this all network latency? >>>> >>>> -chris >>>> >>>> On Apr 29, 2010, at 8:29 PM, Ryan Rawson <ryano...@gmail.com> wrote: >>>> >>>>> Every insert on an indexed would require at the very least an RPC to a >>>>> different regionserver. If the regionservers are busy, your request >>>>> could wait in the queue for a moment. >>>>> >>>>> One param to tune would be the handler thread count. Set it to 100 at >>>>> least. >>>>> >>>>> On Thu, Apr 29, 2010 at 2:16 AM, Chris Tarnas <c...@email.com> wrote: >>>>>> >>>>>> I just finished some testing with JDK 1.6 u17 - so far no performance >>>>>> improvements with just changing that. Disabling LZO compression did gain >>>>>> a >>>>>> little bit (up to about 30/sec from 25/sec per thread). Turning of >>>>>> indexes >>>>>> helped the most - that brought me up to 115/sec @ 2875 total rows a >>>>>> second. >>>>>> A single perl/thrift process can load at over 350 rows/sec so its not >>>>>> scaling as well as I would have expected, even without the indexes. >>>>>> >>>>>> Are the transactional indexes that costly? What is the bottleneck there? >>>>>> CPU utilization and network packets went up when I disabled the indexes, >>>>>> I >>>>>> don't think those are the bottlenecks for the indexes. I was even able to >>>>>> add another 15 insert process (total of 40) and only lost about 10% on a >>>>>> per >>>>>> process throughput. I probably could go even higher, none of the nodes >>>>>> are >>>>>> above CPU 60% utilization and IO wait was at most 3.5%. >>>>>> >>>>>> Each rowkey is unique, so there should not be any blocking on the row >>>>>> locks. I'll do more indexed tests tomorrow. >>>>>> >>>>>> thanks, >>>>>> -chris >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Apr 29, 2010, at 12:18 AM, Todd Lipcon wrote: >>>>>> >>>>>>> Definitely smells like JDK 1.6.0_18. Downgrade that back to 16 or 17 and >>>>>>> you >>>>>>> should be good to go. _18 is a botched release if I ever saw one. >>>>>>> >>>>>>> -Todd >>>>>>> >>>>>>> On Wed, Apr 28, 2010 at 10:54 PM, Chris Tarnas <c...@email.com> wrote: >>>>>>> >>>>>>>> Hi Stack, >>>>>>>> >>>>>>>> Thanks for looking. I checked the ganglia charts, no server was at more >>>>>>>> than ~20% CPU utilization at any time during the load test and swap was >>>>>>>> never used. Network traffic was light - just running a count through >>>>>>>> hbase >>>>>>>> shell generates a much higher use. One the server hosting meta >>>>>>>> specifically, >>>>>>>> it was at about 15-20% CPU, and IO wait never went above 3%, was >>>>>>>> usually >>>>>>>> down at near 0. >>>>>>>> >>>>>>>> The load also died with a thrift timeout on every single node (each >>>>>>>> node >>>>>>>> connecting to localhost for its thrift server), it looks like a >>>>>>>> datanode >>>>>>>> just died and caused every thrift connection to timeout - I'll have to >>>>>>>> up >>>>>>>> that limit to handle a node death. >>>>>>>> >>>>>>>> Checking logs this appears in the logs of the region server hosting >>>>>>>> meta, >>>>>>>> looks like the dead datanode causing this error: >>>>>>>> >>>>>>>> 2010-04-29 01:01:38,948 WARN org.apache.hadoop.hdfs.DFSClient: >>>>>>>> DFSOutputStream ResponseProcessor exception for block >>>>>>>> blk_508630839844593817_11180java.io.IOException: Bad response 1 for >>>>>>>> block >>>>>>>> blk_508630839844593817_11180 from datanode 10.195.150.255:50010 >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2423) >>>>>>>> >>>>>>>> The regionserver log on teh dead node, 10.195.150.255 has some more >>>>>>>> errors >>>>>>>> in it: >>>>>>>> >>>>>>>> http://pastebin.com/EFH9jz0w >>>>>>>> >>>>>>>> I found this in the .out file on the datanode: >>>>>>>> >>>>>>>> # Java VM: Java HotSpot(TM) 64-Bit Server VM (16.0-b13 mixed mode >>>>>>>> linux-amd64 ) >>>>>>>> # Problematic frame: >>>>>>>> # V [libjvm.so+0x62263c] >>>>>>>> # >>>>>>>> # An error report file with more information is saved as: >>>>>>>> # /usr/local/hadoop-0.20.1/hs_err_pid1364.log >>>>>>>> # >>>>>>>> # If you would like to submit a bug report, please visit: >>>>>>>> # http://java.sun.com/webapps/bugreport/crash.jsp >>>>>>>> # >>>>>>>> >>>>>>>> >>>>>>>> There is not a single error in the datanode's log though. Also of note >>>>>>>> - >>>>>>>> this happened well into the test, so the node dying cause the load to >>>>>>>> abort >>>>>>>> but not the prior poor performance. Looking through the mailing list it >>>>>>>> looks like java 1.6.0_18 has a bad rep so I'll update the AMI (although >>>>>>>> I'm >>>>>>>> using the same JVM on other servers in the office w/o issue and decent >>>>>>>> single node performance and never dying...). >>>>>>>> >>>>>>>> Thanks for any help! >>>>>>>> -chris >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Apr 28, 2010, at 10:10 PM, Stack wrote: >>>>>>>> >>>>>>>>> What is load on the server hosting meta like? Higher than others? >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Apr 28, 2010, at 8:42 PM, Chris Tarnas <c...@email.com> wrote: >>>>>>>>> >>>>>>>>>> Hi JG, >>>>>>>>>> >>>>>>>>>> Speed is now down to 18 rows/sec/table per process. >>>>>>>>>> >>>>>>>>>> Here is a regionserver log that is serving two of the regions: >>>>>>>>>> >>>>>>>>>> http://pastebin.com/Hx5se0hz >>>>>>>>>> >>>>>>>>>> Here is the GC Log from the same server: >>>>>>>>>> >>>>>>>>>> http://pastebin.com/ChrRvxCx >>>>>>>>>> >>>>>>>>>> Here is the master log: >>>>>>>>>> >>>>>>>>>> http://pastebin.com/L1Kn66qU >>>>>>>>>> >>>>>>>>>> The thrift server logs have nothing in them in the same time period. >>>>>>>>>> >>>>>>>>>> Thanks in advance! >>>>>>>>>> >>>>>>>>>> -chris >>>>>>>>>> >>>>>>>>>> On Apr 28, 2010, at 7:32 PM, Jonathan Gray wrote: >>>>>>>>>> >>>>>>>>>>> Hey Chris, >>>>>>>>>>> >>>>>>>>>>> That's a really significant slowdown. I can't think of anything >>>>>>>> >>>>>>>> obvious that would cause that in your setup. >>>>>>>>>>> >>>>>>>>>>> Any chance of some regionserver and master logs from the time it was >>>>>>>> >>>>>>>> going slow? Is there any activity in the logs of the regionservers >>>>>>>> hosting >>>>>>>> the regions of the table being written to? >>>>>>>>>>> >>>>>>>>>>> JG >>>>>>>>>>> >>>>>>>>>>>> -----Original Message----- >>>>>>>>>>>> From: Christopher Tarnas [mailto:c...@tarnas.org] On Behalf Of >>>>>>>>>>>> Chris >>>>>>>>>>>> Tarnas >>>>>>>>>>>> Sent: Wednesday, April 28, 2010 6:27 PM >>>>>>>>>>>> To: hbase-user@hadoop.apache.org >>>>>>>>>>>> Subject: EC2 + Thrift inserts >>>>>>>>>>>> >>>>>>>>>>>> Hello all, >>>>>>>>>>>> >>>>>>>>>>>> First, thanks to all the HBase developers for producing this, it's >>>>>>>>>>>> a >>>>>>>>>>>> great project and I'm glad to be able to use it. >>>>>>>>>>>> >>>>>>>>>>>> I'm looking for some help and hints here with insert performance >>>>>>>>>>>> help. >>>>>>>>>>>> I'm doing some benchmarking, testing how I can scale up using >>>>>>>>>>>> HBase, >>>>>>>>>>>> not really looking at raw speed. The testing is happening on EC2, >>>>>>>> >>>>>>>> using >>>>>>>>>>>> >>>>>>>>>>>> Andrew's scripts (thanks - those were very helpful) to set them up >>>>>>>>>>>> and >>>>>>>>>>>> with a slightly customized version of the default AMIs (added my >>>>>>>>>>>> application modules). I'm using HBase 20.3 and Hadoop 20.1. I've >>>>>>>> >>>>>>>> looked >>>>>>>>>>>> >>>>>>>>>>>> at the tips in the Wiki and it looks like Andrew's scripts are >>>>>>>>>>>> already >>>>>>>>>>>> setup that way. >>>>>>>>>>>> >>>>>>>>>>>> I'm inserting into HBase from a hadoop streaming job that runs perl >>>>>>>> >>>>>>>> and >>>>>>>>>>>> >>>>>>>>>>>> uses the thrift gateway. I'm also using the Transactional tables so >>>>>>>>>>>> that alone could be the case, but from what I can tell I don't >>>>>>>>>>>> think >>>>>>>>>>>> so. LZO compression is also enabled for the column families (much >>>>>>>>>>>> of >>>>>>>>>>>> the data is highly compressible). My cluster has 7 nodes, 5 >>>>>>>>>>>> regionservers, 1 master and 1 zookeeper. The regionservers and >>>>>>>>>>>> master >>>>>>>>>>>> are c1.xlarges. Each regionserver has the tasktrackers that runs >>>>>>>>>>>> the >>>>>>>>>>>> hadoop streaming jobs, and regionserver also runs its own thrift >>>>>>>>>>>> server. Each mapper that does the load talks to the localhost's >>>>>>>>>>>> thrift >>>>>>>>>>>> server. >>>>>>>>>>>> >>>>>>>>>>>> The Row keys a fixed string + an incremental number then the order >>>>>>>>>>>> of >>>>>>>>>>>> the bytes are reversed, so runA123 becomes 321Anur. I though of >>>>>>>>>>>> using >>>>>>>>>>>> murmur hash but was worried about collisions. >>>>>>>>>>>> >>>>>>>>>>>> As I add more insert jobs, each jobs throughput goes down. Way >>>>>>>>>>>> down. I >>>>>>>>>>>> went from about 200 row/sec/table per job with one job to about 24 >>>>>>>>>>>> rows/sec/table per job with 25 running jobs. The servers are mostly >>>>>>>>>>>> idle. I'm loading into two tables, one has several indexes and I'm >>>>>>>>>>>> loading into three column families, the other has no indexes and >>>>>>>>>>>> one >>>>>>>>>>>> column family. Both tables only currently have two region each. >>>>>>>>>>>> >>>>>>>>>>>> The regionserver that serves the indexed table's regions is using >>>>>>>>>>>> the >>>>>>>>>>>> most CPU but is 87% idle. The other servers are all at ~90% idle. >>>>>>>> >>>>>>>> There >>>>>>>>>>>> >>>>>>>>>>>> is no IO wait. the perl processes are barely ticking over. Java on >>>>>>>>>>>> the >>>>>>>>>>>> most "loaded" server is using about 50-60% of one CPU. >>>>>>>>>>>> >>>>>>>>>>>> Normally when I do load in a pseudo-distrbuted hbase (my >>>>>>>>>>>> development >>>>>>>>>>>> platform) perl's speed is the limiting factor and uses about 85% of >>>>>>>>>>>> a >>>>>>>>>>>> CPU. In this cluster they are using only 5-10% of a CPU as they are >>>>>>>> >>>>>>>> all >>>>>>>>>>>> >>>>>>>>>>>> waiting on thrift (hbase). When I run only 1 process on the >>>>>>>>>>>> cluster, >>>>>>>>>>>> perl uses much more of a CPU, maybe 70%. >>>>>>>>>>>> >>>>>>>>>>>> Any tips or help in getting the speed/scalability up would be >>>>>>>>>>>> great. >>>>>>>>>>>> Please let me know if you need any other info. >>>>>>>>>>>> >>>>>>>>>>>> As I send this - it looks like the main table has split again and >>>>>>>>>>>> is >>>>>>>>>>>> being served by three regionservers.. My performance is going up a >>>>>>>>>>>> bit >>>>>>>>>>>> (now 35 rows/sec/table per processes), but still seems like I'm not >>>>>>>>>>>> using the full potential of even the limited EC2 system, no IO wait >>>>>>>> >>>>>>>> and >>>>>>>>>>>> >>>>>>>>>>>> lots of idle CPU. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> many thanks >>>>>>>>>>>> -chris >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Todd Lipcon >>>>>>> Software Engineer, Cloudera >>>>>> >>>>>> >>>> >> >>