Hadoop - Map-Reduce 任务如何知道要处理文件的哪一部分?

2024-01-10

我已经开始学习 hadoop,目前我正在尝试处理结构不太好的日志文件 - 因为我通常用于 M/R 键的值通常位于文件的顶部(一旦)。所以基本上我的映射函数将该值作为键,然后扫描文件的其余部分以聚合需要减少的值。因此,[假] 日志可能如下所示:

## log.1
SOME-KEY
2012-01-01 10:00:01 100
2012-01-02 08:48:56 250
2012-01-03 11:01:56 212
.... many more rows

## log.2
A-DIFFERENT-KEY
2012-01-01 10:05:01 111
2012-01-02 16:46:20 241
2012-01-03 11:01:56 287
.... many more rows

## log.3
SOME-KEY
2012-02-01 09:54:01 16
2012-02-02 05:53:56 333
2012-02-03 16:53:40 208
.... many more rows

我想为每个键累积第三列。我有一个由多个节点组成的集群运行此作业,因此我被几个问题困扰:

1. 文件分发

鉴于 hadoop 的 HDFS 在 64Mb 块中工作(默认情况下),并且每个文件都分布在集群上,我能否确定正确的密钥将与正确的数字相匹配?也就是说,如果包含密钥的块位于一个节点中,并且包含同一密钥(同一日志的不同部分)的数据的块位于不同的机器上 - M/R 框架如何匹配这两个节点(如果根本)?

2. 块分配

对于如上所述的文本日志,每个块的截止点是如何确定的?是在一行结束之后,还是恰好在 64Mb(二进制)处?这还重要吗?这与我的#1 相关,我关心的是正确的值与整个集群上的正确的键相匹配。

3. 文件结构

M/R 处理的最佳文件结构(如果有)是什么?如果典型的日志如下所示,我可能不会那么担心:

A-DIFFERENT-KEY 2012-01-01 10:05:01 111
SOME-KEY        2012-01-02 16:46:20 241
SOME-KEY        2012-01-03 11:01:56 287
A-DIFFERENT-KEY 2012-02-01 09:54:01 16
A-DIFFERENT-KEY 2012-02-02 05:53:56 333
A-DIFFERENT-KEY 2012-02-03 16:53:40 208
...

然而,日志很大,将它们转换为上述格式会非常昂贵(时间)。我应该担心吗?

4. 岗位分配

分配的作业是否只有一个 JobClient 处理整个文件?相反,所有 JobClient 之间的键/值如何协调?再次,我试图保证我的可疑日志结构仍然会产生正确的结果。


鉴于 hadoop 的 HDFS 在 64Mb 块中工作(默认情况下),并且每个文件都分布在集群上,我能否确定正确的密钥将与正确的数字相匹配?也就是说,如果包含密钥的块位于一个节点中,并且包含同一密钥(同一日志的不同部分)的数据的块位于不同的机器上 - M/R 框架如何匹配这两个节点(如果根本)?

键和值的映射方式取决于 InputFormat 类。 Hadoop 有几个InputFormat 类,也可以定义自定义InputFormat 类。

If 文件输入格式 http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapreduce/lib/input/FileInputFormat.html使用时,映射器的键是文件偏移量,值是输入文件中的行。在大多数情况下,文件偏移量被忽略,输入文件中的一行值由映射器处理。因此,默认情况下,日志文件中的每一行都将是映射器的一个值。

可能存在这样的情况:OP 中的日志文件中的相关数据可能会跨块分割,每个块将由不同的映射器处理,而 Hadoop 无法将它们关联起来。一种方法是使用 FileInputFormat#isSplitable 方法让单个映射器处理完整的文件。如果文件太大,这不是一个有效的方法。

对于如上所述的文本日志,每个块的截止点是如何确定的?是在一行结束之后,还是恰好在 64Mb(二进制)处?这还重要吗?这与我的#1 相关,我关心的是正确的值与整个集群上的正确的键相匹配。

