当前位置: 首页 > news >正文

Python 3 使用Hadoop 3之MapReduce总结

MapReduce 运行原理

MapReduce简介

MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题。

MapReduce分成两个部分:Map(映射)和Reduce(归纳)。

  1. 当你向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分。
  2. 当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Reduce任务的主要目标就是把前面若干个Map的输出汇总并输出

MapReduce 基本模式和处理思想

大规模数据处理时,MapReduce在三个层面上的基本构思:

1、对付大数据处理:分而治之

        对相互之间不具有计算依赖关系的大数据,实现并行最自然的办法就是采取分而治之的策略。

2、上升到抽象模型:Mapper与Reduce

         MPI等并行计算方法缺少高层并行编程模型,程序员需要自行指定存储,计算,分发等任务,为了克服这一缺陷,MapReduce借鉴了Lisp函数式语言中的思想,用Map和Reduce两个函数提供了高层的并发编程模型抽象。

3、上升到架构:统一架构,为程序员隐藏系统层细节

        MPI等并行计算方法缺少统一的计算框架支持,程序员需要考虑数据存储、划分、分发、结果收集、错误恢复等诸多细节;为此,MapReduce设计并提供了同意的计算框架,为程序员隐藏了绝大多数系统层面的处理系统。

大数据处理:分而治之

 建立Map和Reduce抽象模型

借鉴函数式程序设计语言Lisp中的思想,定义了Map和Reduce两个抽象的操作函数:

Map:(k1:v1)->[(k2:v2)]
Reduce:(k2:[v2])->[(k3:v3)]
每个map都处理结构、大小相同的初始数据块,也就是(k1:v1),其中k1是主键,可以是数据块索引,也可以是数据块地址;

v1是数据。经过Map节点的处理后,生成了很多中间数据集,用[]表示数据集的意思。而Reduce节点接收的数据是对中间数据合并后的数据,也就是把key值相等的数据合并在一起了,即(k2:[v2]);再经过Reduce处理后,生成处理结果。

上升到架构:统一架构,为程序员隐藏系统层细节

 核心流程说明:

1.有一个待处理的大数据,被划分成大小相同的数据库(如64MB),以及与此相应的用户作业程序。

2.系统中有一个负责调度的主节点(Master),以及数据Map和Reduce工作节点(Worker).

3.用户作业提交个主节点。

4.主节点为作业程序寻找和配备可用的Map节点,并将程序传送给map节点。

5.主节点也为作业程序寻找和配备可用的Reduce节点,并将程序传送给Reduce节点。

6.主节点启动每一个Map节点执行程序,每个Map节点尽可能读取本地或本机架的数据进行计算。(实现代码向数据靠拢,减少集群中数据的通信量)。

7.每个Map节点处理读取的数据块,并做一些数据整理工作(combining,sorting等)并将数据存储在本地机器上;同时通知主节点计算任务完成并告知主节点中间结果数据的存储位置。

8.主节点等所有Map节点计算完成后,开始启动Reduce节点运行;Reduce节点从主节点所掌握的中间结果数据位置信息,远程读取这些数据。

9.Reduce节点计算结果汇总输出到一个结果文件,即获得整个处理结果。
 

Python 实现 MapReduce 

Python MapReduce 代码

        使用python写MapReduce的“诀窍”是利用Hadoop流的API,通过STDIN(标准输入)、STDOUT(标准输出)在Map函数和Reduce函数之间传递数据。

      我们唯一需要做的是利用Python的sys.stdin读取输入数据,并把我们的输出传送给sys.stdout。Hadoop流将会帮助我们处理别的任何事情。

Map阶段

PyCharm 功能测试代码:

# _*_ coding : UTF-8_*_
# 开发者 : zhuozhiwengang
# 开发时间 : 2023/8/14 15:38
# 文件名称 : pythonMap_2
# 开发工具 : PyCharm
import sys
for line in sys.stdin:line = line.strip()words = line.split()for word in words:print("%s\t%s" % (word, 1))

效果截图:

Reduce阶段

PyCharm 功能测试代码:

