Hadoop:处理大型序列化对象

2024-04-27

我正在开发一个应用程序来使用 Hadoop 框架处理(和合并)几个大型 java 序列化对象(顺序 GB 大小)。 Hadoop 存储将文件块分布在不同的主机上。但由于反序列化需要所有块都存在于单个主机上,因此它会极大地影响性能。我该如何处理这种情况,即与文本文件不同,必须单独处理不同的块?


有两个问题:一个是每个文件必须(在初始阶段)被整体处理:看到第一个字节的映射器必须处理该文件的所有其余部分。另一个问题是局部性:为了获得最佳效率,您希望每个此类文件的所有块都驻留在同一主机上。


整体处理文件:

一个简单的技巧是让第一阶段映射器处理文件名列表,而不是它们的内容。如果您希望运行 50 个映射作业,请使用该部分文件名创建 50 个文件。这很简单,并且可以与 java 或流式 hadoop 一起使用。

或者,使用不可分割的输入格式,例如NonSplitableTextInputFormat.

欲了解更多详情,请参阅“如何处理文件(每个地图一个)? http://hadoop.apache.org/common/docs/current/streaming.html#How+do+I+process+files%2C+one+per+map%3F" and "如何让我的每一张地图都能在一个完整的输入文件上工作? http://wiki.apache.org/hadoop/FAQ#A10“在 hadoop wiki 上。


地点:

然而,这留下了一个问题,即您正在读取的块分布在整个 HDFS 中:通常是性能增益,但这里是一个真正的问题。我不相信有任何方法可以链接某些块在 HDFS 中一起传输。

是否可以将文件放在每个节点的本地存储中?这实际上是解决此问题的最高效且最简单的方法:让每台机器启动作业来处理例如中的所有文件。/data/1/**/*.data(尽可能聪明地高效使用本地分区和 CPU 核心数量)。

如果文件源自 SAN 或 s3,请尝试直接从那里拉取:它是为处理集群而构建的。


关于使用第一个技巧的注意事项:如果某些文件比其他文件大得多,请将它们单独放在最早命名的列表中,以避免推测执行的问题。如果任务可靠并且您不希望多次处理某些批次,则无论如何您都可以关闭此类作业的推测执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop:处理大型序列化对象 的相关文章

