HBase介绍、搭建、环境、安装部署

本文介绍了HBase的特性与架构,详细讲述了如何在CentOS环境下搭建Hadoop与HBase环境,包括配置步骤与验证方法。

hadoop培训课程:HBase介绍、搭建、环境、安装部署

1、搭建环境

部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用于存放Hadoop等组件运行包。因为该目录用于安装hadoop等组件程序,用户对shiyanlou必须赋予rwx权限(一般做法是root用户在根目录下创建/app目录,并修改该目录拥有者为shiyanlou(chown –R shiyanlou:shiyanlou /app)。

Hadoop搭建环境:

l 虚拟机操作系统: CentOS6.6 64位,单核,1G内存

l JDK:1.7.0_55 64位

l Hadoop:1.1.2

2、HBase介绍

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应来源:北京oracle培训

上图描述了Hadoop EcoSystem中的各层系统,其中HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。

此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。

2.1 HBase访问接口

1. Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据

2. HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用

3. Thrift Gateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据

4. REST Gateway,支持REST 风格的Http API访问HBase, 解除了语言限制

5. Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计

6. Hive,当前Hive的Release版本尚没有加入对HBase的支持,但在下一个版本Hive 0.7.0中将会支持HBase,可以使用类似SQL语言来访问HBase

2.2 HBase数据模型

2.2.1 Table & Column Family

l Row Key: 行键,Table的主键,Table中的记录按照Row Key排序

l Timestamp: 时间戳,每次数据操作对应的时间戳,可以看作是数据的version number

l Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。

2.2.2 Table & Region

当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由[startkey,endkey)表示,不同的region会被Master分配给相应的RegionServer进行管理:

-ROOT- && .META. Table

HBase中有两张特殊的Table,-ROOT-和.META.

l .META.:记录了用户表的Region信息,.META.可以有多个regoin

l -ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region

l Zookeeper中记录了-ROOT-表的location

Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过client端会做cache缓存。

2.2.3 MapReduce on HBase

在HBase系统上运行批处理运算,最方便和实用的模型依然是MapReduce,如下图:

HBase Table和Region的关系,比较类似HDFS File和Block的关系,HBase提供了配套的TableInputFormat和TableOutputFormat API,可以方便的将HBase Table作为Hadoop MapReduce的Source和Sink,对于MapReduce Job应用开发人员来说,基本不需要关注HBase系统自身的细节。

2.3 HBase系统架构

2.3.1 Client

HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC

2.3.2 Zookeeper

Zookeeper Quorum中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会把自己以Ephemeral方式注册到 Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态。此外,Zookeeper也避免了HMaster的 单点问题,见下文描述

2.3.3 HMaster

HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作:

1. 管理用户对Table的增、删、改、查操作

2. 管理HRegionServer的负载均衡,调整Region分布

3. 在Region Split后,负责新Region的分配

4. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移

2.3.4 HRegionServer

HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。

HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个 Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个Column Family中,这样最高效。

HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles。 MemStore是Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile), 当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进 行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要 进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前 Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer 上,使得原先1个Region的压力得以分流到2个Region上。下图描述了Compaction和Split的过程:

在理解了上述HStore的基本原理后,还必须了解一下HLog的功能,因为上述的HStore在系统正常工作的前提下是没有问 题的,但是在分布式系统环境中,无法避免系统出错或者宕机,因此一旦HRegionServer意外退出,MemStore中的内存数据将会丢失,这就需要引入HLog了。每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并 删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知 到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。

2.4 HBase存储格式

HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括上述提出的两种文件类型:

1.HFile, HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile

2.HLog File,HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File

2.4.1 HFile

下图是HFile的存储格式:

首先HFile文件是不定长的,长度固定的只有其中的两块:Trailer和FileInfo。正如图中所示的,Trailer 中有指针指向其他数据块的起始点。File Info中记录了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。Data Index和Meta Index块记录了每个Data块和Meta块的起始点。

Data Block是HBase I/O的基本单元,为了提高效率,HRegionServer中有基于LRU的Block Cache机制。每个Data块的大小可以在创建一个Table的时候通过参数指定,大号的Block有利于顺序Scan,小号Block利于随机查询。 每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成, Magic内容就是一些随机数字,目的是防止数据损坏。后面会详细介绍每个KeyValue对的内部构造。

