大数据技术11:Hadoop 原理与运行机制

前言:HDFS Hadoop Distributed File System)是 Hadoop 下的分布式文件系统,具有高容错、高吞吐量等特性,可以部署在低成本的硬件上。

一、Hadoop简介

1.1、Hadoop定义

Hadoop 作为一个开源分布式系统基础框架,主要包含两大核心组件:HDFS 分布式文件系统和 MapReduce 分布式并行计算框架,这两大核心组件是 Hadoop 进行大数据处理的基础和基石,此外,Hadoop 的重要组件还包括:Hadoop Common 和 YARN 框架。目前,Hadoop 主要由 Apache 软件基金会进行开发和维护。

其实,我们在使用 Hadoop 的过程中,不需要了解分布式系统底层的细节,在开发 Hadoop 分布式程序的时候,只需要简单地编写 map() 函数和 reduce() 函数即可完成 Hadoop 程序的开发,并且能够充分利用 Hadoop 集群的大规模存储和高并行计算来完成复杂的大数据处理业务。

同时,Hadoop 分布式文件系统的高度容错性和高可扩展性等优点使得 Hadoop 可以部署在廉价的服务器集群上,它能够大大节约海量数据的存储成本。MapReduce 的高度容错性,有效保证了系统计算结果的准确性,并从整体上解决了大数据的可靠性存储和处理。

实际上,Hadoop 核心(或重要)组件主要包括:Hadoop Common、HDFS 分布式文件系统、MapReduce 分布式计算框架、YARN 资源调度框架,接下来,我们来简单了解 HDFS、MapReduce 和 YARN 的运行流程。

(1)HDFS 架构

HDFS 遵循主/从架构,由单个 NameNode(NN) 和多个 DataNode(DN) 组成:

NameNode : 负责执行有关 文件系统命名空间 的操作,例如打开,关闭、重命名文件和目录等。

它同时还负责集群元数据的存储,记录着文件中各个数据块的位置信息。

DataNode:负责提供来自文件系统客户端的读写请求,执行块的创建,删除等操作。

(2)文件系统命名空间

HDFS 文件系统命名空间 的层次结构与大多数文件系统类似 ( Linux), 支持目录和文件的创建、移 动、删除和重命名等操作,支持配置用户和访问权限,但不支持硬链接和软连接。 NameNode 负责维护 文件系统名称空间,记录对名称空间或其属性的任何更改。


1.2、HDFS 分布式文件系统

首先,Hadoop 会将一个大文件切分成 N 个小文件数据块,分别存储到不同的 DataNode 上,具体如图1所示。

图片

(图1)

当我们向 Hadoop 写入一个大文件时,客户端首先会向 NameNode 服务器获取元数据信息,得到元数据信息后向相应的 DataNode 写入文件,Hadoop 框架会比较文件的大小与数据块的大小,如果文件的大小小于数据块的大小,则文件不再切分,直接保存到相应的数据块中;如果文件的大小大于数据块的大小, Hadoop 框架则会将原来的大文件进行切分,形成若干数据块文件,并将这些数据块文件存储到相应的数据块中,同时,默认每个数据块保存3个副本存储到不同的 DataNode 中。

由于 Hadoop 中 NameNode 节点保存着整个数据集群的元数据信息,并负责整个集群的数据管理工作,所以,它在读/写数据上与其他传统分布式文件系统有些许不同之处。

Hadoop 读数据的简易流程如下图所示。

图片

(图2)

  • 客户端发出读数据请求,请求 NameNode 节点的元数据。

  • NameNode 节点将元数据信息返回给客户端。

  • 客户端根据 NameNode 节点返回的元数据信息,到对应的 DataNode 节点上读取块数据,如果读取的文件比较大,则会被 Hadoop 切分成多个数据块,保存到不同的 DataNode 上。

  • 读取完3的数据块后,如果数据未读取完,则接着读取数据。

  • 读取完4的数据块后,如果数据未读取完,则接着读取数据。

  • 读完所有的数据之后,通知 NameNode 关闭数据流。

Hadoop 写数据的简易流程如下图所示。

图片

