関連文書は、独自に作成してください!!!
パッケージ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に小さなファイルをマージ
-
* /
publicクラスのMergeSmallFilesToHDFS {
プライベート静的ファイルシステムFS = NULL;
プライベート静的ファイルシステムのローカル= NULL;公共の静的な無効メイン(文字列[]引数)にIOException、スロー
URISyntaxException {
リスト();
}/ **
- データ収集とHDFSにアップロードされ、
- IOExceptionがスロー
にURISyntaxExceptionをスロー
/
)(パブリック静的ボイドリストにIOException {にURISyntaxExceptionスロー
//設定ファイルシステムのHadoopを読んで
、コンフィギュレーションの新しい新しい= confの設定()
HDFS://マスター:9000レビュー//ファイルシステムへのアクセス・インタフェース、注意を自分のアドレスにHDFS
( "://マスター:HDFS 9000")の新しい新しいURI = URIのURI;
//オブジェクトファイルシステムの作成
FS = FileSystem.get(URI、CONFを);
//ローカルファイルシステムを取得する
ローカル= FileSystem.getLocal( CONF);
// SVNフィルタファイルのディレクトリには、注意:パスE://のHadoop / 73 /自分の道を改訂
FileStatus [] dirstatus = local.globStatus(新しいパス(「Eを://のHadoop / 73 / 。 ")、新新RegexExcludePathFilter(" ^のsvn $「));
すべてのファイル・パス73 //下のディレクトリを取得し
、パス[] = dirsにFileUtil.stat2Paths(dirstatus);
FSDataOutputStream OUT = NULL;
FSDataInputStreamで= NULL;
(パスのディレクトリ:dirsに)のために{
// 2019年10月31日
。文字列fileNameに= dir.getName()を置き換える( " - "、 ""); //ファイル名
//のみ次の日付のディレクトリを受け入れます.txtファイル
FileStatus [] = localStatus local.globStatus(新しい新しいパス(ディレクトリ+ "/ ")、新新RegexAcceptPathFilter( "^ TXT $を"));
ディレクトリ内のすべてのファイル//日付の取得
パス[] listedPaths = FileUtilを。 stat2Paths(localStatus);
//出力パス、注:HDFS://マスター9000/ 20191031 / 独自HDFSのような修飾されたディレクトリアドレス
=新しいパスパスブロック( "HDFS ://マスタ:20191031分の9000 /" + fileNameに+ ".TXT");
System.out.printlnは( "マージされたファイル名:" + fileNameに+ "TXT");
//出力を開くには、ストリーム
;(ブロック)= fs.createをOUT
:{listedPaths)(パスPのために
(P)local.open =で; //オープン入力ストリーム
IOUtils。copyBytesは(IN、OUT、4096、偽); //データをコピーします
入力ストリーム閉じ//
)(in.closeを;
}
IF(OUT = NULL!){
//出力ストリーム閉じ
out.closeを();
}
}
}
/ **
- 正規表現フィルタファイル形式
-
* /
パブリック静的クラスRegexExcludePathFilterはPathFilter {実装
民間最終文字列の正規表現を、
公共RegexExcludePathFilter(文字列の正規表現){
this.regex =正規表現。
}パブリックブール(パスpath){受け入れる
。ブーリアンフラグ= path.toString()マッチ(正規表現)。
!フラグを返します。
}
}
/ **
- 正規表現は、ファイル形式を受け入れ
-
* /
パブリック静的クラスRegexAcceptPathFilterはPathFilter {実装
民間最終文字列の正規表現を、
公共RegexAcceptPathFilter(文字列の正規表現){
this.regex =正規表現。
}@Override
パブリックブール受け入れる(パスpath){
ブール・フラグ= path.toString()マッチ(正規表現)。
フラグを返します。
}
}
}