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

3

在回答和评论之前,我尝试了一些在Stackoverflow上找到的选项,但都以失败告终。以下是这些链接-

我通过命令行在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)。在这两行之间添加了选项参数。

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

如果我选择 Cloudera 方法,它将被弃用,但如果我选择 Apache 运行方法,则不接受选项参数。我已经困扰了几周,请帮忙。
1个回答

3

是的,您可以通过ssh来实现。Horton Sandbox预先安装了ssh支持。您可以在Windows上通过ssh客户端执行sqoop命令。或者,如果您希望以编程方式完成(这就是我在Java中所做的),则必须按照以下步骤进行。

  1. 下载sshxcute java库:https://code.google.com/p/sshxcute/
  2. 将其添加到包含以下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();   
}
}


1
是的,我用过那个,但并没有帮助我很多 :( - user3764759
1
我知道那些方法,但既然有库和API可用,为什么还要使用这些方法呢?而且我认为在此之后还需要设置更多的东西。这并没有对我帮助太大。 - user3764759
@Seelenvirtuose - 我知道,但需要50个声望点。您能否请取消您的投票,以便我可以增加点数以在任何下一篇文章中发表评论:( - vineetv2821993
谢谢 :),你重新编辑了那个答案。这意味着你正在处理它 :). 顺便说一句,非常感谢。这就是我想要的 :) - user3764759
1
@vineetv2821993 我是Java和Hadoop的新手,我想问一下,我们能否将这个解决方案用于Web应用程序。 - Vikram Singh Chandel
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接