0

特定のデータベースからすべてのハイブテーブルを s3 に毎日アップロードするためのプログラムを作成しています。ただし、このデータベースには何年も前のレコードが含まれており、完全なコピー/配布には大きすぎます。

データベースを含む HDFS のディレクトリ全体を検索し、指定された (入力) date より後の last_modified_date を持つファイルのみを取得します

次に、これらの一致するファイルの完全な distcp を s3 に実行します。(一致するファイルのパス/名前を別のファイルにコピーし、この余分なファイルから distcp をコピーする必要がある場合は、それも問題ありません。)

オンラインで見ると、フラグを使用して最終更新日でファイルを並べ替えることができることがわかった-tので、次のようなものから始めました: hdfs dfs -ls -R -t <path_to_db>、しかしこれでは十分ではありません。500000 ファイルのように印刷されていますが、この入力日付より前のものをトリミングする方法をまだ理解する必要があります...

編集:私は Python スクリプトを書いています。最初に明確にしておらず申し訳ありません!

編集pt2:数千、さらには数十万のファイルをトラバースする必要があることに注意してください。問題を解決するために基本的なスクリプトを作成しましたが、実行に非常に時間がかかります。プロセスを高速化する方法が必要です....

4

2 に答える 2

0

WebHDFS を使用して、まったく同じ情報を取得できます: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html

これは、Python で使用する方が使いやすいかもしれません。

:

ファイル/ディレクトリのステータス HTTP GET リクエストを送信します。

curl -i  "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILESTATUS"
 The client receives a response with a FileStatus JSON object:

HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked

{
  "FileStatus":
  {
    "accessTime"      : 0,
    "blockSize"       : 0,
    "group"           : "supergroup",
    "length"          : 0,             //in bytes, zero for directories
    "modificationTime": 1320173277227,
    "owner"           : "webuser",
    "pathSuffix"      : "",
    "permission"      : "777",
    "replication"     : 0,
    "type"            : "DIRECTORY"    //enum {FILE, DIRECTORY}
  }
}

ディレクトリを一覧表示する HTTP GET 要求を送信します。

curl -i  "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS"
 The client receives a response with a FileStatuses JSON object:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 427

{
  "FileStatuses":
  {
    "FileStatus":
    [
      {
        "accessTime"      : 1320171722771,
        "blockSize"       : 33554432,
        "group"           : "supergroup",
        "length"          : 24930,
        "modificationTime": 1320171722771,
        "owner"           : "webuser",
        "pathSuffix"      : "a.patch",
        "permission"      : "644",
        "replication"     : 1,
        "type"            : "FILE"
      },
      {
        "accessTime"      : 0,
        "blockSize"       : 0,
        "group"           : "supergroup",
        "length"          : 0,
        "modificationTime": 1320895981256,
        "owner"           : "szetszwo",
        "pathSuffix"      : "bar",
        "permission"      : "711",
        "replication"     : 0,
        "type"            : "DIRECTORY"
      },
      ...
    ]
  }
}
于 2022-01-28T20:53:52.097 に答える