Java SqoopOptions类有其他选择吗

Java SqoopOptions类有其他选择吗,java,hadoop,hdfs,sqoop,cloudera-cdh,Java,Hadoop,Hdfs,Sqoop,Cloudera Cdh,我试图使用SqoopOptions类使用Java代码将数据从MySQL导入到Hive,但它说这个类(com.cloudera.sqoop.SqoopOptions)不推荐使用。我用谷歌搜索出了这个替代方案,但没有找到任何东西,有人能告诉我做这个的替代方案是什么吗。我想通过java程序使用sqoop命令。一个选项是,您可以使用 以下是您可以使用的代码段 import net.neoremind.sshxcute.core.ConnBean; import net.neoremind.sshxcut

我试图使用
SqoopOptions
类使用Java代码将数据从MySQL导入到Hive,但它说这个类(
com.cloudera.sqoop.SqoopOptions
)不推荐使用。我用谷歌搜索出了这个替代方案,但没有找到任何东西,有人能告诉我做这个的替代方案是什么吗。我想通过java程序使用sqoop命令。

一个选项是,您可以使用

以下是您可以使用的代码段

import net.neoremind.sshxcute.core.ConnBean;
import net.neoremind.sshxcute.core.Result;
import net.neoremind.sshxcute.core.SSHExec;
import net.neoremind.sshxcute.task.CustomTask;
import net.neoremind.sshxcute.task.impl.ExecCommand;

public static void main(String[] args) {
    ConnBean connBean = new ConnBean("<SYSTEM_IP>", "<USERNAME>","<PASSWORD>");

    SSHExec sshExec = SSHExec.getInstance(connBean); 

    StringBuilder sqoopImportCommand = new StringBuilder("sqoop import --connect jdbc:mysql://<IP_ADDRESS>:<PORT>/<DATABASE> ")
            .append("--username <USERNAME> --password <PASSWORD> --table <TABLE_NAME> --target-dir <HDFS_PATH>");

    try {
        sshExec.connect();

        CustomTask sqoopImportTask = new ExecCommand(sqoopImportCommand.toString());
        Result crres = sshExec.exec(sqoopImportTask);

        if(crres.isSuccess){
            System.out.println("Data imported successfully");
        }
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    } finally {
        sshExec.disconnect();
    }
}
import net.neoEmilding.sshxcute.core.ConnBean;
导入net.neoEmilding.sshxcute.core.Result;
导入net.neoEmilding.sshxcute.core.SSHExec;
导入net.neoEmilding.sshxcute.task.CustomTask;
导入net.neoEmilding.sshxcute.task.impl.ExecCommand;
公共静态void main(字符串[]args){
ConnBean=newconnbean(“,”,“);
SSHExec-SSHExec=SSHExec.getInstance(connBean);
StringBuilder sqoopImportCommand=新的StringBuilder(“sqoop导入--连接jdbc:mysql://:/”)
.append(“--username--password--table--target dir”);
试一试{
sshExec.connect();
CustomTask sqoopImportTask=new ExecCommand(sqoopImportCommand.toString());
结果crres=sshExec.exec(sqoopmenttask);
if(crres.isSuccess){
System.out.println(“数据导入成功”);
}
}捕获(例外e){
//TODO:处理异常
e、 printStackTrace();
}最后{
sshExec.disconnect();
}
}

当Sqoop进入Apache时,许多
com.cloudera.Sqoop.
代码已重命名/迁移到
org.Apache.Sqoop.
。我相信您正在寻找的类是
org.apache.sqoop.SqoopOptions


我强烈建议不要从Java程序中使用Sqoop。相反,请尝试Sqoop2。我相信你可以导入到HDFS使用风筝连接器在Avro或拼花格式。然后您应该能够将该数据加载到配置单元中。

如果另一个系统是我们没有公钥的任何机器,那么是否可以使用sshxcute进行连接。我怀疑它是否适用于远程计算机?根据sshxcute文档,如果您的远程系统已打开SSH连接并启用凭据,则您可以使用sshxcute连接到远程系统是的,没错,但在我的场景中,我正在使用基于web的数据迁移工具,该工具可以从任何位置访问。因此,不可能从每个系统获取凭证。那么我应该使用什么呢?这里您需要运行导入作业的系统的凭据,而不是运行应用程序的用户系统的凭据。在这种情况下,您需要安装了hadoop和sqoop的远程系统的凭据,该系统将运行sqoop导入作业并将数据推送到HDFSHere ConnBean指的是您的远程系统,您在其中安装了hadoop和sqoop,在该系统上,当您连接并执行我正在查找的任务时,它将运行sqoop导入作业
org.apache.sqoop.SqoopOptions
,感谢您的回复。我有了新的想法,这将对我有很大帮助
com.cloudera.sqoop.SqoopOptions
似乎已经“过早地被弃用”,因为sqoop的一些功能(例如EvalSqlTool等工具类)仍然需要它,并且不能与
org.apache.sqoop.SqoopOptions
一起使用。哎呀,谢谢Sqoop强迫我每次编译时都看到弃用警告。