(图3)

  • 客户端向 NameNode 节点发起元数据请求,指定文件上传的路径,此时,NameNode 节点内部会进行一系列的操作,比如:验证客户端指定的路径是否合法,客户端是否具有写权限等。验证通过后,NameNode 节点会为文件分配块存储信息。

  • NameNode 节点向客户端返回元数据信息,并给客户端返回一个输出流。

  • 客户端获取到元数据和输出流之后,开始向第一个 DataNode 节点写数据块。

  • 第一个 DataNode 节点将数据块发送给第二个 DataNode 节点,第二个 DataNode 节点将数据块发送给第三个 DataNode 节点,以此类推,写完所有的数据块。

  • 每个 DataNode 节点会向上游的 DataNode 节点发送结果确认信息,以保证写入数据的完整性。

  • DataNode 节点向客户端发送结果确认信息,保证数据写入成功。

  • 当所有的数据块都写完,并且客户端接收到写入成功的确认信息后,客户端会向 NameNode 节点发送关闭数据流请求,NameNode 节点会将之前创建的输出流关闭。


1.3、MapReduce 分布式计算框架

值得一提的是,Hadoop 的 MapReduce 分布式计算框架会将一个大的、复杂的计算任务,分解为一个个小的简单的计算任务,这些分解后的计算任务会在 MapReduce 框架中并行执行,然后将计算的中间结果根据键进行排序、聚合等操作,最后输出最终的计算结果。

我们可以将这一整个 MapReduce 过程分为:数据输入阶段、map 阶段、中间结果处理阶段(包括 combiner 阶段和 shuffle 阶段)、reduce 阶段以及数据输出阶段。

  • 数据输入阶段:将待处理的数据输入 MapReduce 系统。

  • map 阶段:map() 函数中的参数会以键值对的形式进行输入,经过 map() 函数的一系列并行处理后,将产生的中间结果输出到本地磁盘。

  • 中间结果处理阶段:这个阶段又包含 combiner 阶段和 shuffle 阶段,对 map() 函数输出的中间结果按照键进行排序和聚合等一系列操作,并将键相同的数据输入相同的 reduce() 函数中进行处理(用户自身也可以根据实际情况指定数据的分发规则)。

  • reduce 阶段:reduce 函数的输入参数是以键和对应的值的集合形式输入的,经过 reduce 函数的处理后,产生一系列键值对形式的最终结果数据输出到 HDFS 分布式文件系统中。

  • 数据输出阶段:数据从 MapReduce 系统中输出到 HDFS 分布式文件系统。

上述简要执行过程如图4所示。

图片

(图4)

原始数据以“(k, 原始数据行data)”的形式输入到 map 阶段,经过 map 阶段的 map() 函数一系列并行处理后,将中间结果数据以“{(k1, v1), (k1, v2)}”的形式输出到本地,然后经过 MapReduce 框架的中间结果处理阶段的处理,此中间结果处理阶段会根据键对数据进行排序和聚合处理,将键相同的数据发送到同一个 reduce 函数处理。

接下来我们就进入到 reduce 阶段,reduce 阶段接收到的数据都是以“{k1,[v1, v2]…}”形式存在的数据,这些数据经过 reduce 阶段的处理之后,最终得出“{(k1,v3)}”样式的键值对结果数据,并将最终结果数据输出到 HDFS 分布式文件系统中。


1.4、YARN 资源调度系统

YARN 框架主要负责 Hadoop 的资源分配和调度工作,其工作流程可以简化为图5所示。

图片

(图5)

  • 客户端向 ResourceManager 发出运行应用程序的请求。

  • ResourceManager 接收到客户端发出的运行应用程序的请求后,为应用程序分配资源。

  • ResourceManager 到 NodeManager 上启动 ApplicationMaster。

  • ApplicationMaster 向 ResourceManager 注册,使得 ResourceManager 能够时刻获得运行任务的进程状态信息;同时,ResourceManager 会为 ApplicationMaster 分配资源,并将分配资源的信息发送给 ApplicationMaster。

  • ApplicationMaster 获得分配的资源信息后,启动相应节点上的 Container,执行具体的 Task 任务。

  • Container 时刻与 ApplicationMaster 进行通信,向 ApplicationMaster 汇报任务执行的情况。

  • 当所有的任务运行完成之后,ApplicationMaster 向 ResourceManager 发出请求,注销自己。

1.5、HDFS 的特点

(1)高容错

由于 HDFS 采用数据的多副本方案,所以部分硬件的损坏不会导致全部数据的丢失。

(2)高吞吐量

