小さなファイルのJava 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に小さなファイルをマージ
  • * /
    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()マッチ(正規表現)。
      フラグを返します。
      }

    }
    }

おすすめ

転載: blog.51cto.com/14572091/2446947