返回顶部
首页 > 资讯 > 数据库 >hadoop map-reduce中的文件并发操作介绍
  • 202
分享到

hadoop map-reduce中的文件并发操作介绍

2024-04-02 19:04:59 202人浏览 安东尼
摘要

本篇内容主要讲解“hadoop map-reduce中的文件并发操作介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“hadoop map-reduce中的文件

本篇内容主要讲解“hadoop map-reduce中的文件并发操作介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“hadoop map-reduce中的文件并发操作介绍”吧!

这样的操作在map端或者reduce端均可。下面以一个实际业务场景中的例子来简要说明。

问题简要描述:

假如reduce输入的key是Text(String),value是BytesWritable(byte[]),不同key的种类为100万个,value的大小平均为30k左右,每个key大概对应 100个value,要求对每一个key建立两个文件,一个用来不断添加value中的二进制数据,一个用来记录各个value在文件中的位置索引。(大量的小文件会影响hdfs的性能,所以最好对这些小文件进行拼接)

当文件数量较小时,可以考虑使用MultipleOutput来进行key-value的分流,可以按照key的不同,将其输出到不同的文件或者目录中。但是reduce的数量只能为1,不然每个reduce都会生成相同的目录或者文件,不能达到最终的目的。此外最重要的是,操作系统对每个进程打开的文件数量的限制,默认为1024,集群的各个datanode可能会配置更高的值,但最多在几万左右,仍然是一个限制因素。不能满足百万文件的需求。

reduce的主要目的是用来归并key-value并输出到HDFS上,我们当然也可以在reduce中进行其他的操作,比如文件读写。因为默认的partitioner保证同一个key的数据肯定会在同一个reduce中,所以在每个reduce中只用打开两个文件进行读写即可(一个索引文件,一个数据文件)。并发度由reduce数量决定,将reduce数量设为256,那我们就可以同时处理256个key的数据(partioner保证了不同reduce处理的key不同,不会引起文件读写冲突)。这样的并发度的效率是很客观的,可以在较短的时间内完成需求。

思路是这样,但同时由于hdfs的特性以及hadoop的任务调度,在文件读写过程中,仍有可能会出现很多问题,下面简要说些一些常见的会碰到的问题。

1.org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException异常

这可能是最经常碰到的一个问题。可能的原因如下:

(1)文件流冲突。

一般创建文件时都会打开一个供写入的文件流。而我们希望是追加,所以如果使用了错误的api ,就有可能引起上述问题。以FileSystem类为例,如果使用create()方法之后再调用append()方法,就会抛出上述异常。所以最好使用createNewFile方法,只创建文件,不打开流。

(2)mapReduce推测执行机制

mapreduce 为了提高效率,会在一个任务启动之后,同时启动一些相同的任务(attempt),其中有一个attempt成功完成之后,视为整个task完成,其结果 作为最终结果,并且杀掉那些较慢的attempt。集群一般会开启此选项以优化性能(以空间换时间)。但在本问题环境下推测执行却不太合适。因为我们一般希望一个task 用来处理一个文件,但如果启动推测执行,会有几个attempt同时试图操作同一个文件,就会引发异常。所以最好关掉此选项,将 mapred.reduce.max.attempts 设为1,或者将mapred.reduce.tasks.speculative.execution设为false.

但此时仍有可能会出现问题。因为如果一个task的唯一attempt出现问题,在被kill掉之后,task仍会另起一个attempt,此时因为前一个attempt异常终止,仍有可能会影响到新起的attempt的文件操作,引发异常。所以最安全的方法是,借鉴推测执行的机制(每个attempt各自生成自己的结果,最终选择一个作为最终结果),以每个attempt的id号为后缀附加到所操作的文件上,同时捕获所有文件操作的异常并处理,这样可避免文件的读写冲突。Context可以用来获取运行时的一些上下文信息,可以很容易得到attempt的id号。注意,此时如果开启推测执行也可以,但是会生成很多相同的文件(每个attempt一份),仍然不是最好的解决方法。

同时,我们可以利用reduce的输出来记录运行“不正常的” key.这些task大多数是attempt_0被杀掉而重启了一个attempt_1,所以下面的文件一般为两份。可以对这些情况的key输出(文件异常或者attemptID > 0),并进行一些后续处理,比如文件重命名,或者紧对这些key重新写入。因为此种情况的key一般只占极少数,所以并不影响总体的效率。

2.文件异常处理

最好能将mapreduce中的所有文件操作都设置好异常处理。不然一个文件异常就有可能会使整个job失败。所以从效率来讲,最好是在文件发生异常时将其key作为reduce的输出以进行记录。因为同时mapreduce会重启一个task attempts重新进行文件读写,可保证我们得到最终的数据,最后所需的只是对那些异常的key进行一些简单的文件重命名操作即可。

3.多目录以及文件拼接

如果我们将key的种类设为1000万,上述方法会生成太多的小文件从而影响hdfs的性能,另外,因为所有文件都在同一个目录下,会导致同一个目录下文件数目过多而影响访问效率。

在创建文件的同时建立多个子目录,一个有用的方法是以reduce的taskid来建立子目录。这样有多少个reduce就可以建立多少个子目录,不会有文件冲突。同一个reduce处理的key都会在同一个目录下。

文件拼接要考虑的一个索引的问题。为了将文件索引建立的尽量简单,应该尽量保证同一个key的所有数据都在同一个大文件中。这可以利用key的hashCode来实现。如果我们想在每个目录下建立1000个文件,只需将hashCode对1000取余即可。

到此,相信大家对“hadoop map-reduce中的文件并发操作介绍”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: hadoop map-reduce中的文件并发操作介绍

