HBase集群搭建在內(nèi)網(wǎng),現(xiàn)在需要從外網(wǎng)訪問HBase,對數(shù)據(jù)進(jìn)行讀寫。
首先,需要明白HBase客戶端連接HBase集群進(jìn)行數(shù)據(jù)讀寫的流程

1.寫流程
1.Client先訪問zookeeper,從Region中獲取表信息;
2.根據(jù)namespace、表名和rowkey根據(jù)meta表的數(shù)據(jù)找到寫入數(shù)據(jù)對應(yīng)的RegionServerID;
3.通過RegionServerID定位到region;
4.寫入數(shù)據(jù)到Region的Memstore,直到達(dá)到一定的閥值(128MB),MemStore中的數(shù)據(jù)被溢寫Flush成一個StoreFile,(與此同時寫入相同數(shù)據(jù)到log預(yù)寫日志中);
5.隨著StoreFile文件的不斷增多,當(dāng)其數(shù)量增長到一定閾值后,觸發(fā)Compact合并操作,將多個StoreFile合并成一個StoreFile,StoreFile底層是HFile,同時進(jìn)行版本合并和數(shù)據(jù)刪除;
6.單個StoreFile超過一定閥值后,出發(fā)Split操作,把當(dāng)前的RegionSplit分為兩個新的Region,父Region此時就會下線,新Split出的2個子Region會被HMaster分配到相應(yīng)的RegionServer上,使得原先1個Region的壓力得以分流到2個Region上。
2.讀流程
1.Client發(fā)送請求并訪問zookeeper,獲取meta表信息;
2.通過meta表中的Rowkey,tableName,TimeStamp定位到RegionID;
3.通過這個RegionID查找到相對應(yīng)的RegionServer
4.查找到RegionServer中,先查找MemStore(寫緩存),如果查不到,再進(jìn)入BlockCache(讀緩存)中查詢,如果查不到,再進(jìn)入StoreFile中查(依據(jù)StoreFile的索引查),并把結(jié)果放在BlockCache中。
所以,HBase客戶端進(jìn)行數(shù)據(jù)讀寫不會接觸到HMaster,只會接觸到zookeeper集群和和所有的regionserver節(jié)點。
3.修改HBase的RegionServer端口
HBase默認(rèn)的RegionServer端口是16020,現(xiàn)在有多個RegionServer,需要為不同的RegionServer配置不同的端口
在Slave1節(jié)點上,hbase-site.xml文件添加配置如下
</property>
<property>
<name>hbase.regionserver.port</name>
<value>16020</value>
</property>
在Slave2節(jié)點上,hbase-site.xml文件添加配置如下
</property>
<property>
<name>hbase.regionserver.port</name>
<value>16021</value>
</property>
在Slave3節(jié)點上,hbase-site.xml文件添加配置如下
</property>
<property>
<name>hbase.regionserver.port</name>
<value>16022</value>
</property>
4.修改客戶端/etc/hosts
HBase客戶端通過zookeeper獲取到regionserver的節(jié)點名和端口,例如slave1:16020,slave2:16021,slave3:16022,會解析本機(jī)的/etc/hosts文件,獲取slave1,slave2,slave3的IP地址,所以,在/etc/hosts添加如下配置
59.69.101.206 slave1
59.69.101.206 slave2
59.69.101.206 slave3
這樣,HBase客戶端就能知道regionserver的IP和端口了,就能獲取和寫入數(shù)據(jù)了。
5.配置路由器
最后,還需要配置路由器,給zookeeper和regionserver節(jié)點配置端口映射。
這里的端口映射配置是
59.69.101.206:42181 zookeeper1.ip:2181
59.69.101.206:42182 zookeeper2.ip:2181
59.69.101.206:42183 zookeeper3.ip:2181
59.69.101.206:16020 slave1.ip:16020
59.69.101.206:16021 slave2.ip:16021
59.69.101.206:16022 slave3.ip:16022
5.客戶端的hbase-site.xml配置如下
<property>
<name>hbase.zookeeper.quorum</name>
<value>59.69.101.206:42181,59.69.101.206:42182,59.69.101.206:42183</value>
</property>