我听说像mapreduce作业输入不需要在HDFS中。它可以在其他文件系统上。有人可以为我提供更多的输入..
我对此感到困惑?在独立模式下,数据可以位于本地文件系统上。但是在集群模式下,我们如何将mapreduce作业指向其他文件系统?
答案 0 :(得分:3)
不,它不需要在HDFS中。例如,使用其TableInputFormat将HBase作为目标的作业从HBase节点通过网络拉取记录作为其地图作业的输入。 DbInputFormat可用于将数据从SQL数据库提取到作业中。您可以构建一个输入格式,它可以从NFS挂载中读取数据。
实际上,如果可以,您希望避免通过网络提取数据。如果您可以在运行作业的节点上本地拥有数据,那么MR性能要好得多,因为磁盘吞吐量>网络吞吐量。
答案 1 :(得分:2)
基于作业中设置的InputFormat,Hadoop可以从任何来源读取。 Hadoop提供了几个InputFormats。编写custom输入格式也不难,比如提供专有格式作为作业的输入。
在同一行中,Hadoop提供了几个OutputFormats,编写自定义的OutputFormat也不难。
这是DBInputFormat上的一个很好的article。
答案 2 :(得分:0)
实现它的另一种方法是将HDFS文件放入真实数据所在的信息中。 Mapper将获取此信息并提取实际数据以进行处理。 例如,我们可以有几个文件,其中包含要处理的数据URL。 在这种情况下我们将放松的是数据局部性 - 否则就可以了。