python - hadoop,mapreduce demo

 Hadoop,mapreduce 介绍

59888745@qq.com

 

大数据工程师是在Linux系统下搭建Hadoop生态系统(cloudera是最大的输出者类似于Linux的红帽),

把用户的交易或行为信息通过HDFS(分布式文件系统)等存储用户数据文件,然后通过Hbase(类似于NoSQL)等存储数据,再通过Mapreduce(并行计算框架)等计算数据,然后通过hiv或pig(数据分析平台)等分析数据,最后按照用户需要重现出数据.

 

Hadoop是一个由Apache基金会所开发的开源分布式系统基础架构

Hadoop,最基础的也就是HDFS和Mapreduce了,
HDFS是一个分布式存储文件系统
Mapreduce是一个分布式计算的框架,两者结合起来,就可以很容易做一些分布式处理任务了

 

大纲:

一、MapReduce 基本原理

二、MapReduce 入门示例 - WordCount 单词统计

三、MapReduce 执行过程分析

  • 实例1 - 自定义对象序列化

  • 实例2 - 自定义分区

  • 实例3 - 计算出每组订单中金额最大的记录

  • 实例4 - 合并多个小文件

  • 实例5 - 分组输出到多个文件

四、MapReduce 核心流程梳理

  • 实例6 - join 操作

  • 实例7 - 计算出用户间的共同好友

五、下载方式

一、MapReduce基本原理

MapReduce是一种编程模型,用于大规模数据集的分布式运算。

1、MapReduce通俗解释

图书馆要清点图书数量,有10个书架,管理员为了加快统计速度,找来了10个同学,每个同学负责统计一个书架的图书数量。

张同学统计 书架1

王同学统计 书架2

刘同学统计 书架3

……

过了一会儿,10个同学陆续到管理员这汇报自己的统计数字,管理员把各个数字加起来,就得到了图书总数。

这个过程就可以理解为MapReduce的工作过程。

2、MapReduce中有两个核心操作

(1)map

管理员分配哪个同学统计哪个书架,每个同学都进行相同的“统计”操作,这个过程就是map。

(2)reduce

每个同学的结果进行汇总,这个过程是reduce。

3、MapReduce工作过程拆解

下面通过一个景点案例(单词统计)看MapReduce是如何工作的。

有一个文本文件,被分成了4份,分别放到了4台服务器中存储

Text1:the weather is good

Text2:today is good

Text3:good weather is good

Text4:today has good weather

现在要统计出每个单词的出现次数。

处理过程

(1)拆分单词

  • map节点1

输入:“the weather is good”

输出:(the,1),(weather,1),(is,1),(good,1)

  • map节点2

输入:“today is good”

输出:(today,1),(is,1),(good,1)

  • map节点3

输入:“good weather is good”

输出:(good,1),(weather,1),(is,1),(good,1)

  • map节点4

输入:“today has good weather”

输出:(today,1),(has,1),(good,1),(weather,1)

(2)排序

  • map节点1

  • map节点2

  • map节点3

  • map节点4

(3)合并

  • map节点1

  • map节点2

  • map节点3

  • map节点4

(4)汇总统计

每个map节点都完成以后,就要进入reduce阶段了。

例如使用了3个reduce节点,需要对上面4个map节点的结果进行重新组合,比如按照26个字母分成3段,分配给3个reduce节点。

Reduce节点进行统计,计算出最终结果。

这就是最基本的MapReduce处理流程。

4、MapReduce编程思路

了解了MapReduce的工作过程,我们思考一下用代码实现时需要做哪些工作?

  1. 在4个服务器中启动4个map任务

  2. 每个map任务读取目标文件,每读一行就拆分一下单词,并记下来次单词出现了一次

  3. 目标文件的每一行都处理完成后,需要把单词进行排序

  4. 在3个服务器上启动reduce任务

  5. 每个reduce获取一部分map的处理结果

  6. reduce任务进行汇总统计,输出最终的结果数据

但不用担心,MapReduce是一个非常优秀的编程模型,已经把绝大多数的工作做完了,我们只需要关心2个部分:

  1. map处理逻辑——对传进来的一行数据如何处理?输出什么信息?

  2. reduce处理逻辑——对传进来的map处理结果如何处理?输出什么信息?

编写好这两个核心业务逻辑之后,只需要几行简单的代码把map和reduce装配成一个job,然后提交给Hadoop集群就可以了。

至于其它的复杂细节,例如如何启动map任务和reduce任务、如何读取文件、如对map结果排序、如何把map结果数据分配给reduce、reduce如何把最终结果保存到文件等等,MapReduce框架都帮我们做好了,而且还支持很多自定义扩展配置,例如如何读文件、如何组织map或者reduce的输出结果等等,后面的示例中会有介绍。

二、MapReduce入门示例:WordCount单词统计

WordCount是非常好的入门示例,相当于helloword,下面就开发一个WordCount的MapReduce程序,体验实际开发方式。

example:

