本章将重点展示Hadoop作为大数据操作系统的一面,通过分布式文件系统(HDFS)和负载和资源管理器(YARN)来概述Hadoop的原理。另外还会演示如何使用命令行与HDFS进行交互,并执行一个Map Reduce作业。

2.1 基本概念

为了执行大规模计算,Hadoop将大型数据的分析计算分发给许多机器,每个机器同时对各自的数据块进行运算。分布式的难点在于开发分布式算法,管理集群中的机器,并实现网络和架构细节。一般来所,分布式系统需要满足容错性(如果一个组件失败,不应导致系统故障),可恢复性(发生故障时,数据不应该丢失),一致性(一个任务的好坏不影响最终结果),可扩展性(负载增加可以导致性能降低,而不是出现故障)。

Hadoop通过一下几个抽象概念满足上述四个要求。第一点,数据添加到集群中后即可被分发出去,并存储在多个节点上。最好用节点处理本地存储的数据,将网络流量最小化。第二点,数据存储固定大小,通常为128MB,每个块跨系统多次赋值,提供冗余性和数据安全。第三点,通常将计算作为一个作业,作业把分解成任务,每个节点针对单个数据块执行任务。第四点,编写作业时,不许考虑网络编程、实践和底层基础,语序开发人员专注于数据和计算,而不是分布式编程细节。第五点,系统应该以透明的房媳将节点间的网络流量最小化,每个任务都是独立的,并且节点之间不应在处理期间彼此通信,以确保没有会导致死锁的进程间依赖。第六点,作业通常通过任务荣誉来容错,这使得单个节点或任务的失败不会导致最终计算结果不正确或不完整。第七点,主程序将工作分配给worker节点,这使得许多worker节点可以针对各自负责的数据进行并行运算。这些要求确保了Hadoop是一个数据分析处理符合预期的数据管理系统。于数据仓库不同的是,Hadoop能够在更经济的现成商业硬件上运行。因此,Hadoop主要用于存储和计算大型异构数据集。

2.2 Hadoop架构

Hadoop包括两个主要的组件:HDFS和YARN,实现了容错性、可恢复性、一致性和可扩展性的要求。HDFS负责管理存储在集权中磁盘上的数据;YARN负责将计算资源(worder节点上的处理能力和内存)分配给希望执行分布式计算的应用程序。注:原先的Map Reduce应用程序和其他新的分布式计算应用程序(Apache Giraph,Spark,Storm,Hive)都基于YARN实现。

HDFS 和 YARN 协同工作,主要通过确保数据对于所需的计算是本地的,最大限度地减少集群中的网络流量。数据和任务的重复性确保了容错性、可恢复性和一致性。集群的统一管理确保了可扩展性,另外还将底层的集群编写抽象化。HDFS和YARN共同构建了大数据应用程序平台(可以对大数据进行操作的据操作系统)。

Hadoop同样也不失灵活性。除HDFS外,其他数据存储系统可以集成到Hadoop框架中,例如Amazon S3或Cassandra。此外,除HDFS提供的简单的文件系统功能外,HBase是一个构建在HDFS之上的列式数据存储,是一个利用分布式存储的先进分析应用程序。

2.2.1 Hadoop集群

Hadoop是一个以协调方式运行的机器集群。其实Hadoop只是在这组集群上运行软件的名称,基HDFS和YARN,它们由在一组计算机上运行的六种后台服务组成。HDFS和YARN提供了一个应用程序的编程接口(API),集群就是运行HDFS和YARN的一组计算机,每台计算机被成为一个节点.Hadoop进程是服务,所以它们将一直在集群上运行,接受输入并传递输出.

master节点

用户访问集群的入口点,通常为worker节点提供协调服务,没有协调也就不能进行分布式存储或计算.

worker节点

集群中的大多数计算机都是worker节点,worker节点运行的服务从master节点接收任务(存储,检索,运行特定运行程序).