HDFS 设计的重点是支持高吞吐量的数据访问,而不是低延迟的数据访问。

(3)大文件支持

https://github.com/heibaiyingHDFS 适合于大文件的存储,文档的大小应该是是 GB TB 级别的。

(4) 简单一致性模型

HDFS 更适合于一次写入多次读取 (write-once-read-many) 的访问模型。支持将内容追加到文件末尾,

但不支持数据的随机访问,不能从文件任意位置新增数据。

(5)跨平台移植性

HDFS 具有良好的跨平台移植性,这使得其他大数据计算框架都将其作为数据持久化存储的首选方案。


 二、搭建 Hadoop 单机环境

为了演示简单,这里我们搭建一套 Hadoop 单机环境为大家进行演示,并且默认大家已经安装好 CentOS7 操作系统并搭建好 JDK 环境。具体的环境信息如下所示。

  • 操作系统:CentOS7

  • 主机名:binghe102

  • IP 地址:192.168.184.102

  • JDK 版本:1.8

  • Hadoop 版本:Apache Hadoop 3.2.0

注意:此部分操作是以 Hadoop 用户登录 CentOS7 服务器进行的。

  2.1、 配置操作系统基础环境

我们主要是 Hadoop 用户来安装并启动 Hadoop,所以,我们需要先在服务器中添加 Hadoop 用户。

(1)添加 Hadoop 用户组和用户

首先,我们需要登录 root 账户,执行如下命令添加 Hadoop 用户组和用户。

groupadd hadoop
useradd -r -g hadoop hadoop

(2)赋予 Hadoop 用户目录权限

为了方便安装 Hadoop 环境,我们需要将服务器的 /usr/local 目录权限赋予 Hadoop 用户,具体命令如下所示。

mkdir -p /home/hadoop
chown -R hadoop.hadoop /usr/local/
chown -R hadoop.hadoop /tmp/
chown -R hadoop.hadoop /home/

(3)赋予 Hadoop 用户 sudo 权限

在这里,我们主要通过 vim 编辑器编辑 /etc/sudoers 文件来赋予 Hadoop 用户 sudo 权限,具体操作如下:

vim /etc/sudoers

然后找到如下代码。

root    ALL=(ALL)       ALL

接着,在此行代码后添加如下代码。

hadoop  ALL=(ALL)       ALL

注意:由于“/etc/sudoers”是只读文件,所以保存并退出“/etc/sudoers”文件使用的是“wq!”。

(4)赋予 Hadoop 用户密码

我们采用如下方式赋予 Hadoop 用户密码。

[root@binghe102 ~]# clear
[root@binghe102 ~]# passwd hadoop
Changing password for user hadoop.
New password: 输入密码
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 再次输入密码
passwd: all authentication tokens updated successfully.

(5)关闭防火墙

并在命令行输入如下命令,关闭 CentOS7 防火墙。

(6)配置 Hadoop 用户免密码登录

最后,以 Hadoop 用户登录服务器,分别输入如下命令来配置 Hadoop 用户免密码登录。​​​​​​​

ssh-keygen -t rsa
cat /home/hadoop/.ssh/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys
chmod 700 /home/hadoop/ 
chmod 700 /home/hadoop/.ssh 
chmod 644 /home/hadoop/.ssh/authorized_keys 
chmod 600 /home/hadoop/.ssh/id_rsa
ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub  主机名(IP地址)

​​​​​​​2.2 、搭建 Hadoop 本地模式

其实,Hadoop 本地安装模式是三种安装模式中最简单的一种,我们只需要在 Hadoop 的 hadoop-env.sh 文件中配置 JAVA_HOME 即可。

(1)下载 Hadoop 安装包

首先,我们需要在 CentOS7 命令行输入如下命令下载 Hadoop 安装包。

wget https://archive.apache.org/dist/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz

(2)解压 Hadoop 安装包

然后,在 CentOS7 命令行输入如下命令解压 Hadoop 安装包。

tar -zxvf hadoop-3.2.0.tar.gz 

(3)配置 Hadoop 环境变量

接着,在 /etc/profile 文件中追加如下内容。​​​​​​​

HADOOP_HOME=/usr/local/hadoop-3.2.0
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export PATH HADOOP_HOME

然后输入如下命令使环境变量生效。

source /etc/profile

(4)验证 Hadoop 的安装状态

