2017-09-25 13 views
0

나중에 LoadIncrementalHFiles 명령으로 대량로드에 사용할 HFiles를 생성하는 Spark 응용 프로그램을 작성했습니다. 원본 데이터 풀이 매우 크기 때문에 입력 파일은 순차적으로 처리되는 반복으로 분할됩니다. 각각의 반복은 자신의 HFile 디렉토리를 만들고, 나의 HDFS 구조는 다음과 같습니다LoadIncrementalHFiles 및 하위 디렉토리로 대량로드

/user/myuser/map_data/hfiles_0 
     ...   /hfiles_1 
     ...   /hfiles_2 
     ...   /hfiles_3 
        ... 

map_data 디렉토리에 500 파일이 때문에 내가 자동으로 처리 할 수는 LoadIncrementalHFiles 함수를 호출하는 방법을 찾고 있어요있다 이 하위 디렉토리는 나중에 반복됩니다.

해당 명령이 될 것이다 : (나는 /user/myuser/map_data 디렉토리로를 호출 할 때)

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dcreate.table=no /user/myuser/map_data/hfiles_0 mytable 

내가이 명령은 하위 디렉토리에서 작동하지 않는 한, 반복적 인 명령으로 변경할 필요가!

Java Process 인스턴스를 사용하여 위의 명령을 자동으로 실행하려고했지만 아무 것도하지 않았습니다 (콘솔에 출력되지 않고 내 HBase 테이블에도 행이 없습니다).

내 코드에서 org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles Java 클래스를 사용하면 작동하지 않으며 응답도 없습니다!

나에게 유용한 예제가 있습니까? 또는 위의 hbase 명령을 상위 디렉토리에서 실행할 수있는 매개 변수가 있습니까? Hortonworks 데이터 플랫폼 2.5 클러스터에서 HBase 1.1.2로 작업하고 있습니다.

편집 나는 Run LoadIncrementalHFiles from Java client

답변

0

이 솔루션은 여러 부분으로 hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dcreate.table=no /user/myuser/map_data/hfiles_0 mytable 명령을 분할했다 하둡 클라이언트 Java 응용 프로그램에서 LoadIncrementalHFiles 명령을 실행했지만, 내가 물어 압축에 관한 예외를 받고 있어요, 참조 (명령 부분 당 하나)이 Java 코드 스 니펫을 참조하십시오.

TreeSet<String> subDirs = getHFileDirectories(new Path(HDFS_PATH), hadoopConf); 

for(String hFileDir : subDirs) { 

    try { 
     String pathToReadFrom = HDFS_OUTPUT_PATH + "/" + hFileDir; 
     ==> String[] execCode = {"hbase", "org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles", "-Dcreate.table=no", pathToReadFrom, hbaseTableName}; 
     ProcessBuilder pb = new ProcessBuilder(execCode); 
     pb.redirectErrorStream(true); 
     final Process p = pb.start(); 

     // Write the output of the Process to the console 
     new Thread(new Runnable() { 
      public void run() { 
       BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
       String line = null; 

       try { 
        while ((line = input.readLine()) != null) 
         System.out.println(line); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }).start(); 

    // Wait for the end of the execution 
    p.waitFor(); 
    ... 
}