작은 파일의 자바 API 작업이 HDFS에 병합 (노트)

관련 문서는 자신을 만드십시오! ! !

패키지 com.hadoop.hdfs;

수입 때 java.io.IOException;
수입 java.net.URI의;
수입 java.net.URISyntaxException;
수입 org.apache.hadoop.conf.Configuration;
수입 org.apache.hadoop.fs.FSDataInputStream;
수입 org.apache.hadoop.fs.FSDataOutputStream;
수입 org.apache.hadoop.fs.FileStatus;
수입 org.apache.hadoop.fs.FileSystem;
수입 org.apache.hadoop.fs.FileUtil;
수입 org.apache.hadoop.fs.Path;
수입 org.apache.hadoop.fs.PathFilter;
수입 org.apache.hadoop.io.IOUtils;
/ **

  • HDFS에 작은 파일을 병합
  • * /
    공용 클래스 MergeSmallFilesToHDFS {
    개인 정적 파일 시스템 FS = NULL;
    전용 로컬 파일 시스템 정적 = NULL;

    공공 정적 무효 메인 (문자열 []에 인수) IOException가 슬로우
    URISyntaxException {
    리스트 ();
    }

    / **

    • 데이터 수집 및 HDFS에 업로드 그리고
    • IOException이 발생이
      에 URISyntaxException 발생
      /
      공공 정적 무효 목록 () IOException이, {에 URISyntaxException 발생
      // 구성 파일 시스템 하둡을 읽고
      , 새로운 새 = conf의 구성을 () 구성을
      HDFS : // 마스터 : 9000 검토 // 파일 시스템 액세스 인터페이스, 주 자신의 주소로 HDFS
      새로운 새로운 URI의 URI =의 URI ( ": // 마스터 HDFS 9000")
      // 객체 파일 시스템 생성
      FS = FileSystem.get을 (URI, conf의);
      // 얻을 로컬 파일 시스템
      = 지역 FileSystem.getLocal ( conf의);
      // SVN 여과 파일 디렉토리는, 주 : 경로 E : // 하둡 / 73 / 그들의 경로를 수정
      FileStatus [] = dirstatus local.globStatus (새로운 경로 ( "E를 // 하둡 / 73 / . "), 새로운 새로운 RegexExcludePathFilter ("^ SVN의의 $ "));
      모든 파일 경로 73 // 아래 디렉토리 얻기
      경로 [] =의 DIRS의 FileUtil.stat2Paths (dirstatus를)
      FSDataOutputStream OUT = NULL;
      FSDataInputStream에서 = NULL;
      (경로 디렉토리 : DIRS)에 대한 {
      // 2019년 10월 31일
      . 문자열 fileName에 = dir.getName ()를 대체 ( "-", ""); // 파일 이름
      //에만 다음 날짜 디렉토리를 승인 .txt 파일
      (새 새 경로 (DIR + "/ FileStatus [] = localStatus local.globStatus ". ^ ( "), 새로운 새로운 RegexAcceptPathFilter을 TXT $"));
      모든 파일을 디렉토리 //로하면 날짜 얻을
      경로 [] listedPaths = FileUtil합니다. stat2Paths (localStatus)
      // 출력 경로, 참고 HDFS : // 마스터 9000 / 20,191,031 / 자체 HDFS의 개질 디렉토리 주소
      = 새로운 패스 경로 블록 ( "HDFS : // 마스터 : 20,191,031분의 9,000 /"+ fileName에 + "이 .txt")
      에서 System.out.println ( "병합 파일명 :"+ fileName에 +); "TXT."
      // 출력 스트림을 열
      = fs.create (블록 OUT)
      (경로 P를 들어 listedPaths) {
      에서 = (p) local.open // 오픈 입력 스트림
      IOUtils.copyBytes는 (에서 밖으로, 4096, 거짓); // 데이터를 복사
      입력 스트림습니다 //
      ) (in.close 단계;
      }
      IF (OUT = NULL!) {
      // 출력 스트림 가까이
      out.close을 ();
      }
      }

    }

    / **

    • 정규식 필터 파일 형식
    • * /
      공공 정적 클래스 RegexExcludePathFilter는 PathFilter {구현
      민간 최종 문자열 정규식;
      공공 RegexExcludePathFilter (문자열 정규식) {
      this.regex = 정규식;
      }

      공공 부울 수락 (경로 경로) {
      부울 플래그 = path.toString () 경기 (정규 표현식).;
      ! 플래그를 반환;
      }

    }

    / **

    • 정규식 허용되는 파일 형식
    • * /
      공공 정적 클래스 RegexAcceptPathFilter는 PathFilter {구현
      민간 최종 문자열 정규식;
      공공 RegexAcceptPathFilter (문자열 정규식) {
      this.regex = 정규식;
      }

      @Override
      공공 부울 (경로 경로) 동의 {
      . 부울 플래그 = path.toString () 일치 (정규식);
      플래그를 반환;
      }

    }
    }

추천

출처blog.51cto.com/14572091/2446947