gpt4 book ai didi

hadoop - 如何从hadoop的临时文件中获取数据?

转载 作者:可可西里 更新时间:2023-11-01 15:41:02 24 4
gpt4 key购买 nike

我有一个应用程序使用 map reduce 将数据从远程系统传输到 HDFS。然而,当我不得不处理网络故障等问题时,我迷路了。也就是说,当来自远程数据源的连接丢失并且我的 mapreduce 应用程序不再可以访问数据时。我总是可以重新启 Action 业,但是当数据很大时,重新启动是一个昂贵的选择。我知道 mapreduce 会创建临时文件夹,但它会把数据放在那里吗?我能否读出该数据,然后我能否以某种方式开始读取其余数据?

最佳答案

mapreduce 作业可以写入任意文件,而不仅仅是 Hadoop 管理的文件。

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
out = fs.create(new Path(fileName));

使用此代码,您可以创建任意文件,这些文件像本地文件系统中的普通文件一样工作。然后,您管理连接异常,这样当一个源不可访问时,您可以很好地关闭文件并记录发生中断的某个地方(例如在 HDFS 本​​身中)以及发生中断的时间点。对于 FTP,您可以只写文件路径和文件夹的列表。当作业完成下载文件时,在下载列表中写下它的路径,当下载整个文件夹时写下文件夹路径,这样在恢复的情况下,您将不必遍历目录内容来检查所有文件是否已下载.

另一方面,在程序启动时,它会检查这个文件来决定之前的尝试是否失败,如果失败的话,从哪里开始下载。

一般来说,如果 Hadoop 没有超时写入/读取任何内容,Hadoop 将终止您的程序。您的应用程序可以告诉它等待,但一般来说,有一个空闲的工作是不好的,所以最好结束工作而不是等待网络再次工作。

您也可以通过这种方式创建自己的文件编写器:

conf.setOutputFormat(MyOwnOutputFormat.class);

您的文件编写器可以以您喜欢的格式保存自己的临时文件,因此如果应用程序崩溃,您知道文件是如何保存的。HDFS 默认以 64MB 的 block 保存文件,当作业失败时,除非您使用自己的编写器,否则您甚至可能没有临时文件。

这是一个通用的解决方案,它取决于哪个是数据源(ftp、samba、http...)及其对下载简历的支持。

编辑:如果是 FTP,您可以只使用 csync使用本地文件系统同步 FTP 服务器,使用 hdfs-fuse 挂载 HDFS 文件系统。当您有很多小文件时,它会起作用。

关于hadoop - 如何从hadoop的临时文件中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13856690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com