物联网架构之Hadoop

本文详细介绍了物联网架构中的Hadoop,包括Hadoop的起源、核心构成、HDFS体系结构、MapReduce编程模型以及下一代MapReduce框架YARN。内容涵盖了Hadoop的分布式文件系统HDFS、MapReduce的工作原理、数据处理流程,以及YARN如何解决MapReduce V1的扩展性问题。此外,还讨论了Hadoop的完全分布式环境搭建和HDFS的常见命令行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

物联网架构之Hadoop

**
技能目标
了解 Hadoop 体系结构
能够安装 Hadoop 运行环境
掌握 HDFS 体系结构
掌握 HDFS 命令行操作
理解 MapReduce 计算模型

**

一、案例分析

**

1、案例概述

在这里插入图片描述**

2、案例前置知识点

**
1.什么是大数据
在这里插入图片描述

数据量大是大数据的显著特点,归纳来说大数据特点如下:
(1)数据体量巨大。按目前的发展趋势看,大数据的体量已经达到 PB 甚至 EB级。
(2)大数据的数据类型多样,以非结构化数据为主。如:网络日志、音频、视频、图片、地理位置信息、交易数据、社交数据等。
(3)价值密度低。有价值的数据仅占到数据总量相当小的一部分。比如一段监控视频中真正有价值的画面可能只有几秒钟。由于价值密度低,所以迅速地完成数据的价值提纯是目前大数据汹涌背景下亟待解决的难题。
(4)产生和要求处理速度快。这是大数据区分于传统数据挖掘最显著的特征。

目前,有很多大数据处理系统可以处理大数据,如表所示。
在这里插入图片描述
下面开始学习 Hadoop。Hadoop 是开源软件,实现了一个分布式文件系统(Hadoop Distributed File System,HDFS),分布式系统是运行在多个主机上的软件系统。HDFS 有着高容错性的特点,能够自动保存数据的多个副本,并能自动将失败的任务重新分配。Hadoop 设计用来部署在低廉的通用硬件平台上组成集群,提供热插拔的方式加入新的节点来向集群中扩展,将计算任务动态分配到集群中各个节点并保证各节点的动态平衡。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
2. Hadoop 体系结构
Hadoop 源 自 于 Google 在 2003 到 2004 年 公 布 的 关 于 GFS ( Google FileSystem)、MapReduce 和 BigTable 三篇论文,创始是 Doug Cutting。Hadoop 现在是 Apache 基金会顶级项目,“Hadoop”是一个虚构的名字,由 Doug Cutting 的孩子为其黄色玩具大象所命名。
(1)Hadoop 的核心构成
在这里插入图片描述
(2)Hadoop 子项目
整个 Hadoop 生态圈已发展成为包含很多子项目的集合。除了两个核心内容外还包括 Hive、Pig、HBase、ZooKeeper 等。比较完整的项目结构如图所示。

下面分别对它们进行简单介绍。
HDFS:分布式文件系统,是整个 Hadoop 体系的基石。

MapReduce/YARN:并行编程模型。YARN 是下一代的 MapReduce 框架。从 Hadoop 0.23.01 版 本 后 , MapReduce 被 重 构 。 通 常 YARN 也 称 为MapReduceV2,老版本 MapReduce 称为 MapReduce V1。

Hive:建立在 Hadoop 上的数据仓库。提供类似 SQL 语言的查询方式查询Hadoop 中的数据。

Pig:一个对大型数据集进行分析、评估的平台。主要作用类似于数据库里的存储过程。

HBase:全称 Hadoop Database。Hadoop 分布式、面向列的数据库来源于Google 关于 BigTable 的论文,主要用于需要随机访问、实时读写的大数据,在后面还会详细介绍。

ZooKeeper:是一个为分布式应用所设计的协调服务。主要为用户提供同步、配置管理、分组和命名等服务,减轻分布式应用程序所承担的协调任务。

当然还有大量其它项目加入到 Hadoop 生态圈,如:
Sqoop:主要用于 Hadoop 与传统数据库(MySQL 等)间的数据传递。

Flume:日志采集系统。

Spark:前面提过,是一个相对独立于 Hadoop 的大数据处理系统,可单独进行分布式处理。在这里列出来是因为它可以和 HDFS 很好的结合。

Oozie:可以将多个 MapReduce 作业组合到一个逻辑工作单元中,进行工作计划的安排,类似于工作流管理引擎。

Ambari:支持 Hadoop 集群管理、监控的 Web 工具。

经过近十多年的发展,越来越多的项目加入到了 Hadoop 的生态圈。在本课程中着重介绍 3 个模块,分别是:HDFS、MapReduce、HBase。对于 Hadoop 应用开发人员来说,这也是最基本的模块。

Hadoop 发行版本
Hadoop 的版本比较混乱,在这里有必要帮助大家理清思路,也有助于大家在参考其它资料时注意区别版本间的差异。总的来说,Hadoop 分为两代,如表所示。在这里插入图片描述在这里插入图片描述由上表可以看出,通常所说的 Hadoop 1.0 指的是 0.20.x、0.21.x、0.22.x、1.0.x,
Hadoop 2.0 指的是 0.23.x 、2.x.x。在本课程中,将选择 Hadoop 2.6.0 进行示例讲解。

