个人超全hbase集群搭建过程!!!
Hbase集群是建立在hadoop集群之上,需要先搭建好hadoop集群,再搭建hbase集群。
集群规划
主机名 IP 安装的软件 运行的进程
it01 192.168.1.201 jdk、hadoop NameNode、DFSZKFailoverController
it02 192.168.1.202 jdk、hadoop NameNode、DFSZKFailoverController
it03 192.168.1.203 jdk、hadoop ResourceManager
it04 192.168.1.204 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
it05 192.168.1.205 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
it06 192.168.1.206 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
hadoop集群搭建链接(hbase是工作在hadoop之上,所以必须先搭建好hadoop集群)
集群版本说明
zookeeper:
zookeeper-3.4.6.tar.gz
hadoop:
hadoop-2.2.0.tar.gz
hbase:
hbase-0.96.2-hadoop2-bin.tar.gz
搭建hbase集群过程
1.配置vim hbase-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_60
export HBASE_MANAGES_ZK=false
2.配置vim hbase-site.xml
<configuration>
<!-- 指定hbase在hdfs上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://ns1/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>it04:2181,it05:2181,it06:2181</value>
</property>
</configuration>
3.配置vim regionservers
it03
it04
it05
it06
4.将hadoop的datanode、namenode映射关系拷贝到/hbase-0.96.2-hadoop2/conf/
cp core-site.xml hdfs-site.xml /it/hbase-0.96.2-hadoop2/conf/
5.配置vim backup-masters
it02
6.将配置好的hbase拷贝到02、03、04、05、06机器上(拷贝前将docs数据删除)
scp -r /it/hbase-0.96.2-hadoop2/ it02:/it/
scp -r /it/hbase-0.96.2-hadoop2/ it03:/it/
scp -r /it/hbase-0.96.2-hadoop2/ it04:/it/
scp -r /it/hbase-0.96.2-hadoop2/ it05:/it/
scp -r /it/hbase-0.96.2-hadoop2/ it06:/it/
测试hbase集群
1.启动hbase
./start-hbase.sh
2.打开浏览器查看hbase
http://192.168.8.201:60010
3.我们也可以将02机器上的master启动起来,作为备用的master,其中一个挂掉,另一个也可以启动起来(如果01机器挂掉,我们可以在02机器上查看http://192.168.8.202:60010/master-status )
./hbase-daemon.sh start master
创建hbase数据(常规操作)
1.启动hbase shell
./hbase shell
2.创建表,这一个表是建立在分布式机器上的
create 'people',{NAME=>'info',VERSIONS=>3},{NAME=>'data',VERSIONS=>1}
3.查看表
list
4.描述表
describe 'people'
5.查看数据
scan 'people'
6.追加数据
put 'people', 'rk001','info:gender','female'
put 'people', 'rk001','info:size',24
put 'people', 'rk001','info:size',25
put 'people', 'rk001','info:size',26
put 'people', 'rk001','info:size',27
7.查询以前版本数据
scan 'people',{COLUMNS=>'info',VERSIONS=>3}
--------------------------
ROW COLUMN+CELL
rk001 column=info:gender, timestamp=1498658679302, value=female
rk001 column=info:name, timestamp=1498658588992, value=cls
rk001 column=info:size, timestamp=1498658928193, value=27
rk001 column=info:size, timestamp=1498658918718, value=26
rk001 column=info:size, timestamp=1498658825136, value=25
1 row(s) in 0.0160 seconds
--------------------------
put 'people', 'rk001','data:nation','JAPAN'
put 'people', 'rk001','data:nation','CHINA'
hbase(main):025:0> scan 'people',{COLUMNS=>['info','data'],VERSIONS=>3}
ROW COLUMN+CELL
rk001 column=data:nation, timestamp=1498659306398, value=CHINA
rk001 column=info:gender, timestamp=1498658679302, value=female
rk001 column=info:name, timestamp=1498658588992, value=cls
rk001 column=info:size, timestamp=1498658928193, value=27
rk001 column=info:size, timestamp=1498658918718, value=26
rk001 column=info:size, timestamp=1498658825136, value=25
1 row(s) in 0.0090 seconds
8.追加不同RowID记录
put 'people','rk002','info:high',800
--------------------------
hbase(main):027:0> scan 'people'
ROW COLUMN+CELL
rk001 column=data:nation, timestamp=1498659306398, value=CHINA
rk001 column=info:gender, timestamp=1498658679302, value=female
rk001 column=info:name, timestamp=1498658588992, value=cls
rk001 column=info:size, timestamp=1498658928193, value=27
rk002 column=info:high, timestamp=1498659421253, value=800
2 row(s) in 0.0150 seconds
hbase表结构图
-----------------------------------------------------------------------------
| | |
rowkey | info (列族) | data (列族) |
(行键) | | |
|------------------------------------------------------------------
| name(列) | size(列)| high(列) | nation(列) |
-----------------------------------------------------------------------------
| cls | 26 | | china |
rk001 | | 27 | | |
| | 28 | | |
-----------------------------------------------------------------------------
| | | 800 | |
rk002 | | | | |
| | | | |
-----------------------------------------------------------------------------
hbase介绍说明
HBase是一个构建在HDFS上的分布式列存储系统;
HBase是基于Google BigTable模型开发的,典型的key/value系统;
HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;
从逻辑上讲,HBase将数据按照表、行和列进行存储。
与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
Hbase表的特点
大:一个表可以有数十亿行,上百万列;
无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;
面向列:面向列(族)的存储和权限控制,列(族)独立检索;
稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;
数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;
数据类型单一:Hbase中的数据都是字符串,没有类型。
-----------------------------
1.hbase基本概念
RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要。
Column Family:列族,拥有一个名称(string),包含一个或者多个相关列
Column:属于某一个columnfamily,familyName:columnName,每条记录可动态添加
Version Number:类型为Long,默认值是系统时间戳,可由用户自定义
Value(Cell):Byte array
2.Hbase物理模型
每个column family存储在HDFS上的一个单独文件中,空值不会被保存。
Key 和 Version number在每个 column family中均有一份;
HBase 为每个值维护了多级索引,即:<key, column family, column name, timestamp>
物理存储:
1、Table中所有行都按照row key的字典序排列;
2、Table在行的方向上分割为多个Region;
3、Region按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,
当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region;
4、Region是Hbase中分布式存储和负载均衡的最小单元,不同Region分布到不同HRegionServer(机器)上;
但同一个Region是不会拆分到多个HRegionServer(机器)上
5、Region虽然是分布式存储的最小单元,但并不是存储的最小单元。
Region由一个或者多个Store组成,每个store保存一个columns family(列族);
每个Strore又由一个memStore和0至多个StoreFile组成,StoreFile包含HFile;
memStore存储在内存中,StoreFile存储在HDFS上。
分布式Hbase协调工作说明
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
可以看到,client访问hbase上数据的过程并不需要master参与
(寻址访问zookeeper和region server,数据读写访问region server),
master仅仅维护着table和region的元数据信息,负载很低
文章最后,给大家推荐一些受欢迎的技术博客链接:
- Hadoop相关技术博客链接
- Spark 核心技术链接
- JAVA相关的深度技术博客链接
- 超全干货--Flink思维导图,花了3周左右编写、校对
- 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
- 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
- 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂
欢迎扫描下方的二维码或 搜索 公众号“10点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!