8000 Site updated: 2016-07-26 23:56:37 · TinyR/TinyR.github.io@2242cec · GitHub
[go: up one dir, main page]

Skip to content

Commit 2242cec

Browse files
committed
Site updated: 2016-07-26 23:56:37
1 parent a03aabe commit 2242cec

File tree

3 files changed

+4
-4
lines changed

3 files changed

+4
-4
lines changed

2016/07/24/HBase-Region定位/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
Region定位过程Catalog TableHBase有两个特殊的表-ROOT-和.MEAT.。
9797
9898
-ROOT-保存了.M">
99-
<meta property="og:updated_time" content="2016-07-26T15:44:26.087Z">
99+
<meta property="og:updated_time" content="2016-07-26T15:53:51.518Z">
100100
<meta name="twitter:card" content="summary">
101101
<meta name="twitter:title" content="HBase Region定位">
102102
<meta name="twitter:description" content="什么时候需要Region定位?  每个RegionServer包含多个的Region,每个Region包含一定范围内的行。HBase client执行Get、Put等操作,都需要定位Region,与Region所在的RegionServer建立连接,进行RPC调用。
@@ -328,7 +328,7 @@ <h3 id="一次查找流程"><a href="#一次查找流程" class="headerlink" tit
328328
<li>Client与RS2建立通信,查找-META-,找到rowkey所属Region的RegionServer为RS3 </li>
329329
</ol>
330330
<h3 id="缓存"><a href="#缓存" class="headerlink" title="缓存"></a>缓存</h3><p>Client可以缓存Region location。</p>
331-
<h2 id="源码分析"><a href="#源码分析" class="headerlink" title="源码分析"></a>源码分析</h2><p>HConnectionImplementation的locateRegion方法:<br><code><br>private HRegionLocation locateRegion(final byte [] tableName,<br> final byte [] row, boolean useCache, boolean retry)<br> throws IOException {<br> if (this.closed) throw new IOException(toString() + “ closed”);<br> if (tableName == null || tableName.length == 0) {<br> throw new IllegalArgumentException(<br> “table name cannot be null or zero length”);<br> }<br> ensureZookeeperTrackers();<br> if (Bytes.equals(tableName, HConstants.ROOT_TABLE_NAME)) {<br> try {<br> ServerName servername = this.rootRegionTracker.waitRootRegionLocation(this.rpcTimeout);<br> LOG.debug(“Looked up root region location, connection=” + this +<br> “; serverName=” + ((servername == null)? “”: servername.toString()));<br> if (servername == null) return null;<br> return new HRegionLocation(HRegionInfo.ROOT_REGIONINFO,<br> servername.getHostname(), servername.getPort());<br> } catch (InterruptedException e) {<br> Thread.currentThread().interrupt();<br> return null;<br> }<br> } else if (Bytes.equals(tableName, HConstants.META_TABLE_NAME)) {<br> return locateRegionInMeta(HConstants.ROOT_TABLE_NAME, tableName, row,<br> useCache, metaRegionLock, retry);<br> } else {<br> // Region not in the cache - have to go to the meta RS<br> return locateRegionInMeta(HConstants.META_TABLE_NAME, tableName, row,<br> useCache, userRegionLock, retry);<br> }<br> }<br></code></p>
331+
<h2 id="源码分析"><a href="#源码分析" class="headerlink" title="源码分析"></a>源码分析</h2><p>HConnectionImplementation的locateRegion方法:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">private</span> HRegionLocation <span class="title">locateRegion</span><span class="params">(<span class="keyword">final</span> <span class="keyword">byte</span> [] tableName,</span></span></div><div class="line"> <span class="keyword">final</span> <span class="keyword">byte</span> [] row, <span class="keyword">boolean</span> useCache, <span class="keyword">boolean</span> retry)</div><div class="line"> <span class="keyword">throws</span> IOException &#123;</div><div class="line"> <span class="keyword">if</span> (<span class="keyword">this</span>.closed) <span class="keyword">throw</span> <span class="keyword">new</span> IOException(toString() + <span class="string">" closed"</span>);</div><div class="line"> <span class="keyword">if</span> (tableName == <span class="keyword">null</span> || tableName.length == <span class="number">0</span>) &#123;</div><div class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(</div><div class="line"> <span class="string">"table name cannot be null or zero length"</span>);</div><div class="line"> &#125;</div><div class="line"> ensureZookeeperTrackers();</div><div class="line"> <span class="keyword">if</span> (Bytes.equals(tableName, HConstants.ROOT_TABLE_NAME)) &#123;</div><div class="line"> <span class="keyword">try</span> &#123;</div><div class="line"> ServerName servername = <span class="keyword">this</span>.rootRegionTracker.waitRootRegionLocation(<span class="keyword">this</span>.rpcTimeout);</div><div class="line"> LOG.debug(<span class="string">"Looked up root region location, connection="</span> + <span class="keyword">this</span> +</div><div class="line"> <span class="string">"; serverName="</span> + ((servername == <span class="keyword">null</span>)? <span class="string">""</span>: servername.toString()));</div><div class="line"> <span class="keyword">if</span> (servername == <span class="keyword">null</span>) <span class="keyword">return</span> <span class="keyword">null</span>;</div><div class="line"> <span class="keyword">return</span> <span class="keyword">new</span> HRegionLocation(HRegionInfo.ROOT_REGIONINFO,</div><div class="line"> servername.getHostname(), servername.getPort());</div><div class="line"> &#125; <span class="keyword">catch</span> (InterruptedException e) &#123;</div><div class="line"> Thread.currentThread().interrupt();</div><div class="line"> <span class="keyword">return</span> <span class="keyword">null</span>;</div><div class="line"> &#125;</div><div class="line"> &#125; <span class="keyword">else</span> <span class="keyword">if</span> (Bytes.equals(tableName, HConstants.META_TABLE_NAME)) &#123;</div><div class="line"> <span class="keyword">return</span> locateRegionInMeta(HConstants.ROOT_TABLE_NAME, tableName, row,</div><div class="line"> useCache, metaRegionLock, retry);</div><div class="line"> &#125; <span class="keyword">else</span> &#123;</div><div class="line"> <span class="comment">// Region not in the cache - have to go to the meta RS</span></div><div class="line"> <span class="keyword">return</span> locateRegionInMeta(HConstants.META_TABLE_NAME, tableName, row,</div><div class="line"> useCache, userRegionLock, retry);</div><div class="line"> &#125;</div><div class="line"> &#125;</div></pre></td></tr></table></figure></p>
332332

333333

334334
</div>

css/main.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1548,7 +1548,7 @@ pre .javascript .function {
15481548
width: 4px;
15491549
height: 4px;
15501550
border-radius: 50%;
1551-
background: #ff0eaa;
1551+
background: #c660ff;
15521552
}
15531553
.links-of-blogroll {
15541554
font-size: 13px;

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ <h3 id="一次查找流程"><a href="#一次查找流程" class="headerlink" tit
465465
<li>Client与RS2建立通信,查找-META-,找到rowkey所属Region的RegionServer为RS3 </li>
466466
</ol>
467467
<h3 id="缓存"><a href="#缓存" class="headerlink" title="缓存"></a>缓存</h3><p>Client可以缓存Region location。</p>
468-
<h2 id="源码分析"><a href="#源码分析" class="headerlink" title="源码分析"></a>源码分析</h2><p>HConnectionImplementation的locateRegion方法:<br><code><br>private HRegionLocation locateRegion(final byte [] tableName,<br> final byte [] row, boolean useCache, boolean retry)<br> throws IOException {<br> if (this.closed) throw new IOException(toString() + “ closed”);<br> if (tableName == null || tableName.length == 0) {<br> throw new IllegalArgumentException(<br> “table name cannot be null or zero length”);<br> }<br> ensureZookeeperTrackers();<br> if (Bytes.equals(tableName, HConstants.ROOT_TABLE_NAME)) {<br> try {<br> ServerName servername = this.rootRegionTracker.waitRootRegionLocation(this.rpcTimeout);<br> LOG.debug(“Looked up root region location, connection=” + this +<br> “; serverName=” + ((servername == null)? “”: servername.toString()));<br> if (servername == null) return null;<br> return new HRegionLocation(HRegionInfo.ROOT_REGIONINFO,<br> servername.getHostname(), servername.getPort());<br> } catch (InterruptedException e) {<br> Thread.currentThread().interrupt();<br> return null;<br> }<br> } else if (Bytes.equals(tableName, HConstants.META_TABLE_NAME)) {<br> return locateRegionInMeta(HConstants.ROOT_TABLE_NAME, tableName, row,<br> useCache, metaRegionLock, retry);<br> } else {<br> // Region not in the cache - have to go to the meta RS<br> return locateRegionInMeta(HConstants.META_TABLE_NAME, tableName, row,<br> useCache, userRegionLock, retry);<br> }<br> }<br></code></p>
468+
<h2 id="源码分析"><a href="#源码分析" class="headerlink" title="源码分析"></a>源码分析</h2><p>HConnectionImplementation的locateRegion方法:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class=&qu B8C5 ot;line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">private</span> HRegionLocation <span class="title">locateRegion</span><span class="params">(<span class="keyword">final</span> <span class="keyword">byte</span> [] tableName,</span></span></div><div class="line"> <span class="keyword">final</span> <span class="keyword">byte</span> [] row, <span class="keyword">boolean</span> useCache, <span class="keyword">boolean</span> retry)</div><div class="line"> <span class="keyword">throws</span> IOException &#123;</div><div class="line"> <span class="keyword">if</span> (<span class="keyword">this</span>.closed) <span class="keyword">throw</span> <span class="keyword">new</span> IOException(toString() + <span class="string">" closed"</span>);</div><div class="line"> <span class="keyword">if</span> (tableName == <span class="keyword">null</span> || tableName.length == <span class="number">0</span>) &#123;</div><div class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(</div><div class="line"> <span class="string">"table name cannot be null or zero length"</span>);</div><div class="line"> &#125;</div><div class="line"> ensureZookeeperTrackers();</div><div class="line"> <span class="keyword">if</span> (Bytes.equals(tableName, HConstants.ROOT_TABLE_NAME)) &#123;</div><div class="line"> <span class="keyword">try</span> &#123;</div><div class="line"> ServerName servername = <span class="keyword">this</span>.rootRegionTracker.waitRootRegionLocation(<span class="keyword">this</span>.rpcTimeout);</div><div class="line"> LOG.debug(<span class="string">"Looked up root region location, connection="</span> + <span class="keyword">this</span> +</div><div class="line"> <span class="string">"; serverName="</span> + ((servername == <span class="keyword">null</span>)? <span class="string">""</span>: servername.toString()));</div><div class="line"> <span class="keyword">if</span> (servername == <span class="keyword">null</span>) <span class="keyword">return</span> <span class="keyword">null</span>;</div><div class="line"> <span class="keyword">return</span> <span class="keyword">new</span> HRegionLocation(HRegionInfo.ROOT_REGIONINFO,</div><div class="line"> servername.getHostname(), servername.getPort());</div><div class="line"> &#125; <span class="keyword">catch</span> (InterruptedException e) &#123;</div><div class="line"> Thread.currentThread().interrupt();</div><div class="line"> <span class="keyword">return</span> <span class="keyword">null</span>;</div><div class="line"> &#125;</div><div class="line"> &#125; <span class="keyword">else</span> <span class="keyword">if</span> (Bytes.equals(tableName, HConstants.META_TABLE_NAME)) &#123;</div><div class="line"> <span class="keyword">return</span> locateRegionInMeta(HConstants.ROOT_TABLE_NAME, tableName, row,</div><div class="line"> useCache, metaRegionLock, retry);</div><div class="line"> &#125; <span class="keyword">else</span> &#123;</div><div class="line"> <span class="comment">// Region not in the cache - have to go to the meta RS</span></div><div class="line"> <span class="keyword">return</span> locateRegionInMeta(HConstants.META_TABLE_NAME, tableName, row,</div><div class="line"> useCache, userRegionLock, retry);</div><div class="line"> &#125;</div><div class="line"> &#125;</div></pre></td></tr></table></figure></p>
469469

470470

471471

0 commit comments

Comments
 (0)
0