NameNode(master服务,用于存储文件系统的目录树,客户想要访问HDFS,需要通过NameNode请求信息来查找相应的存储节点).

Secondary NameNode(mater服务,代表NameNode执行内务任务并记录检查点).

DataNode(worker服务,用于存储和管理磁盘上的HDFS块)

从HDFS访问数据→向NameNode发出请求→得到DataNode列表→DataNode列表中请求数据块

和HDFS一样,YARN也有两个mater服务和一个worker服务.

ResorceManager(master服务,为应用程序分配和监视可用的集群资源)

ApplicationMaster(master服务,根据ResorceManager的调度,协调在集群上运行的特定应用程序)

NodeManager(worker服务,单个节点上运行和管理处理任务,报告运行健康状况)

客户执行作业→向ResourceManager请求资源→得到ApplicationMaster→每个NodeManager创建容器并执行任务

在小集群中,所有的守护进程都在一个节点上运行.在包含六个节点的小型Hadoop集群中,两个master节点和四个worker节点.主进程重要性不言而喻,它们在自己的节点行运行,不会竞争资源,也不会带来瓶颈."伪分布式模式",就是在单个机器上运行Hadoop所有守护进程,这是一种完美的开发模式,因为不需要管理几台机器而费心,网络信息通过本地还回网络接口流动.

2.2.2 HDFS

HDFS是本地文件系统之上的软件层,是分布式文件系统的旗舰.需要注意的是,第一,与占用相同容量的数以亿计的小文件相比,HDFS更适合处理数据量适中但非常大的文件.第二,HDFS采用WORM模式,写一读多,是故不支持随机写入和追加文件.第三,HDFS针对大型流式读取进行了优化.

文件块:HDFS文件分为多个块,大小通常为64M

数据管理:NameNode记录文件的块和这些块的位置.

NameNode和DataNode进行通信.SecondaryNameNode代表NameNode执行内务任务.

2.2.3 YARN

Hadoop1专注于Map Reduce,而Hadoop2通过引入YARN突破限制,将工作负载管理和资源管理分析,以便多个应用程序可以共享一个集中的公共资源管理服务.

2.3 使用分布式文件系统

通常情况下,HDFS的交互是通过命令接口进行的.此外,HDFS还有一个HTTP接口和一个用Java编写的可编程接口.接下来将通过命令完成与分布式系统的基本交互.

假设本地主机运行着伪分布式集群的客户端,此外,hadoop命令和HADOOP_HOME/bin中的工具位于系统路径上.

2.3.1 基本的文件系统操作

基本操作:创建目录、移动、删除和复制文件,列出目录内容,修改集群上文件的权限。

查看fs命令可用的命令,键入:

$ hadoop fs -help

put,copyFromLocal命令将本地文件系统赋值一些数据到远程分布式系统上,在这个过程中不删除本地副本.而moveFromLocal则会删除副本.

首先下载一个要移动的文件,在https://github.com/bbengfort/hadoop-fundamentals的data目录中,文件名称为shakespeare.txt.下载到了home目录下的download目录中.

将文件复制到分布式文件系统

$ hadoop fs –copyFromLocal shakespeare.txt

NOTE:copyFromLocal在当前文件夹中搜索指定文件名称的文件,复制到/user/analyst/路径下.优于当前文件远小于64MB,不会被分块.但是如果式本地计算机和远程HDFS系统上的文件复制,应该考虑路径问题.上述的复制过程全命令应该是.

$ hadoop fs –put /home/analyst/shakespeare.txt \
hdfs://localhost/user/analyst/shakespeare.txt

NOTE:可以看到远程文件系统的相对路径将用户的HDFS主目录是为当前工作目录.

为了更好地管理HDFS文件系统,想在本地文件系统上创建目录分层数:

$ hadoop fs -mkdir corpora
$ hadoop fs -mkdir corpora

