HBase 基本概念及安装【持续更新中......】

Hbase

Hadoop生态系统

基本概念

  • Hadoop DataBase ,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库
  • 利用Hadoop HDFS 做其分布式文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper做其分布式协调服务
  • 主要用来存储非结构化和半结构化的松散数据(列存NoSQL DB)。

数据模型

  • ROW KEY
  1. 决定一行数据
  2. 按字典序排序
  3. Row key 只能存储64kb的数据
  • Column Family列族 & qualifier列
  1. HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’;
  2. 列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如course:math, course:english, 新的列族成员(列)可以随后按需、动态加入;
  3. 权限控制、存储以及调优都是在列族层面进行的;
  4. HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。
  • TimeStamp < 后续补充 >

  • Cell 单元格

  1. cell 单元格中数据没有类型,全是字节码形式存贮。
  2. 由{row key, column(= < family> + < qualifier >), version}唯一确定的单元
  • HLog

HBase 架构

  • Client

  • ZK

  1. 保证在任何时候,集群中只有一个Master
  2. 存贮所有Region的寻址入口
  3. 实时监控Region Server 的上线和下线信息,并实时通知Master
  4. 存储HBase的Schame和table元数据

在这里插入图片描述

-

在这里插入图片描述

伪分布式安装

下载链接 hbase-0.98.12.1-hadoop2-bin.tar.gz

扫描二维码关注公众号,回复: 4665097 查看本文章

需要一台单独的主机,hbase要使用自带的zk

	
	//解压
	1. tar zxvf hbase-0.98.12.1-hadoop2-bin.tar.gz -C /usr/local/software/hbase
	
	//更改配置文件
	2. vim hbase_env.sh 
		export JAVA_HOME=/usr/local/software/java

	3. vim hbase-site.xml
		<configuration>
			  <property>
			    <name>hbase.rootdir</name>
			    <!-- 路径不存在,或为空 -->
			    <value>file:///home/var/hbase </value>
			  </property>
			 <property>
			    <name>hbase.zookeeper.property.dataDir</name>
			    <value>/home/testuser/zookeeper</value>
			  </property>
		</configuration>
	
	//启动
	4. start-hbase.sh
	
	5. jps 查看
		root:60010 页面访问
	6. hbase-shell
		注:
		//不用加';'
		ctrl + backspace 向前删除
		backspace 向后删除
		help 查看对应组的命令
		
		create 'tb1','cf1','cf2' + enter
		list //查看表
		desc + 'tbName' //查看表信息
		
		> Table tbl is ENABLED 
		> Table tbl is DISABLED (删除的状态)
		> {NAME => 'cf1', BLOOMFILTER => 'ROW', VERSIONS(最大版本数) => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL(存储时间time to live) => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSION
S => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}                                                                                                                

		
//添加数据
hbase(main):016:0> put 'tbl','111','cf1:name','zhangsan'
0 row(s) in 0.3850 seconds

hbase(main):017:0> scan 'tbl'
ROW                                              COLUMN+CELL                                                                                                                                   
 111                                             column=cf1:name, timestamp=1537127071413, value=zhangsan                                                                                      
1 row(s) in 0.0610 seconds

hbase(main):018:0> put 'tbl','111','cf1:age','20'
0 row(s) in 0.0230 seconds

//查看数据(一行)
hbase(main):019:0> scan 'tbl'//全盘扫描,建议用get
ROW                                              COLUMN+CELL                                                                                                                                   
 111                                             column=cf1:age, timestamp=1537127107674, value=20                                                                                             
 111                                             column=cf1:name, timestamp=1537127071413, value=zhangsan                                                                                      
1 row(s) in 0.0460 seconds

//删除表
drop
drop-all
//查看状态
is_enabled

//禁用启用
disable + 'tbName'
enable + 'tbName'

//quit 退出

//  /home/var/hbase/data/default/tbl/2972431c8bbd0a1ececf4a4008d174f9/cf1
hbase hfile -p -f f7b824945e8a4faa978c6537987520e7

K: 111/cf1:age/1537127107674/Put/vlen=2/mvcc=0 V: 20
K: 111/cf1:name/1537127071413/Put/vlen=8/mvcc=0 V: zhangsan
Scanned kv count -> 2
(key占据空间大,需要优化)




完全分布式安装

主机名 Master Back-Master regionServer Zookeeper
node1 * *
node2 * *
node3 * *
node4 * *

时间同步

  1. date -s
  2. ntpdate + 时间服务器地址
    yum install ntp -y
    ntpdate cn.pool.ntp.org
    date 查看系统时间
      若上面的时间服务器不可用,也可以选择以下服务器同步时间
    time.nist.gov
    time.nuri.net
    0.asia.pool.ntp.org
    1.asia.pool.ntp.org
    2.asia.pool.ntp.org
    3.asia.pool.ntp.org

免秘钥
ls /root/.ssh/

  1. ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
  2. ssh-copy-id 主机名
	
	1.vim hbase-site.xml
		<configuration>
			  <property>
			    <name>hbase.rootdir</name>
			    <!-- hacluster为之前搭建的HDFS HA ,路径不存在,或为空 -->
			    <value>hdfs://hacluster/var/hbase</value>
			  </property>
			  <property>
			    <name>hbase.cluster.distributed</name>
			    <value>true</value>
			  </property>
			 <property>
			    <name>hbase.zookeeper.quorum</name>
			    <!-- zk 集群 -->
			    <value>node1,node2,node3</value>
			  </property>
		</configuration>

	2. vim hbase-env.sh
		export JAVA_HOME=/usr/local/software/java
		<!-- 不实用默认的zk -->
		export HBASE_MANAGES_ZK=false
		
	3. vim regionservers
		node2
		node3
		node4
		
	4. vim backup-masters
		node4
	5. vim hbase-env.sh
		/pid
		export HBASE_PID_DIR=/var/hadoop/pids
		
	6. 将hdfs-site.xml cp 到 /conf 目录下
	
	7. 分发配置文件到其他节点
	 
	8. 启动集群(确认Hadoop,Zk集群已经启动)
		start-hbase.sh
	

在这里插入图片描述

问题汇总

创建失败时

  1. 删除hdfs持久化数据
    hdfs dfs -rm /var/
  2. 删除zk持久化数据
    zkClient
    ls /
    rmr /hbase
  3. quit

hbase停止集群时,报错如下:

stopping hbasecat: /tmp/hbase-root-master.pid: No such file or directory
造成上述错误的原因是,默认情况下hbase的pid文件保存在/tmp目录下,/tmp目录下的文件很容易丢失,所以造成停止集群的时候出现上述错误。解决方式是在hbase-env.sh中修改pid文件的存放路径,配置项如下所示:
The directory where pid files are stored. /tmp by default.
export HBASE_PID_DIR=/var/hadoop/pids

Can’t get master address from ZooKeeper; znode data == null

猜你喜欢

转载自blog.csdn.net/yswhfd/article/details/84942088