首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时可以读取新创建的HDFS文件?

何时可以读取新创建的HDFS文件?
EN

Stack Overflow用户
提问于 2019-09-28 01:46:29
回答 1查看 133关注 0票数 0

创建HDFS文件涉及几件事,元数据,分配数据块,复制数据块。我的问题是,什么时候可以读取文件?是否需要等到所有数据块完全复制完毕?

在我的HDFS日志中,我注意到HDFS首先为我的mapreduce临时文件分配了块:

代码语言:javascript
复制
org.apache.hadoop.hdfs.StateChange: BLOCK* allocate blk_1073743864_3041, replicas=10.206.36.220:9866, 10.206.37.92:9866, 10.206.36.186:9866, 10.206.36.246:9866, 10.206.38.104:9866, 10.206.37.119:9866, 10.206.37.255:9866, 10.206.37.129:9866, 10.206.38.97:9866, 10.206.38.5:9866 for /tmp/hadoop-yarn/staging/xxx/.staging/job_12345678_0567/job.split

但后来作业找不到该文件:

代码语言:javascript
复制
INFO org.apache.hadoop.ipc.Server: IPC Server handler 80 on 8020, call Call#1 Retry#1 org.apache.hadoop.hdfs.protocol.ClientProtocol.getBlockLocations from 10.206.38.106:46254: java.io.FileNotFoundException: File does not exist: /tmp/hadoop-yarn/staging/xxx/.staging/job_12345678_0567/job.split

我终于明白了

代码语言:javascript
复制
INFO org.apache.hadoop.hdfs.StateChange: BLOCK* allocate blk_1073744008_3185, replicas=10.206.37.253:9866, 10.206.36.167:9866 for /tmp/hadoop-yarn/staging/xxx/.staging/job_12345678_0567/job.split.1234567890._COPYING_
INFO org.apache.hadoop.hdfs.StateChange: DIR* completeFile: /tmp/hadoop-yarn/staging/xxx/.staging/job_12345678_0567/job.split.1234567890._COPYING_ is closed by DFSClient_NONMAPREDUCE_-1702431035_1

我猜这个文件从未被完全创建过。

EN

回答 1

Stack Overflow用户

发布于 2019-10-02 02:37:40

在刷新operation.If之后,数据立即可供读取。写入器要确保其写入的数据不会在系统崩溃的情况下丢失,它必须调用flush。从flush调用成功返回可以保证HDFS已经持久化了数据和相关的元数据。写入器可以根据需要多次和频繁地调用flush。写入器可以重复地向文件写入几个字节,然后调用flush。已打开文件的读取器可能看不到此刷新所影响的更改,但文件的任何重新打开都将允许读取器访问新写入的数据。HDFS保证一旦将数据写入文件并刷新,它将可供新的读取器使用,否则将生成异常。新的读取器在读取文件中当前不可用的部分时将遇到IO错误。如果数据块的所有副本都不可用,则会发生这种情况。HDFS保证,如果新的读取器尝试读取先前刷新但当前不可用的数据,则会生成异常(即不会丢失静默数据)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58139281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档