Background
使用了 github 上找到的别人已经写好的 docker ,该 docker 集成了 Hadoop,Hbase,ZooKeeper 。
Hbase 跑起来之后建库插入语句:
$ create 'album','label','image'
$ put 'album','label1','label:size','10'
$ put 'album','label1','label:color','255:255:255'
$ put 'album','label1','label:text','Family album'
$ put 'album','label1','image:name','holiday'
$ put 'album','label1','image:source','/tmp/pic1.jpg'
Question1
- Master
1223 Jps
992 SecondaryNameNode
813 NameNode
1140 ResourceManager
- Slave1
258 NodeManager
352 Jps
159 DataNode
- Slave2
371 Jps
277 NodeManager
178 DataNode
Question2
进入到目录 usr/local/hbase/logs 发现有
SecurityAuth.audit
hbase--master-master.krejcmat.com.out
hbase-root-regionserver-master.krejcmat.com.out
hbase-root-zookeeper-master.krejcmat.com.out
hbase--master-master.krejcmat.com.log
hbase-root-regionserver-master.krejcmat.com.log
hbase-root-zookeeper-master.krejcmat.com.log
七个文件。
分别 cat 了其中 .log 后缀的文件发现三个文件首行分别为:
Thu Dec 21 07:49:05 UTC 2017 Starting master on master.krejcmat.com
Thu Dec 21 07:49:06 UTC 2017 Starting regionserver on master.krejcmat.com
Thu Dec 21 07:49:04 UTC 2017 Starting zookeeper on master.krejcmat.com
先后顺序为:zookeeper -> master -> regionserver
Question3
zookeeper 有一套机制来维护全局有且只有一个 master 。
zookeeper 储存了所有用户创建的 HMaster 的地址,保证任何时候都只有一个 Master 在运行,当目前的主 Master 崩溃的时候,通过 Master election 机制选出一个新的 Master。(猜想可能和课上讲的 RSM 中 ViewServer 更换Primary 的过程类似)
Question4
- recall: 之前建立的表名叫 album 。
经过一番递归遍历查找,在 hdfs 里的 /hbase/data/default 目录下找到了名叫 album 的文件夹,其中存有表结构和数据。
/hbase 目录结构描述如下:
二、0.98.8版本
自0.96版本之后,hbase 源码结构上做了很大的优化,目录结构也发生了变化,做了精简和优化,这里以0.98.8为例介绍,目录如下:
/hbase/.tmp
/hbase/WALs
/hbase/archive
/hbase/corrupt
/hbase/data
/hbase/hbase.id
/hbase/hbase.version
/hbase/oldWALs
1、/hbase/.tmp
这个目录不变还是原来的tmp目录,作用是一样的。
2、/hbase/WALs
这里对应0.94的.logs 目录,取名为 WALs 更加见名知意了,点个赞!
3、/hbase/archive
和0.94一样,只是去掉了.而已,估计是作者不想把它作为一个隐藏文件夹了吧
4、/hbase/corrupt
和0.94一样,去了.
5、/hbase/data
这个才是 hbase 的核心目录,0.98版本里支持 namespace 的概念模型,系统会预置两个 namespace 即:hbase和default
5.1 /hbase/data/default
这个默认的namespace即没有指定namespace 的表都将会flush 到该目录下面。
5.2 /hbase/data/hbase
这个namespace 下面存储了 HBase 的 namespace、meta 和acl 三个表,这里的 meta 表跟0.94版本的.META.是一样的,自0.96之后就已经将 ROOT 表去掉了,直接从Zookeeper 中找到meta 表的位置,然后通过 meta 表定位到 region。 namespace 中存储了 HBase 中的所有 namespace 信息,包括预置的hbase 和 default。acl 则是表的用户权限控制。
如果自定义一些 namespace 的话,就会再/hbase/data 目录下新建一个 namespace 文件夹,该 namespace 下的表都将 flush 到该目录下。
6、/hbase/hbase.id
它是一个文件,存储集群唯一的 cluster id 号,是一个 uuid。
7、/hbase/hbase.version
同样也是一个文件,存储集群的版本号,貌似是加密的,看不到,只能通过web-ui 才能正确显示出来。
8、/hbase/oldWALs
这里对应0.94的.oldlogs 目录,取名为 oldWALs 是不是更好了呢!
Question5:
setMaster("local[2]")
conf.set(TableInputFormat.INPUT_TABLE,"test")
分别改成自己的主机名和自己的表名