随机推荐

  • 并行框架和避免错误共享

    最近 我回答了一个关于优化可能的并行方法来生成任意基数的每个排列的问题 我发布了类似的答案并行化 实施不佳代码块列表 有人几乎立即指出了这一点 这几乎肯定会给你带来错误的共享 并且可能会慢很多倍 归功于gjvdkamp https stac
  • Google Apps 脚本 - 访问单元格备注和评论

    大家好 感谢您花时间查看我的问题 我是一名九年级老师 正在制作一份定制的成绩表 并且刚刚完成了一个 GUI 可以让家长查看孩子的成绩 然而 在实际的成绩单上 我使用单元格注释 以前是注释 来存储特定于成绩的信息 即吉米遗漏了作业的 b 部分
  • numpy.savetxt“元组索引超出范围”?

    我正在尝试将几行写入文本文件 这是我使用的代码 import numpy as np Generate some test data data np arange 0 0 1000 0 50 0 with file test txt w a
  • 我应该在 mongodb 中对布尔标志使用稀疏索引吗?

    我有一个布尔标志 finished 我是不是该 A index finished 1 B index finished 1 sparse true C use flag unfinished instead to query by that
  • 使用 ASP.Net Core 中间件启动后台任务

    我试图在 ASP Net Core 中加载页面时运行异步任务 即 我希望任务在用户路由到页面后立即运行 但要在任务完成之前显示页面 看起来 使用 ASP Net core 您可以使用中间件来执行此类任务 所以我尝试添加以下内容Startup
  • iOS9,如果使用systemLayoutSizeFittingSize,为什么在dequeueReusableCellWithIdentifier:forIndexPath中调用自定义UITableViewCell的layoutSubviews

    a 更具体的描述我的问题 在iOS9中 为什么layoutSubviews我的自定义 UITableViewCell 的调用方式是dequeueReusableCellWithIdentifier forIndexPath if syste
  • 如何在 Ionic 中创建具有 + 和 - 按钮的输入框

    如何创建一个带有 和 按钮的输入框 单击哪个用户可以更改所选产品的数量 如下屏幕 这是 Ionic 2 的一个快速组合的示例 如果您使用 Ionic 1 您应该能够很容易地适应它 您只需要几个控制器 类函数来递增和递减 然后通过按钮调用它们
  • EF6/SQL Server Compact,基于代码的配置

    我正在尝试将我的 EF6 配置从myexe exe config编码作为解决方法empty DbProviderFactories node in machine config 问题 此处描述 https stackoverflow com
  • 从 Excel 与 VBA 调用时,VBA UDF 给出不同的答案

    以下 VBA 函数计算给定范围内包含公式的单元格数量 从 VBA 子程序调用时它可以正常工作 从 Excel 调用时 它返回区域中的单元格总数 来自 Excel 的调用是 CountFormulas A1 C7 即使该范围内只有两个带有公式
  • jQuery 数据表隐藏头部

    如果表没有任何数据 我想隐藏数据表标题 oTable topics showTopics dataTable bLengthChange false bStateSave true iDisplayLength 12 bScrollColl
  • 使用api在github中生成个人访问令牌

    有什么方法可以通过我的用户名和密码登录我的 github 帐户并使用 api 生成个人访问令牌吗 UPDATE 根据这个博客文章 https developer github com changes 2020 02 14 deprecati
  • 20个问题AI算法是如何运作的?

    包含 20 个问题的简单在线游戏 由极其准确的人工智能提供支持 他们怎么猜得这么好 您可以将其视为二分搜索算法 在每次迭代中 我们都会提出一个问题 这应该消除大约一半的可能的单词选择 如果总共有 N 个单词 那么我们可以期望在 log2 N
  • 从redis中检索大数据集

    一台服务器上的应用程序查询另一台服务器上运行的 Redis 查询的结果数据集约为 250kzrangebyscore objects locations inf inf这在应用程序服务器上似乎需要 40 秒 当使用命令执行时redis cl
  • 使用负等式表达式进行 resharper 自定义模式替换

    我在 resharper 中有一条规则来查找对 Nullable HasValue 的调用 T foo if foo HasValue And it offers to replace with a comparison directly
  • 当所有子记录满足条件时仅选择父记录

    我有两个表 A 和 B 当所有子项 表 B 中 满足条件时 我只需要父项 A 的行 如果 B 中的一行不符合条件 那么我不需要父 A 的行 我想我需要在这里使用存在 但不展示如何使用 以下是数据表 Table A Primary Key L
  • Dao 和服务接口的需求

    我是Spring Mvc的新手 在很多教程中 我发现有一个像这样的Dao接口 public interface StudentDAO public List
  • 将 Selenium HTML 测试自动转换为 JUnit 的方法?

    我在 Mac 10 6 6 上使用 Selenium IDE 1 0 10 for Firefox 我们的 QA 部门已经为 Selenium 创建了一些 HTML 测试 我需要将其转换为 Junit 在 IDE 中 我可以通过转到 文件
  • 使用 javascript/jquery 仅选择特定元素后面的文本

    如下面的代码片段所示 我有多个文本 div 其中有粗体部分 然后是换行符 然后是一段文本 我可以 find 粗体部分 但如何使用 javascript jquery 只获取粗体部分后面换行符后面的文本部分 div class thecont
  • 如何为 Android 应用实施 Google Play 许可? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话
  • Hadoop:处理大型序列化对象

    我正在开发一个应用程序来使用 Hadoop 框架处理 和合并 几个大型 java 序列化对象 顺序 GB 大小 Hadoop 存储将文件块分布在不同的主机上 但由于反序列化需要所有块都存在于单个主机上 因此它会极大地影响性能 我该如何处理这