복붙노트

[HADOOP] Java 프로그램에서 Sqoop을 사용하는 방법?

HADOOP

Java 프로그램에서 Sqoop을 사용하는 방법?

나는 명령 행을 통해 sqoop을 사용하는 방법을 안다. 하지만 Java 프로그램을 사용하여 sqoop 명령을 호출하는 방법을 모른다. 누구든지 코드 뷰를 제공 할 수 있습니까?

해결법

  1. ==============================

    1.클래스 패스에 sqoop jar를 포함시키고 Sqoop.runTool () 메소드를 호출하여 자바 코드 내부에서 sqoop을 실행할 수 있습니다. 명령 줄처럼 프로그래밍 방식으로 필요한 매개 변수를 만들어야합니다 (예 : --connect 등).

    클래스 패스에 sqoop jar를 포함시키고 Sqoop.runTool () 메소드를 호출하여 자바 코드 내부에서 sqoop을 실행할 수 있습니다. 명령 줄처럼 프로그래밍 방식으로 필요한 매개 변수를 만들어야합니다 (예 : --connect 등).

    다음 사항에주의하십시오.

    희망이 도움이됩니다.

    final int ret = Sqoop.runTool(new String[] { ... });
    if (ret != 0) {
      throw new RuntimeException("Sqoop failed - return code " + Integer.toString(ret));
    }
    

    RL

  2. ==============================

    2.Java 프로그램에서 sqoop을 사용하여 MySQL에서 HDFS / HBase로 데이터를 가져 오기위한 샘플 코드를 아래에서 찾으십시오. 클래스 패스에 sqoop jar 파일이 있는지 확인하십시오.

    Java 프로그램에서 sqoop을 사용하여 MySQL에서 HDFS / HBase로 데이터를 가져 오기위한 샘플 코드를 아래에서 찾으십시오. 클래스 패스에 sqoop jar 파일이 있는지 확인하십시오.

            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);
    

    Harel이 제안한 것처럼 run () 메서드의 출력을 오류 처리에 사용할 수 있습니다. 이것을 원한다면 도움이됩니다.

  3. ==============================

    3.저를 위해 잘 작동 한 트릭이 있습니다. ssh를 통해 Sqoop 명령을 직접 실행할 수 있습니다. SSH Java 라이브러리 만 사용해야합니다.

    저를 위해 잘 작동 한 트릭이 있습니다. ssh를 통해 Sqoop 명령을 직접 실행할 수 있습니다. SSH Java 라이브러리 만 사용해야합니다.

    이것은 Java와는 별개입니다. 가져 오기를 수행하려는 원격 시스템에 설치된 SSH 라이브러리 및 sqoop 만 포함하면됩니다. 이제 ssh를 통해 시스템에 연결하고 MySQL에서 하이브로 데이터를 내보낼 명령을 실행하십시오.

    이 단계를 따라야합니다.

    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, the 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();   
    }
    }
    
  4. ==============================

    4.ProcessBuilder를 사용할 수있는 실행 파일과 명령 줄 인수의 위치를 ​​알고 있다면 Java에서 완료 및 반환 코드를 모니터링 할 수있는 별도의 프로세스를 실행할 수 있습니다.

    ProcessBuilder를 사용할 수있는 실행 파일과 명령 줄 인수의 위치를 ​​알고 있다면 Java에서 완료 및 반환 코드를 모니터링 할 수있는 별도의 프로세스를 실행할 수 있습니다.

  5. ==============================

    5.나를 위해 일한 vikas가 제공 한 코드를 따르고 classpath에이 jar 파일을 포함시키고이 패키지들을 임포트하십시오.

    나를 위해 일한 vikas가 제공 한 코드를 따르고 classpath에이 jar 파일을 포함시키고이 패키지들을 임포트하십시오.

    import com.cloudera.sqoop.SqoopOptions; import com.cloudera.sqoop.tool.ImportTool;

    참조 라이브러리

    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. charsets, jar 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

    때때로 이클립스 프로젝트가 JDK1.6을 사용하고 있으며 추가하는 라이브러리가 이클립스에서 프로젝트를 만드는 동안 JDK1.7이 경우 JRE를 구성하면 오류가 발생합니다.

    Vikas 내가 가져온 파일을 하이브에 넣으려면 options.parameter ( "--hive-import")를 사용해야합니까?

  6. from https://stackoverflow.com/questions/9229611/how-to-use-sqoop-in-java-program by cc-by-sa and MIT license