1. 认识 Hadoop 和 Hbase
1.1 Hadoop 简单介绍
Hadoop 是一个使用 Java 编写的 Apache 开放源代码框架,它允许使用简单的编程模型跨大型计算机的大型数据集进行分布式处理。
Hadoop 框架工作的应用程序可以在跨计算机群集提供分布式存储和计算的环境中工作。
Hadoop 旨在从单一服务器扩展到数千台机器,每台机器都提供本地计算和存储。
1.2 Hadoop 架构
Hadoop 框架包括以下四个模块:
-
Hadoop Common:
这些是其他 Hadoop 模块所需的 Java 库和实用程序。
这些库提供文件系统和操作系统级抽象,并包含启动 Hadoop 所需的必要 Java 文件和脚本。
-
Hadoop YARN:
这是作业调度和集群资源管理的框架。
-
Hadoop 分布式文件系统(HDFS):
提供对应用程序数据的高吞吐量访问的分布式文件系统。
-
Hadoop MapReduce:
这是基于 YARN 的大型数据集并行处理系统。
我们可以使用下图来描述 Hadoop 框架中可用的这四个组件。
自 2012 年以来,术语“Hadoop”通常不仅指向上述基本模块,而且还指向可以安装在 Hadoop 之上或之外的其他软件包,例如 Apache Pig、Apache Hive、Apache HBase、Apache 火花等。
1.3 Hadoop 如何工作?
(1)阶段1
用户/应用程序可以通过指定以下项目向 Hadoop(Hadoop 作业客户端)提交所需的进程:
(2)阶段2
然后,Hadoop 作业客户端将作业(JAR/可执行文件等)和配置提交给 JobTracker,JobTracker 负责将软件/配置分发到从站,调度任务和监视它们,向作业客户端提供状态和诊断信息。
(3)阶段3
不同节点上的 TaskTrackers 根据 MapReduce 实现执行任务,并将 reduce 函数的输出存储到文件系统的输出文件中。
1.4 Hadoop 的优点
1.5 HBase 介绍
Hbase 全称为 Hadoop Database,即 Hbase 是 Hadoop 的数据库,是一个分布式的存储系统。
Hbase 利用 Hadoop 的 HDFS 作为其文件存储系统,利用 Hadoop 的 MapReduce 来处理 Hbase 中的海量数据。
利用 ZooKeeper 作为其协调工具。
1.6 HBase 体系架构
Client
ZooKeeper
Master
RegionServer
HLog(WAL log)
Region
Memstore 与 StoreFile
2. 安装搭建 Hadoop
2.1 配置说明
本次集群搭建共三台机器,具体说明下:
主机名
|
IP
|
说明
|
hadoop01
|
192.168.10.101
|
DataNode、NodeManager、ResourceManager、NameNode
|
hadoop02
|
192.168.10.102
|
DataNode、NodeManager、SecondaryNameNode
|
hadoop03
|
192.168.10.106
|
DataNode、NodeManager
|
2.2 安装前准备
2.2.1 机器配置说明
注:本集群内所有进程均由 CLSN 用户启动;要在集群所有服务器都进行操作。
2.2.2 关闭 SELinux、防火墙
2.2.3 准备用户
2.2.4 修改 Hosts 文件,域名解析
2.2.5 同步时间
2.2.6 SSH 互信配置
(1)生成密钥对,一直回车即可
(2)保证每台服务器各自都有对方的公钥
注:要在集群所有服务器都进行操作
(3)验证无秘钥认证登录
2.3 配置 JDK
在三台机器上都需要操作
2.4 安装 Hadoop
[root@hadoop01 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz
[root@hadoop01 ~]# tar -xvf hadoop-3.2.0.tar.gz -C /usr/local/
[root@hadoop01 ~]# chown along.along -R /usr/local/hadoop-3.2.0/
[root@hadoop01 ~]# ln -s /usr/local/hadoop-3.2.0/ /usr/local/hadoop
3. 配置启动 Hadoop
3.1 hadoop-env.sh 配置 Hadoop 环境变量
3.2 core-site.xml 配置 HDFS
3.3 hdfs-site.xml 配置 NameNode
[along@hadoop01 hadoop]$ vim hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-addressname>
<value>hadoop01:50070value>
property>
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>hadoop02:50090value>
property>
<property>
<name>dfs.namenode.name.dirname>
<value>/data/hadoop/namevalue>
property>
<property>
<name>dfs.replicationname>
<value>2value>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>/data/hadoop/datanodevalue>
property>
<property>
<name>dfs.permissionsname>
<value>falsevalue>
property>
configuration>
[root@hadoop01 ~]# mkdir /data/hadoop/name -p
[root@hadoop01 ~]# mkdir /data/hadoop/datanode -p
3.4 mapred-site.xml 配置框架
3.5 yarn-site.xml 配置 ResourceManager
[along@hadoop01 hadoop]$ vim yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostnamename>
<value>hadoop01value>
property>
<property>
<description>The http address of the RM web application.description>
<name>yarn.resourcemanager.webapp.addressname>
<value>${yarn.resourcemanager.hostname}:8088value>
property>
<property>
<description>The address of the applications manager interface in the RM.description>
<name>yarn.resourcemanager.addressname>
<value>${yarn.resourcemanager.hostname}:8032value>
property>
<property>
<description>The address of the scheduler interface.description>
<name>yarn.resourcemanager.scheduler.addressname>
<value>${yarn.resourcemanager.hostname}:8030value>
property>
<property>
<name>yarn.resourcemanager.resource-tracker.addressname>
<value>${yarn.resourcemanager.hostname}:8031value>
property>
<property>
<description>The address of the RM admin interface.description>
<name>yarn.resourcemanager.admin.addressname>
<value>${yarn.resourcemanager.hostname}:8033value>
property>
configuration>
3.6 配置 Masters & Slaves
3.7 启动前准备
3.7.1 准备启动脚本
启动脚本文件全部位于 /usr/local/hadoop/sbin 文件夹下:
(1)修改 start-dfs.sh stop-dfs.sh 文件添加:
(2)修改 start-yarn.sh 和 stop-yarn.sh 文件添加:
3.7.2 授权
3.7.3 配置 Hadoop 命令环境变量
3.7.4 集群初始化
3.8 启动 Hadoop 集群
3.8.1 第一次启动前需要格式化,集群所有服务器都需要
3.8.2 启动并验证集群
(1)启动 NameNode、DataNode
(2)启动 YARN
3.9 集群启动成功
(1)网页访问:
http:
//hadoop01:
8088
该页面为 ResourceManager 管理界面,在上面可以看到集群中的三台 Active Nodes。
(2)网页访问:
http:
//hadoop01:
50070/dfshealth.html#tab-datanode
该页面为 NameNode 管理页面
到此 Hadoop 集群已经搭建完毕!
!
!
4. 安装配置 Hbase
4.1 安装 Hbase
[root@hadoop01 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/1.4.9/hbase-1.4.9-bin.tar.gz
[root@hadoop01 ~]# tar -xvf hbase-1.4.9-bin.tar.gz -C /usr/local/
[root@hadoop01 ~]# chown -R along.along /usr/local/hbase-1.4.9/
[root@hadoop01 ~]# ln -s /usr/local/hbase-1.4.9/ /usr/local/hbase
注:当前时间 2018.03.08,Hbase-2.1 版本有问题;也可能是我配置的问题,Hbase 会启动失败;所以,我降级到了 Hbase-1.4.9 版本。
4.2 配置 Hbase
4.2.1 hbase-env.sh 配置 Hbase 环境变量
4.2.2 hbase-site.xml 配置 Hbase
[root@hadoop01 conf]# vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdirname>
<value>hdfs://hadoop01:9000/hbase/hbase_dbvalue>
property>
<property>
<name>hbase.cluster.distributedname>
<value>truevalue>
property>
<property>
<name>hbase.zookeeper.quorumname>
<value>hadoop01,hadoop02,hadoop03value>
property>
<property>
<name>hbase.zookeeper.property.dataDirname>
<value>/data/hbase/zookeepervalue>
property>
<property>
<name>hbase.mastername>
<value>hadoop01value>
property>
<property>
<name>hbase.master.info.portname>
<value>16666value>
property>
configuration>
注:Z
ooKeeper 有这样一个特性:
-
集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。
-
也就是说如果有 2 个
Z
oo
K
eeper,那么只要有 1 个死了 Z
oo
K
eeper 就不能用了,因为
1
没有过半,所以 2 个
Z
ooK
eeper 的死亡容忍度为
0;
-
同理,要是有 3 个
Z
oo
K
eeper
,一个死了,还剩下 2 个正常的,过半了,所以 3 个
Z
oo
K
eeper
的容忍度为 1;
-
再多列举几个:
2->0 ; 3->1 ; 4->1 ; 5->2 ; 6->2 会发现一个规律,2n 和 2n-1 的容忍度是一样的,都是 n-1,所以为了更加高效,何必增加那一个不必要的
Z
oo
K
eeper。
4.2.3 指定集群节点
5. 启动 Hbase 集群
5.1 配置 Hbase 命令环境变量
5.2 启动前准备
5.3 启动 Hbase
注:
只需在 Hadoop01 服务器上操作即可。
(1)启动
(2)验证
5.4 页面查看 Hbase 状态
网页访问
http:
//hadoop01:
16666
6. 简单操作 Hbase
6.1 Hbase Shell 基本操作命令
名称
|
命令表达式
|
创建表
|
create '表名称','列簇名称1','列簇名称2'.......
|
添加记录
|
put '表名称', '行名称','列簇名称:
','值'
|
查看记录
|
get '表名称','行名称'
|
查看表中的记录总数
|
count '表名称'
|
删除记录
|
delete '表名',行名称','列簇名称'
|
删除表
|
①disable '表名称' ②drop '表名称'
|
查看所有记录
|
scan '表名称'
|
查看某个表某个列中所有数据
|
scan '表名称',['列簇名称:
']
|
更新记录
|
即重写一遍进行覆盖
|
6.2 一般操作
(1)启动 Hbase 客户端
[along@hadoop01 ~]$ hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hbase-1.4.9/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop-3.2.0/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 1.4.9, rd625b212e46d01cb17db9ac2e9e927fdb201afa1, Wed Dec 5 11:54:10 PST 2018
hbase(main):001:0>
(2)查询集群状态
(3)查询 Hive 版本
6.3 DDL 操作
(1)创建一个 demo 表,包含 ID 和 info 两个列簇
(2)获得表的描述
hbase(main):002:0> list
TABLE
demo
1 row(s) in 0.6380 seconds
=> ["demo"]
---获取详细描述
hbase(main):003:0> describe 'demo'
Table demo is ENABLED
demo
COLUMN FAMILIES DESCRIPTION
{NAME => 'id', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS =>
'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '
0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS =
> 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS =>
'0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
2 row(s) in 0.3500 seconds
(3)删除一个列簇
注:
任何删除操作,都需要先 disable 表
hbase(main):004:0> disable 'demo'
0 row(s) in 2.5930 seconds
hbase(main):006:0> alter 'demo',{NAME=>'info',METHOD=>'delete'}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 4.3410 seconds
hbase(main):007:0