默认情况下,HDFS 中的每个块大小正好是 64MB,除非文件大小小于 64MB 或默认块大小已被修改,否则不考虑记录边界。输入中行的某些部分可以在一个块中,而其余部分可以在另一个块中。 Hadoop 理解记录边界,因此即使记录(行)被分割成多个块,它仍然只能由单个映射器处理。为此,可能需要从下一个块传输一些数据。

分配的作业是否只有一个 JobClient 处理整个文件?相反,所有 JobClient 之间的键/值如何协调?再次,我试图保证我的可疑日志结构仍然会产生正确的结果。

不太清楚查询是什么。建议阅读一些教程并返回查询。

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

Hadoop - Map-Reduce 任务如何知道要处理文件的哪一部分? 的相关文章

  • InvalidRequestException(为什么:empid 如果包含 Equal,则不能被多个关系限制)

    这是关于我从 Apache Spark 查询 Cassandra 时遇到的问题 Spark 的正常查询工作正常 没有任何问题 但是当我使用关键条件进行查询时 出现以下错误 最初 我尝试查询复合键列族 它也给出了与下面相同的问题 由以下原因引
  • hive - 在值范围之间将一行拆分为多行

    我在下面有一张表 想按从开始列到结束列的范围拆分行 即 id 和 value 应该对开始和结束之间的每个值重复 包括两者 id value start end 1 5 1 4 2 8 5 9 所需输出 id value current
  • 当您感兴趣的任务完成时,是什么让完成处理程序执行该块?

    我一直在询问并试图了解完成处理程序是如何工作的 我用过很多 也读过很多教程 我将在这里发布我使用的代码 但我希望能够创建自己的代码 而无需使用其他人的代码作为参考 我理解这个完成处理程序 其中调用者方法 void viewDidLoad n
  • 使用 PyArrow 从 HDFS 读取镶木地板文件

    我知道我可以使用 pyarrow 连接到 HDFS 集群pyarrow hdfs connect 我也知道我可以使用读取镶木地板文件pyarrow parquet s read table 然而 read table 接受文件路径 而hdf
  • 如何跟踪hadoop中哪个数据块在哪个数据节点?

    如果复制一个数据块 会复制到哪个数据节点 是否有任何工具可以显示复制块存在的位置 如果您知道文件名 则可以通过 DFS 浏览器查找 转到您的 namenode Web 界面 说 浏览文件系统 并导航到您感兴趣的文件 在页面底部 将列出文件中
  • Sqoop 导出分区的 Hive 表

    我在尝试导出分区的 Hive 表时遇到了一些问题 这是否完全受支持 我尝试用谷歌搜索并找到一张 JIRA 票证 sqoop export connect jdbc mysql localhost testdb table sales exp
  • PHP - 将文件系统路径转换为 ​​URL

    我经常发现项目中的文件需要从文件系统和用户浏览器访问 一个例子是上传照片 我需要访问文件系统上的文件 以便可以使用 GD 来更改图像或移动它们 但我的用户还需要能够从类似以下的 URL 访问文件example com uploads myp
  • Hadoop Windows 设置。运行 WordCountJob 时出错:“任何本地目录中都没有可用空间”

    我正在按照此视频教程尝试在我的计算机上设置 hadoop 如何在 Windows 10 上安装 Hadoop https www youtube com watch v zujpglKP0Nw 我已经成功设置它 从 sbin 目录执行 st
  • Hive:在查询中将 array 转换为 array

    我有两张桌子 create table a 1 array
  • 是否可以使用 Java 读写 Parquet,而不依赖 Hadoop 和 HDFS?

    我一直在寻找这个问题的解决方案 在我看来 如果不引入对 HDFS 和 Hadoop 的依赖 就无法在 Java 程序中嵌入读写 Parquet 格式 它是否正确 我想在 Hadoop 集群之外的客户端计算机上进行读写 我开始对 Apache
  • Java8:使用 Stream / Map-Reduce / Collector 将 HashMap 转换为 HashMap

    我知道如何 改造 一个简单的JavaList from Y gt Z i e List
  • 更改 Hadoop 中的数据节点数量

    如何改变数据节点的数量 即禁用和启用某些数据节点来测试可扩展性 说得更清楚一点 我有4个数据节点 我想一一实验1 2 3 4个数据节点的性能 是否可以只更新名称节点中的从属文件 临时停用节点的正确方法 创建一个 排除文件 这列出了您想要删除
  • 无法在 Windows 10 中启动 Spark Master

    我是 Spark 新手 我正在尝试手动启动 master 在 Windows 10 中使用 MINGW64 当我这样做时 Downloads spark 1 5 1 bin hadoop2 4 spark 1 5 1 bin hadoop2
  • Apache Spark 何时发生混洗?

    我正在优化 Spark 中的参数 并且想确切地了解 Spark 是如何对数据进行洗牌的 准确地说 我有一个简单的字数统计程序 并且想知道spark shuffle file buffer kb如何影响运行时间 现在 当我将此参数设置得非常高
  • File.Move 的原子性

    我想将目录中的文件重命名为原子事务 该文件不会更改目录 该路径作为 NTFS 文件系统的 UNC 路径提供 可能位于服务器 03 或 08 上 File Move 对于这些目的来说是原子的吗 例如 它要么成功完成 要么失败 以使原始文件仍然
  • 公平调度器和容量调度器有什么区别?

    我是 Hadoop 世界的新手 想了解公平调度程序和容量调度程序之间的区别 另外我们什么时候应该使用每一个 请简单地回答一下 因为我在网上读了很多东西 但从中得到的不多 公平调度是一种为作业分配资源的方法 使得所有作业随着时间的推移平均获得
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 与文件名中的冒号“:”作斗争

    我有以下代码 用于加载大量 csv gz 并将它们转储到其他文件夹中 并将源文件名作为一列 object DailyMerger extends App def allFiles path File List File val parts
  • 如何有效地将数据从 Kafka 移动到 Impala 表?

    以下是当前流程的步骤 Flafka http blog cloudera com blog 2014 11 flafka apache flume meets apache kafka for event processing 将日志写入
  • phonegap html5 android 同步文件系统 IO

    如何使用 PhoneGaps 文件系统 API 同步读写文件 有可用的同步包装器吗 无法通过提供的 api 同步访问文件 从phonegap的实现方式猜测 我怀疑您是否可以编写一个插件来同步执行此操作