from operator import itemgetter
import syscurrent_word = None
current_count = 0
word = Nonefor line in sys.stdin:line = line.strip()word, count = line.split('\t', 1)try:count = int(count)except ValueError:  # count如果不是数字的话,直接忽略掉continueif current_word == word:current_count += countelse:if current_word:print("%s\t%s" % (current_word, current_count))current_count = countcurrent_word = wordif word == current_word:  # 不要忘记最后的输出print("%s\t%s" % (current_word, current_count))

效果截图:

Hadoop Streaming 

Hadoop streaming是Hadoop的一个工具, 它帮助用户创建和运行一类特殊的map/reduce作业。

实例:我们可以用Python来编写脚本:mapper.py和reducer.py。

语法:

$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper mapper.py \
-reducer reducer.py

Hadoop  Streaming工具会创建一个Map/Reduce作业,并把它发送给合适的集群,同时监视这个作业的整个执行过程。所以,面向具体任务,重点是我们该怎么编写python脚本呢?

总结:一、编写的代码要遵从标准输入输出流;

          二、因为程序是要上传到集群上执行的,一些Python库可能是不受支持的,应要注意这点。
 

操作实例

待补充 

相关文章:

Python 3 使用Hadoop 3之MapReduce总结

MapReduce 运行原理 MapReduce简介 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题。 MapReduce分成两个部分:Map(映射)和Reduce(归纳)。…...

KU Leuven TU Berlin 推出“RobBERT”,一款荷兰索塔 BERT

荷兰语是大约24万人的第一语言,也是近5万人的第二语言,是继英语和德语之后第三大日耳曼语言。来自比利时鲁汶大学和柏林工业大学的一组研究人员最近推出了基于荷兰RoBERTa的语言模型RobBERT。 谷歌的BERT(来自Transformers的B idirectional …...

Postern中配置和使用Socks5代理指南

在Postern中配置和使用Socks5代理,可以为你的爬虫项目提供更灵活、更可靠的网络连接。本文将向你分享如何在Postern中配置和使用Socks5代理的方法,解决可能遇到的问题 配置和使用Socks5代理的步骤: 1.了解Socks代理:了解Socks5代…...

android 窗口级模糊实现方式

在Android上实现窗口级模糊效果有多种方法,下面列出了其中两种常用的实现方式: RenderScript模糊效果: 使用ScriptIntrinsicBlur类在RenderScript中实现模糊效果。创建一个RenderScript实例并将要模糊的图像传递给它。创建一个ScriptIntrinsi…...

面试热题(数组中的第K个最大元素)

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 输入: [3,2,1,5,6,4] 和 k 2 输出: 5提到数组中最大元素,我们往往想到就是先给数组…...

HTTP2协议介绍

前言 HTTP是现代互联网通信的基础协议之一,早在1991年,HTTP/0.9版本就诞生了,之后又陆续发布了HTTP/1.0和HTTP/1.1,为互联网应用提供了更高效和可靠的通信方式。 随着时间的推移,互联网的规模和复杂性不断扩大&#x…...

矩阵的转置

题目: 给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7],[2,5,8],[3,6,9]]class Solution(object):def transpose(self, matrix):"&q…...

web集群学习:nginx+keepalived实现负载均衡高可用性

目录 项目架构 一,环境介绍 二,项目部署 在Web服务器上配置Web测试页面 nginx负载均衡配置 配置Nginx_Master 通过vrrp_script实现对集群资源的监控(1>通过killall命令探测服务运行状态) 通过vrrp_script实现对集群资源…...

MFC第二十九天 CView类的分支(以及其派生类的功能)、MFC六大关键技术

文章目录 CView类的分支CEditViewCHtmlViewMainFrm.h CMainFrame 类的接口CMainView .h CListCtrl与CListView的创建原理 CTreeViewCTreeCtrl类简介CTreeCtrl类的原理以及常用功能 MFC六大关键技术视图和带分割栏的框架开发与消息路由CLeftView.cppCRightView.hCRightView.cppC…...

SpringBoot复习:(37)自定义ErrorController

