是否有SqoopOptions类的替代品

时间:2015-03-10 10:57:30

标签: java hadoop hdfs sqoop cloudera-cdh

我正在尝试使用SqoopOptions类使用Java代码将数据从 MySQL 导入 Hive ,但是它说这个类(com.cloudera.sqoop.SqoopOptions)已弃用,Class SqoopOptions。我谷歌替代这个但没有找到任何东西,任何人都可以建议我做什么是替代方案。我想通过我的java程序使用sqoop命令。

2 个答案:

答案 0 :(得分:2)

当Sqoop进入Apache时,很多com.cloudera.sqoop.*代码已重命名/迁移到org.apache.sqoop.*。你要找的班级是org.apache.sqoop.SqoopOptions我相信。

我强烈建议不要在Java程序中使用Sqoop。相反,尝试 Sqoop2 。我相信您可以使用Avro或Parquet格式的Kite连接器导入HDFS。然后你应该能够将这些数据加载到Hive中。

答案 1 :(得分:1)

一个选项是您可以使用sshxcute

执行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();
    }
}