-1

在 hadoop mapreduce 编程模型中;当我们处理文件时,是否必须将文件保存在 HDFS 文件系统中,或者我可以将文件保存在其他文件系统中并且仍然具有 mapreduce 编程模型的好处?

4

3 回答 3

2

映射器从InputFormat. 大多数实现都源自FileInputFormat,它从本地机器或 HDFS 读取数据。(默认情况下,数据是从 HDFS 读取的,mapreduce 作业的结果也存储在 HDFS 中。)InputFormat当您希望从替代数据源而不是 HDFS 读取数据时,您可以编写自定义。

TableInputFormat将直接从 HBase 读取数据记录,并DBInputFormat从关系数据库访问数据。您还可以想象一个系统,其中数据通过网络在特定端口上流式传输到每台机器;从InputFormat端口读取数据并将其解析为单独的记录以进行映射。

但是,在您的情况下,您在单个或多个服务器上的 ext4 文件系统中有数据。为了方便地在 Hadoop 中访问这些数据,您必须先将其复制到 HDFS 中。这样,当并行处理文件块时,您将受益于数据局部性。

我强烈建议阅读Yahoo! 的教程。有关此主题的详细信息。要为 mapreduce 处理收集日志文件,还请查看Flume

于 2013-05-06T23:05:39.750 回答
1

您可以将文件保存在其他地方,但您会失去数据本地化优势。例如。如果您使用 AWS,您可以将文件存储在 S3 上并直接从 Map-reduce 代码、Pig、Hive 等访问它们。

于 2013-05-06T10:39:59.153 回答
0

为了使用 Apache Haddop,您必须将文件保存在 HDFS(hadoop 文件系统)中。尽管 HDFS 有不同的抽象类型,例如 AWS S3,但这些都是基本级别的 HDFS 存储。

数据需要在 HDFS 中,因为 HDFS 沿着集群分布数据。在映射阶段,每个 Mapper 都会遍历存储在其节点中的数据,然后将其发送到为给定块运行 reducer 代码的适当节点。

你不能拥有使用 HDFS 的 Hadoop MapReduce。

于 2013-05-06T18:43:34.370 回答