HFile里面的每个KeyValue对就是一个简单的byte数组。但是这个byte数组里面包含了很多项,并且有固定的结构。我们来看看里面的具体结构:

开始是两个固定长度的数值,分别表示Key的长度和Value的长度。紧接着是Key,开始是固定长度的数值,表示RowKey 的长度,紧接着是RowKey,然后是固定长度的数值,表示Family的长度,然后是Family,接着是Qualifier,然后是两个固定长度的数 值,表示Time Stamp和Key Type(Put/Delete)。Value部分没有这么复杂的结构,就是纯粹的二进制数据了。

2.4.2 HLogFile

上图中示意了HLog文件的结构,其实HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括 sequence number和timestamp,timestamp是“写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。

HLog Sequece File的Value是HBase的KeyValue对象,即对应HFile中的KeyValue,可参见上文描述。

3、安装部署HBase

3.1 安装过程

3.1.1 下载HBase安装包

从Apache网站上(hbase.apache.org)下载HBase稳定发布包:

http://mirrors.cnnic.cn/apache/hbase/hbase-0.96.2/

也可以在/home/shiyanlou/install-pack目录中找到该安装包,解压该安装包并把该安装包复制到/app目录中

cd /home/shiyanlou/install-pack

tar -zxf hbase-0.96.2-hadoop1-bin.tar.gz

mv hbase-0.96.2-hadoop1 /app/hbase-0.96.2

3.1.2 设置环境变量

1. 使用sudo vi /etc/profile命令修改系统环境变量

export HBASE_HOME=/app/hbase-0.96.2

export PATH=$PATH:$HBASE_HOME/bin

2. 使环境变量生效并验证环境变量生效

source /etc/profile

hbase version

3.1.3 编辑hbase-env.sh

1. 打开hbase-env.sh文件

cd /app/hbase-0.96.2/conf

sudo vi hbase-env.sh

2. 修改该文件配置

#Java环境

export JAVA_HOME=/app/lib/jdk1.7.0_55

#通过hadoop的配置文件找到hadoop集群

export HBASE_CLASSPATH=/app/hadoop-1.1.2/conf

#使用HBASE自带的zookeeper管理集群

export HBASE_MANAGES_ZK=true

3.1.4 编辑hbase-site.xml

1. 打开hbase-site.xml配置文件

cd /app/hbase-0.96.2/conf

sudo vi hbase-site.xml

2. 配置hbase-site.xml文件

hbase.rootdir

hdfs://hadoop:9000/hbase

hbase.cluster.distributed

true

hbase.zookeeper.quorum

b393a04554e1

3.2 启动并验证

3.2.1 启动HBase

通过如下命令启动Hbase

cd /app/hbase-0.96.2/bin

./start-hbase.sh

3.2.2 验证启动

1. 在hadoop节点使用jps查看节点状态

2. 进入hbase的shell命令行,创建表member并进行查看

hbase shell

hbase>create 'member', 'm_id', 'address', 'info'

