一尘不染

如何在Java程序中使用Sqoop?

java

我知道如何通过命令行使用sqoop。但是不知道如何使用Java程序调用sqoop命令。谁能提供一些代码视图?


阅读 886

收藏
2020-09-08

共1个答案

一尘不染

您可以通过在类路径中包含sqoop jar并调用该Sqoop.runTool()方法,从Java代码内部运行sqoop
。您将必须创建所需的参数才能以编程方式像命令行一样(例如,--connect等)进行缩放。

请注意以下几点:

  • 确保sqoop工具名称(例如,导入/导出等)是第一个参数。
  • 请注意类路径的排序-执行可能会失败,因为sqoop需要库的版本X,而您使用的是其他版本。确保sqoop所需的库没有被您自己的依赖项所遮盖。我在commons-io中遇到了这样的问题(sqoop需要v1.4),并且由于我正在使用commons-io v1.2而出现了NoSuchMethod异常。
  • 每个参数都必须位于单独的数组元素上。例如,“-connect jdbc:mysql:…”应作为数组中两个单独的元素而不是一个元素传递。
  • sqoop解析器知道如何接受双引号参数,因此,如果需要,请使用双引号(我建议始终如此)。唯一的例外是fields-delimited-by参数,该参数需要一个字符,因此请不要双引号。
  • 我建议拆分命令行参数创建逻辑和实际执行,以便无需实际运行工具即可正确测试您的逻辑。
  • 最好使用–hadoop-home参数,以防止对环境的依赖性。
  • Sqoop.runTool()与之相对的优点Sqoop.Main()runTool()返回执行错误代码的事实。

希望能有所帮助。

final int ret = Sqoop.runTool(new String[] { ... });
if (ret != 0) {
  throw new RuntimeException("Sqoop failed - return code " + Integer.toString(ret));
}

RL

2020-09-08