Java-从MySQL到Hive导入,其中MySQL在Windows上运行,而Hive在Cent OS上运行(Horton Sandbox)

在任何答案和评论之前.我尝试了在*中找到的几个选项,但均以失败告终.以下是这些链接-

> How can I execute Sqoop in Java?
> How to use Sqoop in Java Program?
> How to import table from MySQL to Hive using Java?
> How to load SQL data into the Hortonworks?

我通过命令行在Horton Sandbox中进行了尝试并成功.

sqoop import --connect jdbc:mysql://192.168.56.101:3316/database_name --username=user --password=pwd --table table_name --hive-import -m 1 -- --schema default

其中192.168.56.101适用于Windows,而192.168.56.102适用于Horton Sandbox 2.6.

现在,我想在Java中做同样的事情,使Java代码在其他地方运行,但不在Horton沙箱中运行.

>如何定位HIVE_HOME和其他Sqoop参数,因为它们正在沙盒中运行.
>我必须通过的参数.它应该作为SqoopOptions或Sqoop.runTools字符串数组参数传递.都失败了.
>当导入库(com.cloudera.sqoop和org.apache.sqoop)时,我也感到困惑,并得到这个

ImportTool类型的方法run(com.cloudera.sqoop.SqoopOptions)不适用于这些参数
 (org.apache.sqoop.SqoopOptions)包含这两行(在这两行之间添加了option参数)

 SqoopOptions options = new SqoopOptions();
 int ret = new ImportTool().run(options);

如果我选择Cloudera方法,则弃用,但如果我选择apace run方法,则不接受options参数

我从几周后就为此感到震惊.请帮忙.

解决方法:

是的,您可以通过ssh进行操作. Horton Sandbox预先安装了ssh支持.您可以在Windows上通过ssh客户端执行sqoop命令.或者,如果您想以编程方式(即我在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 1.99 集群安装及迁移mysql 到hive


下一篇:使用sqoop将数据从Mysql导入到Hbase时出错