#删除已有文件夹
hadoop fs -rmr /chenshaojun/input/example_1
hadoop fs -rmr /chenshaojun/output/example_1

#创建输入文件夹
hadoop fs -mkdir /chenshaojun/input/example_1

#放入输入文件
hadoop fs -put text* /chenshaojun/input/example_1

#查看文件是否放好
hadoop fs -ls /chenshaojun/input/example_1

#本地测试一下map和reduce
head -20 text1.txt | python count_mapper.py | sort | python count_reducer.py

#集群上跑任务
hadoop jar /usr/lib/hadoop-current/share/hadoop/tools/lib/hadoop-streaming-2.7.2.jar \
-file count_mapper.py \   #提交文件到集群
-mapper count_mapper.py \
-file count_reducer.py \
-reducer count_reducer.py \
-input /chenshaojun/input/example_1 \
-output /chenshaojun/output/example_1   # 必须不存在,若存在output会抱错,不会覆盖

 

count_mapper.py

 

import sys

# input comes from STDIN (standard input)
for line in sys.stdin:
# remove leading and trailing whitespace
line = line.strip()
# split the line into words
words = line.split()
# increase counters
for word in words:
# write the results to STDOUT (standard output);
# what we output here will be the input for the
# Reduce step, i.e. the input for reducer.py
#
# tab-delimited; the trivial word count is 1
print '%s\t%s' % (word.lower(), 1)

 

count_reducer.py

 

from operator import itemgetter
import sys

current_word = None
current_count = 0
word = None

# input comes from STDIN
for line in sys.stdin:
# remove leading and trailing whitespace
line = line.strip()

# parse the input we got from mapper.py
word, count = line.split('\t', 1)

# convert count (currently a string) to int
try:
count = int(count)
except ValueError:
# count was not a number, so silently
# ignore/discard this line
continue

# this IF-switch only works because Hadoop sorts map output
# by key (here: word) before it is passed to the reducer
if current_word == word:
current_count += count
else:
if current_word:
# write result to STDOUT
print '%s\t%s' % (current_word, current_count)
current_count = count
current_word = word

# do not forget to output the last word if needed!
if current_word == word:
print '%s\t%s' % (current_word, current_count)

转载于:https://www.cnblogs.com/csj007523/p/7323788.html

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

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

相关文章

Vue父子组件间的通信

父组件通过 props 向下传递数据给子组件&#xff0c;子组件通过 events 向上给父组件发送消息。 父组件&#xff1a; <div><div style"background:#34495E;color: #fff; padding:20px"><p style"margin-bottom: 20px">这是父组件</p&…

1009 Product of Polynomials (25 分)

1009 Product of Polynomials (25 分) 这题目要卡的话只能卡第一个吧&#xff0c;考虑零项之后&#xff0c;这道题就简单了。 #include<iostream> #include<set> #include<vector> #include<iomanip> using namespace std; int main() {double cun1[1…

c语言pwm调制方式,pwm调制原理同步调制_几种pwm调制方式介绍 - 全文

PWM简介脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在从测量、通信到功率控制与变换的许多领域中。脉冲宽度调制是一种模拟控制方式&#xff0c;其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置&#xff0c;来…

c语言如何用循环语句一个字一个字的输出,怎样用c语言的for嵌套循环,用·画出泳字,求解,主要是怎样用循环语句打出,在某一行中既有空格又有·...

暗域天堂#include #include #include #include #include using namespace std;int get_character(unsigned char* pc1, unsigned char* pc2){unsigned char buf[100];cin >> buf;*pc1 buf[0];*pc2 buf[1];if (*pc1 {return -2;}if (*pc2 {return -2;}return 0;}void lo…

c语言赋值运算符左边必须是,C语言运算符入门讲解

概述C 语言运算符分为算术、关系、逻辑、赋值、逗号和 sizeof 5 大类。表达式&#xff1a;在 C/C 中&#xff0c;用运算符将操作对象连接起来就构成了表达式。表达式是用于计算的式子&#xff0c;是计算求值的基本单位。操作对象&#xff1a;又称操作数&#xff0c;操作数可以为…

MSYS2使用教程

一、安装 官方下载地址 http://www.msys2.org/ 指定好安装路径&#xff08;一般D根目录即可&#xff09;&#xff0c;一路下一步就好。 二、配置国内镜像、设置窗体修改颜色 使用[清华大学开源软件镜像站]中的地址&#xff0c;修改\etc\pacman.d目录下的三个文件。 配置教程 ht…

[原创]浅谈移动互联网App兼容性测试

[原创]浅谈移动互联网App兼容性测试 今天要谈的话题&#xff0c;估计各位测试都有感受&#xff0c;移动互联网App兼容性测试&#xff0c;我们到底测试覆盖如何去挑选机型&#xff1f;具体移动App兼容性测试如何开展&#xff1f;是不是应引进像testin这样的第三方来检查覆盖?可…

高仿人人android梦想版终极源码发送,人人Android客户端梦想版发布