<think>我们正在处理用户关于HBase环境搭建的查询。根据提供的引用片段,我们可以整合出关键步骤。 引用[1]提到了: - 使用source /etc/profile生效配置 - 修改hbase-env.sh文件,设置JAVA_HOME、HBASE_PID_DIR和HBASE_MANAGES_ZK 引用[2]提到了: - 在配置文件中设置hbase.rootdir属性,指向HDFS地址(例如hdfs://dn01-centos:8020/hbase) 此外,我们知道HBase环境搭建通常包括以下步骤: 1. 确保Java环境安装并配置(JAVA_HOME) 2. 下载HBase并解压 3. 配置环境变量(如将HBase的bin目录添加到PATH,通常通过/etc/profile或用户profile文件) 4. 修改HBase配置文件: a. hbase-env.sh:设置Java环境变量和其他HBase环境变量 b. hbase-site.xml:配置HBase的核心设置,如HDFS存储路径、ZooKeeper设置等 5. 启动HBase(如果是单机模式,可以直接启动;分布式模式需要更多配置) 由于用户要求的是教程,我们将给出一个基本的搭建步骤(以单机模式为例,因为引用中没有明确集群配置,但根据引用[2]中的hdfs地址,可能是分布式,但用户没有提供完整的分布式配置信息,因此我们以单机为基础,并补充分布式要点)。 注意:用户提供的引用中,有一个路径可能是笔误(/habse/conf应为/hbase/conf),我们将修正。 步骤: 1. 安装Java并配置JAVA_HOME环境变量。 2. 下载HBase并解压到指定目录(例如/opt/hbase)。 3. 配置环境变量:将HBase的bin目录添加到系统的PATH中,可以通过编辑/etc/profile文件,然后执行source /etc/profile生效。 4. 配置hbase-env.sh:设置JAVA_HOME(必须),以及可选的如HBASE_PID_DIR(HBase进程ID存储目录)和HBASE_MANAGES_ZK(是否使用HBase自带的ZooKeeper,分布式环境中通常设为false,使用外部ZooKeeper)。 5. 配置hbase-site.xml:设置HBase的存储目录(hbase.rootdir)。在单机模式下,可以设置为本地文件系统路径(如file:///home/hbase/hbase-data),但通常生产环境使用HDFS。引用[2]中给出了一个HDFS的地址,所以如果是在HDFS上存储,则设置为hdfs://namenode:port/hbase(如hdfs://dn01-centos:8020/hbase)。 6. 启动HBase:使用命令`start-hbase.sh`启动,然后可以通过`hbase shell`进入命令行。 对于分布式环境,还需要配置: - regionservers文件:列出所有RegionServer的主机名 - 在hbase-site.xml中配置hbase.cluster.distributed为true - 配置ZooKeeper(如果HBASE_MANAGES_ZK=false,则需要独立的ZooKeeper集群) 我们根据这些信息给出一个教程框架,并注意: - 由于引用中给出的是HDFS地址,我们推测用户可能需要分布式配置,但具体配置项需要用户根据自身环境调整。 - 教程中要提醒用户替换成自己的路径、主机名和端口。 注意:引用标识要自然添加。 </think>### HBase环境搭建教程 以下是基于标准实践的HBase环境搭建流程(整合引用内容): #### 一、基础环境准备 1. **安装JDK** - 配置`JAVA_HOME`环境变量(版本需与HBase兼容): ```bash export JAVA_HOME=/opt/jdk-17.0.8 # 替换为实际JDK路径 source /etc/profile # 生效配置[^1] ``` 2. **安装Hadoop(若需分布式模式)** - HBase依赖HDFS存储数据,需提前部署Hadoop集群(此步骤略,参考Hadoop文档)。 #### 二、HBase安装与配置 1. **下载解压** ```bash tar -zxvf hbase-2.x.x-bin.tar.gz -C /opt # 解压到/opt目录 mv /opt/hbase-2.x.x /opt/hbase # 重命名 ``` 2. **配置环境变量** 编辑`/etc/profile`,末尾添加: ```bash export HBASE_HOME=/opt/hbase export PATH=$PATH:$HBASE_HOME/bin ``` 3. **修改`hbase-env.sh`** ```bash cd /opt/hbase/conf vim hbase-env.sh ``` 添加以下配置: ```bash export JAVA_HOME=/opt/jdk-17.0.8 # JDK路径 export HBASE_PID_DIR=/opt/hbase/pids # PID存储目录[^1] export HBASE_MANAGES_ZK=false # 禁用内置ZooKeeper(生产建议)[^1] ``` 4. **配置`hbase-site.xml`** ```bash vim hbase-site.xml ``` 添加核心参数(**分布式模式示例**): ```xml <configuration> <!-- HDFS存储路径 --> <property> <name>hbase.rootdir</name> <value>hdfs://dn01-centos:8020/hbase</value> # 替换为NameNode地址[^2] </property> <!-- 集群模式 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- ZooKeeper集群地址 --> <property> <name>hbase.zookeeper.quorum</name> <value>zk1,zk2,zk3</value> </property> </configuration> ``` #### 三、启动与验证 1. **启动HBase** ```bash start-hbase.sh # 启动服务 jps # 检查进程(应有HMaster/HRegionServer) ``` 2. **连接Shell** ```bash hbase shell # 进入交互命令行 > list # 查看表列表(正常显示即成功) ``` > **关键注意事项** > - **单机模式**:若无需HDFS,可将`hbase.rootdir`设为本地路径(如`file:///data/hbase`) > - **防火墙**:确保2181(ZK)、16000(Master)、16020(RegionServer)端口开放 > - **权限问题**:HBase用户需有HDFS目录读写权限(`hdfs dfs -chown -R hbase: /hbase`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值