3

次のスクリプトを使用して、DynamoDB から S3 にデータをエクスポートしています。

CREATE EXTERNAL TABLE TableDynamoDB(col1 String, col2 String)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES (
"dynamodb.table.name" = "TableDynamoDB",
"dynamodb.column.mapping" = "col1:col1,col2:col2"
);

CREATE EXTERNAL TABLE TableS3(col1 String, col2 String)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://myBucket/DataFiles/MyData.txt';

INSERT OVERWRITE TABLE TableS3
SELECT * FROM TableDynamoDB;

S3 では、出力を特定のファイル名 (MyData.txt) に書き込みたいのですが、現在の動作方法は、上記のスクリプトで「MyData.txt」という名前のフォルダーを作成し、この下にランダムな名前のファイルを生成することです。フォルダ。

HIVEを使用してS3でファイル名を指定することはまったく可能ですか?

ありがとうございました!

4

1 に答える 1

2

いくつかのこと:

  • Hadoop が s3 にデータを書き込む方法は 2 つあります。このwikiでは、違いについてもう少し詳しく説明しています。「s3」スキームを使用しているため、おそらくブロック番号が表示されます。
  • 一般に、M/R ジョブ (およびハイブ クエリ) は、出力を複数のファイルに書き込みます。これは並列処理のアーティファクトです。実際には、hadoop のほとんどのコマンド/API はディレクトリを非常にシームレスに処理するため、あまり気にしないでください。また、ディレクトリのようなものを使用hadoop fs -getmergeして、単一のストリーム内のすべてのファイルを読み取ることができます。
  • 私の知る限り、外部ハイブテーブルの DDL の LOCATION 引数は、上記の理由から常にディレクトリとして扱われます。
于 2012-07-26T00:21:56.417 に答える