当前位置: 首页 > 知识库问答 >
问题:

记录阅读器和记录边界

周弘盛
2023-03-14

假设我有一个输入文件,在HDFS中为这个文件创建了三个块。假设我有三个数据节点,每个数据节点存储一个块。如果我有3个输入拆分,则3个映射器将并行运行,以处理各自数据节点的本地数据。每个映射器使用输入格式和记录读取器以键值对的形式获取输入。此场景使用TextInputFormat,其中记录是来自文件的完整文本行。

这里的问题是,如果在第一个块的末尾有记录中断,会发生什么。

1)Hadoop如何读取此场景中的完整记录?

2)数据节点1与数据节点2联系以获得完整记录吗?

3)如果数据节点2开始处理数据并在第一行识别不完整记录,会发生什么?

共有1个答案

孔阳平
2023-03-14
  • Hadoop将继续读取第一个块的末尾,直到达到EOL字符或EOF。
  • 数据节点在数据复制之外不相互通信(当名称节点指示时)。HDFS客户机将从node1然后从Node2读取数据
  • 要澄清的一些例子
    • 如果您有一条单行记录跨越一个300MB的文件,块大小为128MB-映射器2和3将从该文件的给定拆分偏移量开始读取(分别为128MB和256MB)。他们都将跳过试图找到下一个EOL字符,并从那一点开始那里的记录。在本例中,两个映射器实际上都将处理0条记录。
    • 一个300MB的文件,有两行150MB的长度,128 MB的块大小-映射器1将处理第一行,在块2中找到EOL字符。映射器2将从偏移量128MB(块2)开始,向前扫描以找到偏移量150MB的EOL字符。它将向前扫描并在第3块之后找到EOF,并处理该数据。映射器3将从偏移256MB(块3)开始,并在击中EOL字符之前向前扫描到EOF,因此处理0 Records
    • 包含6行的300MB文件,每行长度为50MB:
      • 映射器1-偏移0->128MB,第1行(0->50)、2(50->100)、3(100->150)
      • 映射器2-偏移128 MB->256 MB,第4行(150->200)、5(200->250)、6(250->300)
      • 映射器3-偏移256 MB->300 MB,0行

      希望能有所帮助

 类似资料:
  • 在apache文档中阅读以下内容: InputSplit表示单个映射器要处理的数据。 通常,它在输入上显示一个面向字节的视图,作业的RecordReader负责处理该输入并显示一个面向记录的视图。 链接-https://hadoop.apache.org/docs/r2.6.1/api/org/apache/hadoop/mapred/inputsplit.html 有人能解释一下面向字节的视图和

  • GetResult get(GetRequest request) 功能 获取某个表的某一行记录,可以返回所有属性或者部分属性 消耗一个单位读配额 方法参数 request : GetRequest : required GetRequest包括以下部分 1.tableName : String : required 指定要读哪一张表 2.keys : Map< String, Datum > :

  • 问题内容: 我想在我的应用程序中将slf4j + logback用于两个目的-日志和审计。 对于日志记录,我以常规方式记录日志: 对于审计,我创建一个特殊的命名记录器并登录到它: 登录配置: 问题:通过审核记录器记录的消息出现两次-一次在AUDIT_LOGGER下,一次在根记录器下。 14:41:57.975 [main]调试com.gammay.example.Main–> main() 14:

  • 我们从kafka向SparkStreaming发送了15张唱片,但是spark只收到了11张唱片。我用的是spark 2.1.0和kafka_2.12-0.10.2.0。 密码 bin/Kafka-console-producer . sh-broker-list localhost:9092-topic input data topic # 1 2 3 4 5 6 7 8 9 10 11 12

  • 使用Spring Boot1.4和Logback,我在中配置日志记录: 请注意,第二种配置的建议直接来自Spring Cloud Service Registration and Discovery文档。它在信息和其他“正常”级别上工作得很好。但是,日志还显示(由我重新格式化):

  • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?