pra*_*eep 22 java hadoop sqoop
我知道如何通过命令行使用sqoop.但是不知道如何使用java程序调用sqoop命令.谁能给一些代码视图?
小智 23
您可以通过在类路径中包含sqoop jar并调用Sqoop.runTool()方法,从java代码中运行sqoop .您必须以编程方式为sqoop创建所需的参数,就好像它是命令行一样(例如,--connect等等).
请注意以下事项:
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));
}
Run Code Online (Sandbox Code Playgroud)
RL
小智 12
下面是在Java程序中使用sqoop将代码从MySQL导入HDFS/HBase的示例代码.确保在类路径中有sqoop jar:
SqoopOptions options = new SqoopOptions();
options.setConnectString("jdbc:mysql://HOSTNAME:PORT/DATABASE_NAME");
//options.setTableName("TABLE_NAME");
//options.setWhereClause("id>10"); // this where clause works when importing whole table, ie when setTableName() is used
options.setUsername("USERNAME");
options.setPassword("PASSWORD");
//options.setDirectMode(true); // Make sure the direct mode is off when importing data to HBase
options.setNumMappers(8); // Default value is 4
options.setSqlQuery("SELECT * FROM user_logs WHERE $CONDITIONS limit 10");
options.setSplitByCol("log_id");
// HBase options
options.setHBaseTable("HBASE_TABLE_NAME");
options.setHBaseColFamily("colFamily");
options.setCreateHBaseTable(true); // Create HBase table, if it does not exist
options.setHBaseRowKeyColumn("log_id");
int ret = new ImportTool().run(options);
Run Code Online (Sandbox Code Playgroud)
正如Harel所建议的那样,我们可以使用run()方法的输出进行错误处理.希望这会有所帮助.