Hadoop自学笔记(三)MapReduce简单介绍

1. MapReduce Architecture

MapReduce是一套可编程的框架,大部分MapReduce的工作都能够用Pig或者Hive完毕。可是还是要了解MapReduce本身是怎样工作的,由于这才是Hadoop的核心,而且能够为以后优化和自己写做准备。

 

Job Client, 就是用户

Job TrackerTask Tracker也是一种Master - Slave构建

 

工作流程(MapReduce Pipeline

 

Job Client提交了MapReduce的程序(比方jar包中的二进制文件)。所须要的数据,结果输出位置,提交给Job Tracker. Job Tracker会首先询问Name Node, 所须要的数据都在哪些block里面,然后就近选择一个Task Tracker(离这些所需数据近期的一个task tracker,可能是在同一个Node上或者同一个Rack上或者不同rack),把这个任务发送给该Task Tracker, Task Tracker来真正运行该任务。Task Tracker内部有Task Slots来真正运行这些任务。假设运行失败了。Task Tracker就好汇报给Job Tracker, Job Tracker就再分配给别的Task Tracker来运行。Task Tracker在运行过程中要不断的向Job Tracker汇报。最后Task Tracker运行完毕后,汇报给Job TrackerJob Tracker就更新任务状态为成功。

 

注意,当用户提交一个MapReduce任务的时候,不只同一时候把任务提交给Job Tracker,同一时候还会拷贝一份到HDFS的一个公共位置(图中的咖啡位置),由于传递代码和命令相对要easy一些。然后Task Tracker就能够非常方便的得到这些代码。

 

详细步骤就是图中的7步。





2. MapReduce Internals

 

Split阶段:依据Input Format。把输入数据切割成小部分,该阶段与Map任务同一时候运行,切割后就放到不同的Mapper里面。

Input Format: 决定了数据怎样被切割放入Mapper。比方Log, 数据库,二进制码,等。

Map阶段:把切割后传入的splits转化成一些key-value对。怎样转化取决于用户代码怎么写的。

Shuffle & Sort阶段:把Map阶段得到的数据归类,然后送给Reducers

Reduce阶段:把送入的Map数据(Key, Value)依照用户的代码进行整合处理。

Output Format: Reduce阶段处理完后。结果依照此格式放入HDFS的输出文件夹。

 

Imperative Programming Paradigm: 把计算当做一系列改变程序状态的过程。

也就是程序化编程。更加关注对象和状态。

 

Functional Programming Paradigm: 大致就是函数化编程,把一系列计算作为一个数学函数。Hadoop使用的是这样的编程范式。

有输入,有输出;没有对象没有状态。


 

为了优化起见,Hadoop还加入了很多其它的一个接口,combine阶段,见下图。主要是在输送到Shuffle/sort阶段前。如今本地进行一次小的Reduce计算。这样能够省非常多带宽(还记得job的代码放入一个公共区域了吗)


上面的整个过程看上去可能不那么直观,可是这是Hadoop最难理解的部分了。理解了这个流程(Hadoop Pipeline),就更easy理解以后的内容了。

 

3. MapReduce Example

 

举样例来说明,在实际的机器操作中Hadoop怎样完毕上述任务。

 

Windows环境下安装了一个hyperV软件。里面有四个Hadoop节点。每一个Hadoop节点都是一个Ubuntu环境。



能够看到上面有一个Name Node,还有三个Data Node

首先,连接上Name Node。而且打开一个Data Node节点。

进入Name NodeUbuntu系统中。打开一个终端。输入jps,能够看到jvm里面正在运行的东西。


在Data Node机器中运行相同命令,能够看到里面运行着DataNode, Jps, TaskTracker三个内容。

 

首先进入Data Node的机器里面。到根文件夹以下创建一个文件,叫words.txt,文件内容就是上图中要分析的一些词。


第二步。把这个Words.txt文件放入HDFS中。

首先

hadoop/bin/hadoop fs -ls 

查看眼下HDFS中的文件

然后新建一个文件夹

Hadoop/bin/hadoop fs -mkdir /data



我们能够使用浏览器来看看HDFS中的文件系统

浏览器中输入hnname:50070,打开Web UI


能够再Live Nodes里面看到刚刚新建的data文件夹。运行

hadoop/bin/hadoop fs -copyFromLocal words.txt /data

然后words.txt就复制到/data文件夹下了。能够使用Web UI来验证。

 

第三步,运行MapReduce 任务。

这个任务是统计单词频率,这个任务已经由现成的jar包写好了,在hadoop/bin/文件夹下,hadoop-examples-1.2.0.jar. 这个文件中面有非常多非常多写好的MapReduce任务。



运行命令:

Hadoop/bin/hadoop jar hadoop/hadoop*examples.jar wordcount /data/words.txt /data/results

 

先指定jar包,再指定程序名wordcount, 再指定输入数据/data/words.txt 最后是输出文件夹/data/results, 没有文件夹会创建一个。


运行完毕后。能够通过Web UI来看运行结果。



我擦。原来的图片太多了发不了。不得不说删掉几张。

。。。



转载于:https://www.cnblogs.com/ldxsuanfa/p/9941414.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷 P2051 [AHOI2009]中国象棋 解题报告

P2051 [AHOI2009]中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法。大家肯定很清楚&am…

VirtualDOM与diff(Vue实现)

写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出。文章的原地址:https://github.com/answershuto/learnVue。在学习过程中,为Vue加上了…

使用Java的RESTful Web服务

REST代表“代表性状态转移”,由Roy Fielding于2000年在其论文“建筑风格和基于网络的软件体系结构设计”中首次提出。 REST是一种建筑风格。 HTTP是一种协议,其中包含一组REST体系结构约束。 REST基础 REST中的所有内容都被视为资源。 每个资源都由UR…

android 基础应用程序,android应用程序基本实现(基础篇).ppt

《android应用程序基本实现(基础篇).ppt》由会员分享,可在线阅读,更多相关《android应用程序基本实现(基础篇).ppt(22页珍藏版)》请在人人文库网上搜索。1、Android应用程序基本实现,复杂的应用,上节课,我们实现了一个基本的android的应用程序…

windows npm安装webpack

Webpack: Webpack 是一个前端资源加载/打包工具。 它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。 参考下图: 安装Webpack: 1.首先需要安装node.js(npm) 下载地址:node.js dow…

ThreadLocal如何实现?

这是我上周的帖子的后续文章,在那篇文章中我解释了ThreadLocal用法的动机 。 从帖子中我们可以回想起,如果您希望每个线程都有一个独立初始化的变量副本,则ThreadLocal确实是一个很酷的概念。 现在,好奇的人可能已经开始问“我如何…

WPFの操作文件浏览框几种方式

WPFの操作文件浏览框几种方式 原文:WPFの操作文件浏览框几种方式方式1: 使用win32控件OpenFileDialog Microsoft.Win32.OpenFileDialog ofd new Microsoft.Win32.OpenFileDialog(); ofd.DefaultExt ".xml"; ofd.Filter "xml file|*.xml"; if…

为什么你应该尝试@reach/router

最近react-router的一个作者另外写了一个类react-router的组件 reach/router,尝试后感觉太棒了。如果你的项目只是web端的话我认为可以把你的react-router换掉了。下面是我到目前看到的所有非常好的点。 小,就4kb,压缩后比react-router小40kb左右。 更少…

android 浏览器 div穿透,解决IE 上重叠div 对 mouseover 事件的穿透方法之一

解决IE 下重叠div 对 mouseover 事件的穿透方法之一? ? ? ? 历经一天半的时间,我这前端的白痴终于想到了一个解决IE 下重叠div ?对 mouseover 事件的穿透方法。??现象: 两个并列关系的Div(没有父子关系),但是两个Div在位置上面有重叠&…

类加载器工作机制

类加载器工作机制:1.装载:将Java二进制代码导入jvm中,生成Class文件。2.连接:a)校验:检查载入Class文件数据的正确性 b)准备:给类的静态变量分配存储空间 c)解析&#xf…

