我知道如何通过命令行使用sqoop。 但是不知道如何在Java程序中调用sqoop命令。 有人可以给一些代码示例吗?
Sqoop.runTool()
方法来在Java代码中运行sqoop。您需要以编程方式创建所需的参数,就像它是命令行一样(例如--connect
等)。请注意以下内容:Sqoop.Main()
相比,Sqoop.runTool()
的优点在于它返回执行的错误代码。final int ret = Sqoop.runTool(new String[] { ... });
if (ret != 0) {
throw new RuntimeException("Sqoop failed - return code " + Integer.toString(ret));
}
强化学习
part-m-0000
文件,而不是HDFS
。我检查了日志以查找作业是否在本地执行,作业ID本身指定为:job_local362447144_0001
。如何像sqoop cli cmd一样运行这个程序? - shriyogyarn jar jar_name
而不是java -jar jar_name
。 - shriyogSQOOP_CONF_DIR未设置
,然后出现了错误 ERROR oracle.OracleConnectionFactory: 无法加载jdbc驱动程序类:oracle.jdbc.OracleDriver
。但是当我从命令行运行相同的命令时,一切都正常。有什么建议吗? - Joha 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()方法的输出来处理错误。希望这有所帮助。
import net.neoremind.sshxcute.core.SSHExec;
import net.neoremind.sshxcute.core.ConnBean;
import net.neoremind.sshxcute.task.CustomTask;
import net.neoremind.sshxcute.task.impl.ExecCommand;
public class TestSSH {
public static void main(String args[]) throws Exception{
// Initialize a ConnBean object, the parameter list is IP, username, password
ConnBean cb = new ConnBean("192.168.56.102", "root","hadoop");
// Put the ConnBean instance as parameter for SSHExec static method getInstance(ConnBean) to retrieve a singleton SSHExec instance
SSHExec ssh = SSHExec.getInstance(cb);
// Connect to server
ssh.connect();
CustomTask sampleTask1 = new ExecCommand("echo $SSH_CLIENT"); // Print Your Client IP By which you connected to ssh server on Horton Sandbox
System.out.println(ssh.exec(sampleTask1));
CustomTask sampleTask2 = new ExecCommand("sqoop import --connect jdbc:mysql://192.168.56.101:3316/mysql_db_name --username=mysql_user --password=mysql_pwd --table mysql_table_name --hive-import -m 1 -- --schema default");
ssh.exec(sampleTask2);
ssh.disconnect();
}
}
请按照 Vikas 给出的代码进行操作,这对我很有效。请将以下 jar 文件包含在类路径中并导入以下包:
import com.cloudera.sqoop.SqoopOptions; import com.cloudera.sqoop.tool.ImportTool;
参考库
JRE 系统库
1. resources.jar jdk/jre/lib 2. rt.jar jdk/jre/lib 3. jsse.jar jdk/jre/lib 4. jce.jar jdk/jre/lib 5. charsets,jar jdk/jre/lib 6. jfr.jar jdk/jre/lib 7. dnsns.jar jdk/jre/lib/ext 8. sunec.jar jdk/jre/lib/ext 9. zipfs.jar jdk/jre/lib/ext 10. sunpkcs11.jar jdk/jre/lib/ext 11. localedata.jar jdk/jre/lib/ext 12. sunjce_provider.jar jdk/jre/lib/ext
有时候,如果您的Eclipse项目使用JDK1.6,而您添加的库是JDK1.7,那么在创建Eclipse项目时配置JRE可能会出现错误。
Vikas,如果我想将导入的文件放入Hive中,我应该使用options.parameter(“--hive-import”)吗?
ProcessBuilder
,然后可以运行一个单独的 Process
,Java 可以监视其完成并返回代码。