我知道如何通过命令行使用sqoop。 但是不知道如何使用java程序调用sqoop命令。 任何人都可以提供一些代码视图?如何在Java程序中使用Sqoop?
回答
您可以在您的java代码中运行sqoop,方法是在您的类路径中包含sqoop jar并调用Sqoop.runTool()
方法。您必须以编程方式为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
谢谢...我正在寻找网络上的Sqoop Docs来查看每种方法的详细信息...但找不到....可以告诉我关于sqoop文档 – pradeep 2012-02-13 04:08:35
我使用的文档在http:// archive.cloudera.com/cdh/3/sqoop/SqoopUserGuide.html#_controlling_the_hadoop_installation。但是,他们没有描述执行Sqoop的方法。我已经使用了Sqoop的源代码,在oozie项目的帮助下(http://incubator.apache.org/oozie/) – 2012-02-13 12:05:28
嘿,如果你有一个代码示例..这将有所帮助。 – 2015-08-25 20:49:09
如果您知道可执行文件的位置和命令行参数,您可以使用ProcessBuilder
,然后可以运行单独的Process
,Java可以监视它以完成并返回代码。
一般来说,如果有一个API集成点,它更好地使用比衍生子进程。 – Turbo 2013-07-19 18:05:40
下面为一个示例代码在Java程序中使用sqoop从MySQL的数据导入到HDFS/HBase的。请确保您有sqoop罐子在classpath:
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()方法的输出,用于错误处理。希望这有助于。
请遵循它为我工作维卡斯给出的代码,并包含类路径这些jar文件并导入这些软件包
进口com.cloudera.sqoop.SqoopOptions; import com.cloudera.sqoop.tool。ImportTool;
参考库
- Sqoop-1.4.4罐/ sqoop
- ojdbc6.jar/sqoop/lib中(对于Oracle)
- 共享记录-1.1.1.jar的hadoop/lib中
- Hadoop的芯 - 1.2.1.jar/hadoop的
- 公地-CLI-1.2.jar的hadoop/lib中
- commmons-io.2.1.jar的hadoop/lib中
- 公地配置-1.6.jar的hadoop/lib中
- 公地琅2.4.jar的hadoop/lib中
- 杰克逊核-ASL-1.8.8.jar的hadoop/lib中
- 杰克逊映射器-asl- 1.8.8.jar的hadoop/lib中
- 公地HttpClient的-3.0.1.jar的hadoop/lib中
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.字符集,罐子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对于这种情况下配置JRE而在Eclipse中创建项目。
Vikas如果我想把导入的文件放入配置单元,我应该使用options.parameter(“--hive-import”)?
有一个技巧,我很容易解决。通过ssh你可以直接执行Sqoop命令。只要你必须使用的是一个SSH Java库
你必须按照这一步。
下载sshxcute Java库:https://code.google.com/p/sshxcute/ 并将其添加到其中包含下面的Java代码Java项目的构建路径
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, 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();
}
}
工作正常,但日志似乎不正确。 Sqoop作业成功执行并且控制台显示作业失败。 '检查exec是否成功... 执行命令执行失败:sqoop import --connect .... 错误消息:
- 1. 如何在Java中执行Sqoop?
- 2. Sqoop从一个Java程序内
- 3. 我们可以通过cassandra java驱动程序使用sqoop吗?
- 4. 如何使用java中的sqoop将Oracle表导入到Hive中?
- 5. 如何使用自定义JDBC驱动程序运行Sqoop?
- 6. 如何使用JAVA程序
- 7. 如何使用Java程序
- 8. 程序如何使用Java
- 9. 如何使用Java程序
- 10. 如何使用Java程序
- 11. 如何使用Java程序
- 12. 如何使用sqoop工具
- 13. 如何在Java Mad Libs程序中使用随机程序?
- 14. Sqoop用java失败
- 15. 如何在JSP中使用SSL(在Java EE应用程序中)?
- 16. 如何在java中使用java程序作为命令?
- 17. 如何使用Java程序保存并打开Java程序?
- 18. 如何使用sqoop api执行sqoop命令?
- 19. 如何使用java执行现有的sqoop作业?
- 20. 如何在Java应用程序中使用RabbitMQ代理
- 21. 如何在Java应用程序中使用TypedActor?
- 22. 如何使用import javax.microedition.io.HttpConnection;在SE中的Java应用程序
- 23. 如何使用会话的属性在Java应用程序中
- 24. 如何在Java/Swing应用程序中使用Windows XP主题?
- 25. 如何在Java桌面应用程序中使用Google Drive?
- 26. 如何在Java应用程序中使用PhantomJS的JavaScript API
- 27. 如何使用Powermockito在Java中测试实用程序类
- 28. 如何在我的Java应用程序中使用Python库?
- 29. 如何在基于Java的Web应用程序中使用ADFS
- 30. 如何在android应用程序中使用Skype Java API?
的Runtime.exec(命令);是你在找什么?http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Runtime.html – kosa 2012-02-10 14:55:44