我是Hadoop的新手,并试图理解它。我找到了一个很好的解释 HDFS和MapReduce的简单示例(见下文)。但是我不能 谷歌任何类似YARN的简单例子。 请有人解释一下 (比如外行人)?
想想一个包含美联航每个人的电话号码的文件 状态;名称以A开头的人可能存储在服务器上 1,服务器2上的B,依此类推。
在Hadoop世界中,此电话簿的各个部分将存储在整个群集中, 并重建整个电话簿,您的程序将需要块 来自群集中的每个服务器。要在组件失败时实现可用性, 默认情况下,HDFS将这些较小的片段复制到另外两台服务器上。 (这种冗余可以在每个文件的基础上增加或减少 整个环境;例如,开发Hadoop集群通常不会 需要任何数据冗余。)这种冗余提供了多种好处 明显是更高的可用性。
此外,这种冗余允许Hadoop集群中断工作 较小的块并在群集中的所有服务器上运行这些作业以获得更好的效果 可扩展性。最后,您将获得数据局部性的好处,这是至关重要的 使用大型数据集时。我们稍后将详述这些重要的好处 本章。
让我们看一个简单的例子。假设您有五个文件和每个文件 包含代表城市的两列(一个键和一个Hadoop术语中的值) 以及各个城市记录的相应温度 测量天数。当然,我们已经使这个例子非常简单,所以很容易 跟随。你可以想象一个真正的应用程序不会那么简单 它可能包含数百万甚至数十亿行,而它们可能不是 整齐格式化的行;事实上,无论金额多大或多小 您需要分析的数据,我们在这里讨论的关键原则仍然是 相同。无论哪种方式,在这个例子中,城市是关键,温度是 值。
多伦多,20岁 惠特比,25岁 纽约,22 罗马,32岁 多伦多,4 罗马,33岁 纽约,18岁
在我们收集的所有数据中,我们希望找到最高温度 对于所有数据文件中的每个城市(请注意,每个文件可能包含 同一个城市多次代表)。使用MapReduce框架,我们可以 将其分解为五个地图任务,其中每个映射器在五个中的一个上工作 文件和映射器任务遍历数据并返回最大值 每个城市的温度。例如,从一个映射器生成结果 上面数据的任务看起来像这样:
(多伦多,20岁)(惠特比,25岁)(纽约,22岁)(罗马,33岁)
让我们假设其他四个映射器任务(不处理其他四个文件) 这里显示的产生了以下中间结果:
(多伦多,18岁)(惠特比,27岁)(纽约,32岁)(罗马,37岁)(多伦多,32岁)(惠特比,20岁) (纽约,33)(罗马,38)(多伦多,22)(惠特比,19)(纽约,20)(罗马, 31)(Toronto,31)(Whitby,22)(纽约,19)(罗马,30)
所有这五个输出流都将被输入到reduce任务中 结合输入结果并为每个城市输出单个值,生成一个 最终结果如下:
(多伦多,32岁)(惠特比,27岁)(纽约,33岁)(罗马,38岁)
作为类比,您可以将地图和减少任务视为人口普查的方式 在罗马时代进行的,人口普查局将派遣人员前往 帝国的每个城市。每个城市的每个人口普查员都有责任 计算该城市的人数,然后将结果返回给 首都。
在那里,每个城市的结果将减少到一个计数(总和) 所有城市)确定帝国的总人口。这种映射 人们到城市,并行,然后结合(减少)是 比派一个人计算每个人的数量要高得多 帝国以连续的方式。
答案 0 :(得分:0)
假设您有4台机器,每台机器配有4GB RAM和双核CPU 您可以将YARN呈现给能够分发和并行化工作负载的应用程序,例如MapReduce,YARN将响应它能够接受8个CPU内核上的16GB应用程序工作负载。
并非所有节点都需要相同,有些节点可以与GPU资源或更高的内存吞吐量一起使用,但是对于任何单个正在运行的应用程序,您将始终受到组中最小节点的限制......并且框架决定根据可用资源部署代码的节点,而不是您。当NodeManager与HDFS数据节点(它们在同一台机器上运行)组合时,试图读取文件的代码将被包含您需要的部分文件的机器运行。
基本上,将存储分成小块(HDFS),提供一种将这些块读入完整文件(MapReduce)的方法,并使用一些处理引擎将该操作公平地或贪婪地分配到资源池(YARN的Fair Scheduler或容量调度程序)