10

私は Hadoop Hive を初めて使用し、レポート ソリューションを開発しています。問題は、クエリのパフォーマンスが非常に遅いことです (hive 0.10、hbase 0.94、hadoop 1.1.1)。クエリの 1 つは次のとおりです。

select a.*, b.country, b.city from p_country_town_hotel b 
    inner join p_hotel_rev_agg_period a  on
    (a.key.hotel = b.hotel) where b.hotel = 'AdriaPraha' and a.min_date < '20130701'
    order by a.min_date desc  
    limit 10;

これにはかなり長い時間がかかります (50 秒)。結合は文字列フィールドであり、整数ではありませんが、データセットは大きくありません(cca 3300および100000レコード)。このSQLでヒントを試してみましたが、それ以上速くなりませんでした。MS SQL Server での同じクエリは 1 秒続きます。また、テーブルからの単純なカウント (*) は 7 ~ 8 秒続きますが、これは衝撃的です (テーブルには 3300 レコードがあります)。何が問題なのか本当にわかりませんか?アイデアはありますか、それとも Hadoop を誤解しましたか?

4

4 に答える 4

18

はい、Hadoop を誤解しています。Hadoop や Hive も、リアルタイムのものではありません。オフラインのバッチ処理などに最適です。これらは、RDBMS の代わりになるものではありません。微調整はできますが、「絶対リアルタイム」は不可能です。ハイブクエリを実行すると、内部で多くのことが起こりますが、気付いていないと思います。まず最初に、Hive クエリが対応する MR ジョブに変換され、その後に分割の作成、レコードの生成、マッパーの生成などのいくつかの処理が続きます。リアルタイムが必要な場合は、Hadoop (または Hive) をお勧めしません。

リアルタイムのニーズについては、 Impalaを調べてみてください。

于 2013-05-03T14:46:12.153 に答える
4

Hive はリアルタイム ジョブに適したツールではありませんが、Hadoop インフラストラクチャをリアルタイムまたは高速データ アクセスで活用したい場合は、HBase. その付加価値は、すべて高速アクセスに関するものです。ソリューションに Hadoop を選択する理由はわかりませんが、HDFS が提供する固有の冗長性 (ファイルを一度コピーすると自動複製される) の 1 つである可能性があるため、Hbase は一部の人々が好む HDFS の上にあります。 Hadoop を調べている理由。

詳細については、この質問を読んでください

于 2013-05-03T15:11:02.937 に答える
1

Hadoop を初めて使用するかどうかはわかりません。Hive は、テーブルがどれほど小さいかをインタラクティブな速度で結果を提供しません。すでにこれを知っていて、クエリを調整しようとしている場合は、以下を試すことができます。

select a.*, b.country, b.city from
 (select * from p_country_town_hotel where hotel= 'AdriaPraha') b 
 inner join 
 (select * from p_hotel_rev_agg_period where min_date < '20130701') a  
 on
 a.key.hotel = b.hotel
 order by a.min_date desc  
 limit 10;

テーブルの 1 つがメモリに収まるほど小さいことがわかっている場合は、マップ サイド ジョインを試すことができます。

于 2013-05-03T13:37:31.183 に答える
1

このようなリアルタイムのクエリにはhttp://phoenix.apache.org/を使用してください

于 2014-11-05T00:27:56.813 に答える