在HDFS上创建目录corpora,并显示当前HDFS中的文件,包括复制过去的txt文件和一个新建的文件夹.显示的内容按照列来陈述包括文件权限模式,文件的副本数目,用户,组一字节为单位的文件大小,最后一次修改日期和时间,文件名.

其他基本文件操作,mv,cp,rm在远程文件系统上是通用的,但是删除目录时不使用rmdir命令,而是使用rm -R递归删除目录及其包含的所有文件.

从分布式文件系统读取和移动到本地文件系统需注意,特别时MapReduce作业的结果生成的输出文件.因为这些文件不被读取到标准输出流中,而是通过管道传输到其他程序的,例如less和more.

读取文件内容,可使用cat命令将管道传递给less以查看远程文件的内容:

$ hadoop fs –cat shakespeare.txt | less

cat的输出通过管道传递给了less,这其中可以通过方向键进行内容控制,通过输入q进行推出.

通过tail可以查看最后1000字节的内容.但是没有hadoop fs -head这样的命令.

将整个文件从分布式文件系统传输到本地文件系统,可使用get或copyToLocal.与之类似,额可以使用moveToLocal命令移动文件到本地,但会删除分布式上的文件.get merge命令复制给定模式或指定目录下的所有文件,并将其整合到本地单个文件.

2.3.2 HDFS文件权限

权限分为三种类型:读(r),写(r),和执行(x).这些权限定义了所有者,组和任何其他系统用户的访问级别.

共是个槽位,第一个槽位为d时表示目录,否则是文件(-),剩余9个槽位分为3个一组,分别表示所有者,组和其他用户的rwx权限.同时HDFS有几个管理文件和目录权限的命令,chmod,chgrp,chown.

$ hadoop fs –chmod 664 shakespeare.txt

chmod将权限改为-rw-rw-r--,664是权限三元组设置的标志,6表示二进制的011,4表示二进制的100.

chgrp和chown分别用来更改分布式文件系统上文件的组和所有者权限.

2.3.3 其他HDFS接口

软件开发人员可以通过 Java API 访问 HDFS 的编程接口,HDFS 也有 HTTP 接口,可用于集群文件系统的常规管理以及使用Python 访问 HDFS.

2.4 使用分布式计算

YARN 让非 MapReduce(MR) 框架(如 Spark、Tez 和 Storm)可以与原先的 MapReduce 应用程序一起在 Hadoop 集群上运行,但MapReduce仍旧是至关重要的.对 MapReduce 的工作原理有所了解,能帮助我们更深刻地理解分布式分析,还可以讨论其他平台是如何工作的,因为 MapReduce 的理论基础与其他框架是相同的。

2.4.1 MapReduce:函数式编程模型

MapReduce通常是指分布式编程模式,是一个计算框架,用于在集中管理的机器集群上进行容错的分布式计算,允许多个独立任务在本地数据块上执行函数,并聚合结果.

函数式编程是一种编程风格,需要确保每个计算单元以无状态的方式被评估,也即函数仅仅依赖输入,并且二封闭不共享状态.这使得我们可以将计算移动到任何由数据输入的节点.

负责分发任务和聚合任务的两类函数分别被称为map和reduce.MapReduce利用键值对来协调计算.

map 函数以一系列键值对作为输入,然后在每个键值对上进行单独运算,输出零个或多个键值对.

reduce 函数以一个键和一个值列表作为输入,通常通过聚合操作在整个值列表上进行运算,输出零个或多个键值对.

2.4.2 MapReduce:集群上的实现

总体来说,MapReduce 是一个分阶段框架,其中的 map阶段和 reduce 阶段通过中间的 shuffle 和 sort 协调.

阶段一 HDFS 的本地数据以键值对的形式被加载到一个映射过程。

阶段二 mapper 输出零个或多个键值对,将计算所得的值映射到一个特定的键上。

