2017-02-28 14 views
0

現在、新しいhbaseクラスタを構築しています。アーキテクチャは以下の通りです:HBaseとHiveは同じマシン上に同じ場所に配置する必要がありますか?

hbase architecture

今私は新しいハイブクラスターを追加したいです。しかし、hbaseを使って同じhadoopクラスタでハイブを構築する必要があるかどうかはわかりません。または、ハイブ用に新しいハープクラスターを構築する必要がありますか?

hbase用の新しいhadoopクラスタを構築すると、hbase(AFAIK、hiberのデータをhdfsストレージにインポートする必要がある) ?

答えて

3

最初に、HBaseとHiveの間のトラフィックを定義します。

  • は直接
  • は、HBaseのテーブルを外部表の要求に参加し実行するためにハイブを使用するHBaseのテーブルで倉庫テーブルの要求を結合を実行するためにハイブを使用するのHBaseを照会するためのハイブを使用します。すべてのハイブのクエリでは、どちらかでしょう

これらのすべてのコンポーネントのアーキテクチャを深く理解すると、Hive WarehouseとHbaseの両方がシーンの背後でHDFSを使用していることがわかります。同じことが、HDFS内にある外部テーブルと考えることができます。したがって、Hiveを現在のアーキテクチャに導入すると、内部データが物理的にHBaseと同じ場所、つまりデータラックのDataNodeに格納されます。つまり、トラフィックはHiveクエリを通じてYARNによってスケジュールされるタスクに最適なものになります。別のデータセンターに配置された別々のデータノードのセットを使用してハイブウェアハウスの別のラックを作成すると、パフォーマンスに悪影響を及ぼします。

したがって、すべてのサービスに対して1つのラック内にデータを保持するのに十分な容量があれば、この方法に従ってください。参照先のリンクでHiveHBaseインフラストラクチャの詳細を読むことができます。

+0

こんにちは。私はhttps://cwiki.apache.org/confluence/display/Hive/HBaseIntegrationという文書を読んだ。そして、同じデータノード上でhbaseを使ってhiberクラスタを設定すれば、既存のhbaseテーブルに外部テーブルをマップすることができます。だから、私が正しく理解しているならば、ハイブはhbaseテーブルのデータコピーをそれを直接読むことができるように保存する必要はありません。そして、問題は、hbaseテーブルでSQLが多すぎる行をスキャンするか、SQLの実行が複雑なマップ削減タスクなので、hbaseのパフォーマンスに大きな影響を与えますか? – Alexis

+0

@Alexisこれは、実際に当社でどのように使用しているかです。 Hiveは、SQLクエリのトランスレータの役割をHBaseスキャナに実行するので、HBase経由でこの手順を直接実行するか、Hiveにこれを許可することによって、技術的には違いはありません。 HBaseStorageHandlerクラスを調べると、標準のHBase Javaクライアントがシーンの背後で使用されていることがわかります – Alex

+0

感謝@Alexを取得 – Alexis

関連する問題