第3章 HBase完全分布式集群搭建
主要内容:
- HBase简介
- Hadoop、HBase和Hive三者关系
- 启动Hadoop集群
- ZooKeeper集群的部署
- HBase集群的部署
3.-1 HBase简介
数据模型概述:
1) HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳
2) 每个值是一个未经解释的字符串,没有数据类型
3) 用户在表中存储数据,每一行都有一个可排序的行键和任意多的列
4) 表在水平方向由一个或者多个列族组成,一个列族中可以包含任意多个列,同一个列族里面的数据存储在一起
5) 列族支持动态扩展,可以很轻松地添加一个列族或列,无需预先定义列的数量以及类型,所有列均以字符串形式存储,用户需要自行进行数据类型转换
6) HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留(这是和HDFS只允许追加不允许修改的特性相关的)
数据模型相关概念:
1) 表:HBase采用表来组织数据,表由行和列组成,列划分为若干个列族
2) 行:每个HBase表都由若干行组成,每个行由行键(row key)来标识。
3) 列族:一个HBase表被分组成许多“列族”(Column Family)的集合,它是基本的访问控制单元
4) 列限定符:列族里的数据通过列限定符(或列)来定位
5) 单元格:在HBase表中,通过行、列族和列限定符确定一个“单元格”(cell),单元格中存储的数据没有数据类型,总被视为字节数组byte[]
6) 时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引
数据坐标:
HBase中需要根据行键、列族、列限定符和时间戳来确定一个单元格,因此,可以视为一个“四维坐标”,即[行键, 列族, 列限定符, 时间戳]
键 |
值 |
[“201505003”, “Info”, “email”, 1174184619081] |
“xie@qq.com” |
[“201505003”, “Info”, “email”, 1174184620720] |
“you@163.com” |
3.0 Hadoop、HBase和Hive三者关系
(1)Hadoop包含两大模块HDFS和MapReduce
HDFS:The Hadoop Distribute File System 分布式文件系统
MapReduce:分布式离线数据计算
(2)HDFS提供了高可靠性的底层存储支持,HDFS是面向批量访问模式,不是随机访问模式
(3)HBase是Hadoop database,是一种NoSQL数据库,依赖于Hadoop的HDFS模块,是基于HDFS实现对分布式数据文件的管理,其目的是在集群上托管一个非常大的半结构化table。
HDFS:面向批量访问模式,不是随机访问模式,
HBase:提供表状的面向列的数据存储,针对表状数据进行随机读写。
(4)Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载。提供SQL语句能让用户更容易地做特定查询,汇总和数据分析,不支持更改数据的操作。
其使用类SQL语言,底层经过编译转为MapReduce程序,在Hadoop上运行, 然后进行数据的查询和分析。
为什么说Hive是基于Hadoop的呢?
l Hive处理的数据实际存放在HDFS中;
l Hive分析数据的底层实现还是MapReduce程序;
l Hive调度资源时,用的是Yarn框架;
3.1 启动Hadoop并通过JPS验证
#start-all.sh
3.2 安装并启动 ZooKeeper
1)在apache官网下载zookeeper安装包,进行解压安装
拷贝安装包到/usr/local目录下
2)进入/usr/local目录下解压ZooKeeper安装包
#cd /usr/local #tar zxvf zookeeper-3.4.9.tar.gz
修改文件名,方便后续操作:
#mv zookeeper-3.4.9 zookeeper
3)配置环境变量
在/etc/profile文件中配置zookeeper
#vi /etc/profile
在配置文件中添加如下内容:
export ZK_HOME=/usr/local/zookeeper
export PATH=$ZK_HOME/bin:$PATH
退出保存执行source命令使环境变量生效:
#source /etc/profile
4)在zookeeper安装目录的conf目录下修改配置文件
创建zoo.cfg文件,并修改配置
#cp zoo_sample.cfg zoo.cfg
编辑该文件,配置以下内容
#vim zoo.cfg
修改 :
dataDir=/usr/local/zookeeper/data
新增:
server.1=01node:2888:3888 server.2=02node:2888:3888 server.3=03node:2888:3888
在zookeeper目录下创建文件夹data:
#mkdir data
在data目录下创建文件myid,值为1
#touch myid #vi myid
5)把zookeeper目录复制到另外两个节点02node,03node上。
#scp -r zookeeper/ 02node:/usr/local #scp /etc/profile 02node:/etc/ #scp -r zookeeper/ 03node:/usr/local #scp /etc/profile 03node:/etc/
6)登录02node和03node,把02node和03node节点上的myid分别改为2和3,
#vim /usr/local/zookeeper/data/myid //
修改内容为2
#source /etc/profile
#vim /usr/local/zookeeper/data/myid //
修改内容为3
#source /etc/profile
注:这个id是zookeeper的主机标示,每个主机id不同,第二台是2 第三台是3。
7) zookeeper集群启动和检验
进入zookeeper安装目录bin:
#cd /usr/local/zookeeper/bin/
• 启动,在三个节点上分别执行命令zkServer.sh start
或者直接启动:
#/usr/local/zookeeper/bin/zkServer.sh start
• 检验,在三个节点上分别执行命令zkServer.sh status
此时使用jps命令可以看见如下情况:
• 关闭, 在三个节点上分别执行命令zkServer.sh stop
3.3 安装HBase
3.3.1 在apache官网下载HBase安装包
下载地址:https://downloads.apache.org/
安装包拷贝到/usr/local目录下:
hbase-1.4.13-bin.tar.gz
3.3.2 在/usr/local目录下解压HBase安装包
#cd /usr/local #tar zxvf hbase-1.4.13-bin.tar.gz
#mv hbase-1.4.13 hbase //换为短名
3.3.3 配置环境变量
• 在/etc/profile文件中配置HBase
export HBASE_HOME=/usr/local/hbase
export PATH=$HBASE_HOME/bin:$PATH
3.3.4 在conf目录下修改配置文件
• 修改hbase-env.sh
export JAVA_HOME=本机jdk的安装路径 #配置jdk安装路径,如:
export JAVA_HOME=/usr/local/jdk
export HBase_MANAGES_ZK=false #配置不使用HBase自带的zk
export HBASE_LOG_DIR=${HBASE_HOME}/logs
• 修改hbase-site.xml
<configuration> <property> <name>hbase.tmp.dir</name> <value>/usr/local/hbase/tmp</value> </property> <!-- 设置HRegionServers共享目录。定义hbase.rootdir参数时HDFS文件系统的主机名和端口号必须与Hadoop的配置文件core-site.xml中fs.default.name参数的配置一致--> <property> <name>hbase.rootdir</name> <value>hdfs://01node:9000/hbase</value> <description>Hbase data director</description> </property> <!-- 开启分布式模式 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 设置HMaster的rpc端口, 由于采用的是HA模式,这里只写端口就可以了,不需要再写主机名--> <property> <name>hbase.master.port</name> <value>60000</value> </property> <!-- 对比参考 <property> <name>hbase.master</name> <value>hdfs://master:60000</value> </property> --> <!-- 设置HMaster的http web console端口 --> <property> <name>hbase.master.info.port</name> <value>16010</value> </property> <!--zookeeper设置,依赖zookeeper集群设置--> <!--zookeeper集群信息设置--> <property> <name>hbase.zookeeper.quorum</name> <value>01node,02node,03node</value> </property> <!--zookeeper端口--> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <!--请参考zookeeper配置文件zoo.cfg中dataDir的值 --> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/usr/local/zookeeper/data</value> </property> </configuration>
• 在regionservers文件中配置从节点region server的地址
02node
03node
3.3.5 将配置好的HBase目录拷贝到其他节点
scp -r /usr/local/hbase 02node:/usr/local scp -r /usr/local/hbase 03node:/usr/local
同时拷贝环境变量配置文件:
scp /etc/profile root@02node:/etc/profile scp /etc/profile root@03node:/etc/profile
记得刷新配置文件:
source /etc/profile
3.3.6 HBase集群启动和检验
•启动集群:HMaster主节点上执行命令start-hbase.sh启动HBase集群;
• 使用jps命令检查各节点的进程:主节点应该启动HMaster进程,各从节点应启动HRegionServer进程
• 关闭HBase集群: 在主节点上运行stop-hbase.sh 命令。
3.3.7 web-ui访问