在 CentOS7 命令行输入 hadoop version 命令验证 Hadoop 环境是否搭建成功,如下所示。​​​​​​​

-bash-4.2$ hadoop version     
Hadoop 3.2.0
Source code repository https://github.com/apache/hadoop.git -r e97acb3bd8f3befd27418996fa5d4b50bf2e17bf
Compiled by sunilg on 2019-01-08T06:08Z
Compiled with protoc 2.5.0
From source with checksum d3f0795ed0d9dc378e2c785d3668f39
This command was run using /usr/local/hadoop-3.2.0/share/hadoop/common/hadoop-common-3.2.0.jar

​​​​​​​可以看到,我们输出了 Hadoop 的版本号,说明 Hadoop 环境搭建成功。

(5)配置  Hadoop

这里,我们主要通过配置 Hadoop 安装目录下的 /etc/hadoop 目录下的 hadoop-env.sh 文件,例如我们将 Hadoop 安装在了 /usr/local/hadoop-3.2.0 目录下,所以,hadoop-env.sh 文件在 /usr/local/hadoop-3.2.0/etc/hadoop 目录下。

首先,使用 vim 编辑器打开 hadoop-env.sh 文件,如下所示。

vim /usr/local/hadoop-3.2.0/etc/hadoop/hadoop-env.sh

然后找到如下代码。

# export JAVA_HOME=

接着打开注释,我们将 JDK 的安装目录填写到等号后面。

export JAVA_HOME=/usr/local/jdk1.8.0_321

至此,Hadoop 搭建环境搭建完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/245965.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Yum仓库架构解析与搭建实践

1.Yum仓库搭建 1.1本地Yum仓库图解 1.2Linux本地仓库搭建 配置本地光盘镜像仓库 1)挂载 [roothadoop101 ~]# mount -t iso996 /dev/cdrom/mnt 2)查看 [rooothadoop101 ~] # df -h | |grep -i mnt /dev/sr0 4.6G 4.4G 3&#xf…

C语言之文件操作(下)

C语言之文件操作(下) 文章目录 C语言之文件操作(下)1. 文件的顺序读写1.1 文件的顺序读写函数1.1.1 字符输入/输出函数(fgetc/fputc)1.1.2 ⽂本⾏输⼊/输出函数(fgets/fputs)1.1.3 格…

MYSQL练题笔记-高级字符串函数 / 正则表达式 / 子句-简单3题

这个系列先写了三题,比较简单写在一起。 1.修复表中的名字相关的表和题目如下 看题目就知道是有关字符串函数的,于是在书里查询相关的函数,如下图,但是没有完全对口的函数,所以我还是去百度了。 然后发现结合上面的4个…

多层感知机

目录 一、感知机 1、相关概念介绍 2、(单层)感知机存在的问题 3、总结 二、多层感知机(MLP) 1、多层感知机思路 2、激活函数 3、常见的激活函数 4、多类分类 4、总结 三、多层感知机从零开始实现 1、读取数据集 2、初…

[Kubernetes]2. k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解

一. 创建k8s部署的镜像 1.部署nodejs项目 (1).上传nodejs项目到节点node1 (2).压缩nodejs项目 (3).构建nodejsDockerfile 1).创建nodejsDockerfile 具体可参考:[Docker]十.Docker Swarm讲解,在/root下创建nodejsDockerfile,具体代码如下: FROM node #把压缩文件COPY到镜像的…

掌握iText:轻松处理PDF文档-高级篇-添加页眉和页脚

推荐语 本文介绍了如何使用iText编程库为PDF文档添加自定义的页眉和页脚。通过指定位置、大小、字体和颜色等属性,你可以将文本、图像或其他元素添加到每一页的固定位置,实现专业、可读的自定义页眉和页脚效果。这对于需要批量处理大量PDF文档或需要更精…

modelbox线程爆满宕机bug

序 该bug的解决需要特别感谢张同学。有了大佬的帮助,这个bug才得以解决。 问题现象 modelbox可以进行模型推理,但压测一段时间后,modelbox会宕机,并发生段错误。 “libgomp: Thread creation failed: Resource temporarily una…

TCP/IP详解——ICMP协议,Ping程序,Traceroute程序,IP源站选路选项

