1

设想:

我已将数据从 SQl Server 导入到 HDFS。HDFS 目录中的数据存储在多个文件中,如下所示:

零件-m-00000
零件-m-00001
零件-m-00002
零件-m-00003

问题:

我的问题是,在从 HDFS 目录读取这些存储的数据时,我们必须读取所有文件(part-m-00000,01,02,03)或只是part-m-00000. 因为当我读取该数据时,我发现 HDFS 内部的数据有点丢失。那么,是它发生了还是我错过了什么?

4

3 回答 3

2

您需要读取所有文件,而不仅仅是 00000。有多个文件的原因是 sqoop 以 map-reduce 方式工作,将“导入”工作拆分为多个部分。每个部分的输出都放在一个单独的文件中。

强化学习

于 2012-02-15T09:44:48.980 回答
1

Sqoop 正在运行没有减速器的导入。因此,映射器处理的零件文件没有合并。因此,您将看到零件文件,具体取决于您在 sqoop 命令中设置为--m4或的映射器数量--num-4。因此,如果您提供sqoop import --connect jdbc:mysql://localhost/db --username <>--table <>--m1,那么它将只创建一个零件文件。

于 2017-12-18T05:42:24.977 回答
0

如果您的结果大小很大,那么 Hive 会将结果存储在块中。如果您想使用 CLI 读取所有文件,请执行以下命令。

$ sudo cat part-m-*

它会给你最终的结果,没有任何遗漏的部分。

于 2017-12-19T04:40:34.097 回答