所有接口统一返回的数据格式 package cn.edu.tju.domain;public class MyResponse {private int code;private String message;private String exception;private String stack;public int getCode() {return code;}public void setCode(int code) {this.code code;}public S…...

Linux学习之防火墙概述

防火墙分类: 软件防火墙:常用于数据包的过滤,比如限制某些ip或者端口,进行某些数据的转发或者传送 硬件防火墙:防御地域攻击 软件防火墙的分类: 包过滤防火墙:控制比较宽泛,防御效果…...

JS_围绕圆形滑动

需求&#xff1a;滑动手势最大不能超过一个半径为50的圆形&#xff0c;超出围绕圆形边线滑动 这里只提供一个思路&#xff0c;下面代码可以运行&#xff0c;但是要使用需要改成自己的参数 <div style"width: 100%;height: 100vh;display: flex;justify-content: cente…...

Ubuntu上安装RabbitMQ

在Ubuntu上安装RabbitMQ并设置管理员用户为"admin"&#xff0c;密码为"123456"&#xff0c;并开启开机自启 更新系统软件包列表。在终端中执行以下命令&#xff1a; sudo apt update安装RabbitMQ服务器软件包。运行以下命令&#xff1a; sudo apt insta…...

统计学和机器学习之间的联系和区别

一、说明 老实说&#xff0c;我厌倦了几乎每天都在社交媒体和我的大学里听到这场辩论。通常&#xff0c;这伴随着一些模糊的陈述来解释这个问题。双方都为此感到内疚。我希望在本文结束时&#xff0c;您将对这些有些模糊的术语有更明智的立场。 二、论点 与普遍的看法相反&…...

linux中profile.d和profile的区别

profile.d在profile中加载 profile文件 PATH"/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/scripts:/soc/bin:/soc/scripts" LD_LIBRARY_PATH"/usr/local/lib:/usr/lib:/opt/lib:/soc/lib" export SSL_LDPATH/usr/local/lib/ export ZLIB_LDPATH/usr/lo…...

MobaXterm sftp 不能拖拽文件夹了?

原因是我把mobaxterm设置成Windows管理员权限运行了,结果就不能拖动文件。把管理员权限去掉就恢复正常了。 原因是我把mobaxterm设置成Windows管理员权限运行了,结果就不能拖动文件。把管理员权限去掉就恢复正常了。 原因是我把mobaxterm设置成Windows管理员权限运行了,结果就不…...

【ArcGIS Pro二次开发】(59):Editing(编辑)模块

ArcGIS Pro SDK中的"Editing"&#xff08;编辑&#xff09;模块提供了一系列API和工具&#xff0c;允许开发人员在ArcGIS Pro中实现各种地图数据编辑操作&#xff0c;从简单的要素绘制到复杂的数据集编辑。 下面列举一些常用编辑工具的实现方法。 1、获取所选要素的…...

WebSocket与消息推送

B/S结构的软件项目中有时客户端需要实时的获得服务器消息&#xff0c;但默认HTTP协议只支持请求响应模式&#xff0c;这样做可以简化Web服务器&#xff0c;减少服务器的负担&#xff0c;加快响应速度&#xff0c;因为服务器不需要与客户端长时间建立一个通信链接&#xff0c;但…...

5.1 web浏览安全

数据参考&#xff1a;CISP官方 目录 Web应用基础浏览器所面临的安全威胁养成良好的Web浏览安全意识如何安全使用浏览器 一、Web应用基础 1、Web应用的基本概念 Web ( World wide Web) 也称为万维网 脱离单机Web应用在互联网上占据了及其重要的地位Web应用的发展&#xf…...

(六)Unity开发Vision Pro——词汇表

1.PolySpatial Core (com.unity.polyspatial)&#xff1a;基础 PolySpatial 包&#xff0c;初始化和所有设置从这里开始。它执行更改跟踪和处理、序列化/反序列化&#xff0c;并包括 ShaderGraph 到 MaterialX 转换器 2.PolySpatial XR (com.unity.polyspatial.xr)&#xff1a…...

解锁iOS设备无限可能:2026最新越狱技术深度解析与实战指南

解锁iOS设备无限可能&#xff1a;2026最新越狱技术深度解析与实战指南 【免费下载链接】Jailbreak iOS 26.4 - 26, 17 - 17.7.5 & iOS 18 - 18.7.3 Jailbreak Tools, Cydia/Sileo/Zebra Tweaks & Jailbreak News Updates || AI Jailbreak Finder &#x1f447; 项目地…...

HTTPS抓包失败的七层根因与实战定位法

1. 为什么HTTPS抓包总在“看不见”的地方翻车&#xff1f;你刚配好Fiddler或Charles&#xff0c;证书也装了、代理也开了、手机Wi-Fi也指向了电脑IP&#xff0c;可一打开App——抓包窗口空空如也&#xff0c;连个DNS请求都不见&#xff1b;或者只看到一堆CONNECT隧道建立记录&a…...

ImageSearch与Everything集成:如何利用文件搜索神器提升索引速度10倍

ImageSearch与Everything集成&#xff1a;如何利用文件搜索神器提升索引速度10倍 【免费下载链接】ImageSearch 基于.NET10的本地硬盘千万级图库以图搜图案例Demo和图片exif信息移除小工具分享 项目地址: https://gitcode.com/gh_mirrors/im/ImageSearch 想要在本地硬盘…...

告别卡顿!用IL2CPP优化你的Unity游戏:性能提升与包体瘦身实测

告别卡顿&#xff01;用IL2CPP优化你的Unity游戏&#xff1a;性能提升与包体瘦身实测最近在优化一款Unity游戏时&#xff0c;我发现了一个令人头疼的问题&#xff1a;游戏在低端设备上频繁卡顿&#xff0c;包体大小也超出了预期。经过一番探索&#xff0c;我决定尝试将脚本后端…...

2026年怎么安装OpenClaw?阿里云部署及配置Token Plan保姆级指南

2026年怎么安装OpenClaw&#xff1f;阿里云部署及配置Token Plan保姆级指南。OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主…...

PostgreSQL COPY命令:高效数据导入的最佳实践

引言 在处理大量数据插入场景时&#xff0c;传统的INSERT语句往往会成为性能瓶颈。PostgreSQL提供了COPY命令&#xff0c;能够显著提升数据导入效率。本文将深入探讨COPY命令的工作原理、使用方法以及为什么它比普通INSERT更快。 什么是COPY命令&#xff1f; COPY是PostgreSQL提…...

机器学习预测器评估随机数生成器最小熵:原理、实现与对比分析

1. 项目概述&#xff1a;当机器学习遇上随机性评估在信息安全领域&#xff0c;随机数生成器的质量是基石。无论是生成加密密钥、初始化向量&#xff0c;还是为各类协议提供随机性&#xff0c;其输出的不可预测性直接决定了整个系统的安全强度。我们如何量化这种“不可预测性”&…...

技术人的沟通技巧:如何与非技术人员有效沟通

技术人的沟通技巧&#xff1a;如何与非技术人员有效沟通 引言 作为一名技术人&#xff0c;我们不仅需要具备扎实的技术能力&#xff0c;还需要具备良好的沟通能力。特别是当我们需要与非技术人员沟通时&#xff0c;如何将复杂的技术问题用简单易懂的语言表达出来&#xff0c;是…...

DeepSeek计费策略终极对比:RPM限制、上下文长度溢价、多模态附加费,一文讲透

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek计费模式分析 DeepSeek 提供的 API 服务采用按 token 用量计费的精细化模型&#xff0c;其计费逻辑与请求类型&#xff08;输入/输出&#xff09;、模型版本&#xff08;如 DeepSeek-VL、DeepSeek-Co…...

机器学习可复现性危机:八大维度解析与工程实践指南

1. 项目概述&#xff1a;为什么我们需要重新审视机器学习的“可复现性”&#xff1f;如果你在机器学习领域摸爬滚打过几年&#xff0c;大概率遇到过这样的场景&#xff1a;兴冲冲地打开一篇顶会论文的GitHub仓库&#xff0c;按照README的指示安装依赖、运行脚本&#xff0c;结果…...