<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8355955800449919830</id><updated>2012-02-16T16:48:42.679+08:00</updated><category term='compression'/><category term='SSTable'/><category term='Hive'/><category term='Bigdata'/><category term='Performance'/><category term='Encoding'/><category term='MapReduce'/><category term='KeyValueStore'/><category term='Hadoop'/><category term='Column Store'/><category term='Amazon'/><category term='HBase'/><category term='snappy'/><category term='BigTable'/><category term='HFile'/><category term='AsterData'/><category term='RPC'/><category term='Vertica'/><category term='NoSQL'/><category term='Google'/><category term='DBMS'/><category term='Cassandra'/><category term='AWS'/><title type='text'>Big Data Engineering, Practices and Research</title><subtitle type='html'>Our Engineering, Practices and Research in Big Data.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-3749716302250921168</id><published>2011-10-29T23:18:00.007+08:00</published><updated>2011-10-30T17:42:02.636+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='snappy'/><category scheme='http://www.blogger.com/atom/ns#' term='compression'/><title type='text'>Snappy and the compressed format</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/-SFIQvZ0Eaxs/Tqwbx8ehaBI/AAAAAAAABDY/AXLpm3q0EaM/s1600/Snappy%2BFormat.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 391px;" src="http://3.bp.blogspot.com/-SFIQvZ0Eaxs/Tqwbx8ehaBI/AAAAAAAABDY/AXLpm3q0EaM/s400/Snappy%2BFormat.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5668936575814297618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Google snappy: A fast compressor/decompressor&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;1. Optimized for:&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;    64-bit platforms&lt;/div&gt;&lt;div&gt;    x86 little-endian&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;2. Block compression&lt;/b&gt;&lt;/div&gt;&lt;div&gt;    Snappy compressor works in 32KB blocks and does not do matching across blocks, it will never produce a bitstream with offsets larger than about 32768. However, the decompressor should not rely on this, as it may change in the future.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;3. Snappy is a &lt;b&gt;LZ77-type compressor &lt;/b&gt;with a fixed, byte-oriented encoding.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;    The format of snappy compressed data like the left figure.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-3749716302250921168?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/3749716302250921168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2011/10/snappy-and-compressed-format.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/3749716302250921168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/3749716302250921168'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2011/10/snappy-and-compressed-format.html' title='Snappy and the compressed format'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-SFIQvZ0Eaxs/Tqwbx8ehaBI/AAAAAAAABDY/AXLpm3q0EaM/s72-c/Snappy%2BFormat.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-7876467832925429684</id><published>2011-06-12T16:42:00.000+08:00</published><updated>2011-06-12T16:43:16.355+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bigdata'/><category scheme='http://www.blogger.com/atom/ns#' term='Cassandra'/><title type='text'>Cassandra Compression and the Performance Evaluation</title><content type='html'>Even though we had put the Cassandra away in all our products, we would like to share our works here.&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 477px;" id="__ss_8284068"&gt; &lt;strong style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/schubertzhang/cassandra-performanceevaluationwithcompression" title="Cassandra Compression and Performance Evaluation"&gt;Cassandra Compression and Performance Evaluation&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/8284068" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" height="510" width="477"&gt;&lt;/iframe&gt; &lt;div style="padding: 5px 0pt 12px;"&gt; View more &lt;a href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a href="http://www.slideshare.net/schubertzhang"&gt;Schubert Zhang&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Why we put away the Cassandra in our products? Because:&lt;br /&gt;(1) It is a big wrong in Cassandra’s implementation, especially on it’s local storage engine layer, i.e. SSTable and Indexing. &lt;br /&gt;(2) It is a big wrong to combine Bigtable and Dynamo. Dynamo’s hash  ring architecture is a obsolete technolohy for scale, it’s consistency  and replication policy is also unusable in big data storage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-7876467832925429684?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/7876467832925429684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2011/06/cassandra-compression-and-performance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/7876467832925429684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/7876467832925429684'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2011/06/cassandra-compression-and-performance.html' title='Cassandra Compression and the Performance Evaluation'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-4934854141855562520</id><published>2010-07-10T22:42:00.003+08:00</published><updated>2010-07-10T22:50:16.806+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cassandra'/><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>My comments to "Cassandra at Twitter Today"</title><content type='html'>&lt;div&gt;Someone said the twitter blog post "&lt;a href="http://engineering.twitter.com/2010/07/cassandra-at-twitter-today.html"&gt;Cassandra at Twitter Today&lt;/a&gt;" is a big blow to the reputation of Cassandra.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is ardently discussing @&lt;a href="http://news.ycombinator.com/item?id=1502756"&gt;http://news.ycombinator.com/item?id=1502756&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are my comments:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;1. Cassandra is very young! Especially, the design and implementation of local storage and local indexing are junior and not good.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;2. Pool read-performance is also due to the poor local storage implementation.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;3. The local storage, indexing and persistence structures are not stable. They need to be re-designed /re-implemented.  If Twitter move data to current Cassandra, they should do another move later for a new local storage, indexing and persistence structure.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;4. There are many good techniques in Cassandra and other open-sourced projects (such as Hadoop, HBase ...), etc. But, they  are not ready for production. Understand the detail of these techniques and implement them in your projects/products.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-4934854141855562520?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/4934854141855562520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2010/07/my-comments-to-cassandra-at-twitter.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/4934854141855562520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/4934854141855562520'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2010/07/my-comments-to-cassandra-at-twitter.html' title='My comments to &quot;Cassandra at Twitter Today&quot;'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-8201675487109095066</id><published>2010-04-19T12:58:00.004+08:00</published><updated>2010-04-19T13:17:36.689+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cassandra'/><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>Cassandra Insert Throughput</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;b&gt;** 0.5.1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Test Cluster:&lt;/div&gt;&lt;div&gt;   DELL 2950 1*CPU Intel Xeon 5310 (4 cores)&lt;/div&gt;&lt;div&gt;   5 nodes&lt;/div&gt;&lt;div&gt;      1 node: 2GB heap for Cassandra JVM&lt;/div&gt;&lt;div&gt;      4 nodes: 4GB heap for Cassandra JVM&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;   Commit-log and Data stored on same disks.&lt;/div&gt;&lt;div&gt;   25 client threads run on 5 nodes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Data Model:&lt;/div&gt;&lt;div&gt;   Keyspace Name = “Test”&lt;/div&gt;&lt;div&gt;   Column Family Name = “ABC”&lt;/div&gt;&lt;div&gt;   CompareWith for Column = LongType&lt;/div&gt;&lt;div&gt;&lt;div&gt;   Column Name = Timestamp (LongType), Value = 400 bytes binary&lt;/div&gt;&lt;/div&gt;&lt;div&gt;   Billions of keys,  thousands of columns.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Partitioner = dht.RandomPartitioner&lt;/div&gt;&lt;div&gt;MemtableSizeInMB = 64MB&lt;/div&gt;&lt;div&gt;ReplicationFactor = 3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Use Thrift Client Interface&lt;/div&gt;&lt;div&gt;Client.insert(..)&lt;/div&gt;&lt;div&gt;Consistency Level (write) = 1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Total inserted 1,076,333,461 columns.&lt;/div&gt;&lt;div&gt;Disk Use: 302GB+283GB+335GB+186GB+276GB=1,382GB (~~400B*1G=400GB *3= 1200GB)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On inserting: 1000 SSTables on each node. The latency of a query is about 1~3 seconds.&lt;/div&gt;&lt;div&gt;Quiet for long time: 10 SSTables (very big files, such as there is one 144GB SSTable data file)&lt;/div&gt;&lt;div&gt;The latency of a query is in ms.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Result: 18,000 columns/second&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;** 0.6.0&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Only 4 nodes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_-KwPpcL7tYQ/S8vnGLmDyWI/AAAAAAAABB4/IKxmAEVQrgM/s1600/cassandra-insert-0.6.0.PNG"&gt;&lt;img src="http://1.bp.blogspot.com/_-KwPpcL7tYQ/S8vnGLmDyWI/AAAAAAAABB4/IKxmAEVQrgM/s400/cassandra-insert-0.6.0.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5461713066494511458" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 228px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;JVM GC for big heap.&lt;/div&gt;&lt;div&gt;&lt;div&gt;Memory, GC..., always to be the bottleneck and big issue of java-based infrastructure software!&lt;/div&gt;&lt;div&gt;&lt;a href="http://wiki.apache.org/cassandra/FAQ#slows_down_after_lotso_inserts"&gt;http://wiki.apache.org/cassandra/FAQ#slows_down_after_lotso_inserts &lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="https://issues.apache.org/jira/browse/CASSANDRA-896"&gt;https://issues.apache.org/jira/browse/CASSANDRA-896&lt;/a&gt;  (LinkedBlockingQueue issue, fixed in jdk-6u19)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Seems 0.5.1 performed better.&lt;/div&gt;&lt;div&gt;0.6.0 eat more memory.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="width:425px" id="__ss_3770854"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/schubertzhang/cassandra-060-insert-throughput" title="Cassandra 0.6.0 insert throughput"&gt;Cassandra 0.6.0 insert throughput&lt;/a&gt;&lt;/strong&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cassandra0-6-0insertthroughput-100418223824-phpapp01&amp;amp;stripped_title=cassandra-060-insert-throughput"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cassandra0-6-0insertthroughput-100418223824-phpapp01&amp;amp;stripped_title=cassandra-060-insert-throughput" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/schubertzhang"&gt;Schubert Zhang&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-8201675487109095066?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/8201675487109095066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2010/04/cassandra-insert-throughput.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/8201675487109095066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/8201675487109095066'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2010/04/cassandra-insert-throughput.html' title='Cassandra Insert Throughput'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-KwPpcL7tYQ/S8vnGLmDyWI/AAAAAAAABB4/IKxmAEVQrgM/s72-c/cassandra-insert-0.6.0.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-8114026821937658633</id><published>2010-03-30T10:29:00.006+08:00</published><updated>2010-04-19T13:18:54.054+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='DBMS'/><title type='text'>Please don't puzzle on Column-Stores</title><content type='html'>Daniel Abadi have a blog post here: &lt;div&gt;&lt;a href="http://dbmsmusings.blogspot.com/2010/03/distinguishing-two-major-types-of_29.html"&gt;http://dbmsmusings.blogspot.com/2010/03/distinguishing-two-major-types-of_29.html&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I want to leave a comment and to correct it here:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;It is meaningless to compare the two groups, they target to different applications. I think the post just make more confusion. And what Mr. Stonebraker said is also not right.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;I think the only thing which make these confusions is the term "column" in Group A. In fact, it is not traditional "column" of RDBMS area. And your example of a traditional spreadsheet table is also not the real target of Group A. The "column" name in Group A is in fact data (not schema). &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;If have got to change the term, I think we can change the term "column" in Group A to "end-key". In fact, in Bigtable, there is no column, it is "qualifier".&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;In short: &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;(1) Group A's "column" is in data, not schema.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;(2) Group B's "column" is in schema.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;They are different in conception and application target.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-8114026821937658633?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/8114026821937658633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2010/03/please-dont-puzzle-on-column-stores.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/8114026821937658633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/8114026821937658633'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2010/03/please-dont-puzzle-on-column-stores.html' title='Please don&apos;t puzzle on Column-Stores'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-7988730544146372794</id><published>2010-01-06T00:02:00.007+08:00</published><updated>2010-01-06T00:41:49.427+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MapReduce'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Jeff Dean and Sanjay Ghemawat's good advices on MapReduce</title><content type='html'>&lt;div style="width: 477px; text-align: left;" id="__ss_2833395"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/schubertzhang/jeffrey-dean-and-sanjay-ghemawat-reply-stonebrake" title="Jeffrey Dean and Sanjay Ghemawat Reply Stonebrake"&gt;Jeffrey Dean and Sanjay Ghemawat Reply Stonebrake&lt;/a&gt;&lt;object style="margin: 0px;" width="477" height="510"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayerd.swf?doc=jeffdean-mapreduce-reply-to-stonebrake-100105091702-phpapp01&amp;amp;stripped_title=jeffrey-dean-and-sanjay-ghemawat-reply-stonebrake"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayerd.swf?doc=jeffdean-mapreduce-reply-to-stonebrake-100105091702-phpapp01&amp;amp;stripped_title=jeffrey-dean-and-sanjay-ghemawat-reply-stonebrake" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="477" height="510"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/schubertzhang"&gt;Schubert Zhang&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;I'd like to put a copy here, since this paper[1] matchs my opinions so much on MapReduce model and the pratices about large-dataset management/processing implementations.&lt;br /&gt;&lt;br /&gt;In the paper, Jeffrey Dean and Sanjay Ghemawat reply Stonebrake and DeWitt's misconceptions about MapReduce.  In fact, these misconceptions are so obvious and easy to understand for us.&lt;br /&gt;&lt;br /&gt;It is also a good guide to improve the implementation of Hadoop and other members in the family. Suggest you reading it carefully.&lt;br /&gt;&lt;br /&gt;Dean and other scientists from Google always bring us clear and reasonable explains about their technologies and pratices. But sometimes, someones from other organizations bring use puzzles.&lt;br /&gt;&lt;br /&gt;Except for the five witchcrafts which Google exposed in following papers:&lt;br /&gt;&lt;a href="http://labs.google.com/papers/gfs.html"&gt;GFS: http://labs.google.com/papers/gfs.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://labs.google.com/papers/mapreduce.html"&gt;MapReduce: http://labs.google.com/papers/mapreduce.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://labs.google.com/papers/bigtable.html"&gt;Bigtable: http://labs.google.com/papers/bigtable.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://labs.google.com/papers/chubby.html"&gt;Chubby: http://labs.google.com/papers/chubby.html&lt;/a&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="PowerPoint.Slide"&gt;&lt;meta name="Generator" content="Microsoft PowerPoint 11"&gt;&lt;!--[if !mso]&gt; &lt;style&gt; v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} &lt;/style&gt; &lt;![endif]--&gt;&lt;title&gt;幻灯片 6&lt;/title&gt;&lt;meta name="Description" content="2010-1-6"&gt;&lt;!--[if !ppt]--&gt;&lt;style&gt; .O 	{font-size:149%;} &lt;/style&gt;&lt;style media="print"&gt; &lt;!--.sld 	{left:0px !important; 	width:6.0in !important; 	height:4.5in !important; 	font-size:103% !important;} --&gt; &lt;/style&gt;&lt;!--[endif]--&gt;&lt;o:shapelayout ext="edit"&gt;&lt;/o:shapelayout&gt;&lt;o:idmap ext="edit" data="1"&gt;&lt;/o:idmap&gt;&lt;p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00"&gt;    &lt;/p:colorscheme&gt;Google Cluster and WorkQueue Cluster Management&lt;br /&gt;&lt;br /&gt;Following papers/articles/keynotes are very worthy of careful reading:&lt;br /&gt;Jeff Dean Keynotes on LADIS09 (Designs, Lessons and Advice from Building Large&lt;br /&gt;Distributed Systems): &lt;a href="http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf"&gt;http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf&lt;/a&gt;&lt;br /&gt;Jeff Dean Keynotes on WSDM09(&lt;span style=""&gt;&lt;a href="http://research.google.com/people/jeff/WSDM09-keynote.pdf"&gt;Challenges in Building Large-Scale Information Retrieval Systems&lt;/a&gt;&lt;/span&gt;): &lt;a href="http://research.google.com/people/jeff/WSDM09-keynote.pdf"&gt;http://research.google.com/people/jeff/WSDM09-keynote.pdf&lt;/a&gt;&lt;br /&gt;Jeff Dean Stanford-295-talk (&lt;span style=""&gt;&lt;a href="http://research.google.com/people/jeff/stanford-295-talk.pdf"&gt;Software Engineering Advice from Building Large-Scale Distributed Systems&lt;/a&gt;&lt;/span&gt;):&lt;a href="http://research.google.com/people/jeff/stanford-295-talk.pdf"&gt; http://research.google.com/people/jeff/stanford-295-talk.pdf&lt;/a&gt;&lt;br /&gt;Jeff Dean "Handling Large Datasets at Google": &lt;a href="http://hepix.caspur.it/storage/hep_pdf/2008/Spring/handling-large-datasets-20080507.pdf"&gt;http://hepix.caspur.it/storage/hep_pdf/2008/Spring/handling-large-datasets-20080507.pdf&lt;/a&gt;&lt;br /&gt;Jeff Dean "A Behind the ScenesTour": &lt;a href="http://www.slideshare.net/rawwell/googleabehindthescenestourjeffdean"&gt;http://www.slideshare.net/rawwell/googleabehindthescenestourjeffdean&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And following so called GFS-II articals:&lt;br /&gt;Sean Quinlan:  GFS: Evoluti&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;on on Fast-forward (&lt;a href="http://queue.acm.org/detail.cfm?id=1594206"&gt;http://queue.acm.org/detail.cfm?id=1594206&lt;/a&gt;)&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-7988730544146372794?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/7988730544146372794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2010/01/jeffrey-dean-and-sanjay-ghemawats-good.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/7988730544146372794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/7988730544146372794'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2010/01/jeffrey-dean-and-sanjay-ghemawats-good.html' title='Jeff Dean and Sanjay Ghemawat&apos;s good advices on MapReduce'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-2186343739223007123</id><published>2009-12-21T23:48:00.008+08:00</published><updated>2010-01-06T00:01:29.088+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RPC'/><category scheme='http://www.blogger.com/atom/ns#' term='Encoding'/><title type='text'>Google Basic Building Block - Protocol Buffers</title><content type='html'>“Protocol Buffers” is an important one of Google’s basic building blocks. It’s is a way of encoding structured data in an efficient yet extensible format, and a compiler that generates convenient wrappers for manipulating the objects in a variety of languages. Protocol Buffers are used extensively at Google for almost all RPC protocols, and for storing structured information in a variety of persistent storage systems.&lt;br /&gt;&lt;br /&gt;When to use Protocol Buffers:&lt;br /&gt;- RPC Protocols/Messages&lt;br /&gt;- Persistent Storage of structured information&lt;br /&gt;- As Client/Server Framework&lt;br /&gt;&lt;br /&gt;According to Jeff Dean’s keynote at LADIS2009 http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf&lt;br /&gt;&lt;br /&gt;Serialization/Deserialization&lt;br /&gt;- high performance (200+ MB/s encode/decode)&lt;br /&gt;- fairly compact (uses variable length encodings)&lt;br /&gt;- format used to store data persistently (not just for RPCs)&lt;br /&gt;&lt;br /&gt;Low-level MapReduce interfaces are in terms of byte arrays&lt;br /&gt;- Hardly ever use textual formats, though: slow, hard to parse&lt;br /&gt;- Most input &amp;amp; output is in encoded Protocol Buffer format&lt;br /&gt;&lt;br /&gt;Language Support:&lt;br /&gt;- C++&lt;br /&gt;- Java&lt;br /&gt;- Python&lt;br /&gt;&lt;br /&gt;Optimization for different use cases: (e.g.: option optimize_for = SPEED)&lt;br /&gt;&lt;br /&gt;- SPEED (default): The protocol buffer compiler will generate code for serializing, parsing, and performing other common operations on your message types. This code is extremely highly optimized.&lt;br /&gt;&lt;br /&gt;- CODE_SIZE: The protocol buffer compiler will generate minimal classes and will rely on shared, reflection-based code to implement serialialization, parsing, and various other operations. The generated code will thus be much smaller than with SPEED, but operations will be slower. Classes will still implement exactly the same public API as they do in SPEED mode. This mode is most useful in apps that contain a very large number .proto files and do not need all of them to be blindingly fast.&lt;br /&gt;&lt;br /&gt;- LITE_RUNTIME: The protocol buffer compiler will generate classes that depend only on the "lite" runtime library (libprotobuf-lite instead of libprotobuf). The lite runtime is much smaller than the full library (around an order of magnitude smaller) but omits certain features like descriptors and reflection. This is particularly useful for apps running on constrained platforms like mobile phones. The compiler will still generate fast implementations of all methods as it does in SPEED mode. Generated classes will only implement the MessageLite interface in each language, which provides only a subset of the methods of the full Message interface.&lt;br /&gt;&lt;br /&gt;The detail of Protocol Buffers, please refer http://code.google.com/apis/protocolbuffers/.&lt;br /&gt;&lt;br /&gt;We may select one between Protocol Buffers and Thrift as our building block. After have a brief read of the Protocol Buffers’ code, and compare to our experiences of using Thrift, I like Thrift, which provide better RPC implementation and coding interfaces.&lt;br /&gt;&lt;br /&gt;There are also some performance compares of Thrift and Protocol Buffers:&lt;br /&gt;http://timyang.net/programming/thrift-protocol-buffers-performance-java/&lt;br /&gt;http://timyang.net/programming/thrift-protocol-buffers-performance-2/&lt;br /&gt;http://rapd.wordpress.com/2009/04/18/json-vs-thrift-vs-pbuffer/&lt;br /&gt;&lt;br /&gt;How to install protobuf (an example):&lt;br /&gt;&lt;br /&gt;1. Download protobuf-2.2.0a.tar.gz&lt;br /&gt;$ cd /usr/local/src&lt;br /&gt;$ tar -zxvf /root/pkgs/protobuf-2.2.0a.tar.gz&lt;br /&gt;&lt;br /&gt;Read README.TXT and INSTALL.TXT for detail.&lt;br /&gt;&lt;br /&gt;2. Build and install the C++ Protocol Buffer runtime and the Protocol Buffer compiler (protoc)&lt;br /&gt;$./configure --prefix=/usr/local/protobuf&lt;br /&gt;$ make&lt;br /&gt;$ make check&lt;br /&gt;$ make install&lt;br /&gt;&lt;br /&gt;Set linux lib path, then application can find protobuf.so.&lt;br /&gt;$ echo “/usr/local/protobuf/lib” &gt; /etc/ld.so.conf.d/protobuf.conf&lt;br /&gt;$ ldconfig&lt;br /&gt;&lt;br /&gt;3. /etc/profile.d/local.sh&lt;br /&gt;This local.sh is added by me. It add some system level environment variables for the convenience of applications.&lt;br /&gt;&lt;blockquote&gt;# apache-ant&lt;br /&gt;ANT_HOME=/usr/local/apache-ant&lt;br /&gt;PATH=$PATH:$ANT_HOME/bin&lt;br /&gt;export ANT_HOME&lt;br /&gt;&lt;br /&gt;# google protocol buffer&lt;br /&gt;GOOGLE_PROTOBUF_HOME=/usr/local/protobuf&lt;br /&gt;PATH=$PATH:$GOOGLE_PROTOBUF_HOME/bin&lt;br /&gt;export GOOGLE_PROTOBUF_HOME&lt;br /&gt;# apps use pkg-config to compile and link protobuf (eg. pkg-config --cflags --libs protobuf)&lt;br /&gt;export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$GOOGLE_PROTOBUF_HOME/lib/pkgconfig/&lt;br /&gt;&lt;br /&gt;export PATH&lt;/blockquote&gt;4. Install protobuf Java&lt;br /&gt;$ cd /usr/local/src/protobuf-2.2.0a/java&lt;br /&gt;Read README.TXT (Installation - Without Maven)&lt;br /&gt;&lt;br /&gt;Generate DescriptorProtos.java&lt;br /&gt;$ protoc --java_out=src/main/java -I../src ../src/google/protobuf/descriptor.proto&lt;br /&gt;&lt;br /&gt;Write a new build.xml:&lt;br /&gt;-------------------&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;project basedir=&amp;quot;.&amp;quot; default=&amp;quot;jar-libprotobuf&amp;quot; name=&amp;quot;libprotobuf&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;property environment=&amp;quot;env&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- javac options --&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;javac.version&amp;quot; value=&amp;quot;1.6&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;javac.source&amp;quot; value=&amp;quot;${javac.version}&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;javac.target&amp;quot; value=&amp;quot;${javac.version}&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;javac.deprecation&amp;quot; value=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;javac.debug&amp;quot; value=&amp;quot;off&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;javac.debuglevel&amp;quot; value=&amp;quot;source,lines,vars&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;javac.optimize&amp;quot; value=&amp;quot;on&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;javac.args&amp;quot; value=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;javac.args.warnings&amp;quot; value=&amp;quot;-Xlint:unchecked&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- jar options --&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;jar.index&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- protobuf names --&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;version&amp;quot; value=&amp;quot;2.2.0a&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;Name&amp;quot; value=&amp;quot;libprotobuf&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;final.name&amp;quot; value=&amp;quot;${Name}-java-${version}&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- dir locations --&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;src.dir&amp;quot; value=&amp;quot;${basedir}/src&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;src.main.dir&amp;quot; value=&amp;quot;${src.dir}/main&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;src.test.dir&amp;quot; value=&amp;quot;${src.dir}/test&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;build.dir&amp;quot; value=&amp;quot;${basedir}/build&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;build.classes.dir&amp;quot; value=&amp;quot;${build.dir}/classes&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- TARGET init --&amp;gt;&lt;br /&gt;    &amp;lt;target name=&amp;quot;init&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;mkdir dir=&amp;quot;${build.dir}&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- TARGET clean --&amp;gt;&lt;br /&gt;    &amp;lt;target name=&amp;quot;clean&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;delete dir=&amp;quot;${build.dir}&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- TARGET cleanall --&amp;gt;&lt;br /&gt;    &amp;lt;target name=&amp;quot;cleanall&amp;quot; depends=&amp;quot;clean&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;delete&amp;gt;&lt;br /&gt;            &amp;lt;fileset dir=&amp;quot;.&amp;quot; includes=&amp;quot;*.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;/delete&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- TARGET compile-libprotobuf --&amp;gt;&lt;br /&gt;    &amp;lt;target name=&amp;quot;compile-libprotobuf&amp;quot; depends=&amp;quot;init&amp;quot; &amp;gt;&lt;br /&gt;        &amp;lt;echo message=&amp;quot;${ant.project.name}: ${ant.file}&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;mkdir dir=&amp;quot;${build.classes.dir}&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;javac source=&amp;quot;${javac.source}&amp;quot; target=&amp;quot;${javac.target}&amp;quot;&lt;br /&gt;               destdir=&amp;quot;${build.classes.dir}&amp;quot;&lt;br /&gt;               srcdir=&amp;quot;${src.main.dir}&amp;quot;&lt;br /&gt;               debug=&amp;quot;${javac.debug}&amp;quot;&lt;br /&gt;               debuglevel=&amp;quot;${javac.debuglevel}&amp;quot;&lt;br /&gt;               optimize=&amp;quot;${javac.optimize}&amp;quot;&lt;br /&gt;               deprecation=&amp;quot;${javac.deprecation}&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;compilerarg line=&amp;quot;${javac.args} ${javac.args.warnings}&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;/javac&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- TARGET jar-libprotobuf --&amp;gt;&lt;br /&gt;    &amp;lt;target name=&amp;quot;jar-libprotobuf&amp;quot; depends=&amp;quot;compile-libprotobuf&amp;quot;&amp;gt;&lt;br /&gt;                  &amp;lt;jar basedir=&amp;quot;${build.classes.dir}&amp;quot; destfile=&amp;quot;${build.dir}/${final.name}.jar&amp;quot; index=&amp;quot;${jar.index}&amp;quot;&amp;gt;&lt;br /&gt;                  &amp;lt;/jar&amp;gt;&lt;br /&gt;        &amp;lt;copy todir=&amp;quot;${basedir}&amp;quot;&amp;gt;&lt;br /&gt;          &amp;lt;fileset file=&amp;quot;${build.dir}/${final.name}.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;/copy&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- for libprotobuf-lite --&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;build.lite.dir&amp;quot; value=&amp;quot;${build.dir}/lite&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;build.lite.classes.dir&amp;quot; value=&amp;quot;${build.lite.dir}/classes&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;final.lite.name&amp;quot; value=&amp;quot;${Name}-lite-java-${version}&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- TARGET compile-libprotobuf-lite --&amp;gt;&lt;br /&gt;    &amp;lt;target name=&amp;quot;compile-libprotobuf-lite&amp;quot; depends=&amp;quot;init&amp;quot; &amp;gt;&lt;br /&gt;        &amp;lt;echo message=&amp;quot;${ant.project.name}: ${ant.file}&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;mkdir dir=&amp;quot;${build.lite.dir}&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;mkdir dir=&amp;quot;${build.lite.classes.dir}&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;javac source=&amp;quot;${javac.source}&amp;quot; target=&amp;quot;${javac.target}&amp;quot;&lt;br /&gt;               destdir=&amp;quot;${build.lite.classes.dir}&amp;quot;&lt;br /&gt;               srcdir=&amp;quot;${src.main.dir}&amp;quot;&lt;br /&gt;               includes=&amp;quot;**/AbstractMessageLite.java&lt;br /&gt;                         **/ByteString.java&lt;br /&gt;                         **/CodedInputStream.java&lt;br /&gt;                         **/CodedOutputStream.java&lt;br /&gt;                         **/ExtensionRegistryLite.java&lt;br /&gt;                         **/FieldSet.java&lt;br /&gt;                         **/GeneratedMessageLite.java&lt;br /&gt;                         **/InvalidProtocolBufferException.java&lt;br /&gt;                         **/Internal.java&lt;br /&gt;                         **/MessageLite.java&lt;br /&gt;                         **/UninitializedMessageException.java&lt;br /&gt;                         **/WireFormat.java&amp;quot;&lt;br /&gt;               debug=&amp;quot;${javac.debug}&amp;quot;&lt;br /&gt;               debuglevel=&amp;quot;${javac.debuglevel}&amp;quot;&lt;br /&gt;               optimize=&amp;quot;${javac.optimize}&amp;quot;&lt;br /&gt;               deprecation=&amp;quot;${javac.deprecation}&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;compilerarg line=&amp;quot;${javac.args} ${javac.args.warnings}&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;/javac&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- TARGET jar-libprotobuf-lite --&amp;gt;&lt;br /&gt;    &amp;lt;target name=&amp;quot;jar-libprotobuf-lite&amp;quot; depends=&amp;quot;compile-libprotobuf-lite&amp;quot;&amp;gt;&lt;br /&gt;                  &amp;lt;jar basedir=&amp;quot;${build.lite.classes.dir}&amp;quot; destfile=&amp;quot;${build.lite.dir}/${final.lite.name}.jar&amp;quot; index=&amp;quot;${jar.index}&amp;quot;&amp;gt;&lt;br /&gt;                  &amp;lt;/jar&amp;gt;&lt;br /&gt;        &amp;lt;copy todir=&amp;quot;${basedir}&amp;quot;&amp;gt;&lt;br /&gt;          &amp;lt;fileset file=&amp;quot;${build.lite.dir}/${final.lite.name}.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;/copy&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;-------------------&lt;br /&gt;&lt;br /&gt;$ ant&lt;br /&gt;$ cp libprotobuf-java-2.2.0a.jar /usr/local/protobuf/lib/&lt;br /&gt;&lt;br /&gt;$ ant libprotobuf-lite-java&lt;br /&gt;$ cp libprotobuf-lite-java-2.2.0a.jar /usr/local/protobuf/lib/&lt;br /&gt;&lt;br /&gt;5. Build examples&lt;br /&gt;$ cd /usr/local/src/protobuf-2.2.0a/examples&lt;br /&gt;Read detail of README.txt&lt;br /&gt;&lt;br /&gt;JAVA:&lt;br /&gt;$ export CLASSPATH=.:$CLASSPATH:/usr/local/protobuf/lib/libprotobuf-java-2.2.0a.jar&lt;br /&gt;$ make java&lt;br /&gt;&lt;br /&gt;CPP:&lt;br /&gt;$ make cpp&lt;br /&gt;&lt;br /&gt;Python:&lt;br /&gt;$ make python&lt;br /&gt;&lt;br /&gt;Then we can read the example code (AddPersion and ListPeople) and run them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-2186343739223007123?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/2186343739223007123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2009/12/google-basic-building-block-protocol.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/2186343739223007123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/2186343739223007123'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2009/12/google-basic-building-block-protocol.html' title='Google Basic Building Block - Protocol Buffers'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-1578942929474060994</id><published>2009-10-29T10:08:00.006+08:00</published><updated>2009-10-29T11:26:53.566+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='AWS'/><title type='text'>Amazon adding more components/utilites as services in AWS</title><content type='html'>Amazon just launched &lt;a href="http://aws.amazon.com/rds/"&gt;Relational Database Service (RDS) &lt;/a&gt;as a new service in its AWS cloud. Werner Vogels's  blog "&lt;a href="http://www.allthingsdistributed.com/2009/10/amazon_relational_database_service.html"&gt;Expanding the Cloud: The Amazon Relational Database Service (RDS)&lt;/a&gt;" gives us more detail of the motivations to create it's S3, EC2, SimpleDB, EBS and now RDS. We can find the business&lt;br /&gt;&lt;br /&gt;Amazon's tech. style:&lt;br /&gt;In the Amazon services architecture, each service is responsible for its own data management, which means that each service team can pick exactly those solutions that are ideally suited for the particular application they are implementing.It allows them to tailor the data management system such that they get maximum reliability and guaranteed performance at the right cost as the system scales up.&lt;br /&gt;&lt;br /&gt;So, for the target of "scalability, reliability, performance, and cost-effectiveness":&lt;br /&gt;- Since the Key-Value storage solutions are widely used, they led to the creation of S3.&lt;br /&gt;- Since the simple structured data management systems without complex transactions and relations, without rigid schema is widely used, they led to the creation of SimpleDB.&lt;br /&gt;- But, Amazon found that many applications running in EC2 instances want to use RDBMS, then EBS is launched to provide scalable and reliable storage volume that can be used for persisting the databases.&lt;br /&gt;- To free up users to focus on their applications and business, now RDS is ready. The users need not to maintain their DB and consider who to scale the DB.&lt;br /&gt;- Another case is AWS MapReduce services.&lt;br /&gt;&lt;br /&gt;RDS is MySQL in AWS cloud.&lt;br /&gt;&lt;div id=":12f" class="ii gt"&gt;&lt;br /&gt;Now, AWS users have three methods to use DB:&lt;br /&gt;(1) RDS&lt;br /&gt;(2) EC2 AMI+EBS&lt;br /&gt;(3) SimpleDB (no relation model)&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;We can re-read the good paper "&lt;a href="http://jineshvaria.s3.amazonaws.com/public/cloudarchitectures-varia.pdf"&gt;Amazon Cloud Architecture&lt;/a&gt;",  to understand the strategy of AWS better.&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;[1] Amazon Relational Database Service (RDS): &lt;a href="http://aws.amazon.com/rds/"&gt;http://aws.amazon.com/rds/&lt;/a&gt;&lt;br /&gt;[2] Werner Vogels's  blog: &lt;a href="http://www.allthingsdistributed.com/2009/10/amazon_relational_database_service.html" target="_blank"&gt;http://www.&lt;wbr&gt;allthingsdistributed.com/2009/&lt;wbr&gt;10/amazon_relational_database_&lt;wbr&gt;service.html&lt;/a&gt;&lt;br /&gt;[3] Amazon Cloud Architecture: &lt;a href="http://jineshvaria.s3.amazonaws.com/public/cloudarchitectures-varia.pdf"&gt;http://jineshvaria.s3.amazonaws.com/public/cloudarchitectures-varia.pdf&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-1578942929474060994?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/1578942929474060994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2009/10/amazon-adding-more-componentsutilites.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/1578942929474060994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/1578942929474060994'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2009/10/amazon-adding-more-componentsutilites.html' title='Amazon adding more components/utilites as services in AWS'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-8034162348614424937</id><published>2009-10-02T21:54:00.017+08:00</published><updated>2009-10-06T23:59:59.993+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AsterData'/><category scheme='http://www.blogger.com/atom/ns#' term='Vertica'/><category scheme='http://www.blogger.com/atom/ns#' term='MapReduce'/><category scheme='http://www.blogger.com/atom/ns#' term='DBMS'/><category scheme='http://www.blogger.com/atom/ns#' term='Hadoop'/><title type='text'>The Integration of Analytic DBMS and Hadoop</title><content type='html'>Recently, tow famous vendors of analytic DBMS,  Vertica and Aster-Data announced their integration with Hadoop. The analytic DBMS and Hadoop, each address distinct but complementary problems for managing large data.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Vertica:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Currently it is a light integration.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ETL, ELT, data cleansing, data mining, etc.&lt;/li&gt;&lt;li&gt;Moving data between Hadoop and Vertica. &lt;/li&gt;&lt;li&gt;InputFormat (InputSplit , VerticaRecord, push down relational map operations by parameterizing the database query).&lt;/li&gt;&lt;li&gt;OutputFormat (to existing or create a new table).&lt;/li&gt;&lt;li&gt;Easy for Hadoop developers to&lt;span style="color: rgb(204, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(204, 0, 0);"&gt;push down&lt;/span&gt; Map operations to Vertica databases in parallel by specifying parameterized queries which result in pre-aggregated data for each mapper.&lt;/li&gt;&lt;li&gt;Support Hadoop streaming interface.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;Typical usages: &lt;/span&gt;&lt;br /&gt;(1) Raw Data-&gt;Hadoop(ETL)-&gt;Vertical (for fast ad-hoc query, near realtime)&lt;br /&gt;(2) Vertical -&gt; Hadoop(ETL) -&gt;Vertical (for fast ad-hoc query, near realtime)&lt;br /&gt;(3) Vertical -&gt; Hadoop (sophisticated query for analysis or mining)&lt;br /&gt;&lt;br /&gt;We can expect to see tighter integration and higher performance.&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;[1] The Scoop on Hadoop and Vertica: &lt;a href="http://databasecolumn.vertica.com/2009/09/the_scoop_on_hadoop_and_vertic.html"&gt;http://databasecolumn.vertica.com/2009/09/the_scoop_on_hadoop_and_vertic.html&lt;/a&gt;&lt;br /&gt;[2] Using Vertica as a Structured Data Repository for Apache Hadoop: &lt;a href="http://www.vertica.com/MapReduce"&gt;http://www.vertica.com/MapReduce&lt;/a&gt;&lt;br /&gt;[3] Cloudera DBInputFormat interface: &lt;a href="http://www.cloudera.com/blog/2009/03/06/database-access-with-hadoop/"&gt;http://www.cloudera.com/blog/2009/03/06/database-access-with-hadoop/&lt;/a&gt;&lt;br /&gt;[4] Managing Big Data with Hadoop and Vertica: &lt;a href="http://www.vertica.com/resourcelogin?type=pdf&amp;amp;item=ManagingBigDatawithHadoopandVertica.pdf" target="_blank"&gt;http://www.vertica.com/&lt;wbr&gt;resourcelogin?type=pdf&amp;amp;item=&lt;wbr&gt;ManagingBigDatawithHadoopandVe&lt;wbr&gt;rtica.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;AsterData:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;AsterData already provide in-database MapReduce.&lt;br /&gt;&lt;br /&gt;The new Aster-Hadoop Data Connector, which utilizes Aster’s patent-pending SQL-MapReduce capabilities for two-way, high-speed, data transfer between Apache Hadoop and Aster Data’s &lt;a href="http://www.asterdata.com/solutions/index.php"&gt;massively parallel data warehouse&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ETL processing or data mining, and then pull that data into Aster for interactive queries or ad-hoc analytics on massive data scales. &lt;/li&gt;&lt;li&gt;The Connector utilizes key new SQL-MapReduce functions to provide ultra-fast, two-way data loading between HDFS (Hadoop Distributed File System) and Aster Data’s MPP Database.&lt;/li&gt;&lt;li&gt;Parallel loader.&lt;/li&gt;&lt;li&gt;LoadFromHadoop: Parallel data loading from HDFS to Aster nCluster.&lt;/li&gt;&lt;li&gt;LoadToHadoop: Parallel data loading from Aster nCluster to HDFS.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Key advantages of Aster’s Hadoop Connector include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;High-performance: Fast, parallel data transfer between Hadoop and Aster nCluster. &lt;/li&gt;&lt;li&gt;Ease-of-use: Analysts can now seamlessly invoke a SQL command for ultra-simple import of Hadoop-MapReduce jobs, for deeper data analysis. Aster intelligently and automatically parallelizes the load. &lt;/li&gt;&lt;li&gt;Data Consistency: Aster Data's data integrity and transactional consistency capabilities treat the data load as a 'transaction', ensuring that the data load or export is always consistent and can be carried out while other queries are running in parallel in Aster.&lt;/li&gt;&lt;li&gt;Extensibility: Customers can easily further extend the Connector using SQL-MapReduce, to provide further customization for their specific environment.    &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The typical usages are similar to Vertica.&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;[1] Aster Data Announces Seamless Connectivity With Hadoop: &lt;a href="http://www.nearshorejournal.com/2009/10/aster-data-announces-seamless-connectivity-with-hadoop/"&gt;http://www.nearshorejournal.com/2009/10/aster-data-announces-seamless-connectivity-with-hadoop/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.asterdata.com/news/091001-Aster-Hadoop-connector.php"&gt;http://www.asterdata.com/news/091001-Aster-Hadoop-connector.php&lt;/a&gt;&lt;br /&gt;[2] DBMS2 - MapReduce tidbits &lt;a href="http://www.dbms2.com/2009/10/01/mapreduce-tidbits/#more-983"&gt;http://www.dbms2.com/2009/10/01/mapreduce-tidbits/#more-983&lt;/a&gt;&lt;br /&gt;[3] AstaData Blog: Aster Data Seamlessly Connects to Hadoop, &lt;a href="http://www.asterdata.com/blog/index.php/2009/10/05/aster-data-seamlessly-connects-to-hadoop/"&gt;http://www.asterdata.com/blog/index.php/2009/10/05/aster-data-seamlessly-connects-to-hadoop/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Another Integration of Analytic DBMS and Hadoop case is HadoopDB project. &lt;a href="http://db.cs.yale.edu/hadoopdb/hadoopdb.html"&gt;http://db.cs.yale.edu/hadoopdb/hadoopdb.html &lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-8034162348614424937?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/8034162348614424937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2009/10/integration-of-analytic-dbms-and-hadoop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/8034162348614424937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/8034162348614424937'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2009/10/integration-of-analytic-dbms-and-hadoop.html' title='The Integration of Analytic DBMS and Hadoop'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-3905003516222040821</id><published>2009-09-28T00:09:00.005+08:00</published><updated>2009-09-29T00:50:45.462+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KeyValueStore'/><title type='text'>Notes of Key-Value Stores</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CSCHUBE%7E1.ZHA%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:drawinggridverticalspacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;   &lt;w:displayhorizontaldrawinggridevery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;   &lt;w:displayverticaldrawinggridevery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:spaceforul/&gt;    &lt;w:balancesinglebytedoublebytewidth/&gt;    &lt;w:donotleavebackslashalone/&gt;    &lt;w:ultrailspace/&gt;    &lt;w:donotexpandshiftreturn/&gt;    &lt;w:adjustlineheightintable/&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:宋体; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-alt:SimSun; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;} @font-face 	{font-family:Raavi; 	panose-1:2 0 5 0 0 0 0 0 0 0; 	mso-font-charset:0; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:131075 0 0 0 1 0;} @font-face 	{font-family:"\@宋体"; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	text-align:justify; 	text-justify:inter-ideograph; 	mso-pagination:none; 	font-size:10.5pt; 	mso-bidi-font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;}  /* Page Definitions */  @page 	{mso-page-border-surround-header:no; 	mso-page-border-surround-footer:no;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:1870874665; 	mso-list-type:hybrid; 	mso-list-template-ids:1185187222 -953238800 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:−; 	mso-level-tab-stop:21.0pt; 	mso-level-number-position:left; 	margin-left:21.0pt; 	text-indent:-21.0pt; 	font-family:Raavi; 	mso-bidi-font-family:"Times New Roman";} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:普通表格; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span lang="EN-US"&gt;Key-Value Stores:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;b style=""&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;It’s a storage system that stores values, indexed by a key. [1]&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Sometimes, a key-value store works as a under layer storage system for a data management system.&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span lang="EN-US"&gt;When to consider Key-Value Stores:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;- You need something that can query simple data faster than a relational system can. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;- There are scaling requirements that are difficult to meet with a relational system. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;- You want to avoid tying an application to a requirement for a relational system that may well have its own maintenance needs over time. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;- You just want something &lt;span style=""&gt;simpler&lt;/span&gt; than a relational database.  &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;- ……&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;In all of these cases, a key-value store may be &lt;em&gt;&lt;span style="font-style: normal;"&gt;just&lt;/span&gt;&lt;/em&gt; the tool for you.&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span lang="EN-US"&gt;Typical data structure:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;b style=""&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left; text-indent: -21pt;" align="left"&gt;&lt;span style=";font-family:Raavi;font-size:100%;"   lang="EN-US"&gt;&lt;span style=""&gt;−&lt;span style=";font-family:&amp;quot;;" &gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Hash&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Hash based key-value stores have fast lookup and update speeds, and require that keys be unique. &lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Lookup in a hash based tree is limited to key-only lookup.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;For example:&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;To an object storage system which stores billions of photos, its applications would only query/get a photo by its unique key/id, like Facebook’s Haystack. [2]&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The general API: Put/Get/Delete.&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The important issues of hash based key-value stores are to limit the size of in-memory index/metadata, and to implement the distribution.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left; text-indent: -21pt;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:Raavi;font-size:100%;"   lang="EN-US"&gt;&lt;span style=""&gt;−&lt;span style=";font-family:&amp;quot;;" &gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Tree (e.g. B-tree or B+tree)&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Tree based stores generally allow multiple identical keys, and because tree based structures (like the b-tree) are ordered, they allow you to query individual keys, as well as ranges of keys. &lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The drawback to tree based stores is that those structures are generally slower than simple hashes.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 21pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;For example:&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;A log aggregation system that stores messages keyed by timestamp, but which uses a hash based store, will be troublesome to query in a useful way, despite the speed of lookup, because you can only lookup specific timestamps. A system that uses a b-tree based store may be marginally slower for individual queries, but by permitting lookup based on a range of timestamps, can easily query the records of interest. This more than offsets the difference in basic query speeds. BigTable is based on B-Tree based key-value store. [3]&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The general API: Put/Get/Delete/Scan.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 21pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The important issue of tree based key-value stores is to implement distributed tree structures.&lt;/span&gt;&lt;/p&gt; &lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span lang="EN-US"&gt;References:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[1] Engine Yard, Key-Value Stores in Ruby (Key-Value Stores Part 1) &lt;a href="http://www.engineyard.com/blog/2009/key-value-stores-in-ruby/"&gt;http://www.engineyard.com/blog/2009/key-value-stores-in-ruby/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[2] Facebook, Needle in a haystack: efficient storage of billions of photos, &lt;a href="http://www.facebook.com/note.php?note_id=76191543919"&gt;http://www.facebook.com/note.php?note_id=76191543919&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[3] Data Management Projects at Google-200803, &lt;a href="http://www.cs.washington.edu/homes/mjc/papers/dataprojects-google-sigmodrecord08.pdf"&gt;http://www.cs.washington.edu/homes/mjc/papers/dataprojects-google-sigmodrecord08.pdf&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-3905003516222040821?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/3905003516222040821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2009/09/basic-notes-of-key-value-stores.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/3905003516222040821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/3905003516222040821'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2009/09/basic-notes-of-key-value-stores.html' title='Notes of Key-Value Stores'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-5400243456785345977</id><published>2009-09-27T02:11:00.009+08:00</published><updated>2009-09-29T16:38:53.150+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HBase'/><category scheme='http://www.blogger.com/atom/ns#' term='Hive'/><category scheme='http://www.blogger.com/atom/ns#' term='Hadoop'/><title type='text'>Tips of Hadoop Runtime Environment</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CSCHUBE%7E1.ZHA%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;title&gt;java&lt;/title&gt;&lt;span style="font-size:100%;"&gt;&lt;o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="chsdate"&gt;&lt;/o:smarttagtype&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:documentproperties&gt;   &lt;o:author&gt;schubert.zhang&lt;/o:Author&gt;   &lt;o:version&gt;11.9999&lt;/o:Version&gt;  &lt;/o:DocumentProperties&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:drawinggridverticalspacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;   &lt;w:displayhorizontaldrawinggridevery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;   &lt;w:displayverticaldrawinggridevery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:spaceforul/&gt;    &lt;w:balancesinglebytedoublebytewidth/&gt;    &lt;w:donotleavebackslashalone/&gt;    &lt;w:ultrailspace/&gt;    &lt;w:donotexpandshiftreturn/&gt;    &lt;w:adjustlineheightintable/&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if !mso]&gt;&lt;object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id="ieooui"&gt;&lt;/object&gt; &lt;style&gt; st1\:*{behavior:url(#ieooui) } &lt;/style&gt; &lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:宋体; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-alt:SimSun; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;} @font-face 	{font-family:"\@宋体"; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	text-align:justify; 	text-justify:inter-ideograph; 	mso-pagination:none; 	font-size:10.5pt; 	mso-bidi-font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} span.hp 	{mso-style-name:hp;}  /* Page Definitions */  @page 	{mso-page-border-surround-header:no; 	mso-page-border-surround-footer:no;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:734352747; 	mso-list-type:hybrid; 	mso-list-template-ids:2115794278 -1760497520 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 	{mso-level-text:"\(%1\)"; 	mso-level-tab-stop:18.0pt; 	mso-level-number-position:left; 	margin-left:18.0pt; 	text-indent:-18.0pt;} @list l0:level2 	{mso-level-number-format:alpha-lower; 	mso-level-text:"%2\)"; 	mso-level-tab-stop:42.0pt; 	mso-level-number-position:left; 	margin-left:42.0pt; 	text-indent:-21.0pt;} @list l1 	{mso-list-id:736902134; 	mso-list-type:hybrid; 	mso-list-template-ids:-1408890718 851073360 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 	{mso-level-tab-stop:18.0pt; 	mso-level-number-position:left; 	margin-left:18.0pt; 	text-indent:-18.0pt;} @list l2 	{mso-list-id:1858494736; 	mso-list-type:hybrid; 	mso-list-template-ids:640466164 284955190 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l2:level1 	{mso-level-text:"\(%1\)"; 	mso-level-tab-stop:18.0pt; 	mso-level-number-position:left; 	margin-left:18.0pt; 	text-indent:-18.0pt;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:普通表格; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;To setup a cluster for running Hadoop/HBase/Hive, etc., besides the configuration and tuning of these open-source programs themselves, the system hardware and software, and some useful utilities, should also be considered to improve the system performance and to ease the system maintenance.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left; text-indent: -18pt;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;1.&lt;span style=";font-family:&amp;quot;;" &gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span lang="EN-US"&gt;Cluster Facilities and Hardware &lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US"&gt;[1]&lt;/span&gt;&lt;b style=""&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(1)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Data center: &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Usually, we run Hadoop/HBase/Hive in a single data center.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(2)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Servers: &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Clusters are often either capacity bound or CPU bound.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The 1U or 2U configuration is usually used. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The storage capability of each node is usually not too dense (&lt;= 4TB is recommended).&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Commodity server: 2x4 core CPU, 16 GB RAM, 4x1TB SATA, 2x1 GE NIC&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Use ECC RAM and cheap hard drives: 7200 RPM SATA.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Start with standard 64-bit box for masters and workers.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(3)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Network:&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Gigabit Ethernet, 2 level tree, 5:1 oversubscription to core&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;May want redundancy at top of rack and core&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Usually, for a small cluster, all nodes are under a single GE switch.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(4)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;RAID configuration: RAID0&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;If there are two or more disks in each machine, RAID0 can provide better disk throughput than other RAID levels (and JBOD?). The multiple data replicas of HDFS can tolerate failure and guarantee the data safety.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;2.&lt;span style=";font-family:&amp;quot;;" &gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span lang="EN-US"&gt;System Software&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(1)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Linux: &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;RedHat5+ or CentOS5+ (recommended). Now, we use CentOS5.3-x64.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(2)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Local File System: &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Ext3 is ok.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;We usually configure a separate disk partition for Hadoop used local file system, create and mount separate local file system for Hadoop.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Mount with &lt;i style=""&gt;noatime &lt;/i&gt;and&lt;i style=""&gt; nodiratime&lt;/i&gt; for performance improvements. Default, Linux will update the &lt;i style=""&gt;atime&lt;/i&gt; of files and directories, which is unnecessary in most cases. [2]&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;-- Edit /etc/fstab: &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 21pt; text-indent: 21pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;e.g. /dev/VolGroup00/LogVol02 /data &lt;span style=""&gt; &lt;/span&gt;ext3 &lt;span style=""&gt; &lt;/span&gt;defaults,noatime,nodiratime 1 2&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;-- remound:&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;        &lt;/span&gt;mount -o remount /data&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(3)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Swappiness configuration: [3]&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;With the introduction of version 2.6, the new variable "swappiness" was added in the Linux kernel memory management subsystem and a tunable was created for it. High value of swappiness will make the kernel page out application text in favour of another application or even file-system cache. The default value is 60 (see &lt;a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=mm/vmscan.c;h=a6e65d024995ad49a1e9675dea9d36b343ceda60;hb=b07d68b5ca4d55a16fab223d63d5fb36f89ff42f#l102"&gt;mm/vmscan.c&lt;/a&gt;).&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;If you end up swapping, you're going to start seeing some weird behavior and very slow GC runs, and likely killing off HBase regionservers as ZooKeeper times out and assume the RegionServer is dead. Suggest setting vm.swappiness = 0 or other low number (e.g. 10), and observe the state of swap.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;-- Edit /etc/sysctl.conf : vm.swappiness=0&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;-- To check the current value on a running system: sysctl vm.swappiness&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(4)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Linux default file handle limit: [4]&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Currently HBase is a file handle glutton. To up the users' file handles, edit /etc/security/limits.conf on all nodes.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"   lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;*&lt;span style=""&gt;  &lt;/span&gt;-&lt;span style=""&gt;  &lt;/span&gt;nofile&lt;span style=""&gt;  &lt;/span&gt;32768&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(5)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Java: JRE/JDK1.6 latest and GC options [5]&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;For machine with 4-16 cores, our Hadoop/HBase and other java applications should use GC option as: &lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"   lang="EN-US"&gt;“-XX:+UseConcMarkSweepGC”.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;For machine with 2 cores, should use GC option as: &lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"   lang="EN-US"&gt;“-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode”.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(6)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Apache ANT &lt;st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" st="on"&gt;1.7.1&lt;/st1:chsdate&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(7)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Useful Linux utilities:&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;top, sar, iostat, iftop, vmstat, nfsstat, strace, dmesg, and friends&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Especially &lt;span style="font-family:courier new;"&gt;iostat &lt;/span&gt;is very useful for disk I/O analysis.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(8)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Useful java utilities:&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;jps, jstack, jconsole&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(9)&lt;span style=";font-family:&amp;quot;;" &gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Compression native library: Gzip and LZO [7]&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(10)&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt; Ganglia:&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;To integrate metrics of Hadoop, HBase, Hive, applications, and Linux system. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span lang="EN-US"&gt;References:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[1] Hadoop and Cloudera, Managing Petabytes with Open Source, Jeff Hammerbacher, Aug. 21 &lt;a href="http://indico.cern.ch/conferenceDisplay.py?confId=59791"&gt;http://indico.cern.ch/conferenceDisplay.py?confId=59791&lt;/a&gt; or &lt;a href="http://bit.ly/NXH6p"&gt;http://bit.ly/NXH6p&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[2] Set noatime of local file system: &lt;a href="http://www.chinaz.com/Server/Linux/0515L0032009.html"&gt;http://www.chinaz.com/Server/Linux/0515L0032009.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[3] Linux Swappiness: &lt;a href="http://www.sollers.ca/blog/2008/swappiness/"&gt;http://www.sollers.ca/blog/2008/swappiness/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[4] HBase FAQ: &lt;a href="http://wiki.apache.org/hadoop/Hbase/FAQ"&gt;http://wiki.apache.org/hadoop/Hbase/FAQ&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[5] Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning, &lt;a href="http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html"&gt;http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[6] Apache Ant: &lt;a href="http://ant.apache.org/"&gt;http://ant.apache.org/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[7] &lt;a href="http://cloudepr.blogspot.com/2009/09/hfile-block-indexed-file-format-to.html"&gt;http://cloudepr.blogspot.com/2009/09/hfile-block-indexed-file-format-to.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-5400243456785345977?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/5400243456785345977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2009/09/cluster-facilities-hardware-and.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/5400243456785345977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/5400243456785345977'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2009/09/cluster-facilities-hardware-and.html' title='Tips of Hadoop Runtime Environment'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-7183508354573367811</id><published>2009-09-12T02:53:00.009+08:00</published><updated>2009-09-12T18:20:16.209+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BigTable'/><category scheme='http://www.blogger.com/atom/ns#' term='HFile'/><category scheme='http://www.blogger.com/atom/ns#' term='SSTable'/><category scheme='http://www.blogger.com/atom/ns#' term='HBase'/><category scheme='http://www.blogger.com/atom/ns#' term='Hadoop'/><title type='text'>HFile: A Block-Indexed File Format to Store Sorted Key-Value Pairs</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:drawinggridverticalspacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;   &lt;w:displayhorizontaldrawinggridevery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;   &lt;w:displayverticaldrawinggridevery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:spaceforul/&gt;    &lt;w:balancesinglebytedoublebytewidth/&gt;    &lt;w:donotleavebackslashalone/&gt;    &lt;w:ultrailspace/&gt;    &lt;w:donotexpandshiftreturn/&gt;    &lt;w:adjustlineheightintable/&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if !mso]&gt;&lt;object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id="ieooui"&gt;&lt;/object&gt; &lt;style&gt; st1\:*{behavior:url(#ieooui) } &lt;/style&gt; &lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:宋体; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-alt:SimSun; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;} @font-face 	{font-family:"\@宋体"; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	text-align:justify; 	text-justify:inter-ideograph; 	mso-pagination:none; 	font-size:10.5pt; 	mso-bidi-font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;}  /* Page Definitions */  @page 	{mso-page-border-surround-header:no; 	mso-page-border-surround-footer:no;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:276563345; 	mso-list-type:hybrid; 	mso-list-template-ids:-1606011030 -486763464 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:-; 	mso-level-tab-stop:18.0pt; 	mso-level-number-position:left; 	margin-left:18.0pt; 	text-indent:-18.0pt; 	font-family:"Courier New"; 	mso-fareast-font-family:宋体;} @list l1 	{mso-list-id:507907157; 	mso-list-type:hybrid; 	mso-list-template-ids:-145047984 -1739151050 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 	{mso-level-text:"\(%1\)"; 	mso-level-tab-stop:18.0pt; 	mso-level-number-position:left; 	margin-left:18.0pt; 	text-indent:-18.0pt;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:普通表格; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;1. Intruduction&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;HFile is a mimic of Google’s SSTable. Now, it is available in Hadoop HBase-&lt;st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" st="on"&gt;0.20.0&lt;/st1:chsdate&gt;. And the previous releases of HBase temporarily use an alternate file format – MapFile&lt;/span&gt;&lt;!--[if supportFields]&gt;&lt;span lang="EN-US"  style="';font-size:10.0pt;"&gt;&lt;span style="'mso-element:field-begin'"&gt;&lt;/span&gt; REF _Ref240383513 \r \h &lt;span style="'mso-element:field-separator'"&gt;&lt;/span&gt;&lt;/span&gt;&lt;![endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[4]&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:data&gt;08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003200340030003300380033003500310033000000&lt;/w:data&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;!--[if supportFields]&gt;&lt;span lang="EN-US"  style="'font-family:;font-size:10.0pt;"&gt;&lt;span style="'mso-element:"&gt;&lt;/span&gt;&lt;/span&gt;&lt;![endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;, which is a common file format in Hadoop IO package. I think HFile should also become a common file format when it becomes mature, and should be moved into the common IO package of Hadoop in the future.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;br /&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Following words of SSTable are from section 4 of Google’s Bigtable paper.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;The Google SSTable file format is used internally to store Bigtable data. An SSTable provides a persistent, ordered immutable map from keys to values, where both keys and values are arbitrary byte strings. Operations are provided to look up the value associated with a specified key, and to iterate over all key/value pairs in a specified key range. Internally, each SSTable contains a sequence of blocks (typically each block is 64KB in size, but this is configurable). A block index (stored at the end of the SSTable) is used to locate blocks; the index is loaded into memory when the SSTable is opened. A lookup can be performed with a single disk seek: we first find the appropriate block by performing a binary search in the in-memory index, and then reading the appropriate block from disk. Optionally, an SSTable can be completely mapped into memory, which allows us to perform lookups and scans without touching disk.&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;[1]&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:data&gt;08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003200330039003400330032003100390038000000&lt;/w:data&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;i style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The HFile implements the same features as SSTable, but may provide more or less.&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;2. File Format&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Data Block Size&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Whenever we say Block Size, it means the uncompressed size.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The size of each data block is 64KB by default, and is configurable in HFile.Writer. It means the data block will not exceed this size more than one key/value pair. The HFile.Writer starts a new data block to add key/value pairs if the current writing block is equal to or bigger than this size. The 64KB size is same as Google’s &lt;span style=""&gt;[1]&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:data&gt;08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003200330039003400330032003100390038000000&lt;/w:data&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;To achieve better performance, we should select different block size. If the average key/value size is very short (e.g. 100 bytes), we should select small blocks (e.g. 16KB) to avoid too many key/value pairs in each block, which will increase the latency of in-block seek, because the seeking operation always finds the key from the first key/value pair in sequence within a block.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="OLE_LINK2"&gt;&lt;/a&gt;&lt;a name="OLE_LINK1"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="OLE_LINK1"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Maximum Key Length&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;The key of each key/value pair is currently up to 64KB in size. Usually, 10-100 bytes is a typical size for most of our applications. Even in the data model of HBase, the key (rowkey+column family:qualifier+timestamp) should not be too long.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Maximum File Size&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;The trailer, file-info and total data block indexes (optionally, may add meta block indexes) will be in memory when writing and reading of an HFile. So, a larger HFile (with more data blocks) requires more memory. For example, a 1GB uncompressed HFile would have about 15600 (1GB/64KB) data blocks, and correspondingly about 15600 indexes. Suppose the average key size is 64 bytes, then we need about 1.2MB RAM (15600X80) to hold these indexes in memory.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Compression Algorithm&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;Compression reduces the number of bytes written to/read from HDFS. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;Compression effectively improves the efficiency of network bandwidth and disk space &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;Compression reduces the size of data needed to be read when issuing a read &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;To be as low friction as necessary, a real-time compression library is preferred. Currently, HFile supports following three algorithms:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;(1)&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;NONE (Default, uncompressed, string name=”none”)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;(2)&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;GZ (Gzip, string name=”gz”)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt;font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;Out of the box, HFile ships with only Gzip compression, which is fairly slow.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;(3)&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;LZO(Lempel-Ziv-Oberhumer, preferred, string name=”lzo”) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt;font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;To achieve maximal performance and benefit, you must enable LZO, which is a lossless data compression algorithm that is focused on decompression speed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt;font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;Following figures show the format of an HFile.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-KwPpcL7tYQ/SqqovxbhlaI/AAAAAAAAA_U/iKFa-KLQNAI/s1600-h/hfile-format-1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 239px; height: 400px;" src="http://1.bp.blogspot.com/_-KwPpcL7tYQ/SqqovxbhlaI/AAAAAAAAA_U/iKFa-KLQNAI/s400/hfile-format-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5380298243523581346" border="0" /&gt;&lt;/a&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-KwPpcL7tYQ/SqqiagkXFgI/AAAAAAAAA-c/qkZ6XSv1sjo/s1600-h/hfile-format-1.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CSCHUBE%7E1.ZHA%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:drawinggridverticalspacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;   &lt;w:displayhorizontaldrawinggridevery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;   &lt;w:displayverticaldrawinggridevery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:spaceforul/&gt;    &lt;w:balancesinglebytedoublebytewidth/&gt;    &lt;w:donotleavebackslashalone/&gt;    &lt;w:ultrailspace/&gt;    &lt;w:donotexpandshiftreturn/&gt;    &lt;w:adjustlineheightintable/&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:宋体; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-alt:SimSun; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;} @font-face 	{font-family:"\@宋体"; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	text-align:justify; 	text-justify:inter-ideograph; 	mso-pagination:none; 	font-size:10.5pt; 	mso-bidi-font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;}  /* Page Definitions */  @page 	{mso-page-border-surround-header:no; 	mso-page-border-surround-footer:no;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:538933659; 	mso-list-type:hybrid; 	mso-list-template-ids:512893926 -1107264522 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:-; 	mso-level-tab-stop:18.0pt; 	mso-level-number-position:left; 	margin-left:18.0pt; 	text-indent:-18.0pt; 	font-family:"Courier New"; 	mso-fareast-font-family:宋体;} @list l0:level2 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:42.0pt; 	mso-level-number-position:left; 	margin-left:42.0pt; 	text-indent:-21.0pt; 	font-family:Wingdings;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:普通表格; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-KwPpcL7tYQ/SqqowIA5mvI/AAAAAAAAA_c/zVk4Z_CdCSE/s1600-h/hfile-format-2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 279px;" src="http://2.bp.blogspot.com/_-KwPpcL7tYQ/SqqowIA5mvI/AAAAAAAAA_c/zVk4Z_CdCSE/s400/hfile-format-2.jpg" alt="" id="BLOGGER_PHOTO_ID_5380298249585924850" border="0" /&gt;&lt;/a&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;In above figures, an HFile is separated into multiple segments, from beginning to end, they are: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Data Block segment &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="text-indent: 18pt;font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;To store key/value pairs, may be compressed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Meta Block segment (Optional)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="text-indent: 18pt;font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;To store user defined large metadata, may be compressed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;File Info segment&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt;font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;It is a small metadata of the HFile, without compression. User can add user defined small metadata (name/value) here.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Data Block Index segment&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt;font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Indexes the data block offset in the HFile. The key of each index is the key of first key/value pair in the block.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Meta Block Index segment (Optional)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt;font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Indexes the meta block offset in the HFile. The key of each index is the user defined unique name of the meta block.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt; text-indent: -18pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Trailer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 18pt;font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The fix sized metadata. To hold the offset of each segment, etc. To read an HFile, we should always read the Trailer firstly. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The current implementation of HFile does not include Bloom Filter, which should be added in the future.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CSCHUBE%7E1.ZHA%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="chsdate"&gt;&lt;/o:smarttagtype&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:drawinggridverticalspacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;   &lt;w:displayhorizontaldrawinggridevery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;   &lt;w:displayverticaldrawinggridevery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:spaceforul/&gt;    &lt;w:balancesinglebytedoublebytewidth/&gt;    &lt;w:donotleavebackslashalone/&gt;    &lt;w:ultrailspace/&gt;    &lt;w:donotexpandshiftreturn/&gt;    &lt;w:adjustlineheightintable/&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if !mso]&gt;&lt;object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id="ieooui"&gt;&lt;/object&gt; &lt;style&gt; st1\:*{behavior:url(#ieooui) } &lt;/style&gt; &lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:宋体; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-alt:SimSun; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;} @font-face 	{font-family:"\@宋体"; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	text-align:justify; 	text-justify:inter-ideograph; 	mso-pagination:none; 	font-size:10.5pt; 	mso-bidi-font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;}  /* Page Definitions */  @page 	{mso-page-border-surround-header:no; 	mso-page-border-surround-footer:no;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:1175339347; 	mso-list-type:hybrid; 	mso-list-template-ids:595219054 -1512284762 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 	{mso-level-text:"\(%1\)"; 	mso-level-tab-stop:24.0pt; 	mso-level-number-position:left; 	margin-left:24.0pt; 	text-indent:-24.0pt;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:普通表格; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;3. LZO Compression&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;LZO is now removed from Hadoop or HBase 0.20+ because of GPL restrictions. To enable it, we should install native library firstly as following. &lt;/span&gt;&lt;!--[if supportFields]&gt;&lt;span lang="EN-US"  style="'font-family:;font-size:10.0pt;"&gt;&lt;span style="'mso-element:field-begin'"&gt;&lt;/span&gt;&lt;span style="'mso-spacerun:yes'"&gt; &lt;/span&gt;REF _Ref240385490 \r \h &lt;span style="'mso-element:field-separator'"&gt;&lt;/span&gt;&lt;/span&gt;&lt;![endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;[6]&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:data&gt;08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003200340030003300380035003400390030000000&lt;/w:data&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;!--[if supportFields]&gt;&lt;span lang="EN-US"  style="'font-family:;font-size:10.0pt;"&gt;&lt;span style="'mso-element:"&gt;&lt;/span&gt;&lt;/span&gt;&lt;![endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;[7]&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:data&gt;08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003200340030003300380035003400390032000000&lt;/w:data&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;span style=""&gt;[8]&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:data&gt;08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003200340030003300390034003100310039000000&lt;/w:data&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;span style=""&gt;[9]&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:data&gt;08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003200340030003300390034003100320030000000&lt;/w:data&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 24pt; text-align: left; text-indent: -24pt;font-family:times new roman;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin-left: 24pt; text-align: left; text-indent: -24pt;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(1)&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Download LZO: &lt;a href="http://www.oberhumer.com/"&gt;http://www.oberhumer.com/&lt;/a&gt;, and build.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 31.5pt; text-align: left;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;# ./configure --build=x86_64-redhat-linux-gnu --enable-shared --disable-asm&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 31.5pt; text-align: left;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;# make&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 31.5pt; text-align: left;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;# make install&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 31.5pt; text-align: left;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Then the libraries have been installed in: /usr/local/lib&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 24pt; text-align: left; text-indent: -24pt;font-family:times new roman;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(2)&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Download the native connector library &lt;/span&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;a href="http://code.google.com/p/hadoop-gpl-compression/"&gt;http://code.google.com/p/hadoop-gpl-compression/&lt;/a&gt;, and build.&lt;/span&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 3pt; text-align: left; text-indent: 21pt;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Copy hadoo-&lt;st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" st="on"&gt;0.20.0&lt;/st1:chsdate&gt;-core.jar to ./lib.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 3pt; text-align: left; text-indent: 21pt;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;# ant compile-native&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 3pt; text-align: left; text-indent: 21pt;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;# ant jar&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" face="times new roman" style="margin-left: 3pt; text-align: left; text-indent: 21pt;" align="left"&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"   lang="EN-US"&gt;&lt;/span&gt;&lt;p class="MsoNormal"  style="text-align: left;font-family:times new roman;" align="left"&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:drawinggridverticalspacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;   &lt;w:displayhorizontaldrawinggridevery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;   &lt;w:displayverticaldrawinggridevery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:spaceforul/&gt;    &lt;w:balancesinglebytedoublebytewidth/&gt;    &lt;w:donotleavebackslashalone/&gt;    &lt;w:ultrailspace/&gt;    &lt;w:donotexpandshiftreturn/&gt;    &lt;w:adjustlineheightintable/&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if !mso]&gt;&lt;object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id="ieooui"&gt;&lt;/object&gt; &lt;style&gt; st1\:*{behavior:url(#ieooui) } &lt;/style&gt; &lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:宋体; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-alt:SimSun; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;} @font-face 	{font-family:Raavi; 	panose-1:2 0 5 0 0 0 0 0 0 0; 	mso-font-charset:0; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:131075 0 0 0 1 0;} @font-face 	{font-family:"\@宋体"; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	text-align:justify; 	text-justify:inter-ideograph; 	mso-pagination:none; 	font-size:10.5pt; 	mso-bidi-font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;}  /* Page Definitions */  @page 	{mso-page-border-surround-header:no; 	mso-page-border-surround-footer:no;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:378481713; 	mso-list-type:hybrid; 	mso-list-template-ids:458398840 -1051288170 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 	{mso-level-text:"\(%1\)"; 	mso-level-tab-stop:24.0pt; 	mso-level-number-position:left; 	margin-left:24.0pt; 	text-indent:-24.0pt;} @list l0:level2 	{mso-level-number-format:alpha-lower; 	mso-level-text:"%2\)"; 	mso-level-tab-stop:42.0pt; 	mso-level-number-position:left; 	margin-left:42.0pt; 	text-indent:-21.0pt;} @list l1 	{mso-list-id:1763839062; 	mso-list-type:hybrid; 	mso-list-template-ids:-578507414 -953238800 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l1:level1 	{mso-level-number-format:bullet; 	mso-level-text:−; 	mso-level-tab-stop:42.0pt; 	mso-level-number-position:left; 	margin-left:42.0pt; 	text-indent:-21.0pt; 	font-family:Raavi; 	mso-bidi-font-family:"Times New Roman";} @list l2 	{mso-list-id:2086106927; 	mso-list-type:hybrid; 	mso-list-template-ids:1106779000 -953238800 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l2:level1 	{mso-level-number-format:bullet; 	mso-level-text:−; 	mso-level-tab-stop:42.0pt; 	mso-level-number-position:left; 	margin-left:42.0pt; 	text-indent:-21.0pt; 	font-family:Raavi; 	mso-bidi-font-family:"Times New Roman";} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:普通表格; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(3)&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt; Copy the native library (build/native/ Linux-amd64-64) and hadoop-gpl-compression-0.1.0-dev.jar to your   application’s lib directory. If your application is a MapReduce job, copy them to hadoop’s lib directory. Your application should follow the $HADOOP_HOME/bin/hadoop script to ensure that the native hadoop library is on the library path via the system property -Djava.library.path=. [9]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="text-align: left;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="text-align: left;font-family:times new roman;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;4. Performance Evaluation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="text-align: left;font-family:times new roman;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Testbed&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-indent: -21pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;−&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;4 slaves + 1 master&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-indent: -21pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;−&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Machine: 4 CPU cores (&lt;st1:chmetcnv unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0" st="on"&gt;2.0G&lt;/st1:chmetcnv&gt;), 2x500GB 7200RPM SATA disks, 8GB RAM.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-indent: -21pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;−&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Linux: RedHat 5.1 (&lt;st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" st="on"&gt;2.6.18&lt;/st1:chsdate&gt;-53.el5), ext3, no RAID, noatime&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-indent: -21pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;−&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;1Gbps network, all nodes under the same switch.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -21pt;font-family:times new roman;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;−&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Hadoop-&lt;st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" st="on"&gt;0.20.0&lt;/st1:chsdate&gt; (1GB heap), lzo-2.0.3&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Some MapReduce-based benchmarks are designed to evaluate the performance of operations to HFiles, in parallel. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -21pt;font-family:times new roman;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;−&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Total key/value entries: 30,000,000.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -21pt;font-family:times new roman;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;−&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Key/Value size: 1000 bytes (10 for key, and 990 for value). We have totally 30GB of data.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -21pt;font-family:times new roman;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;−&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Sequential key ranges: 60, i.e. each range have 500,000 entries.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -21pt;font-family:times new roman;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;−&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Use default block size.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -21pt;font-family:times new roman;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;−&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The entry value is a string, each continuous 8 bytes are a filled with a same letter (A~Z). E.g. “BBBBBBBBXXXXXXXXGGGGGGGG……”.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;We set mapred.tasktracker.map.tasks.maximum=3 to avoid client side bottleneck.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 24pt; text-indent: -24pt;font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(1)&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Write&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 24pt;font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Each MapTask for each range of key, which writes a separate HFile with 500,000 key/value entries.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 24pt; text-indent: -24pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(2)&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Full Scan&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 24pt;font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Each MapTask scans a separate HFile from beginning to end.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 24pt; text-indent: -24pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(3)&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Random Seek a specified key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 24pt;font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Each MapTask opens one separate HFile, and selects a random key within that file to seek it. Each MapTask runs 50,000 (1/10 of the entries) random seeks.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 24pt; text-indent: -24pt;font-family:times new roman;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;(4)&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Random Short Scan&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 24pt;font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;Each MapTask opens one separate HFile, and selects a random key within that file as a beginning to scan 30 entries. Each MapTask runs 50,000 scans, i.e. scans 50,000*30=1,500,000 entries.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="text-align: left;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="text-align: left;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="text-align: left;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;This table shows the average entries which are written/seek/scanned per second, and per node.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; font-family: times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-KwPpcL7tYQ/SqqowhZ6LnI/AAAAAAAAA_k/vqOe6Zuc_-A/s1600-h/hfile-performance.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 101px;" src="http://1.bp.blogspot.com/_-KwPpcL7tYQ/SqqowhZ6LnI/AAAAAAAAA_k/vqOe6Zuc_-A/s400/hfile-performance.jpg" alt="" id="BLOGGER_PHOTO_ID_5380298256401706610" border="0" /&gt;&lt;/a&gt;&lt;p class="MsoNormal" face="times new roman" style="text-align: left;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="font-family: times new roman;"&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CSCHUBE%7E1.ZHA%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:drawinggridverticalspacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;   &lt;w:displayhorizontaldrawinggridevery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;   &lt;w:displayverticaldrawinggridevery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:spaceforul/&gt;    &lt;w:balancesinglebytedoublebytewidth/&gt;    &lt;w:donotleavebackslashalone/&gt;    &lt;w:ultrailspace/&gt;    &lt;w:donotexpandshiftreturn/&gt;    &lt;w:adjustlineheightintable/&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:宋体; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-alt:SimSun; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;} @font-face 	{font-family:"\@宋体"; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	text-align:justify; 	text-justify:inter-ideograph; 	mso-pagination:none; 	font-size:10.5pt; 	mso-bidi-font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;}  /* Page Definitions */  @page 	{mso-page-border-surround-header:no; 	mso-page-border-surround-footer:no;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:普通表格; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-KwPpcL7tYQ/SqqkVro7RsI/AAAAAAAAA-s/ngwtRmRHY9o/s1600-h/hfile-performance.jpg"&gt;&lt;/a&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;In this evaluation case, the compression ratio is about 7:1 for gz(Gzip), and about 4:1 for lzo. Even through the compression ratio is just moderate, the lzo column shows the best performance, especially for writes.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" face="times new roman"&gt;&lt;br /&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" face="times new roman"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" face="times new roman"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The performance of full scan is much better than SequenceFile, so HFile may provide better performance to MapReduce-based analytical applications.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" face="times new roman"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="font-family: times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="font-family: times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;The random seek in HFiles is slow, especially in none-compressed HFiles. But the above numbers already show 6X~10X better performance than a disk seek (10ms). Following Ganglia charts show us the overhead of load, CPU, and network. The random short scan makes the similar phenomena.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="font-family: times new roman;"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-KwPpcL7tYQ/SqqoxLvnypI/AAAAAAAAA_s/tf-3bjIjf64/s1600-h/hfile-rseek-ganglia.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 179px;" src="http://4.bp.blogspot.com/_-KwPpcL7tYQ/SqqoxLvnypI/AAAAAAAAA_s/tf-3bjIjf64/s400/hfile-rseek-ganglia.JPG" alt="" id="BLOGGER_PHOTO_ID_5380298267767065234" border="0" /&gt;&lt;/a&gt;&lt;p class="MsoNormal" style="font-family: times new roman;"&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CSCHUBE%7E1.ZHA%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="chsdate"&gt;&lt;/o:smarttagtype&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:drawinggridverticalspacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;   &lt;w:displayhorizontaldrawinggridevery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;   &lt;w:displayverticaldrawinggridevery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:spaceforul/&gt;    &lt;w:balancesinglebytedoublebytewidth/&gt;    &lt;w:donotleavebackslashalone/&gt;    &lt;w:ultrailspace/&gt;    &lt;w:donotexpandshiftreturn/&gt;    &lt;w:adjustlineheightintable/&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if !mso]&gt;&lt;object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id="ieooui"&gt;&lt;/object&gt; &lt;style&gt; st1\:*{behavior:url(#ieooui) } &lt;/style&gt; &lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:宋体; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-alt:SimSun; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;} @font-face 	{font-family:"\@宋体"; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	text-align:justify; 	text-justify:inter-ideograph; 	mso-pagination:none; 	font-size:10.5pt; 	mso-bidi-font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;} p.MsoFooter, li.MsoFooter, div.MsoFooter 	{margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:none; 	tab-stops:center 207.65pt right 415.3pt; 	layout-grid-mode:char; 	font-size:9.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;}  /* Page Definitions */  @page 	{mso-page-border-surround-header:no; 	mso-page-border-surround-footer:no;} @page Section1 	{size:595.3pt 841.9pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:42.55pt; 	mso-footer-margin:49.6pt; 	mso-paper-source:0; 	layout-grid:15.6pt;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:231888606; 	mso-list-type:hybrid; 	mso-list-template-ids:-1952838588 210925774 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 	{mso-level-text:"\[%1\]"; 	mso-level-tab-stop:42.0pt; 	mso-level-number-position:right; 	margin-left:42.0pt; 	text-indent:-21.0pt;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:普通表格; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="width: 477px; text-align: left;" id="__ss_1985243"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/schubertzhang/hfile-a-blockindexed-file-format-to-store-sorted-keyvalue-pairs" title="HFile: A Block-Indexed File Format to Store Sorted Key-Value Pairs"&gt;HFile: A Block-Indexed File Format to Store Sorted Key-Value Pairs&lt;/a&gt;&lt;object style="margin: 0px;" width="477" height="510"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayerd.swf?doc=hfile-090911130852-phpapp02&amp;amp;stripped_title=hfile-a-blockindexed-file-format-to-store-sorted-keyvalue-pairs"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayerd.swf?doc=hfile-090911130852-phpapp02&amp;amp;stripped_title=hfile-a-blockindexed-file-format-to-store-sorted-keyvalue-pairs" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="477" height="510"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/schubertzhang"&gt;schubertzhang&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="font-family: times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;References&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -42pt;font-family:times new roman;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Ref239432198"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style=""&gt;  &lt;/span&gt;[1]&lt;span style=""&gt;              &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;Google, Bigtable: A Distributed Storage System for Structured Data, &lt;/span&gt;&lt;/a&gt;&lt;a href="http://labs.google.com/papers/bigtable.html"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;http://labs.google.com/papers/bigtable.html&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -42pt;font-family:times new roman;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Ref238659552"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style=""&gt;  &lt;/span&gt;[2]&lt;span style=""&gt;              &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;HBase-&lt;/span&gt;&lt;/a&gt;&lt;st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" st="on"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;0.20.0&lt;/span&gt;&lt;/span&gt;&lt;/st1:chsdate&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="" lang="EN-US"&gt; Documentation, &lt;/span&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;a href="http://hadoop.apache.org/hbase/docs/r0.20.0/"&gt;http://hadoop.apache.org/hbase/docs/r0.20.0/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -42pt;font-family:times new roman;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;  &lt;/span&gt;[3]&lt;span style=""&gt;              &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;HFile code review and refinement. &lt;a href="http://issues.apache.org/jira/browse/HBASE-1818"&gt;http://issues.apache.org/jira/browse/HBASE-1818&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -42pt;font-family:times new roman;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Ref240385311"&gt;&lt;/a&gt;&lt;a name="_Ref240383513"&gt;&lt;span style=""&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style=""&gt;  &lt;/span&gt;[4]&lt;span style=""&gt;              &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;MapFile API: &lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/MapFile.html"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/MapFile.html&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -42pt;font-family:times new roman;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Ref240385480"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style=""&gt;  &lt;/span&gt;[5]&lt;span style=""&gt;              &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;Parallel LZO: Splittable Compression for Hadoop. &lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.cloudera.com/blog/2009/06/24/parallel-lzo-splittable-compression-for-hadoop/"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;http://www.cloudera.com/blog/2009/06/24/parallel-lzo-splittable-compression-for-hadoop/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left;font-family:times new roman;" align="left"&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;a href="http://blog.chrisgoffinet.com/2009/06/parallel-lzo-splittable-on-hadoop-using-cloudera/"&gt;http://blog.chrisgoffinet.com/2009/06/parallel-lzo-splittable-on-hadoop-using-cloudera/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -42pt;font-family:times new roman;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Ref240385490"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style=""&gt;  &lt;/span&gt;[6]&lt;span style=""&gt;              &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;Using LZO in Hadoop and HBase: &lt;/span&gt;&lt;/a&gt;&lt;a href="http://wiki.apache.org/hadoop/UsingLzoCompression"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;http://wiki.apache.org/hadoop/UsingLzoCompression&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a name="_Ref240385314"&gt;&lt;/a&gt;&lt;/span&gt;&lt;!--[if !supportNestedAnchors]--&gt;&lt;!--[endif]--&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -42pt;font-family:times new roman;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Ref240385492"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style=""&gt;  &lt;/span&gt;[7]&lt;span style=""&gt;              &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;LZO: &lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.oberhumer.com/"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;http://www.oberhumer.com&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -42pt;font-family:times new roman;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Ref240394119"&gt;&lt;/a&gt;&lt;a name="_Ref240385494"&gt;&lt;/a&gt;&lt;/span&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style=""&gt;  &lt;/span&gt;[8]&lt;span style=""&gt;              &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="" lang="EN-US"&gt;Hadoop LZO native connector library:&lt;/span&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://code.google.com/p/hadoop-gpl-compression/"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;http://code.google.com/p/hadoop-gpl-compression/&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 42pt; text-align: left; text-indent: -42pt;font-family:times new roman;" align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="_Ref240394120"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;&lt;span style=""&gt;  &lt;/span&gt;[9]&lt;span style=""&gt;              &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="" lang="EN-US"&gt;Hadoop Native Libraries Guide: &lt;/span&gt;&lt;/a&gt;&lt;a href="http://hadoop.apache.org/common/docs/r0.20.0/native_libraries.html"&gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;http://hadoop.apache.org/common/docs/r0.20.0/native_libraries.html&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style=";font-family:times new roman;font-size:100%;"  &gt;&lt;span style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="font-family: times new roman;"&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-7183508354573367811?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/7183508354573367811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2009/09/hfile-block-indexed-file-format-to.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/7183508354573367811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/7183508354573367811'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2009/09/hfile-block-indexed-file-format-to.html' title='HFile: A Block-Indexed File Format to Store Sorted Key-Value Pairs'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-KwPpcL7tYQ/SqqovxbhlaI/AAAAAAAAA_U/iKFa-KLQNAI/s72-c/hfile-format-1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-4715681019827683766</id><published>2009-08-18T04:28:00.014+08:00</published><updated>2009-09-12T18:33:05.503+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BigTable'/><category scheme='http://www.blogger.com/atom/ns#' term='HBase'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><category scheme='http://www.blogger.com/atom/ns#' term='Hadoop'/><title type='text'>HBase-0.20.0 Performance Evaluation</title><content type='html'>New update:&lt;br /&gt;With the comments from the community, we just generated a new performance evaluation report for HBase 0.20.0.  Please refer to following document.&lt;br /&gt;&lt;div style="width: 477px; text-align: left;" id="__ss_1905090"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/schubertzhang/hbase-0200-performance-evaluation" title="HBase 0.20.0 Performance Evaluation"&gt;HBase 0.20.0 Performance Evaluation&lt;/a&gt;&lt;object style="margin: 0px;" width="477" height="510"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayerd.swf?doc=hbase-0-20-0-pe-090825134516-phpapp01&amp;amp;stripped_title=hbase-0200-performance-evaluation"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayerd.swf?doc=hbase-0-20-0-pe-090825134516-phpapp01&amp;amp;stripped_title=hbase-0200-performance-evaluation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="477" height="510"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/schubertzhang"&gt;schubertzhang&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;We have been using HBase for around a year in our development and projects, from 0.17.x to 0.19.x. We and all of the community know the serious Performance/Throughput issue of these releases.&lt;br /&gt;&lt;br /&gt;Now, the great news is that hbase-0.20.0 will be released soon. Jonathan Gray from Streamy, Ryan Rawson from StumbleUpon and Jean-Daniel Cryans had done a great job to rewrite many codes to enhance the performance. The two presentations [1][2] provide more details of this release.&lt;br /&gt;&lt;br /&gt;Following items are very important for us:&lt;br /&gt;- Insert performance: data generated fast.&lt;br /&gt;- Scan performance: for data analysis by MapReduce.&lt;br /&gt;- Random Access performance.&lt;br /&gt;- The HFile (same as SSTable)&lt;br /&gt;- Less memory and I/O overheads&lt;br /&gt;&lt;br /&gt;Bellow is our evaluations on hbase-0.20.0 RC1:&lt;br /&gt;&lt;br /&gt;Cluster:&lt;br /&gt;- 5 slaves + 1 master&lt;br /&gt;- Slaves (1-4): 4 CPU cores(2.0G), 800GB SATA disks, 8GB RAM. Slave(5): 8 CPU cores(2.0G) 6 disks with RAID1, 4GB RAM&lt;br /&gt;- 1Gbps network, all nodes under the same switch.&lt;br /&gt;- Hadoop-0.20.0, HBase-0.20.0, Zookeeper-3.2.0&lt;br /&gt;&lt;br /&gt;We modified the org.apache.hadoop.hbase.PerformanceEvaluation since the code have following problems:&lt;br /&gt;- Is not match for hadoop-0.20.0.&lt;br /&gt;- The approach to split map is not strict. Need provide correct InputSplit and InputFormat classes.&lt;br /&gt;&lt;br /&gt;The evaluation programs use MapReduce to do parallel operations against HBase table.&lt;br /&gt;- Total rows: 5,242,850.&lt;br /&gt;- Row size: 1000 bytes for value, and 10 bytes for rowkey.&lt;br /&gt;- Sequential ranges: 50. (also used to define the total number of MapTasks in each evaluation)&lt;br /&gt;- Each Sequential Range rows: 104,857&lt;br /&gt;&lt;br /&gt;The principle is same as the evaluation programs described in Section 7, Performance Evaluation, of the Google Bigtable paper[3], pages 8-10. Since we have only 5 nodes to work clients, we set mapred.tasktracker.map.tasks.maximum=3 to avoid client side bottleneck.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-KwPpcL7tYQ/SqtUYceVWjI/AAAAAAAAA_0/8iZsA7hHd-A/s1600-h/hbase020-pe.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 164px;" src="http://4.bp.blogspot.com/_-KwPpcL7tYQ/SqtUYceVWjI/AAAAAAAAA_0/8iZsA7hHd-A/s400/hbase020-pe.PNG" alt="" id="BLOGGER_PHOTO_ID_5380486958761204274" border="0" /&gt;&lt;/a&gt;randomWrite (init) and sequentialWrite (init) are evaluations against a new table. Since there is only one RegionServer is accessed at the beginning, the performance is not so good. randomWrite and sequentialWrite are evaluations against a existing table that is already distributed on all 5 nodes.&lt;br /&gt;&lt;br /&gt;Compares to the metrics in Google Paper (Figure 6): The write and randomRead performance is still not so good, but this result is much better than any previous HBase release, especially the randomRead. We even got better result than the paper on sequentialRead and scan evaluations. (and we should be aware of that the paper was published in 2006). This result gives us  confidence.&lt;br /&gt;- The new HFile should be the major success.&lt;br /&gt;- BlockCache provide more performance to sequentialRead and scan.&lt;br /&gt;- Client side write-buffer accelerates the sequentialWrite, but not so distinct. Since each write operation always writes into commit-log file and memstore.&lt;br /&gt;- randomRead performance is not good enough, maybe bloom filter shall enhance it in the future.&lt;br /&gt;- scan is so fast, MapReduce analysis on HBase table will be efficient.&lt;br /&gt;&lt;br /&gt;Looking forward to and researching following features:&lt;br /&gt;- Bloom Filter to accelerate randomRead.&lt;br /&gt;- Bulk-load.&lt;br /&gt;&lt;br /&gt;We need do more analysis for this evaluation and read code detail. Here is our PerformanceEvaluation code: &lt;a href="http://dl.getdropbox.com/u/24074/code/PerformanceEvaluation.java"&gt;http://dl.getdropbox.com/u/24074/code/PerformanceEvaluation.java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;[1] Ryan Rawson’s Presentation on NOSQL. &lt;a href="http://blog.oskarsson.nu/2009/06/nosql-debrief.html"&gt;http://blog.oskarsson.nu/2009/06/nosql-debrief.html&lt;/a&gt;&lt;br /&gt;[2] HBase goes Realtime, &lt;a href="http://wiki.apache.org/hadoop-data/attachments/HBase%282f%29HBasePresentations/attachments/HBase_Goes_Realtime.pdf"&gt;http://wiki.apache.org/hadoop-data/attachments/HBase(2f)HBasePresentations/attachments/HBase_Goes_Realtime.pdf&lt;/a&gt;&lt;br /&gt;[3] Google, Bigtable: A Distributed Storage System for Structured Data &lt;a href="http://labs.google.com/papers/bigtable.html"&gt;http://labs.google.com/papers/bigtable.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Anty Rao and Schubert Zhang&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-4715681019827683766?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/4715681019827683766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2009/08/hbase-0200-performance-evaluation.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/4715681019827683766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/4715681019827683766'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2009/08/hbase-0200-performance-evaluation.html' title='HBase-0.20.0 Performance Evaluation'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-KwPpcL7tYQ/SqtUYceVWjI/AAAAAAAAA_0/8iZsA7hHd-A/s72-c/hbase020-pe.PNG' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8355955800449919830.post-1712576875558323452</id><published>2009-08-17T00:03:00.008+08:00</published><updated>2009-09-12T18:35:52.495+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vertica'/><category scheme='http://www.blogger.com/atom/ns#' term='Column Store'/><category scheme='http://www.blogger.com/atom/ns#' term='MapReduce'/><title type='text'>Hybrid store of row and column! Hybrid query of lookup and MapReduce?</title><content type='html'>- Hybrid store of row and column!&lt;br /&gt;&lt;br /&gt;In our practices, we were aware of the hybrid of row-oriented store and column-oriented store is a realistic choice. I got this inspiration from Bigtable's column-family concept.&lt;br /&gt;&lt;br /&gt;Now Vertica 3.5 move from pure columnar store to hybrid. It is called "Column Grouping", which is the major part of the veritica's enhancement in storing and processing columnar data called FlexStore. I think FlexStore means "Flexible Store". Users can define their column group flexibly.&lt;br /&gt;&lt;br /&gt;Hybrid is the trend. I like Bigtable's model abstraction, it is simple and flexible.&lt;br /&gt;&lt;br /&gt;- Hybrid query of lookup and MapReduce?&lt;br /&gt;&lt;br /&gt;It seems it is a contradiction for low-latency lookup and high-latency ad-hoc MapReduce query. But I don't know if it make sense to support both in one data system. But sometimes, it seems needed.&lt;br /&gt;&lt;br /&gt;Hive is one of the best practices to provide a easy-to-used MapReduce expression tool, or data warehouse. No real-time lookup. In fact, it is not a easy work to melt MapReduce into SQL, after reading of the DAG abstraction in Hive's paper in VLDB09.&lt;br /&gt;&lt;br /&gt;As expected, Dr. Stonebraker's Vertica 3.5 also integrate Hadoop MapReduce now. And HadoopDB is Hive+Hadoop+PostgresDB. Vertica does not integrate MapReduce into SQL now, it is different from Greenplum and AsterData and HadoopDB.&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;a href="http://www.vertica.com/company/news/vertica-analytic-database-broadens-reach-with-flexstore" onmousedown="'UntrustedLink.bootstrap($(this)," target="_blank" rel="nofollow"&gt;&lt;span&gt;http://www.vertica.com/com&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;&lt;span&gt;pany/news/vertica-analytic&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;&lt;span&gt;-database-broadens-reach-w&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;ith-flexstore&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dbms2.com/2009/08/04/flexstore-and-the-rest-of-vertica-35/" onmousedown="'UntrustedLink.bootstrap($(this)," target="_blank" rel="nofollow"&gt;&lt;span&gt;http://www.dbms2.com/2009/&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;&lt;span&gt;08/04/flexstore-and-the-re&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;st-of-vertica-35/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dbms2.com/2009/08/04/verticas-version-of-mapreduce-integration/" onmousedown="'UntrustedLink.bootstrap($(this)," target="_blank" rel="nofollow"&gt;&lt;span&gt;http://www.dbms2.com/2009/&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;&lt;span&gt;08/04/verticas-version-of-&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;mapreduce-integration/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://db.cs.yale.edu/hadoopdb/hadoopdb.html" onmousedown="'UntrustedLink.bootstrap($(this)," target="_blank" rel="nofollow"&gt;&lt;span&gt;http://db.cs.yale.edu/hado&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;opdb/hadoopdb.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://db.csail.mit.edu/pubs/benchmarks-sigmod09.pdf" onmousedown="'UntrustedLink.bootstrap($(this)," target="_blank" rel="nofollow"&gt;&lt;span&gt;http://db.csail.mit.edu/pu&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;bs/benchmarks-sigmod09.pdf&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/namit_jain/hive-demo-paper-at-vldb-2009" onmousedown="'UntrustedLink.bootstrap($(this)," target="_blank" rel="nofollow"&gt;&lt;span&gt;http://www.slideshare.net/&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;&lt;span&gt;namit_jain/hive-demo-paper&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;-at-vldb-2009&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8355955800449919830-1712576875558323452?l=cloudepr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloudepr.blogspot.com/feeds/1712576875558323452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cloudepr.blogspot.com/2009/08/hybrid-store-of-row-and-column-hybrid.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/1712576875558323452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8355955800449919830/posts/default/1712576875558323452'/><link rel='alternate' type='text/html' href='http://cloudepr.blogspot.com/2009/08/hybrid-store-of-row-and-column-hybrid.html' title='Hybrid store of row and column! Hybrid query of lookup and MapReduce?'/><author><name>Schubert Zhang</name><uri>http://www.blogger.com/profile/07530469393869595218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
