hadooppythonsql_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的工作过程,我们思考一下用代码实现时需要做哪些工作?

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

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

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

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

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

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

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

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

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)

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

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

相关文章

hdu 2896 病毒侵袭 ac自动机

1 /*2 hdu 2896 病毒侵袭 ac自动机 3 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 4 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 。本题中主要是计算每一个模式串5 在主串中有没…

axure原件 总是丢失_Axure实现提示文本单击显示后自动消失的效果

FORM一 .新增的input输入属性 1.email类型 在表单提交E-mail地址时,无效的输入会生成很多无效数据,对后期的数据检索造成一定的影响.所以在表单提交之前,需要对输入的E-mail地址进行有效 ...Google的Protobuf协议分析protobuf和thrift类似,也是一个序列化的协议实现,简称PB(下文…

linux php不能写文件内容,php 在linux系统下写出文件问题

最近写了一个简单的生成文件,服务器用的linux 但是在将文件写出到路径的时候就会写出一个其他的文件夹其中一些代码如下define("paddy",dirname(__FILE__));$gkrequest_uri();$filepathpaddy.$gk;createfile($filefath,$file);//$f…

python mysql删除数据_python-mysql删除和更新数据

删除数据import codecsimport MySQLdbdef connect_mysql():db_config {host: 192.168.48.128,port: 3306,user: xiang,passwd: 123456,db: python,charset: utf8}cnx MySQLdb.connect(**db_config)return cnxif __name__ __main__:cnx connect_mysql()sql select * from S…

xlat指令...

1 ;就是一个串str1, lea ebx, str1 然后我们ebx1总是加上的是一个字节, 无论(串是word, byte, dword)2 .3863 .model flat4 .stack 40965 include io.h6 ExitProcess proto near32 stdcall, deExitCode:dwo…

php 串口通信例程,HAL库串口通信例程

请问下 为什么要 用void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)这个函数呢?不用不行吗?static void MX_USART1_UART_Init(void){huart1.Instance USART1;huart1.Init.BaudRate 9600;huart1.Init.WordLength UART_WORDLENGTH_8B;huart1.Init.Stop…

char 类型与lpcwstr_「lpctstr」char* 与 LPCTSTR 类型的互相转换 - seo实验室

lpctstr1.char* 转换成 LPCTSTRchar ch[1024] "wo shi ni baba";int num MultiByteToWideChar(0,0,ch,-1,NULL,0);wchar_t *wide new wchar_t[num];MultiByteToWideChar(0,0,ch,-1,wide,num);解析:num 获得长字节所需的空间MultiByteToWideChar()表示将…

poj 2195 Going Home

1 /*2 做网络流的题建图真的是太重要了!3 本题是将人所在的位置和房子所在的位置建立边的联系,其中man到house这一条边的流量为 1, 费用为两者的距离4 而方向边的流量为 0, 费用为正向边的相反数(也就是沿着反…

CardLayout布局练习(小的图片浏览器)

1 /*2 涉及Panel中的图片的加载,还有Frame的关闭的方法, CardLayout(int hgap, int vgap)就会决定卡片面板的大小3 匿名类的使用。。。4 */5 import java.awt.*;6 import java.awt.event.*;7 import javax.swing.*;8 public class…

python求逆矩阵的方法,Python 如何求矩阵的逆

我就废话不多说了,大家还是直接看代码吧~import numpy as npkernel np.array([1, 1, 1, 2]).reshape((2, 2))print(kernel)print(np.linalg.inv(kernel))注意,Singular matrix奇异矩阵不可求逆补充:pythonnumpy中矩阵的逆和伪逆的区别定义&a…

plsql存过声明游标_plsql编程学习之游标一

oralce plsql编程的游标游标分类1显示游标2隐式游标隐式游标,oracle自动管理,不用声明,打开和关闭,ORACLE自动处理,使用隐式游标%FOUND时,需要加上 SQL%FOUND显示游标,需要自己声明,…

用命令行编译java并生成可执行的jar包

用命令行编译java并生成可执行的jar包 1.编写源代码。 编写源文件:CardLayoutDemo.java并保存,例如:I:\myApp\CardLayoutDemo.java。程序结构如下:package test;import java.awt.*; import javax.swing.*; //更多包的导入...clas…

python计时器单位,python(计时器)

计时器要求:定制一个计时器的类start 和 stop方法代表启动计时和停止计时假设计时器对象 t1,print(t1)和直接调用t1 均显示结果当计时器未启动或已停止计时,调用stop方法能给予温馨提示两个计时器对象可以相加: t1 t2只能使用提供…

查询分析300万笔记录_给你100万条数据的一张表,你将如何查询优化?

1.两种查询引擎查询速度(myIsam 引擎)InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 whe…

poj 3321 Apple Trie

/*poj 3321 Apple Trie 这道题的关键是如何将一个树建成一个一维数组利用树状数组来解题!可以利用dfs()来搞定,我们在对一个节点深搜后,所经过的节点的数目就是该节点的子树的数目所以我们利用start[i]数组来记录 i 节…

php美团项目分享,美团项目(纯代码)(示例代码)

一.框架搭建1.icon规格要求可从文档中查找,搜索app icon.2.因为很多界面重复利用,所以不用storyboarda.删除stroyboard,在设置中Info -> Main storyboard file base name 项直接去除b.创建ZXHomeViewController(UICollectionViewController)和ZXNavigationController(UINavi…

ioc spring 上机案例_Spring的IoC入门案例

1、创建工程,导入坐标1.1 创建工程1.2 导入坐标xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0org.examplespring_01_io…

java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题...

1 /*2 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中,3 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行4 */5 import static java.lang.System.out;6 7 public clas…

liunx php的项目地址,在 Linux 配置 PHP 项目

在 Linux 配置 PHP 项目一, 搭建测试环境软件环境:(PHP 项目)PHP5.4Apache(httpd2.4)mysql5.7二, 安装1挂载:1. 把 iso 的镜像文件放到虚拟机 Linux 的 CD/ROM(在右下角 (网络适配器 / 桥接模式) 旁有个光盘, 点击连接, 之后页面出现一个光盘)2. 使用挂载命令, 把 CD/ROM 设备里…

springwebflux 页面_【SpringBoot WEB系列】WebFlux静态资源配置与访问

上一篇博文介绍SpringMVC的静态资源访问,那么在WebFlux中,静态资源的访问姿势是否一致呢I. 默认配置与SpringBoot的默认配置一样,WebFlux同样是classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/…