共计 4973 个字符,预计需要花费 13 分钟才能阅读完成。
一、在介绍完全分布式之前先给初学者推荐本书:
《Hbase 权威指南》偏理论 PDF 下载见 http://www.linuxidc.com/Linux/2014-11/109762.htm
二、在安装完全分布式之前应该对他们的概念有个简单的认知:
1、Hadoop 擅长存储任意的、半结构化的,甚至是结构化的数据,几乎是现在所有数据库的一种补充。
2、Hbase 是 hadoop 数据库,hbase 并不是一个列式存储数据库,他是利用的磁盘上的列存储格式。
3、列存储数据库是以“列”为单位的聚合数据库,然后按顺序地存入磁盘。
4、RDBMS 与列存储数据库地区别:
rdbms 适合有限、有规则(范式、科德十二定律)地数据,适合实时存取数据地场景
hbase 适合键值对地数据存取或者有序地数据存取
5、hbase 数据库最基本地单位是“列”
6、一列或者多列形成一行,并且由唯一的“行键”来存储(行键就相当于 rdbms 中的主键索引是一样的性质)
7、一个表可以有若干行,其中每列可能有多个版本,每个单元格存储了不同地值
8、若干列构成了一个“列族”
9、一个列族地所有列存储在同一个底层地存储文件里,这个存储文件叫做 Hfile。
10、“列族”需在创建表的时候就定义好,且数量不要太多,修改也不要太频繁,一般只建议 1~2 个,最好只用一个
11、与列族相反,列地数量没有限制,列值得类型和长度也没有限制。
12、每一列得值和单元格得值都具有时间戳,默认由系统指定,也可以是用户自己指定。
13、一个单元格得数据默认是按“降序”排列的,访问时有限读取最新的数据。
14、hbase 数据存储模式:
test<rowkey,list<tests<column,list<value,timestamp>>>>
test 表示一个表,rowkey 是行键,包含一个列族 list(第一个 list),列族种包含了 tests 存储列和对应的值,这些值存储在最后一个 list 种,并对应有时间戳
15、Hbase 是一个分布式的、持久性的、强一致性的存储系统。
三、hbase 分布式环境搭建:
1、并不是所有的 Hbase 运行模式都需要分布式,如果只是想在本地测试,只需要安装 Java 即可。
2、完全分布式搭建:
(1)、环境
系统:CentOS6.8
hadoop 版本:2.7.5
zookeeper 版本:3.4.11
hbase 版本:1.4.0
(2)、下载 hbase 安装包:
下载地址:http://apache.spinellicreations.com/hbase/
hbase 需要跟 Hadoop 版本对应
(3)、将下好的 hbase 安装包上传至服务器然后解压至合适的目录中,我们使用的是 Hbase 的版本是:hbase-1.4.0-bin.tar.gz
tar -zxvf hbase-1.2.1-bin.tar.gz -C /root/apps/
(4)、解压之后可以看到项目目录里面包含哪些文件:
ll 命令或者 ls -lr 可查看:
(5)、a. 说明文档以及许可条款在 LICENSE.txt 和 NOTICE.txt 文件中。
b. 其他一些生成信息在 README.txt 中。
c.CHANGES.txt 是变更日志的静态快照页面,它包含了当前下载版本中多有的变更记录。
d.Bin 是一个二进制文件,此目录包含了 hbase 提供的所有脚本,可以完成启动和停止,运行独立的守护进程或启动额外的 master 节点等功能。
e.Conf 目录包含了定义 hbase 配置的文件。
f.Docs 目录包含了 hbase 工程网页的副本,以及工具、API 和项目自身的文档信息。
g.hbase-webapps 这个目录包含了 java 实现的 web 接口。
h.Lib 目录包含了 java 应用程序的很多类库,这些类库包含了很多实际的执行程序。
i.Logs 目录首次启动的时候不存在,但是 Hbase 会通过日志框架自动创建日志文件夹。hbase 进程通常以守护进程的形式运行,即在操作系统的后台运行,在生命周期内他会将一些状态、进程、异常等信息打印到日志文件中。
j.Src 文件是一些源文件及其包含的发布信息。
(6)、Hbase 运行模式分为两种:单机模式和分布式模式
(7)、分布模式又分为伪分布模式和完全分布模式,这里我们介绍的是完全分布模式。
四、hbase 完全分布式搭建:
1、假设我们的 Linux 环境都已经准备好,搭建了 4 台 Hadoop+hdfs,名称分别是 Sparknode1,Sparknode2,Sparknode3,Sparknode4。搭建了三台 zookeeper 集群,名称分别是 zookeeper1,zookeeper2,zookeeper3。这里我没有使用 hbase 自带的 zookeeper 集群,而是自己搭建了另外一套 zookeeper 集群。
2、在安装 hbase 集群之前必须保证 HDFS 集群和 zookeeper 集群已经启动,因为 hbase 是依赖于 hdfs 和 zookeeper 的,二者缺一不可。
3、启动 zookeeper 的命令:
bin/zkServer.sh start
HDFS 的启动命令:
sbin/start-dfs.sh
4、将 hbase 安装包解压至指定的文件夹后,需要修改配置文件 hbase-env.sh,修改如下:
// 修改 JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.8.0_101/
//Hbase 使用的是自己另外搭建的 zookeeper 集群,没有使用自带的 zookeeper 集群,所以需要把 HBASE_MANAGES_ZK 属性值设置成 false,默认是 ture
export HBASE_MANAGES_ZK=false
// 修改 Hbase 堆设置,默认大小是 1G,将其设置成 4G
export HBASE_HEAPSIZE=4G
5、修改配置文件 hbase-site.xml,修改如下:
<configuration>
<property>
<name>hbase.rootdir</name> /*region 服务器的共享目录,用来持久存储 hbase 数据,HDFS 实例 */
<value>hdfs://master:9000/hbase</value> /*HDFS 主节点 (namenode) 的访问位置 */
</property>
<property>
<name>hbase.cluster.distributed</name> /*hbase 集群运行模式 */
<value>true</value> /*false 为单机模式,ture 为分布式模式 */
</property>
<property>
<name>hbase.zookeeper.quorum</name> /*zookeeper quorum 服务器中的服务器列表 */
<value>zookeeper1:2181,zookeeper2:2181,zookeeper3:2181</value> /* 每个服务器之间使用使用逗号分隔,2181 是 zookeeper 默认端口号,你可以自行根据你的端口号添加,默认的端口号加不加都无所谓 */
</property>
<property>
<name>hbase.master.info.port</name> /*Hbase master 的 web UI 服务端口 */
<value>60010</value> /* 如果不想启动 UI 实例,则将参数设置成 -1,默认值是 60010*/
</property>
</configuration>
6、修改配置文件 regionservers,修改如下:
配置 region 服务器,该文件列出了所有运行 hregionserver 守护进程的主机,每个主机独立占一行,Hbase 集群启动和关闭都会按照文件中罗列的主机一一执行。
Sparknode1
Sparknode2
Sparknode3
Sparknode4
7、将 HBASE 加入环境变量:
export HBASE_HOME=/usr/soft/hbase-1.4.0
8、将 Hadoop 的配置文件拷到 hbase 下:
将 hadoop 的 /opt/hadoop-2.7.5/etc/hadoop/ 目录下面的 hdfs-site.xml 和 core-site.xml 这两个配置文件拷贝到 HBase 的 /usr/soft/hbase-1.4.0/conf/ 目录下:
这里我没有用拷贝的方式,而是用了软链接(快捷方式),目的是为了防止 Hadoop 目录下的配置文件更改了之后还要去 /usr/soft/hbase-1.4.0/conf/ 目录下更新:
ln -s /opt/hadoop-2.7.5/etc/hadoop/ /usr/soft/hbase-1.4.0/conf/
用法:ln -s 源文件 (夹) 目标文件(夹)
9、 将配置后的 hbase 目录拷贝到其他节点
在 Sparknode1(主节点)上分别执行如下命令,将 Sparknode2 上的 hbase-1.4.0 目录分别拷贝到 Sparknode2、Sparknode3 和 Sparknode4 的相同目录下:
scp -r hbase-1.4.0/ Sparknode2:$PWD
scp -r hbase-1.4.0/ Sparknode3:$PWD
scp -r hbase-1.4.0/ Sparknode4:$PWD
10、同步时间
我们在使用 HDFS 的时候经常会出现一些莫名奇妙的问题,通常可能是由于多台服务器的时间不同步造成的。因为它要经常去分析一些时间戳、版本或者超时时间等,如果多台服务器的时间差的太远,可能会导致一些误判。
有两种方式来同步多台服务器的时间:
(1)在每台服务器上开启时间同步的进程,通过网络时间服务器进行同步;
(2)如果你的电脑不能联网,可以将多台服务器的时间手动改成一致的;
我们下面使用第二种方式来设置,使用“date –s”命令来同步时间:
11、启动 hbase 集群
在启动 Hbase 集群之前,确保 hdfs 集群和 zookeeper 集群都已经启动成功。
bin/start-hbase.sh
状态如下:
12、利用 jps 命令查看运行进程
jps
红框里面的是主节点上的两个 hbase 的两个进程,其他 datanode 上只有 hregionserver 进程
13、停止 hbase 集群
bin/stop-hbase.sh
状态如下:
Hadoop 项目之基于 CentOS7 的 Cloudera 5.10.1(CDH)的安装部署 http://www.linuxidc.com/Linux/2017-04/143095.htm
Hadoop2.7.2 集群搭建详解(高可用)http://www.linuxidc.com/Linux/2017-03/142052.htm
使用 Ambari 来部署 Hadoop 集群(搭建内网 HDP 源)http://www.linuxidc.com/Linux/2017-03/142136.htm
Ubuntu 14.04 下 Hadoop 集群安装 http://www.linuxidc.com/Linux/2017-02/140783.htm
CentOS 6.7 安装 Hadoop 2.7.2 http://www.linuxidc.com/Linux/2017-08/146232.htm
Ubuntu 16.04 上构建分布式 Hadoop-2.7.3 集群 http://www.linuxidc.com/Linux/2017-07/145503.htm
CentOS 7.3 下 Hadoop2.8 分布式集群安装与测试 http://www.linuxidc.com/Linux/2017-09/146864.htm
CentOS 7 下 Hadoop 2.6.4 分布式集群环境搭建 http://www.linuxidc.com/Linux/2017-06/144932.htm
Hadoop2.7.3+Spark2.1.0 完全分布式集群搭建过程 http://www.linuxidc.com/Linux/2017-06/144926.htm
更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13
本文永久更新链接地址:http://www.linuxidc.com/Linux/2018-01/150631.htm