聊聊Hadoop DistCp的数据切分处理方式
文章目录
- 前言
- 基于文件数/文件Size的数据切分方式
前言
在如今数据使用场景越来越多的环境下,如何对数据做到更准确,更高效的处理无疑是我们开发者所重点关注以及所期望达成的目标。说到数据的处理,在当今成熟的分布式系统下,我们已经能够达到比较高效的数据并行处理能力了。但是这并不意味着说对此我们没有别的改善空间的余地了。在数据的并行处理过程中,不是所有情况我们都能保证每个并行处理任务都能按照预期顺利执行,中间就可能出现长尾任务现象。这里笔者想抛出的一个关键词:数据切分。在数据切分不均匀的情况下,是极有可能出现任务执行时间不均等的现象,从而影响到整个Job的完成耗时。本文笔者以Hadoop DistCp任务的内部数据处理过程为例,来聊聊DistCp内部的数据切分方式。
基于文件数/文件Size的数据切分方式
在分布式计算过程中,我们有专门的名词来定义不同task处理数据量的差异,叫做data skew(数据倾斜)。在DistCp任务中,对应的情况就是其内部map task需要处理(拷贝)的数据量差异比较大。
在笔者内部测试的一个例子中,笔者打算拷贝300w量级的文件目录,最后发现将近200w的目录分布到了一个map task内,然后造成DistCp的结束不了的情况。后来经过进一步分析,才知道原来是DistCp默认按照数据拷贝大小来均分输入数据到各个map内。这种策略在拥有大规模目录的情况下不见得是适用的,因为目录是没有size的,可理解为其size为0。这样就可能出现目录扎堆聚集的情况。
在上面这种情况下,一种更为妥善的办法是根据数据输入文件数来做均衡,我们确保每个map task需要拷贝相同的一个文件数。不过这里可能又有人会说了,我们怎么保证这些文件中个别文件是超大文件的情况,DistCp拷贝这个超大文件耗时比一般的文件要多很长时间怎么办?
上面说的这种情况是有可能出现的,DistCp采用事前打散输入文件path的方式,来减小这种事情发生的概率,避免大size文件聚集在一个map task内的情况。然后再将打散后的文件按照先后顺序写成split文件后供map task处理。
此过程图如下所示:
上面Seq File内部存储的一对对的K-V对,代表DistCp需要拷贝的目录/文件 path以及在目标FileSystem的全路径名。
上图左边显示的是基于固定文件总Size的Split处理,上图右边的则是基于文件数的Split处理。
聊聊Hadoop DistCp的数据切分处理方式相关推荐
- Hadoop生态圈 大数据文档
文档基于介绍基于Hadoop的大数据生态圈.介绍下图每一个组件的使用场景及使用方法,同时还对每一个组件有更深入的介绍. 1.Hadoop 1.1 Hadoop简介 2005年,Doug Cutting ...
- Hadoop DistCp工具简介及其参数
1 概述 DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具. 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成. 它把文件和目录的列表作为map任务的输入,每 ...
- hadoop之大数据生态系统的前世今生
1. Hadoop是什么 1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构,是由Lucene--Doug Cutting开创的开源软件,用java书写代码,实现与Google类似的 ...
- 浅析 Hadoop 中的数据倾斜
最近几次被问到关于数据倾斜的问题,这里找了些资料也结合一些自己的理解. 在并行计算中我们总希望分配的每一个task 都能以差不多的粒度来切分并且完成时间相差不大,但是集群中可能硬件不同,应用的类型不同 ...
- 聊聊Hadoop安全认证体系:Delegation Token和Block Access Token
前言 本文继续上一篇Hadoop安全认证方面的内容主题,来简单聊聊Hadoop内部的其它认证体系:Delegation Token(授权令牌认证)和Block Access Token(块访问认证). ...
- 可伸缩性架构常用技术——之数据切分
可伸缩性架构常用技术 --之数据切分(Data Sharding/Partition) 1 简介 本来想写一篇可伸缩性架构方面的文章,发现东西太多了,久久未能下笔,这里首先把大家最关注的数据切分(Pa ...
- 零售业如何用Hadoop开启大数据之门?
文章讲的是零售业如何用Hadoop开启大数据之门,在过去几年,全球零售商一直试图利用大数据创造价值.由于其大数据分析基础架构的限制,许多工作被一再推迟.Hadoop为这些零售商打开了新的大门,它可以解 ...
- 聊聊分布式锁——Redis和Redisson的方式
聊聊分布式锁--Redis和Redisson的方式 一.什么是分布式锁 分布式~~锁,要这么念,首先得是『分布式』,然后才是『锁』 分布式:这里的分布式指的是分布式系统,涉及到好多技术和理论,包括CA ...
- 数据切分——Atlas读写分离Mysql集群的搭建
关于数据切分的原理可以参见博客: http://blog.csdn.net/jhq0113/article/details/44226789 关于Atlas的介绍可以参见博客: http://blog ...
- 数据切分 垂直切分、垂直拆分与水平拆分的优缺点
数据切分 垂直切分 关于数据库的水平切分和垂直切分的一些概念垂直拆分垂直拆分就是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的.当一个网站还在 ...
最新文章
- PHP“Cannot use object of type stdClass as array”
- 解决vim没有颜色的办法
- 常见的canvas优化——模糊问题、旋转效果
- opencv4 c++ 提取图片中的白色区域_修正!【从零学习OpenCV 4】分割图像——分水岭法...
- java 反射加实例化内部类
- Domino URL Command 详解
- jquery.dragsort.js 实现拖拽过程遇到的问题
- JAXB –新手的观点,第2部分
- fiddler抓包第一课--手机数据抓包
- 对《Java编程思想》读者的一点建议
- python如何获取免费的可以商用的字体
- 使用ExtendSim进行 化学工程、采矿作业和工艺流程仿真
- 用于交通数据预测的深度时空3维卷积神经网络
- 智商情商哪个重要_智商or情商 哪个对孩子更重要
- VFP命令,DBF数据内部函数
- Multisim 13-电子线路实验
- 创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证.
- SSH新学,关于面向对象的看法
- Linux的obj文件,【IOS开发】linux 下安装object-c环境。。(初期学习的时候用)
- 如何在客户端避免繁冗的服务器GUID定义及导入?