我已经读了很多关于使用 Sqoop 从 SQL 导入的信息,但只有关于导出的花絮,并且示例始终假设您出于某种原因导出导入/预先格式化的数据,或者正在使用 Hive。
如何从MapReduce作业中,将数据写入HDFS,以便Sqoop可以读取和导出?
这个 Sqoop 文档向我展示了支持的文件格式。我想我可以使用文本/CSV,但是我如何在MapReduce中到达那里?
我找到了这个答案,它说只修改TextOutputFormat
的选项,但只写键/值。我的"值"是多个字段/列!
尝试使用其他存储,如 avro 或 parquet(更有缺陷),这样你就有一个架构。然后,您可以"查询"这些文件并将其数据导出到RDBMS中。
但是,看起来该支持有点错误/损坏,并且只有在您使用Kite或sqoop(内部使用风筝)创建文件时才可以正常工作。
http://grokbase.com/t/sqoop/user/1532zggqb7/how-does-sqoop-export-detect-avro-schema
我使用codegen
工具生成可以写入SequenceFiles的类:
sqoop/bin/sqoop-codegen --connect jdbc://sqlserver://... --table MyTable --class-name my.package.name.ClassForMyTable --outdir ./out/
然后我能够使用 Sqoop 读取它们,并使用批量设置导出。但表现很糟糕。最后,我只是编写了可以使用 BCP 工具导入的简单类似 CSV 的文本文件,而使用 Sqoop 需要花费数小时才能在几分钟内完成。