人人网梦想版for Android 5.0.1下载(人人网Android客户端)人人网今天发布Android客户端“梦想版”&#xff0c;新版更新的“私信”功能与微信等聊天工具同出一辙&#xff0c;还可以发送语音和大幅表情。其他界面也进行了大幅更新。以下为人人网官方介绍&#xff1a;打开这篇日志…

android 平板方案,Android平板方案

一、英伟达(NVIDIA) Tegra 2NVIDIA Tegra 2处理器&#xff0c;采用40nm制程制造&#xff0c;集成8个不同功能的处理器&#xff0c;主要包括&#xff1a;两个ARMCortex-A9核心&#xff0c;运行频率1GHz。另外有一个ARM7处理器&#xff0c;一个音频处理器(AudioProcessor)&#x…

android点击灰色背景图片,android button按键失去焦点和点击后改变背景图片

android button按键得到焦点和点击后改变背景图片我也接受android不久&#xff0c;今天来给同学们分享一下button得到焦点和点击后改变背景图片&#xff0c;其实很简单就是两个事件setOnFocusChangeListener和setOnClickListener就OK了。这是Activity 中的代码。package com.ha…

android无线充产品,一天售罄!鲁蛋超薄无线快充太火爆 兼容苹果安卓成最大卖点...

3月5日&#xff0c;鲁大师发布了最新智能硬件产品——「鲁蛋超薄无线快充」。这项智能产品同样来自旗下品牌「鲁蛋」&#xff0c;它是一款兼具安卓与苹果的无线充电设备&#xff0c;并且输出功率最高达到10W。鲁蛋无线快充于3月6日凌晨上线京东&#xff0c;下单立减20元&#x…

ASP.NET MVC5(一):ASP.NET MVC概览

ASP.NET MVC概览 ASP.NET MVC是一种构建Web应用程序的框架&#xff0c;它将一般的MVC&#xff08;Model-View-Controller&#xff09;模式应用于ASP.NET框架。 ASP.NET MVC模式简介 MVC将Web应用程序划分为三个主要的部分&#xff0c;以下是MSDN给出的定义&#xff1a; 模型&am…

java-上传文件与现实上传文件

项目结构&#xff1a; 项目展示&#xff1a; 数据库&#xff1a; /* SQLyog Ultimate v12.09 (64 bit) MySQL - 5.5.53 : Database - fileupload ********************************************************************* *//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE*…

登录微信用android设备,Android 之微信登录

准备工作需要在微信开放平台注册登录账户。还得办理开发者资质认证&#xff0c;审核费用为300元。2.在微信开放平台创建移动应用&#xff0c;填写相关信息后提交审核。简述业务流程1.获取appId和secret2.通过appId和secret调微信接口获取 code3.通过code和getAccessToken()方法…

《浅谈CT》总结

注明来自 http://www.ssdfans.com/?p1941 这里说的CT&#xff0c;不是医院里面的CT&#xff0c;而是闪存的一种技术&#xff1a;Charge Trap。 闪存不只有Floating Gate&#xff0c;还有Charge Trap。 浮栅极材料是导体&#xff0c;一般为多晶硅。 CTF&#xff08;Charge Trap…

android可见区域,识别目标View在HorizontalScrollView可见区域

完成需求的时候涉及到这个所以撸了一下本文章是本人原创&#xff0c;转载请带原地址连接先放效果图(霁雪清虹"是目标)&#xff1a;首先需要一个自定义HorizontalScrollView&#xff0c;复写一个View的onScrollChanged方法&#xff0c;用于监听滑动变化代码如下&#xff1a…

AI单挑Dota 2世界冠军:被电脑虐哭……

OpenAI的机器人刚刚在 Dota2 1v1 比赛中战胜了人类顶级职业玩家 Denti。以建设安全的通用人工智能为己任的 OpenAI&#xff0c;通过“Self-Play”的方式&#xff0c;从零开始训练出了这个机器人。 Dota2沦陷 继横扫顶级的人类国际象棋大师和围棋大师后&#xff0c;计算机如今在…

鸿蒙关键技术研究,华为鸿蒙 2.0 系统主题演讲公布,详细架构 9 月 11 日揭晓

IT之家 8 月 30 日消息 华为 9 月 10 日将举行华为开发者大会 2020&#xff0c;华为官网表示&#xff0c;“我们将与您分享 HMS Core 5.0 最新进展&#xff0c; 揭开 HarmonyOS 和 EMUI 11 的神秘面纱。 振奋人心的新技术&#xff0c;深入的交流学习机会&#xff0c; 更灵动的想…

JAVA经典算法40题

【程序1】 题目&#xff1a;古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第四个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数为多少&#xff1f; 1.程序分析&#xff1a; 兔子…

度度熊与邪恶大魔王

链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid6082 Problem Description 度度熊为了拯救可爱的公主&#xff0c;于是与邪恶大魔王战斗起来。邪恶大魔王的麾下有n个怪兽&#xff0c;每个怪兽有a[i]的生命值&#xff0c;以及b[i]的防御力。度度熊一共拥有m种攻击方…