一 hadoop 简介

1 Hadoop 整体框架

Hadoop 由HDFS 、MapReduce、HBASE、hive 和zookeeper 等成员组成,其中最 基础最重要的元素是底层用于存储集群中所有存储节点文件的文件系统HDFS 来 执行MapReduce 程序的MapReduce 引擎

1 pig 是一个基于Hadoop 的大规模数据分析平台,pig 为复杂的海量数据并行计 算提供了一个简单的操作和编程接口 2 hive 是基于Hadoop 的一个工具,提供完整的SQL 查询,可以将sql 语句转换 为MapReduce (映射)任务进行执行 3 zookeeper:高效的,可扩展的协调系统,存储和协调关键共享状态 4 HBASE 是一个开源的,基于列存储模型的分布式数据库 5 hdfs 是一个分布式文件系统,具有高容错的特点,适合于那些超大数据集的应 用程序, 6 MapReduce 是一种编程模式,用于大规模数据集的并行计算

2 hadoop 集群部署结构

3 hadoop 核心设计

1 HDFS

是一个高度容错性的分布式文件系统,可以被广泛的部署于廉价的PC 上,他以流式访问模式访问应用程序的数据,这样可以提高系统的数据吞吐量,因而非常适合用于具有超大数据集的应用程序中 HDFS 架构采用主从架构,一个HDFS 集群应该包含一个namenode 节点和多个datanode 节点,name node 负责整个HDFS 文件系统中的文件元数据的保管和管理,集群中通常只有一台机器上运行namenode,datanode 节点保存文件中的数据,集群中的机器分别运行一个datenode 实例,在HDFS 中,namenode 节点称为名称节点,DataNode 称为数据节点,DataNode 通过心跳机制与namenode 节点进行定时通信Namenode 相当于mfs 中的master serverDatanode 相当于mfs 中的chunk server

2 HDFS 的读写方式 写入

文件写入:如上图 1 客户端向nameode (master server ) 发起文件写入请求 2 namenode 根据文件大小和文件块配置情况,返回给客户端DataNode 信息 (chunkserver) 3 client 将文件划分成多个文件块,根据DataNode 的地址信息,按顺序写入每个 DataNode 中

读取 步骤: 1 向namenode 发送读取请求 2 namenode 返回文件位置列表 3 client 根据列表读取文件信息

2 MapReduce

是一种编程模型,用于大规模数据集并行计算,map(映射)和reduce(化简),采用分布方式,(分封制),先把任务分发到集群节点上,并行计算,然后将结果合并,多结点计算,涉及的任务调度,负载均衡,容错,都有MapReduce 完成

用户提交任务给job tracer ,job tracer 把对应的用户程序中的map 个reduce 操作映射到tasktracee 节点中,输入模块负责把输入数据数据分成小数据块,然后把它们传递给map 节点,map 节点得到每一个key/value 对,然后产生一个或多个key/value 对,然后写入文件,reduce 节点获取临时文件中的数据,对带有相同key 的数据进行迭代计算,后将最终结果写入文件

Hadoop 的核心是MapReduce,而MapReduce 的核心又在于map 和reduce 函数。它们是交给用户实现的,这两个函数定义了任务本身。

map 函数:接受一个键值对(key-value pair)(例如上图中的Splitting 结果),产生一组中间键值对(例如上图中Mapping 后的结果)。Map/Reduce 框架会将map 函数产生的中间键值对里键相同的值传递给一个reduce 函数。 reduce 函数:接受一个键,以及相关的一组值(例如上图中Shuffling 后的结果),将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)(例如上图中Reduce 后的结果) 但是,Map/Reduce 并不是万能的,适用于Map/Reduce 计算有先提条件: (1)待处理的数据集可以分解成许多小的数据集; (2)而且每一个小数据集都可以完全并行地进行处理; 若不满足以上两条中的任意一条,则不适合适用Map/Reduce 模式。

二 环境搭建

软件下载位置 链接:https://pan.baidu.com/s/1lBQ0jZC6MGj9zfV-dEiguw 密码:13xi

1 配置hadoop 用户

2 下载并解压相关软件

3 修改环境变量,使得hadoop运行在Java平台之上

4 修改java环境变量,使其可以查看到hadoop进程开启状态

5 查看

二 单节点部署

1 创建文件夹,并将数据导入用于测试单节点,

并使用Hadoop内部方法完成基本配置。其中output是自动创建的,无需手工创建

2 查看其统计结果

三 伪节点部署

1 配置文件系统管理相关

2 配置文件保存的份数

3 配置hadoop密码并设置ssh免密认证

4 配置datanode节点

5 namenode节点格式化

返回值为0,表示格式化成功

6 启动服务并查看进程状态

测试显示结果

7 测试

创建目录上传 查看 上传文件至服务端 查看 使用命令查看结果 删除并查看其显示结果

8 高级配置:mapred配置

