设想:
我已将数据从 SQl Server 导入到 HDFS。HDFS 目录中的数据存储在多个文件中,如下所示:
零件-m-00000
零件-m-00001
零件-m-00002
零件-m-00003
问题:
我的问题是,在从 HDFS 目录读取这些存储的数据时,我们必须读取所有文件(part-m-00000,01,02,03
)或只是part-m-00000
. 因为当我读取该数据时,我发现 HDFS 内部的数据有点丢失。那么,是它发生了还是我错过了什么?
您需要读取所有文件,而不仅仅是 00000。有多个文件的原因是 sqoop 以 map-reduce 方式工作,将“导入”工作拆分为多个部分。每个部分的输出都放在一个单独的文件中。
强化学习
Sqoop 正在运行没有减速器的导入。因此,映射器处理的零件文件没有合并。因此,您将看到零件文件,具体取决于您在 sqoop 命令中设置为--m4
或的映射器数量--num-4
。因此,如果您提供sqoop import --connect jdbc:mysql://localhost/db --username <>--table <>--m1
,那么它将只创建一个零件文件。
如果您的结果大小很大,那么 Hive 会将结果存储在块中。如果您想使用 CLI 读取所有文件,请执行以下命令。
$ sudo cat part-m-*
它会给你最终的结果,没有任何遗漏的部分。