Python 3 使用Hadoop 3之MapReduce总结
MapReduce 运行原理
MapReduce简介
MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题。
MapReduce分成两个部分:Map(映射)和Reduce(归纳)。
- 当你向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分。
- 当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_围绕圆形滑动
需求:滑动手势最大不能超过一个半径为50的圆形,超出围绕圆形边线滑动 这里只提供一个思路,下面代码可以运行,但是要使用需要改成自己的参数 <div style"width: 100%;height: 100vh;display: flex;justify-content: cente…...
Ubuntu上安装RabbitMQ
在Ubuntu上安装RabbitMQ并设置管理员用户为"admin",密码为"123456",并开启开机自启 更新系统软件包列表。在终端中执行以下命令: sudo apt update安装RabbitMQ服务器软件包。运行以下命令: sudo apt insta…...
统计学和机器学习之间的联系和区别
一、说明 老实说,我厌倦了几乎每天都在社交媒体和我的大学里听到这场辩论。通常,这伴随着一些模糊的陈述来解释这个问题。双方都为此感到内疚。我希望在本文结束时,您将对这些有些模糊的术语有更明智的立场。 二、论点 与普遍的看法相反&…...
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"(编辑)模块提供了一系列API和工具,允许开发人员在ArcGIS Pro中实现各种地图数据编辑操作,从简单的要素绘制到复杂的数据集编辑。 下面列举一些常用编辑工具的实现方法。 1、获取所选要素的…...
WebSocket与消息推送
B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链接,但…...
5.1 web浏览安全
数据参考:CISP官方 目录 Web应用基础浏览器所面临的安全威胁养成良好的Web浏览安全意识如何安全使用浏览器 一、Web应用基础 1、Web应用的基本概念 Web ( World wide Web) 也称为万维网 脱离单机Web应用在互联网上占据了及其重要的地位Web应用的发展…...
(六)Unity开发Vision Pro——词汇表
1.PolySpatial Core (com.unity.polyspatial):基础 PolySpatial 包,初始化和所有设置从这里开始。它执行更改跟踪和处理、序列化/反序列化,并包括 ShaderGraph 到 MaterialX 转换器 2.PolySpatial XR (com.unity.polyspatial.xr):…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
起重机起升机构的安全装置有哪些?
起重机起升机构的安全装置是保障吊装作业安全的关键部件,主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理: 一、超载保护装置(核心安全装置) 1. 起重量限制器 功能:实时监测起升载荷&a…...
