<!-- flowchart 箭头图标 勿删 -->
<svg style="display: none;">
<path d="M5,0 0,2.5 5,5z" id="raphael-marker-block" stroke-linecap="round" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<pre class="blockcode"><code>@Author : Spinach | GHB
@Link : http://blog.csdn.net/bocai8058
</code></pre>
<hr>
<p></p><div class="toc"><h3>文章目录</h3><ul><ul><ul><li><a data-token="96bdb58839b3673aa46ee97e92c5ebe1" href="https://blog.csdn.net/bocai8058/article/details/82956659#HBase_8" rel="nofollow">HBase架构图</a></li><li><a data-token="7777ed865501125d0087ac71eeb14215" href="https://blog.csdn.net/bocai8058/article/details/82956659#ROOTMETA_17" rel="nofollow">-ROOT-和.META.结构</a></li><ul><li><a data-token="2548ba437540c5cdf5797f0ab317cfd3" href="https://blog.csdn.net/bocai8058/article/details/82956659#ROOT_32" rel="nofollow">-ROOT-</a></li><li><a data-token="b8d157df11ab66442165ad5be77dcf1e" href="https://blog.csdn.net/bocai8058/article/details/82956659#META_43" rel="nofollow">.META.</a></li><li><a data-token="3bd00521cd680b0d3c158160b59fac21" href="https://blog.csdn.net/bocai8058/article/details/82956659#hbase096ROOT_100" rel="nofollow">两表关系(hbase0.96版本之前,之后删除了-ROOT-表)</a></li></ul><li><a data-token="074ba9f214f528b57a3a3fa689333e08" href="https://blog.csdn.net/bocai8058/article/details/82956659#_111" rel="nofollow">写数据过程</a></li><li><a data-token="3e9ba1f57a68a1ed6226f61e90d8666d" href="https://blog.csdn.net/bocai8058/article/details/82956659#_140" rel="nofollow">读数据过程</a></li><li><a data-token="8cbfc87f03891011e9c0fe5696e9787a" href="https://blog.csdn.net/bocai8058/article/details/82956659#HBase_160" rel="nofollow">HBase各个模块功能</a></li></ul></ul></ul></div><p></p>
<h3><a id="HBase_8"></a>HBase架构图</h3>
<center>
<img src="https://201907.oss-cn-shanghai.aliyuncs.com/cs/5606289-0e4dfee2bb8241369a74ee3352576435.jpg" width="80%">
</center>
<center>
<img src="https://201907.oss-cn-shanghai.aliyuncs.com/cs/5606289-5166fa5ea0dfd61e2a1c1f3ed6228fc5.png" width="70%">
</center>
<h3><a id="ROOTMETA_17"></a>-ROOT-和.META.结构</h3>
<p>从存储结构和操作方法的角度来说,-ROOT-、.META.与其他表没有任何区别。它们与众不同的地方是HBase用它们来存贮一个重要的系统信息:</p>
<ul>
<li>-ROOT-:记录.META.表的Region信息。</li>
<li>.META.:记录用户表的Region信息。</li>
</ul>
<p>其中-ROOT-表本身只会有一个region,也就只会存放在一台RegionServer上。,这样保证了只需要三次跳转,就能定位到任意region。</p>
<blockquote>
<p>hbase0.96版本之前</p>
</blockquote>
<p>-ROOT-和.META.均存储在HBase中,可通过以下命令查看scan '-ROOT-'和scan ‘.META.’,存放-ROOT-的所处region的地址放在zookeeper中,路径为/hbase/root-region-server。</p>
<blockquote>
<p>hbase0.96版本之后</p>
</blockquote>
<p>.META.存储在HBase中,可通过以下命令查看scan ‘hbase:meta’,存放.META.的所处region的地址放在zookeeper中,路径为/hbase/meta-region-server。</p>
<h4><a id="ROOT_32"></a>-ROOT-</h4>
<blockquote>
<p>hbase0.96版本后删除了root表,新增了namespace,现在是讲解hbase0.96版本之前的版本。</p>
</blockquote>
<p>当用户表特别大时,用户表的region也会非常多。.META.表存储了这些region信息,也变得非常大,这时.META.自己也需要划分成多个Region,托管到多个RegionServer上。这时就出现了一个问题:当.META.被托管在多个RegionServer上,如何去定位.META.呢?HBase的做法是用另外一个表来记录.META.的Region信息,就和.META.记录用户表的Region信息一样,这个表就是-ROOT-表。</p>
<center>
<img src="https://201907.oss-cn-shanghai.aliyuncs.com/cs/5606289-6909c1b81d9bd63f7984a00bd46db849.png" width="45%">
</center>
<p>除了没有historian列族之外,-ROOT-表的结构与.META.表的结构是一样的。另外,-ROOT-表的 RowKey 没有采用时间戳,也没有Encoded值,而是直接指定一个数字。</p>
<h4><a id="META_43"></a>.META.</h4>
<pre class="blockcode"><code>hbase(main):018:0> scan 'hbase:meta'
ROW COLUMN+CELL
CallLog,,1528959142280.21bd88f3409aed49228d3b9dd9f8d7c0. column=info:regioninfo, timestamp=1538750384211, value={ENCODED => 21bd88f3409aed49228d3b9dd9f8d7c0, NAME => 'CallLog,,1528959142280.21bd88f3409aed49228d3b9dd9f8d7c0.', STARTKEY => '', ENDKE
Y => ''}
CallLog,,1528959142280.21bd88f3409aed49228d3b9dd9f8d7c0. column=info:seqnumDuringOpen, timestamp=1538750384211, value=\x00\x00\x00\x00\x00\x00\x00(
CallLog,,1528959142280.21bd88f3409aed49228d3b9dd9f8d7c0. column=info:server, timestamp=1538750384211, value=centos6:16201
CallLog,,1528959142280.21bd88f3409aed49228d3b9dd9f8d7c0. column=info:serverstartcode, timestamp=1538750384211, value=1538750349345
hbase:namespace,,1528879579816.45aa5ea87654b8e16223ca82c351473f. column=info:regioninfo, timestamp=1538750384222, value={ENCODED => 45aa5ea87654b8e16223ca82c351473f, N |
|