0

バックグラウンド :

ログ情報を含むハイブテーブル「ログ」があります。このテーブルには、1時間ごとに新しいログデータが読み込まれます。過去2日間のログをすばやく分析したいので、過去48時間のデータをリレーショナルデータベースに抽出したいと思います。

上記の問題を解決するために、HIVESQLクエリによってロードされるステージングハイブテーブルを作成しました。新しいデータをステージングテーブルにロードした後、sqoopクエリを使用して新しいログをリレーショナルデータベースにロードします。

問題は、sqoopがBATCHのリレーショナルデータベースにデータをロードしていることです。したがって、特定の時間には、特定の時間のログの一部しかありません。

これは、誤った分析出力につながります。

質問:

1)。このSqoopデータの読み込みをトランザクション化する方法。つまり、すべてのレコードがエクスポートされるか、何もエクスポートされません。

2)。このデータパイプラインを構築するための最良の方法は、Hiveテーブル->ステージングテーブル->リレーショナルテーブルのこのプロセス全体です。

技術的な詳細:

Hadoopバージョン1.0.4Hive -
0.9.0
Sqoop-1.4.2

4

2 に答える 2

1

sqoopと呼ばれるオプションを使用してこれを行うことができるはずです--staging-table。これは基本的に、エクスポートされたデータをステージングするために使用される補助テーブルとして機能します。ステージングされたデータは、最終的に1回のトランザクションで宛先テーブルに移動されます。したがって、これを行うことで、部分的なデータとの整合性の問題が発生することはありません。

(出典:Sqoopドキュメント

于 2013-02-21T16:28:59.233 に答える
1

HiveとHadoopは、分析をMapReduceタスク内で実行できるようにする優れたテクノロジーであり、複数のノードを利用することで分析を非常に高速に実行します。

あなたの利益のためにそれを使用してください。まず、Hiveテーブルをパーティション化します。すべてのログを1つのHiveテーブルに保存していると思います。したがって、クエリを実行すると、

SQL .... WHERE LOG_DATA> '17 / 10/2013 00:00:00'

次に、これまでに収集したすべてのデータを効率的にクエリします。代わりに、パーティションを使用する場合-たとえば、クエリで定義できる1日1回とします

WHERE p_date=20131017またはp_date=20131016

Hiveはパーティション化されており、これら2つのファイルのみを読み取ることができるようになりました。たとえば、1日あたり10 GBのログを取得したとすると、HIVEQUERYは適切なHadoopクラスターで数秒で成功するはずです。

于 2013-10-17T18:47:19.347 に答える