阶段三 基于键对这些键值对进行 sort 和 shuffle 操作,然后将它们传递给 reducer,使 reducer 获得键的所有值。

阶段四 reducer 输出零个或多个最终的键值对,即输出(归约 map 的结果)。

MapReduce示例(单词计数和共同好友)

单词计数经常被用于演示分布式计算任务,被成为大数据世界的"Hello,World".另外,单词计数易于并行,能够帮助无门理解程序存在的根本缺陷.

单词计数程序以一个或多个文本文件作为输入,生成一份单词及其频率的列表.因为Hadoop使用键值对,所以

输入键是文件ID和行号,输入的值是字符串,输出的键是单词,输出的值是一个整数.

map操作统计输入的单词个数,不关系上下文.

# emit是一个执行Hadoop I/O的函数
def map(dockey, line):
for word in Line.split():
emit(word, 1)
def reduce(word, values):
count = sum(value for value in values)
emit(word, count)

NOTE:emit类似于Python中的yield函数,将器参数发送到Map Reduce流水线的下一个阶段.

# WordCount mapper的输入
(27183, "The fast cat wears no hat.")
(31416, "The cat in the hat ran fast.")
# mapper 1的输出
("The", 1), ("fast", 1), ("cat", 1), ("wears", 1),
("no", 1), ("hat", 1),(".", 1)
# mapper 2的输出
("The", 1), ("cat", 1), ("in", 1), ("the", 1),
("hat", 1), ("ran", 1),("fast", 1),(".", 1)

map的结果是每个单词作为键,单词出现的频率作为值,这些数据被传递到shuffle阶段和sort阶段.键被分组和排序,然后发送给适当的reducer.reducer接收以单词为键,遗传数字1为值得输入.为获得计数,将所有的1相加即得到结果.

# WordCount reducer的输入
# 该数据由shuffle和sort计算
(".", [1, 1])
("cat", [1, 1])
("fast", [1, 1])
("hat", [1, 1])
("in", [1])
("no", [1])
("ran", [1])
("the", [1])
("wears", [1])
("The", [1, 1])
# 所有WordCount reducer的输出
(".", 2)
("cat", 2)
("fast", 2)
("hat", 2)
("in", 1)
("no", 1)
("ran", 1)
("the", 1)
("wears", 1)
("The", 2)

2.4.3 不止一个MapReduce:作业链

将常规解决问题的工作流稍作转变以满足 map 函数和 reduce 函数的无状态运算和交互后,就可以用 MapReduce 轻松实现许多算法或数据处理任务。但是单个 MapReduce 作业无法实现更复杂的算法和分析。

事实上,更复杂的应用程序是通过被称为“作业链”的过程,使用多个MapReduce 作业执行单个计算来构建的。

2.5 向YARN提交MapReduce作业

MapReduce 的 API 是用 Java 编写的,因此提交给集群的MapReduce 作业是编译好的 Java 归档文件.