第二代 Hadoop 一个重大的变化就是重构了 MapReduce。在后面会看到新老 API同时存在的情况。Hadoop 的下载地址:http://hadoop.apache.org/releases.html。

为什么使用 MapReduce?对于大量数据的计算,通常采用的处理方法就是并行计算。这就要求能够将大型而复杂的计算问题分解为各个子任务,并分配到多个计算资源下同时进行计算,其显著特点是耗时小于单个计算资源下的计算。对多数开发人员来说,并行计算还是个陌生、复杂的东西,尤其是涉及到分布式的问题,将会更加
棘手。MapReduce 就是一种实现了并行计算的编程模型,它向用户提供接口,屏蔽了并行计算特别是分布式处理的诸多细节,让那些没有多少并行计算经验的开发人员也可以很方便的开发并行应用。
在这里插入图片描述3. MapReduce 概述
Hadoop 的 MapReduce 框架源自于 Google 的 MapReduce 论文。在 Google 发表论文时,MapReduce 最大成就是重写了 Google 的索引文件系统。现在,MapReduce被广泛地应用于日志分析、海量数据排序、在海量数据中查找特定模式等场景中。

Hadoop 中,并行应用程序的开发是基于 MapReduce 编程模型的,基于它可以将任务分发到由上千台商用机器组成的集群上,实现 Hadoop 的并行任务处理功能。前面提过,HDFS 和 MapReduce 二者相互作用,共同完成了 Hadoop 分布式集群的主要任务。

4. MapReduce 框架设计
与 HDFS 架构设计相似,Hadoop 中用于执行 MapReduce 作业的机器也有两个角色:JobTracker 和 TaskTracker。

JobTracker:是一个 Master 服务,用于作业(Job)的管理和调度工作。一个 Hadoop 集群中只有一台 JobTracker。一般情况下,应该把它部署在单独的机器上。JobTracker 负责创建、调度作业中的每一个子任务(MapTask或 ReduceTask)运行于 TaskTracker 上,并监控它们。如果发现有失败的任务就重新运行它。

TaskTracker : 是 运 行 于 多 个 节 点 上 的 Slave 服 务 , 用 于 执 行 任 务 ,TaskTracker 需要运行在 HDFS 的 DataNode 上。

基 于 JobTracker 和 TaskTracker 的 运 行 架 构 为 MapReduce V1 , 在 下 一 代MapReduce V2 中,V1 架构已被 YARN 替代。关于 YARN 在本章稍后会讲解。从学习的难易程度来看,应该先了解 MapReduce V1。不论是 V1 还是 V2,都不会影响编写 MapReduce 程序,好比同样是一个 Web 应用,运行在 Tomcat 与 Jetty 下的效果是相同的。由此可见,实际上运行 MapReduce 作业的过程对开发人员是透明的。

5. MapReduce 编程模型
那么 MapReduce 程序是如何运行的呢?当编写完成 MapReduce 程序,并配置为一个 MapReduce 作业(Job)。这里的“作业”可以理解为:为了进行一次分布式计算任务而编写 MapReduce 程序后,将该程序提交到 MapReduce 执行框架中并执行的全过程。当客户端提交 Job 到 JobTracker 后,数据流如图所示。在这里插入图片描述从图中可以看出,待处理数据从输入到最后输出经过如下五个阶段:
(1)input:由 JobTracker 创建该 Job,并根据 Job 的输入计算输入分片(InputSplit)。这里要求待处理的数据集必须可以分解成许多小的数据集,且每一个小的数据集都可以完全并行地进行处理。输入目录中文件的数量决定了分片的数量,如果对于单个文件超过 HDFS 默认块大小(64MB),将按块大小进行分割。

(2)split:作业调度器获取 Job 的输入分片信息,对输入分片中的记录按照一定规则解析成键值对,“键”(key)是每一行的起始位置,以字节为单位,“值”(value)是本行文本内容。最后每个分片创建一个 MapTask 并分配到某个 TaskTracker。

(3)map:TaskTracker 开始执行 MapTask,处理输入的每一个键值对。如何处理取决于在该阶段的程序代码,处理完成后产生新的键值对,保存在本地。

(4)shuffle:混洗。将 MapTask 的输出有效地作为 ReduceTask 的输入过程。从图中可以看出该过程会在各 TaskTracker Node 之间进行数据交换,按照 key 进行分组。

(5)reduce:读取 Shufflling 阶段的输出,开始执行 ReduceTask,处理输入的每一个键值对。同样,如何处理取决于该阶段的程序代码。最后输出最终结果。

在 Hadoop 中,每个 MapReduce 计算任务都会被初始化为一个 Job。其中主要有两个处理阶段:map 阶段和 reduce 阶段。两个阶段均以键值对<key,value>作为输入,然后产生同样为<key,value>形式的输出。两个阶段分别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxiaoyouyouj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值