9 启动服务并查看

10 查看是否成功

四 分布式配置

1 停止之前的伪节点配置

2 在超级用户下安装服务用以共享存储

3 启动服务

4 配置共享存储

5 刷新看是否成功

6 客户端启动服务并挂载挂载

7 查看配置

8 配置datanode节点

9 配置备份存储数量

10 格式化namenode节点

11 设置免密

12 启动服务并查看

13 datanode节点查看服务

14 查看datanode节点是否存在并正常挂载

五 在线添加节点

1 安装并配置基础环境

2 启动服务并挂载

3 配置datanode节点

4 配置免密认证

5 启动服务并查看其进程

6 查看其是否加入存储系统中

六 节点数据迁移

1 创建数据目录并上传数据

2 查看是否上传成功

3 查看其各个节点存储状态

4 配置下线

配置下线用户为server3

5 生效配置文件

6 查看serever3状态,如果为normal 则表示迁移完成,否则未完成

7 查看其他节点存储,发现存储已经增加,则表明数据迁移完成

8 关闭datanode节点,下线成功

9 开启其他节点的nodemanager服务

七 高可用

简介: 在典型的HA集群中,通常有两台不同的机器充当NN(namenode),在任何时间,只有一台机器处于active状态,另一台机器则处于standby状态,active NN负责集群中所有客户端的操作,而standby NN主要用于备用,主要维持足够的状态,如果有必要,可以提供快速的故障恢复

为了让standby NN状态和 active NN 保持同步,及元数据保持一致,他会都会和journalnodes 守护进程通信,当active NN 执行任何有关命名空间的修改,他都需要持久化到一半以上的journalnodes 上(通过edits log 持久化存储),而standby NN负责观察edits log 的变化,他能够从JNS 中读取edits 信息,并更新其内部的名称空间,一旦active NN 出现故障,standby NN 会将保证从JNS中读取了全部edits,然后切换成active 状态,standby NN读取全部的edits 可确保发生故障转移之前,是和active NN拥有完全同步的命名空间状态

为了提供快速的故障恢复,standby NN也需要保存集群中各个文件块的存储位置,为了实现这个,集群中的所有Datanode 将配置好的active NN和standby NN的位置,并向他们发送快文件所在的位置及心跳。 为了部署HA 集群,你需要准备以下事项: (1)、NameNode machines:运行Active NN 和Standby NN 的机器需要相同的硬件配置; (2)、JournalNode machines:也就是运行JN 的机器。JN 守护进程相对来说比较轻量,所以这些守护进程可以可其他守护线程(比如NN,YARN ResourceManager)运行在同一台机器上。在一个集群中,最少要运行3 个JN 守护进程,这将使得系统有一定的容错能力。当然,你也可以运行3 个以上的JN,但是为了增加系统的容错能力,你应该运行奇数个JN(3、5、7 等),当运行N 个JN,系统将最多容忍(N-1)/2 个JN 崩溃。在HA 集群中,Standby NN 也执行namespace 状态的checkpoints,所以不必要运行Secondary NN、CheckpointNode 和BackupNode;事实上,运行这些守护进程是错误的。

1 DHFS 高可用

1 关闭之前的服务

2 查看各节点配置

3 配置服务

4 删除原有配置

5 清空原有配置,以防影响

6 配置安装服务zookeeper

zookeeper 至少为三台,总结点数为奇数个

7 启动服务

8 查看那个是leader

9 在leader 上启动服务并查看相关配置

10 配置集群相关配置

1 配置指定hdfs的namenode 为master(名称随意)指定zookeeper 集群主机地址(server2,server3,server4的IP地址)

2 编辑hdfs-site.xml文件

A 指定hdfs的nameservices 为master B 定义namenode节点(server1 server5 ) C 指定namenode 元数据在journalNode上的存放位置 D指定journalnode在本地磁盘存放数据的位置 E 开启namenode 失败自动切换,及自动切换实现方式,隔离机制方式以及使用sshfence 隔离机制需要ssh免密以及隔离机制超时时间等参数

11 配置server5进行挂载

12 启动日志服务器server2 server3 server4

13 格式化namenode

14 将生成的数据发送到另一个高可用节点

15 配置免密认证

16 启动zkfc服务

17 查看服务

18 验证高可用,关闭服务

2 高可用之 YARN

1 指定yarn的框架为mapreduce

2 配置可以在nodemanager上运行mapreduce程序

3 激活RM高可用

4 指定RM的集群ID

5 定义RM节点

6激活RM 自动恢复

7 配置RM状态信息存储方式,有memstore和ZKstore

8 配置为zookeeper 存储时,指定ziikeeper集群的地址

9启动yarn 服务并查看

10 另一个节点需要手工启动服务

11 查看集群状态

12 测试

断开主节点查看情况 则切换到server5上 查看server5 状态 启动server1 查看server1状态

3 服务的关闭方式