webviewjavascriptbridge android ios,js与ios交互使用WebViewJavascriptBridge如何写多个函数

//js与webview交互初始化function setupWebViewJavascriptBridge(callback) {if (window.WebViewJavascriptBridge) {return callback(WebViewJavascriptBridge);}if (window.WVJBCallbacks) {return window.WVJBCallbacks.push(callback);}window.WVJBCallbacks [callback];v…

JavaFX中的塔防

我想长时间使用我的游戏引擎来编写《塔防》游戏,但是由于另一个小组努力创建JavaFX《塔防》游戏,所以我认为我宁愿创建另一款游戏。 从邮件列表中,我了解到不再开发其他游戏。 因此,我决定尝试一下。 塔防是一款非常适合基于图块…

CSS pointer-events属性的使用

楔子 在前端的开发中,我们都是直接与用户接触,应该尽量让用户感到操作畅快愉悦,获得类似native的感觉。其中动画是最常用的方法。 这里的需求是,弹层的设计,这个弹层希望可以像 native 上的弹层一样,点击…

海思NB-IOT的SDK看门狗的使用

1. 看门狗需要喂狗,如果自己写的任务一直运行,那么空闲任务无法运行会导致看门狗复位,来看下看门狗的机制,首先系统启动的时候创建了空闲任务 在这个函数里面void vTaskStartScheduler( void )创建了下面的空闲任务 xReturn xTas…

分布式Session框架

分布式Session框架 配置服务器,Zookeeper集群管理服务器可以统一管理所有服务器的配置文件共享这些Session存储在一个分布式缓存中,可以随时写入和读取,而且性能要很好,如Memcache,Tair。封装一个类继承自HttpSession&…

向您的JVM添加一些熵

能否生成真正的随机数取决于系统中的熵。 有人声称,这可以通过掷骰子来保证。 其他人认为,用此主体替换OpenJDK的java.math.Random.nextInt()方法将有所帮助: public int nextInt() {return 14; }资料来源&#xff1a…

android源码多少行,Android源码资料

缺点:有时会访问不了优点:搜索方便,支持跳转引用)一个操作的小技巧,不想跳转引用的类覆盖当前页面,可以按下ctrl键点击。https://www.cnblogs.com/CVstyle/p/6395662.htmlhttps://www.jianshu.com/p/25a908c7eefaAndro…

Android初学第80天

Android初学第80天 20_MVVM 代码 BeatBox BeatBox.java package com.bignerdranch.android.beatbox;import android.content.Context; import android.content.res.AssetManager; import android.util.Log;import java.io.IOException; import java.util.ArrayList; import jav…

深入理解JavaScript之Event Loop

前言 最近阅读《高性能JavaScript》时,第六章谈到“通过定时器将JavaScript执行代码的控制权先让给浏览器用于更新UI状态,然后再将控制权交回给JavaScript代码,这样就可以使得页面更为流畅”,就联想到了之前理解的事件循环。 这…

使用EasyPoi导出Excel

Excel模板来自自己写死的一个excel模板,相当于是用户查询数据,数据填充到一个模板的Excel里,再导出Excel /*创建模板*/String a request.getSession().getServletContext().getRealPath("/resource/河南能源化工集团安全监控系统联网系统…