最初に、HBaseとHiveの間のトラフィックを定義します。
- は直接
- が
- は、HBaseのテーブルを外部表の要求に参加し実行するためにハイブを使用するHBaseのテーブルで倉庫テーブルの要求を結合を実行するためにハイブを使用するのHBaseを照会するためのハイブを使用します。すべてのハイブのクエリでは、どちらかでしょう
これらのすべてのコンポーネントのアーキテクチャを深く理解すると、Hive WarehouseとHbaseの両方がシーンの背後でHDFSを使用していることがわかります。同じことが、HDFS内にある外部テーブルと考えることができます。したがって、Hiveを現在のアーキテクチャに導入すると、内部データが物理的にHBaseと同じ場所、つまりデータラックのDataNodeに格納されます。つまり、トラフィックはHiveクエリを通じてYARNによってスケジュールされるタスクに最適なものになります。別のデータセンターに配置された別々のデータノードのセットを使用してハイブウェアハウスの別のラックを作成すると、パフォーマンスに悪影響を及ぼします。
したがって、すべてのサービスに対して1つのラック内にデータを保持するのに十分な容量があれば、この方法に従ってください。参照先のリンクでHiveとHBaseインフラストラクチャの詳細を読むことができます。
こんにちは。私はhttps://cwiki.apache.org/confluence/display/Hive/HBaseIntegrationという文書を読んだ。そして、同じデータノード上でhbaseを使ってhiberクラスタを設定すれば、既存のhbaseテーブルに外部テーブルをマップすることができます。だから、私が正しく理解しているならば、ハイブはhbaseテーブルのデータコピーをそれを直接読むことができるように保存する必要はありません。そして、問題は、hbaseテーブルでSQLが多すぎる行をスキャンするか、SQLの実行が複雑なマップ削減タスクなので、hbaseのパフォーマンスに大きな影響を与えますか? – Alexis
@Alexisこれは、実際に当社でどのように使用しているかです。 Hiveは、SQLクエリのトランスレータの役割をHBaseスキャナに実行するので、HBase経由でこの手順を直接実行するか、Hiveにこれを許可することによって、技術的には違いはありません。 HBaseStorageHandlerクラスを調べると、標準のHBase Javaクライアントがシーンの背後で使用されていることがわかります – Alex
感謝@Alexを取得 – Alexis