diff --git a/README.md b/README.md
index c2ef553..a6e53d4 100644
--- a/README.md
+++ b/README.md
@@ -76,6 +76,16 @@
## 八、Sqoop
## 九、Azkaban
## 十、Hbase
+
+1. Hbase基本环境搭建(Standalone /pseudo-distributed mode)
+
+2. Hbase系统架构及数据结构
+3. Hbase shell
+4. Hbase Java Api
+5. Hbase 协处理器
+6. Hbase 备份与恢复
+7. Hbase上的sql层——phoenix
+
## 十一、Kafka
## 十二、Zookeeper
## 十三、Scala
diff --git a/notes/Hbase系统架构及数据结构.md b/notes/Hbase系统架构及数据结构.md
new file mode 100644
index 0000000..e832bb6
--- /dev/null
+++ b/notes/Hbase系统架构及数据结构.md
@@ -0,0 +1,221 @@
+# Hbase系统架构及数据结构
+
+
+## 一、基本概念
+
+一个典型的Hbase Table 表如下:
+
+
+
+### 2.1 Row Key (行键)
+
+row key是用来检索记录的主键。访问Hbase table中的行,只有三种方式:
+
++ 通过单个row key访问
+
++ 通过row key的range
+
++ 全表扫描
+
+Row key行键 (Row key)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在Hbase内部,row key保存为字节数组。存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)
+
+注意:
+
++ 字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行键必须用0作左填充。
+
++ 行的一次读写是原子操作 (不论一次读写多少列)。
+
+
+
+### 2.2 Column Family(列族)
+
+hbase表中的每个列(Column),都归属与某个列族。列族是表的schema的一部分(列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history,courses:math都属于courses 这个列族。
+
+
+
+### 2.3 Column Qualifier (列限定符)
+
+列限定符被添加到列族中,以提供给定数据的索引。给定列族`content`,列限定符可能是`content:html`,另一个可能是`content:pdf`。虽然列族在创建表时是固定的,但列限定符是可变的,并且行与行之间可能有很大差异。
+
+
+
+### 2.4 Column(列)
+
+HBase 中的列由列族和列限定符组成,它们由`:`(冒号)字符分隔。
+
+
+
+### 2.5 Cell
+
+cell是行,列族和列限定符的组合,并包含值和时间戳。
+
+
+
+### 2.6 Timestamp(时间戳)
+
+HBase 中通过row和columns确定的为一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
+
+
+
+## 二、存储结构
+
+### 2.1 Regions
+
+Hbase Table中的所有行都按照row key的字典序排列。HBase Tables 通过行键的范围(row key range)被水平切分成多个Region, 一个Region包含了在start key 和 end key之间的所有行。
+
+
+
+每个表一开始只有一个Region ,随着数据不断插入表,Region不断增大,当增大到一个阀值的时候,Region就会等分会两个新的Region。当Table中的行不断增多,就会有越来越多的Region。
+
+
+
+Region是Hbase中**分布式存储和负载均衡的最小单元**。最小单元就表示不同的Region可以分布在不同的Region Server上。但一个Region是不会拆分到多个server上的。
+
+
+
+### 2.2 Region Server
+
+Region Server在HDFS data node上运行。
+
+
+
+Region Server 存取一个子表时,会创建一个 Region 对象,然后对表的每个列族 (Column Family) 创建一个 Store 实例,每个 Store 都会有 0 个或多个 StoreFile 与之对应,每个 StoreFile 都会对应一个 HFile,HFile 就是实际的存储文件。因此,一个 Region 有多少个列族就有多少个 Store。
+
+Region Server还具有以下组件:
+
++ WAL:Write Ahead Log(预写日志)是分布式文件系统上的文件。 WAL用于存储尚未进持久化存储的新数据,以便在发生故障时进行恢复。
++ BlockCache:是读缓存。它将频繁读取的数据存储在内存中。如果存储不足,它将按照`最近最少使用原则`清除多余的数据。
++ MemStore:是写缓存。它存储尚未写入磁盘的新数据,并会在数据写入磁盘之前对其进行排序。每个Region上的每个列族都有一个MemStore。
++ HFile将行数据按照KeyValues的形式存储在文件系统上。
+
+
+
+## 三、Hbase系统架构
+
+### 3.1 系统架构
+
+HBase系统遵循master/salve架构,由三种不同类型的组件组成。
+
+**Zookeeper**
+
+1. 保证任何时候,集群中只有一个master
+
+2. 存贮所有Region的寻址入口
+
+3. 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master
+
+4. 存储Hbase的schema,包括有哪些Table,每个Table有哪些column family
+
+**Master**
+
+1. 为Region server分配Region
+
+2. 负责Region server的负载均衡
+
+3. 发现失效的Region server并重新分配其上的Region
+
+4. GFS上的垃圾文件回收
+
+5. 处理schema更新请求
+
+**Region Server**
+
+1. Region server维护Master分配给它的Region ,处理发到Region上的IO请求
+
+2. Region server负责切分在运行过程中变得过大的Region
+
+
+
+### 3.2 组件间的协作
+
+ HBase使用ZooKeeper作为分布式协调服务来维护集群中的服务器状态。 Zookeeper维护可用服务列表,并提供服务故障通知。
+
++ 每个Region Server都会在ZooKeeper上创建一个临时节点,HMaster通过Zookeeper的Watcher机制监控这些节点以发现可用的Region Server和故障的Region Server;
+
++ Masters会竞争创建临时节点, Zookeeper确定第一个并使用它来确保只有一个主服务器处于活动状态。主Master向Zookeeper发送心跳,备用HMaster监听主HMaster故障的通知,在主HMaster发生故障的时候取而代之。
+
++ 如果Region Server或主HMaster未能发送心跳,则会话过期并删除相应的临时节点。这会触发定义在该节点上的Watcher事件,使得Region Server或备用Region Server得到通知。
+
+
+
+
+
+## 四、数据的读写流程简述
+
+### 4.1 写入数据的流程
+
+1. client向region server提交写请求
+
+2. region server找到目标region
+
+3. region检查数据是否与schema一致
+
+4. 如果客户端没有指定版本,则获取当前系统时间作为数据版本
+
+5. 将更新写入WAL log
+
+6. 将更新写入Memstore
+
+7. 判断Memstore存储是否已满,如果存储已满则需要flush为Store Hfile文件
+
+> 更为详细写入流程可以参考:[HBase - 数据写入流程解析](http://hbasefly.com/2016/03/23/hbase_writer/)
+
+
+
+### 4.2 读取数据的流程
+
+以下是客户端首次读写Hbase 的流程:
+
+1. 客户端从Zookeeper获取 META 表所在的Region Server。
+
+2. 客户端访问 META 表所在的Region Server,查询META 表获取它想访问的行键(Row Key)所在的Region Server。客户端将缓存这些信息以及META表的位置。
+
+3. 客户端端将从相应的Region Server获取行数据。
+
+如果再次读取,客户端将使用缓存来获取META 的位置及之前的行键。这样时间久了,客户端不需要查询META表,除非Region移动所导致的缓存失效,这样的话,则将会重新查询更新缓存。
+
+注:META 表是Hbase中一张特殊的表,它保存了Hbase中所有数据表的Region位置信息,ZooKeeper存储着META 表的位置。
+
+
+
+> 更为详细读取数据流程参考:
+>
+> [HBase原理-数据读取流程解析](http://hbasefly.com/2016/12/21/hbase-getorscan/)
+>
+> [HBase原理-迟到的‘数据读取流程部分细节](http://hbasefly.com/2017/06/11/hbase-scan-2/)
+
+
+
+
+
+## 参考资料
+
+本篇文章内容主要参考自官方文档和以下两篇博客,图片也主要引用自以下两篇博客:
+
++ [HBase Architectural Components](https://mapr.com/blog/in-depth-look-hbase-architecture/#.VdMxvWSqqko)
+
++ [Hbase系统架构及数据结构](https://www.open-open.com/lib/view/open1346821084631.html)
+
+官方文档:
+
++ [Apache HBase ™ Reference Guide](https://hbase.apache.org/2.1/book.html)
+
+
+
diff --git a/notes/installation/Hbase基本环境搭建.md b/notes/installation/Hbase基本环境搭建.md
new file mode 100644
index 0000000..9e78339
--- /dev/null
+++ b/notes/installation/Hbase基本环境搭建.md
@@ -0,0 +1,239 @@
+# Hbase基本环境搭建
+
+
+
+## 一、安装前置条件说明
+
+### 1.1 JDK版本说明
+
+Hbase 需要依赖JDK环境,同时Hbase 2.0+ 以上版本不再支持JDK 1.7 ,需要安装JDK 1.8+ 。JDK 安装方式见本仓库:
+
+> [Linux环境下JDK安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux下JDK安装.md)
+
+### 1.2 standalone 模式和伪集群模式的区别
+
++ 在standalone 模式下,所有守护进程都运行在一个 jvm 进程/实例中;
++ 在分布模式下,HBase仍然在单个主机上运行,但是每个 HBase 守护进程(HMaster,HRegionServer 和 ZooKeeper)作为一个单独的进程运行。
+
+**说明:两种模式任选其一进行部署即可,对于开发环境来说是没有太大区别的。**
+
+
+
+## 二、Standalone 模式
+
+### 2.1 下载并解压
+
+从[官方网站](https://hbase.apache.org/downloads.html)下载所需要版本的二进制安装包,并进行解压
+
+```shell
+# tar -zxvf hbase-2.1.4-bin.tar.gz
+```
+
+### 2.2 配置环境变量
+
+```shell
+# vim /etc/profile
+```
+
+添加环境变量:
+
+```shell
+export HBASE_HOME=/usr/app/hbase-2.1.4
+export PATH=$HBASE_HOME/bin:$PATH
+```
+
+使得配置的环境变量生效:
+
+```shell
+# source /etc/profile
+```
+
+### 2.3 进行Hbase相关配置
+
+修改安装目录下的`conf/hbase-env.sh`,指定JDK的安装路径:
+
+```shell
+# The java implementation to use. Java 1.8+ required.
+export JAVA_HOME=/usr/java/jdk1.8.0_201
+```
+
+修改安装目录下的`conf/hbase-site.xml`,增加如下配置:
+
+```xml
+
+
+ hbase.rootdir
+ file:///home/hbase/rootdir
+
+
+ hbase.zookeeper.property.dataDir
+ /home/zookeeper/dataDir
+
+
+ hbase.unsafe.stream.capability.enforce
+ false
+
+
+```
+
+`hbase.rootdi`r: 配置hbase数据的存储路径
+
+`hbase.zookeeper.property.dataDir`: 配置zookeeper数据的存储路径
+
+`hbase.unsafe.stream.capability.enforce`: 使用本地文件系统存储,不使用HDFS的情况下需要禁用此配置,设置为false。
+
+### 2.4 启动Hbase
+
+由于已经将Hbase的bin目录配置到环境变量,直接使用以下命令启动
+
+```shell
+# start-hbase.sh
+```
+
+### 2.5 验证启动是否成功
+
+验证方式一:使用jps 查看HMaster进程是否启动
+
+```
+[root@hadoop001 hbase-2.1.4]# jps
+16336 Jps
+15500 HMaster
+```
+
+验证方式二:访问Hbase Web UI 页面,默认端口为`16010`
+
+
+
+
+
+## 三、伪集群模式安装(Pseudo-Distributed)
+
+### 3.1 Hadoop单机伪集群安装
+
+因为上面的单机版本采用了本地文件系统作为存储,为了演示Hbase支持的多种存储方式,这里我们采用HDFS作为Hbase的存储方案。需要预先安装Hadoop,Hadoop安装方式见本仓库[Hadoop单机伪集群搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hadoop单机版本环境搭建.md)
+
+> 需要说明的是:Hbase即使是伪集群安装模式依然可以采用本地文件系统作为存储。
+
+
+
+### 3.2 Hbase版本选择
+
+Hbase的版本必须要与Hadoop的版本兼用,不然会发生各种Jar包冲突,由于我们Hadoop采用的版本为`hadoop-2.6.0-cdh5.15.2`,所以这里保持CDH版本一致,我们选择的Hbase版本为`hbase-1.2.0-cdh5.15.2` ,Hbase 1.2 的安装需要依赖JDK 1.7+ 。故所有软件版本如下:
+
++ **hadoop 版本**: hadoop-2.6.0-cdh5.15.2
+
++ **hbase 版本**: hbase-1.2.0-cdh5.15.2
+
++ **JDK 版本**:JDK 1.8
+
+
+
+### 3.3 软件下载解压
+
+下载地址:http://archive.cloudera.com/cdh5/cdh/5/ 下载后进行解压:
+
+```shell
+# tar -zxvf hbase-1.2.0-cdh5.15.2.tar.gz
+```
+
+
+
+### 3.4 配置环境变量
+```shell
+# vim /etc/profile
+```
+
+添加环境变量:
+
+```shell
+export HBASE_HOME=/usr/app/hbase-1.2.0-cdh5.15.2
+export PATH=$HBASE_HOME/bin:$PATH
+```
+
+使得配置的环境变量生效:
+
+```shell
+# source /etc/profile
+```
+
+
+
+
+### 3.5 进行Hbase相关配置
+
+1.修改安装目录下的`conf/hbase-env.sh`,指定JDK的安装路径:
+
+```shell
+# The java implementation to use. Java 1.7+ required.
+export JAVA_HOME=/usr/java/jdk1.8.0_201
+```
+
+2.修改安装目录下的`conf/hbase-site.xml`,增加如下配置(hadoop001为我虚拟机的主机名):
+
+```xml
+
+
+
+ hbase.cluster.distributed
+ true
+
+
+
+ hbase.rootdir
+ hdfs://hadoop001:8020/hbase
+
+
+
+ hbase.zookeeper.property.dataDir
+ /home/zookeeper/dataDir
+
+
+```
+
+3.修改安装目录下的`conf/regionservers`,指定 region servers的地址,修改后其内容如下(hadoop001为我虚拟机的主机名):
+
+```shell
+hadoop001
+```
+
+
+
+### 3.6 验证启动是否成功
+
+验证方式一:JPS 查看进程,其中HMaster,HRegionServer,HQuorumPeer三个进程是Hbase的进程(其中HQuorumPeer是Hbase内置的Zookeeper的进程),其余的为HDFS和YARN的进程。
+
+```shell
+[root@hadoop001 conf]# jps
+28688 NodeManager
+25824 GradleDaemon
+10177 Jps
+22083 HRegionServer
+20534 DataNode
+20807 SecondaryNameNode
+18744 Main
+20411 NameNode
+21851 HQuorumPeer
+28573 ResourceManager
+21933 HMaster
+```
+
+验证方式二:访问Hbase Web UI 界面,需要注意的是1.2 版本的Hbase的访问端口为`60010`
+
+
\ No newline at end of file
diff --git a/notes/优质学习资源分享.md b/notes/优质学习资源分享.md
new file mode 100644
index 0000000..c55c09a
--- /dev/null
+++ b/notes/优质学习资源分享.md
@@ -0,0 +1,2 @@
+1. [有态度的HBase/Spark/BigData](http://hbasefly.com/)
+
diff --git a/pictures/HBaseArchitecture-Blog-Fig1.png b/pictures/HBaseArchitecture-Blog-Fig1.png
new file mode 100644
index 0000000..e900bc4
Binary files /dev/null and b/pictures/HBaseArchitecture-Blog-Fig1.png differ
diff --git a/pictures/HBaseArchitecture-Blog-Fig2.png b/pictures/HBaseArchitecture-Blog-Fig2.png
new file mode 100644
index 0000000..3c576a2
Binary files /dev/null and b/pictures/HBaseArchitecture-Blog-Fig2.png differ
diff --git a/pictures/HBaseArchitecture-Blog-Fig3.png b/pictures/HBaseArchitecture-Blog-Fig3.png
new file mode 100644
index 0000000..3dfbbf6
Binary files /dev/null and b/pictures/HBaseArchitecture-Blog-Fig3.png differ
diff --git a/pictures/HBaseArchitecture-Blog-Fig4.png b/pictures/HBaseArchitecture-Blog-Fig4.png
new file mode 100644
index 0000000..9f62932
Binary files /dev/null and b/pictures/HBaseArchitecture-Blog-Fig4.png differ
diff --git a/pictures/HBaseArchitecture-Blog-Fig5.png b/pictures/HBaseArchitecture-Blog-Fig5.png
new file mode 100644
index 0000000..adab096
Binary files /dev/null and b/pictures/HBaseArchitecture-Blog-Fig5.png differ
diff --git a/pictures/HBaseArchitecture-Blog-Fig6.png b/pictures/HBaseArchitecture-Blog-Fig6.png
new file mode 100644
index 0000000..6cc22f5
Binary files /dev/null and b/pictures/HBaseArchitecture-Blog-Fig6.png differ
diff --git a/pictures/HBaseArchitecture-Blog-Fig7.png b/pictures/HBaseArchitecture-Blog-Fig7.png
new file mode 100644
index 0000000..8b46777
Binary files /dev/null and b/pictures/HBaseArchitecture-Blog-Fig7.png differ
diff --git a/pictures/hbase-60010.png b/pictures/hbase-60010.png
new file mode 100644
index 0000000..32a9df1
Binary files /dev/null and b/pictures/hbase-60010.png differ
diff --git a/pictures/hbase-Region-Server.png b/pictures/hbase-Region-Server.png
new file mode 100644
index 0000000..8dd5167
Binary files /dev/null and b/pictures/hbase-Region-Server.png differ
diff --git a/pictures/hbase-hadoop.png b/pictures/hbase-hadoop.png
new file mode 100644
index 0000000..9223f28
Binary files /dev/null and b/pictures/hbase-hadoop.png differ
diff --git a/pictures/hbase-region-dis.png b/pictures/hbase-region-dis.png
new file mode 100644
index 0000000..23d2426
Binary files /dev/null and b/pictures/hbase-region-dis.png differ
diff --git a/pictures/hbase-region-splite.png b/pictures/hbase-region-splite.png
new file mode 100644
index 0000000..b254028
Binary files /dev/null and b/pictures/hbase-region-splite.png differ
diff --git a/pictures/hbase-web-ui.png b/pictures/hbase-web-ui.png
new file mode 100644
index 0000000..3714fa6
Binary files /dev/null and b/pictures/hbase-web-ui.png differ
diff --git a/pictures/hbase-webtable.png b/pictures/hbase-webtable.png
new file mode 100644
index 0000000..3117e9f
Binary files /dev/null and b/pictures/hbase-webtable.png differ