本文链接: https://lsjlt.com/news/57067.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • hadoop map-reduce中的文件并发操作介绍
    本篇内容主要讲解“hadoop map-reduce中的文件并发操作介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“hadoop map-reduce中的文件...
    99+
    2024-04-02
  • C/C++文件的操作函数介绍
    这篇文章主要介绍“C/C++文件的操作函数介绍”,在日常操作中,相信很多人在C/C++文件的操作函数介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C/C++文件的操作函数介绍”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • Python中关于文件的具体操作与介绍
    目录文件的介绍文件的打开与关闭1.打开文件2.写数据(write)3.读数据(read)4.读数据(readlines)5.读数据(readline)6.可写 ,追加(a)二进制文件...
    99+
    2024-04-02
  • PHP常见的文件操作方式介绍
    这篇文章主要讲解了“PHP常见的文件操作方式介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP常见的文件操作方式介绍”吧!1.打开文件resource fopen ...
    99+
    2023-06-17
  • Node.js中文件操作模块File System的详细介绍
    File System的缩写是fs,该模块提供本地文件的读写能力。 Nodejs导入文件系统模块(fs)语法如下所示: var fs = require("fs"); 异步和同步 Node.js文件系...
    99+
    2022-06-04
    详细介绍 模块 操作
  • Java中File文件操作类的详细使用介绍
    文章目录 File类的使用File的介绍File常用API判断文件类型-获取文件信息创建文件-删除文件功能遍历文件夹 File类的使用 File的介绍 File的概述: File类在包java.io.Fil...
    99+
    2023-08-21
    java jvm 开发语言
  • php文件夹与文件目录操作函数介绍
    php文件夹操作函数 string basename ( string path [, string suffix] )给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文...
    99+
    2022-11-15
    文件夹 文件目录
  • Array数组对象中的forEach、map、filter及reduce的参数介绍和用法
    本篇内容介绍了“Array数组对象中的forEach、map、filter及reduce的参数介绍和用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理...
    99+
    2024-04-02
  • Vista操作系统文件共享方法图文介绍
      我们要把D盘中的名为Vista的文件夹共享的话,首先在该文件夹上点鼠标右键选择“共享”。系统将出现“文件共享”设置向导,首先是“选择要与其共享的用户&rdq...
    99+
    2023-06-02
    Vista 操作系统 文件共享 方法 图文
  • php的ini文件相关操作函数的详细介绍
    本篇内容介绍了“php的ini文件相关操作函数的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在小公司,特别是创业型公司,整个服务器...
    99+
    2023-06-20
  • 操作系统的Hosts文件的详细介绍与解析(图文)
    一、什么是Hosts文件?    hosts文件是一个用于储存计算机网络中各节点信息的计算机文件。这个文件负责将主机名映射到相应的IP地址。hosts文件通常用于补充或取代网络中DNS的功能。和DNS...
    99+
    2023-05-26
    Hosts文件 图文 文件 介绍 解析 Hosts
  • C语言文件操作与相关函数介绍
    目录1.操作的准备2.文件的打开3.文件的使用方式4.相关的函数4.1 fputc4.2 fgetc4.3 fputs4.4 fgets4.5 fprintf4.6 fscanf4....
    99+
    2024-04-02
  • 操作系统中的Hosts文件工作原理和作用及其详细介绍
    一、什么是Hosts文件? Hosts是一个没有扩展名的系统文件,Hosts文件是一个用于存储计算机网络中节点信息的文件,它可以将主机名映射到相应的IP地址,实现DNS的功能,它可以由计算机的用户进行控制。可以用记事本等...
    99+
    2023-06-16
    操作系统 Hosts文件 工作原理 作用 文件 工作 原理 Hosts
  • C#中常用的IO操作介绍
    在.Net 4.0中增加了一系列较为实用的IO功能,下面让我们来一起看一下吧: 1. Stream.CopyTo Stream.CopyTo在用于较小的Stream之间的拷贝时还是比...
    99+
    2024-04-02
  • 如何进行C++文件操作的应用函数介绍
    今天就跟大家聊聊有关如何进行C++文件操作的应用函数介绍,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C++编程语言应用方式灵活,可以被看做C语言的升级版本。我们可以通过这篇文章介绍...
    99+
    2023-06-17
  • Go语言中文件API的并发操作:如何应对高并发场景?
    Go语言作为一门高效、并发的编程语言,其文件API也提供了丰富的并发操作方法,可以在高并发场景下提供高效、稳定的文件操作服务。本文将介绍Go语言中文件API的并发操作,以及如何应对高并发场景。 一、Go语言中文件API的基本操作 Go语言中...
    99+
    2023-11-02
    并发 文件 api
  • SQLServer中的文件和文件组介绍
    文件和文件组简介 在SQL Server中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已。SQL Server通过管理逻辑上的文件组...
    99+
    2024-04-02
  • Go使用sync.Map来解决map的并发操作问题
    目录前言 map 并发操作出现问题 sync.Map 解决并发操作问题 计算 map 长度 计算 sync.Map 长度 前言 在 Golang 中 map 不是并发安全的,自 1...
    99+
    2024-04-02
  • Python中字典的相关操作介绍
    字典的添加与修改 # coding:utf-8 if __name__ == '__main__': example = {'name': 'xie', 'age': 27...
    99+
    2024-04-02
  • windows8系统用户文件夹和库的操作技巧介绍
      用户使用Windows会经常接触到文件夹和库,对文件夹细化设置可以更好地管理文件,而库则如同一个方便用户的索引功能,让用户直达访问任意磁盘位置的文件夹和文件。   进入Win8系统的桌面,点击左下角的文...
    99+
    2022-06-04
    文件夹 操作技巧 用户
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作