관련 문서는 자신을 만드십시오! ! !
패키지 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 () 일치 (정규식);
플래그를 반환;
}
}
}