文章目录 一、ICMP 协议1. ICMP 概念2. ICMP 重定向3. ICMP 差错检测4. ICMP 错误报告/差错报文5. ICMP 差错报文的结构6. ICMP 源站抑制差错7. ICMP 数据包格式8. ICMP 消息类型和编码类型9. ICMP 应用-Ping10. ICMP 应用-Tracert11. BSD 对 ICMP 报文的处理12. 总结 PING 程序…

数据结构:队列

数据结构:队列 文章目录 数据结构:队列1.队列常用操作:2.队列的实现3.队列典型应用 ***「队列 queue」是一种遵循先入先出规则的线性数据结构。***队列模拟了排队现象,即新来的人不断加入队列尾部,而位于队列头部的人逐…

Visual studio+Qt开发环境搭建以及注意事项和打开qt的.pro项目

下载qt-然后安装5.14.2_msvc2017 不知道安装那个就全选5.14.2的父级按钮 https://download.qt.io/archive/qt/5.14/5.14.2/ 安装Visual studio,下载直接下一步就行 配置Visual studio的qt环境 在线安装-重启Visual studio会自动安装 离线安装-关闭Visual studio点击安装 关闭…

a16z:加密行业2024趋势“无缝用户体验”

近日,知名加密投资机构a16z发布了“Big ideas 2024”,列出了加密行业在 2024 年几个具备趋势的“大想法”,其中 Seamless UX(无缝用户体验)赫然在列。 从最为直观的理解上,Seamless UX 是在强调用户在使用产…

路由器原理

目录 一.路由器 1.路由器的转发原理 2.路由器的工作原理 二.路由表 1.路由表的形成 2.路由表表头含义 直连: 非直连: 静态 静态路由的配置 负载均衡(浮动路由) 默认路由 动态 三.交换与路由对比 一.路由器 1.路由器…

独立完成软件的功能的测试(4)

独立完成软件的功能的测试(4) (12.14)(功能测试>头条项目实战) 项目总体概述 项目背景和定位:一款汇聚科技咨询,技术文章和问答交流的用户移动终端产品,用户可以通过…

STM32在CTF中的应用和快速解题

题目给的是bin文件,基本上就是需要我们手动修复的固件逆向。 如果给的是hex文件,我们可能需要使用MKD进行动态调试 主要还是以做题为目的 详细的可以去看文档:https://pdf1.alldatasheet.com/datasheet-pdf/view/201596/STMICROELECTRONIC…

微服务学习:Gateway服务网关

一,Gateway服务网关的作用: 路由请求:Gateway服务网关可以根据请求的URL或其他标识符将请求路由到特定的微服务。 负载均衡:Gateway服务网关可以通过负载均衡算法分配请求到多个实例中,从而平衡各个微服务的负载压力。…

一入二出热电阻温度信号隔离变送器

一入二出热电阻温度信号隔离变送器 用于测量铂热电阻Pt10,Pt100,Pt1000,Cu50,Cu100的热电阻传感器的小型仪器设备。广泛应用于工业测量温度系统,是降低成本且有效的测量方式。 型号:JSD TARZ-1002系列 我们来看下有什么特点: ◆小体积&#x…

天猫数据分析平台-天猫销售数据查询软件-11月天猫平台冲锋衣市场销售运营数据分析

随着气温逐渐下降,保暖服饰迎来热销,冲锋衣的需求大增。如今冲锋衣已经不仅仅是户外运动的装备,还成为很多年轻人的日常穿搭和时尚的追求。 新的穿搭趋势也带来了巨大的市场机会。据公开数据显示,中国有冲锋衣生产及经营企业超过8…

竞赛保研 python+opencv+机器学习车牌识别

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于机器学习的车牌识别系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分工作量:4分创新点:3分 该项目较为新颖,适…

什么是纯净IP?如何判断IP地址的纯净度?有哪些干净IP推荐?

您是否想知道什么使代理“干净”或如何确保您的代理不会将您列入网站的黑名单?对于通过代理访问网络的人来说,干净的代理是无缝在线体验的重要组成部分。在这篇文章中,我们将深入研究干净代理的世界,并探讨决定其质量的因素。 一、…

k8s常用命令及示例(三):apply 、edit、delete

k8s常用命令及示例(三):apply 、edit、delete 1. kubectl apply -f 命令:从yaml文件中创建资源对象。 -f 参数为强制执行。kubectl apply和kubectl create的区别如下:kubectl create 和 kubectl apply 是 Kubernetes 中两个常用的命令&…