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

如何从hadoop的临时文件中获取数据?,hadoop,mapreduce,Hadoop,Mapreduce,我有一个应用程序使用map reduce将数据从远程系统传输到HDFS。然而,当我不得不处理网络故障之类的问题时,我就不知所措了。。也就是说,当来自远程数据源的连接丢失并且我的mapreduce应用程序无法再访问数据时。我总是可以重新启动作业,但当数据很大时,重新启动是一个昂贵的选择。我知道mapreduce会创建临时文件夹,但它会把数据放在那里吗?我可以读取这些数据,然后以某种方式开始读取其余数据吗?mapreduce作业可以写入任意文件,而不仅仅是Hadoop管理的文件 Configurat

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

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

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
out = fs.create(new Path(fileName));
使用此代码可以创建任意文件,这些文件与本地文件系统中的普通文件类似。然后,您可以管理连接异常,这样当源不可访问时,您可以很好地关闭文件,并在某个地方(例如HDFS本身)记录发生中断的时间点。 对于FTP,您可以只编写文件路径和文件夹的列表。当一个作业完成下载一个文件时,将其路径写在下载列表上,当整个文件夹被下载时,则写文件夹路径,这样在恢复时,您就不必遍历目录内容来检查所有文件是否已下载

另一方面,在程序启动时,它将检查此文件,以确定上一次尝试是否失败,以及在什么情况下开始下载

一般来说,如果Hadoop在一段时间内没有写/读任何东西,它会杀死你的程序。您的应用程序可以告诉它等待,但一般来说,有一个空闲的作业并不好,因此最好很好地结束作业,而不是等待网络再次工作

您还可以通过以下方式创建自己的filewriter:

conf.setOutputFormat(MyOwnOutputFormat.class);
您的filewriter可以以您喜欢的格式保存自己的临时文件,因此,如果应用程序崩溃,您就知道如何保存文件。 默认情况下,HDFS以64MB的数据块保存文件,当作业失败时,您甚至可能没有临时文件,除非您使用自己的编写器

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


编辑:在使用FTP的情况下,您可以使用将FTP服务器与本地文件系统同步,然后使用hdfs fuse来装载hdfs文件系统。当您有许多小文件时,它可以工作。

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

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
out = fs.create(new Path(fileName));
使用此代码可以创建任意文件,这些文件与本地文件系统中的普通文件类似。然后,您可以管理连接异常,这样当源不可访问时,您可以很好地关闭文件,并在某个地方(例如HDFS本身)记录发生中断的时间点。 对于FTP,您可以只编写文件路径和文件夹的列表。当一个作业完成下载一个文件时,将其路径写在下载列表上,当整个文件夹被下载时,则写文件夹路径,这样在恢复时,您就不必遍历目录内容来检查所有文件是否已下载

另一方面,在程序启动时,它将检查此文件,以确定上一次尝试是否失败,以及在什么情况下开始下载

一般来说,如果Hadoop在一段时间内没有写/读任何东西,它会杀死你的程序。您的应用程序可以告诉它等待,但一般来说,有一个空闲的作业并不好,因此最好很好地结束作业,而不是等待网络再次工作

您还可以通过以下方式创建自己的filewriter:

conf.setOutputFormat(MyOwnOutputFormat.class);
您的filewriter可以以您喜欢的格式保存自己的临时文件,因此,如果应用程序崩溃,您就知道如何保存文件。 默认情况下,HDFS以64MB的数据块保存文件,当作业失败时,您甚至可能没有临时文件,除非您使用自己的编写器

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


编辑:在使用FTP的情况下,您可以使用将FTP服务器与本地文件系统同步,然后使用hdfs fuse来装载hdfs文件系统。当您有许多小文件时,它可以工作。

您没有指定要使用什么工具将数据导入HDFS/Hadoop


可用于将数据导入支持可恢复性的HDFS/Hadoop的一些工具是Flume、Scribe和Chukwa(用于日志文件),它们都支持各种可配置级别的文件传输可靠性保证,以及用于将关系数据库数据传输到HDFS或Hive的Sqoop,等等。

您还没有指定将数据导入HDFS/Hadoop的工具


您可以使用Flume、Scribe和Chukwa(用于日志文件)等工具将数据导入支持可恢复性的HDFS/Hadoop,它们都支持各种可配置级别的文件传输可靠性保证,以及用于将关系数据库数据传输到HDFS或Hive等的Sqoop。

为什么不使用Amazon的EMR?我相信它的成本不是很高,你也会得到网络的可靠性。如果我们知道“远程系统”是什么意思,那么最好回答您的问题?如果你使用亚马逊的生态系统,那么你可以使用S3来存储数据。@Amar:我说的远程系统是指FTP服务器上的文件。我有一个使用mapreduce从FTP服务器读取文件的应用程序。我的问题是在阅读过程中失去连接。你为什么不使用亚马逊的电子病历?我相信它的成本不是很高,你也会得到网络的可靠性。如果我们知道“远程系统”是什么意思,那么最好回答您的问题?如果你使用亚马逊的生态系统,那么你可以使用S3来存储数据。@Amar:我说的远程系统是指FTP服务器上的文件。我有一个使用mapreduce从FTP服务器读取文件的应用程序。我的问题是在阅读过程中失去了连接。我正在尝试构建一些新的东西