随机推荐

  • python中许多正则表达式的速度

    我正在编写一个处理大量字符串 文件的 python 程序 我的问题是 我将看到一段相当短的文本 并且我需要在其中搜索相当广泛的单词 短语的实例 我想我需要编译正则表达式作为匹配文本中这些单词 短语的方式 然而 我担心这将花费很多时间 我的问
  • Resharper 多行方法调用括号对齐

    Resharper 正在格式化多行方法调用 如下所示 foo Bar x y 我希望它将右括号与第一行对齐 例如 foo Bar x y 我查看了 Resharper 代码布局选项 但找不到正确的设置 有人可以告诉我如何实现这种替代格式吗
  • 自动装配错误弹簧

    我是春天的新手 以前我曾经使用 spring context xml 配置自动接线 现在我的项目我们直接使用注释来注入bean 当我尝试自动连接 Mongo 存储库时 出现以下异常 下面是示例代码 暂存文档服务Impl Service pu
  • 在 Windows 10 上使用 Android Studio 设置向导运行英特尔® HAXM 安装程序需要很长时间

    我有一个新安装的 Android Studio 下载其组件后我一直停留在设置向导上Running Intel HAXM installer 我应该怎么办 如果我使用任务管理器结束 Android Studio 的任务 我下载的所有组件是否都
  • 在委托中使用“base”关键字会导致 System.BadImageFormatException

    我有一个奇怪的问题 我希望有人能启发我为什么会发生这种情况 我在基本抽象类中有一个受保护的方法 如下所示 protected T ForExistingEntity
  • 插入排序、合并排序和快速排序的测试用例

    我已经实现了 在Java中 插入排序 合并排序 修改合并排序和快速排序 ModifiedMergeSort 有一个用于元素 绑定 的变量 当要排序的元素小于或等于 bound 时 则使用插入排序对其进行排序 为什么版本 1 比版本 3 4
  • 无法使用 .ToListAsync() 扩展方法 (.net 4.7)

    我正在尝试使用扩展方法 ToListAsync 但由于某种原因 这个扩展方法不适合我 我的设置如下 Web 项目 Net 4 7 在这里我确实包括了using System Data Entity DataAcess项目 Net 4 7 在
  • 如何创建远程页面中定义的类的对象?

    例如 在远程网页中 有这样一段代码
  • 尝试将我的第一个 Node.js 应用程序部署到 Heroku 时,Web dynos 不断崩溃

    foreman start 创建与我的工作应用程序的链接 我有一个名为 Procfile 的文件 其中包含 web node server js 这是我的 package json name node example version 0 0
  • 如何查询流程实例的位置?

    我想获取进程中单个实例的当前位置 除了 id 之外 是否可以获取活动的名称作为返回值 您可以使用以下代码获取流程实例的当前位置 当流程在多个位置等待时 该代码还将为您提供活动的名称 package org camunda bpm impor
  • forEach 不会迭代 mongodb 中的所有集合

    我需要比较 mongo db 中的两个对象集合 我的 shell 脚本如下所示 Both arrays have 367 pretty big objects var list1 db collection1 find condition
  • 如何在 python 中抛出错误并使用自定义消息退出

    我见过有人建议在 Python 中使用 sys exit 我的问题是 是否有其他方法可以退出当前脚本的执行 我的意思是终止 并出现错误 像这样的事情 sys exit You can not have three process at th
  • git stash 留下修改过的文件吗?

    当我试图隐藏更改时 我遇到了一些奇怪的行为 我不是 git 专家 所以我希望有人能对此有所启发 在最新的分支上 我修改了跟踪文件 git status 显示已修改 git stash 响应 已保存工作目录和索引状态 WIP git stat
  • 如何删除“警告:异步存储已从反应本机核心中提取...”?

    我已经尝试过此屏幕截图中推荐的内容 通过使用这行代码import AsyncStorage from node modules react native community async storage 在我要导入的文件中async stor
  • Bootstrap 3 模态位置

    我在将模态窗口定位在窗口中心时遇到问题 它显示了右侧的位置 我缺少什么 这似乎是我无法解决的 CSS 问题 感谢您的建议 div class modal fade div class modal dialog div class modal
  • 在 3D 空间中使用 GLSL 绘制 2D 网格

    我希望使用 OpenGL 4 0 在 X 轴上的有限空间内绘制 2D 网格 我希望使用 GLSL 使用 vert frag 着色器等来渲染光线 使它们出现 它可以使用较旧的 OpenGL 2 0 方法通过最简单的代码来完成 但当然它不使用照
  • 如何使用 UIViewPropertyAnimator 进行自动布局?

    我可以在网上找到的所有示例UIViewPropertyAnimator使用通过设置框架布局的视图 而不是使用自动布局 这是视图通常的布局方式 使用自动布局时 视图会动画到我想要的位置 但之后我不确定如何将其设置回其 模型 位置 Move a
  • Pandoc用于不使用RStudio生成html文件

    我想通过下面的脚本生成 html 文件 这是复杂源代码的一部分 但我不想在用户计算机上安装 RStudio 我正在使用 pandoc 网址为 来自 github 的 pandoc https github com jgm pandoc re
  • 什么时候会发生这种情况?线程在临界区中挂起

    我只是想知道 如果一个线程处于临界区 它可以被抢占吗 Thread A 输入CR Thread A 被停职 Thread B 想进入CR但不能 因为Thread A有锁 If Thread A被抢占 因此互斥锁被卡住Thread A 关于这
  • Hadoop - Map-Reduce 任务如何知道要处理文件的哪一部分?

    我已经开始学习 hadoop 目前我正在尝试处理结构不太好的日志文件 因为我通常用于 M R 键的值通常位于文件的顶部 一旦 所以基本上我的映射函数将该值作为键 然后扫描文件的其余部分以聚合需要减少的值 因此 假 日志可能如下所示 log