我已将数据从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方式工作,将“导入”工作分成多个部分。每个部分的输出都放在一个单独的文件中。
RL
Sqoop正在运行没有reducers的导入。因此,没有合并由mappers处理的部分文件。您将看到部分文件取决于您在sqoop命令中设置的映射器数量为--m4
或--num-4
.So如果你提供sqoop import --connect jdbc:mysql://localhost/db --username <>--table <>--m1
然后它将只创建一个部分文件。
如果结果大小很大,那么Hive会将结果存储在块中。如果要使用CLI读取所有文件,请执行以下命令。
$ sudo cat part-m-*
它将为您提供最终结果,而不会丢失任何部分。