第二章 大数据操作系统相关推荐

  1. 《数据密集型计算和模型》第二章大数据时代的计算机体系结构复习

    <数据密集型计算和模型>第二章的有关内容.主要复习内容为:计算部件.存储部件.网络部件.软件定义部件.虚拟资源管理系统等. 文章目录 大数据时代的计算机体系结构 一.计算部件 1. 多核和 ...

  2. 第二章 大数据如此重要,引无数英雄竞折腰

    在这个一秒钟就可能江山易主的大数据时代,获得最真实可靠的数据并进行准确的分析和预测是企业占得先机的重要条件.如何在数据上展开角力成为企业生存的核心问题,只有企业对大数据的"外貌"和 ...

  3. 3DGIS第二章 大数据量场景加速绘制基本原理与方法

    对于仅有几百个多边形和几十兆的低分辨率纹理简单场景,在现阶段一般配置的计算机上也很容易达到实时仿真的目标.然而,随着场景规模的增大,大规模虚拟场景中往往包含上万个多边形,甚至多达几百万个多边形和几百兆 ...

  4. 第二章 大数据量场景加速绘制基本原理与方法

    对于仅有几百个多边形和几十兆的低分辨率纹理简单场景,在现阶段一般配置的计算机上也很容易达到实时仿真的目标.然而,随着场景规模的增大,大规模虚拟场景中往往包含上万个多边形,甚至多达几百万个多边形和几百兆 ...

  5. 第二章大数据技术概述

    大数据技术的产生 海量数据的产生: 来自大人群互联网 来自大量传感器机械 科学研究及行业多结构专业数据 大数据的基本概念 大数据的定义:无法在一定时间内用常规软件工具对其内容进行抓捕.管理和处理的数据 ...

  6. 第二章 大数据技术概述

    大数据基本概念 数据是各种符号如字符.数字等.声音.图片动画.视频多媒体,数据也是原始事实.要保证其原始性和真实性,后期加工才有意义.信息是人们为了某种需求而对原始数据加工重组后形成的有意义.有用途的 ...

  7. 大数据分析-第二章 大数据平台

    Lecture2-大数据平台 1. Hadoop 1.1. Hadoop计算过程 1.2. Hadoop发展简史 Hadoop起源于Apache Nutch,后者是一个开源的网络搜索擎,本身也是由Lu ...

  8. 揭秘Sponge:统一Hadoop、Spark、SDS、Swift的大数据操作系统

     揭秘Sponge:统一Hadoop.Spark.SDS.Swift的大数据操作系统 width="22" height="16" src="ht ...

  9. 第二章-大数据处理框Hadoop

    第二章-大数据处理框Hadoop 文章目录 第二章-大数据处理框Hadoop Hadoop简介 Hadoop概念 Hadoop版本 Hadoop优化与发展 Hadoop生态系统 Hive Pig Ha ...

最新文章

  1. 将 GridView 中的内容导出到 Excel 中多个工作表(Sheet) 的方法
  2. 初始化方法-在类的外部给对象增加属性的隐患
  3. HashMap的四种访问方式
  4. 用微服务和容器替换旧版Java EE应用程序服务器
  5. 二、nodemon-Node.js 监控工具
  6. linux的一些命令总结
  7. ODP.NET开发和部署的相关问题
  8. 2.0显示为整数 java_Java如何将系统属性读取为整数?
  9. Atitit it计算机应用体系图  大数据 爬虫 非结构数据 nosql redis mongodb 分布式存储 es搜索 可视化 多媒体与office 19.1. 14.3 计
  10. MongoDB 数据库简介、安装及使用
  11. 大麦 Android 选座场景性能优化全解析
  12. python3-欢乐斗牛-实战
  13. 用画图取色和在Word中使用任意颜色
  14. 加入云上江湖—蚂蚁 SOFAStack
  15. finclip小程序运行机制与微信小程序运行机制
  16. 餐饮管理系统哪个好用?
  17. 移植 u-boot-2020.07 到 iTOP-4412(二)地址相关码 boot
  18. StackExchange.Redis Timeout awaiting response
  19. TreeSet集合的使用
  20. 知乎7w阅读!Android彻底组件化方案实践方法!已整理成文档

热门文章

  1. 离开页面触发事件onunload、onbeforeunload区别
  2. 无线路由器故障排除与解决方案
  3. 鸟哥的Linux私房菜(服务器)- 第十六章、文件服务器之二: SAMBA 服务器
  4. Java设计模式——工厂设计模式
  5. Nacos - nacos基础概念
  6. js 判断日期时间大小
  7. 科技云报道:ChatGPT的胜利,宣告知识图谱的消亡?
  8. 32位汇编语言学习笔记(36)--repne scasb指令
  9. 简单的gif动画制作软件 avi格式怎么转换成gif
  10. Palm OS开发工具简介【转载】