作者:微信小助手
发布时间:2019-04-11T16:11:47
1. 认识 Hadoop 和 Hbase
Hadoop 是一个使用 Java 编写的 Apache 开放源代码框架,它允许使用简单的编程模型跨大型计算机的大型数据集进行分布式处理。Hadoop 框架工作的应用程序可以在跨计算机群集提供分布式存储和计算的环境中工作。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)阶段1
用户/应用程序可以通过指定以下项目向 Hadoop(Hadoop 作业客户端)提交所需的进程:
分布式文件系统中输入和输出文件的位置。
Java类以 JAR 文件的形式包含了 Map 和 Reduce 功能的实现。
通过设置作业特定的不同参数来进行作业配置。
(2)阶段2
然后,Hadoop 作业客户端将作业(JAR/可执行文件等)和配置提交给 JobTracker,JobTracker 负责将软件/配置分发到从站,调度任务和监视它们,向作业客户端提供状态和诊断信息。
(3)阶段3
不同节点上的 TaskTrackers 根据 MapReduce 实现执行任务,并将 reduce 函数的输出存储到文件系统的输出文件中。
Hadoop 框架允许用户快速编写和测试分布式系统。它是高效的,它自动分配数据并在机器上工作,反过来利用 CPU 核心的底层并行性。
Hadoop 不依赖硬件提供容错和高可用性(FTHA),而是 Hadoop 库本身被设计为检测和处理应用层的故障。
服务器可以动态添加或从集群中删除,Hadoop 继续运行而不会中断。
Hadoop 的另一大优点是,除了是开放源码,它是所有平台兼容的,因为它是基于 Java 的。
Hbase 全称为 Hadoop Database,即 Hbase 是 Hadoop 的数据库,是一个分布式的存储系统。Hbase 利用 Hadoop 的 HDFS 作为其文件存储系统,利用 Hadoop 的 MapReduce 来处理 Hbase 中的海量数据。利用 ZooKeeper 作为其协调工具。
Client
包含访问 HBase 的接口并维护 Cache 来加快对 HBase 的访问
ZooKeeper
保证任何时候,集群中只有一个 Master
存贮所有 Region 的寻址入口。
实时监控 Region Server 的上线和下线信息。并实时通知 Master
存储 HBase 的 Schema 和 table 元数据
Master
为 Region Server 分配 region
负责 Region Server 的负载均衡
发现失效的 Region Server 并重新分配其上的 region
管理用户对 table 的增删改操作
RegionServer
Region Server 维护 region,处理对这些 region 的 IO 请求
Region Server 负责切分在运行过程中变得过大的 region
HLog(WAL log)
HLog 文件就是一个普通的 Hadoop Sequence File,Sequence File 的 Key 是 HLogKey 对象,HLogKey 中记录了写入数据的归属信息,除了 table 和 region 名字外,同时还包括 Sequence Number 和 Timestamp,Timestamp 是” 写入时间”,Sequence Number 的起始值为 0,或者是最近一次存入文件系统中 Sequence Number。
HLog SequeceFile 的 Value 是 HBase 的 KeyValue 对象,即对应 HFile 中的 KeyValue
Region
HBase 自动把表水平划分成多个区域(Rregion),每个 Region 会保存一个表里面某段连续的数据;每个表一开始只有一个 Region,随着数据不断插 入表,region 不断增大,当增大到一个阀值的时候,Region 就会等分会 两个新的 Region(裂变);
当 table 中的行不断增多,就会有越来越多的 Region。这样一张完整的表被保存在多个 Regionserver 上。
Memstore 与 StoreFile
一个 Region 由多个 Store 组成,一个 Store 对应一个 CF(列族)
store 包括位于内存中的 Memstore 和位于磁盘的 StoreFile 写操作先写入 Memstore,当 MemStore 中的数据达到某个阈值,HRegionServer 会启动 FlashCache 进程写入 StoreFile,每次写入形成单独的一个 StoreFile
当 StoreFile 文件的数量增长到一定阈值后,系统会进行合并(minor、 major compaction),在合并过程中会进行版本合并和删除工作 ,形成更大的 StoreFile。
当一个 Region 所有 StoreFile 的大小和超过一定阈值后,会把当前的 region 分割为两个,并由 HMaster 分配到相应的 RegionServer 服务器,实现负载均衡。
客户端检索数据,先在 MemStore 找,找不到再找 StoreFile。
HRegion 是 HBase 中分布式存储和负载均衡的最小单元。最小单元就表示不同的 HRegion 可以分布在不同的 HRegion Server上。
HRegion 由一个或者多个 Store 组成,每个 Store 保存一个 Columns Family。
每个 Strore 又由一个 MemStore 和 0 至多个 StoreFile 组成。
本次集群搭建共三台机器,具体说明下:
主机名 | 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 |
注:本集群内所有进程均由 CLSN 用户启动;要在集群所有服务器都进行操作。
(1)生成密钥对,一直回车即可
(2)保证每台服务器各自都有对方的公钥
注:要在集群所有服务器都进行操作
(3)验证无秘钥认证登录
在三台机器上都需要操作
[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
[along@hadoop01 hadoop]$ vim hdfs-site.xml
<configuration>
<!-- 设置namenode的http通讯地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop01:50070</value>
</property>
<!-- 设置secondarynamenode的http通讯地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop02:50090</value>
</property>
<!-- 设置namenode存放的路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/name</value>
</property>
<!-- 设置hdfs副本数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 设置datanode存放的路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/datanode</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
[root@hadoop01 ~]# mkdir /data/hadoop/name -p
[root@hadoop01 ~]# mkdir /data/hadoop/datanode -p
[along@hadoop01 hadoop]$ vim yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<description>The http address of the RM web application.</description>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<description>The address of the applications manager interface in the RM.</description>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<description>The address of the scheduler interface.</description>
<name>yarn.resourcemanager.scheduler.address</name>
<