7

HCatalog と HBase の相関関係を教えてください。

私はこれらの定義を見つけました:

Apache HCatalog HCatalog は、基礎となるファイル名や形式を使用せずにデータを参照するためのメタデータ抽象化レイヤーです。データが物理的に保存されている方法と場所から、ユーザーとスクリプトを隔離します。

Apache HBase HBase (Hadoop データベース) は、分散型の列指向データベースです。HBase は、基盤となるストレージに HDFS を使用します。MapReduce を使用したバッチ スタイルの計算とポイント クエリ (ランダム読み取り) の両方をサポートしています。

Hive で CREATE TABLE を使用すると、HCatalog にテーブルが作成されます。私はそれを理解していません。HBase である実際の DATABASE ではないのはなぜですか?

HCatalog は、すべてのデータ ストアの何らかのメタデータ リポジトリのようです。データベースとテーブルに関する情報も HBase に保持するということですか?

解説よろしくお願いします

よろしくパヴェル

4

2 に答える 2

8

HIVE で CREATE TABLE を実行すると、HCatalog に登録されます。Hive のテーブルは HBase テーブルの場合もありますが、HDFS ファイルとディレクトリの抽象化の場合もあります

HortonWorks のサイトで HCatalog のわかりやすい説明を見つけることができます。

于 2013-11-16T19:30:37.847 に答える
1

よく聞かれる質問に気づいたので、質問してからよくわからなかったので回答することにしました。では、まずHadoop 2.0からHCatalogとHiveを1つの製品として扱うようになりました。Hive は、デフォルトで HCatalog にテーブルを作成します。これは、HCatalog の自然なインターフェイスが Hive であることを意味します。したがって、すべての SQL-92 DML ( https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML ) と DDL ( https://cwiki.apache.org/confluence/display/Hive/LanguageManual )を使用できます。 +DDL ) から始まりcreate/alter/drop database、 etccreate/alter/drop tableで終わるまでselect, insert into... 唯一の例外は、insert が insert into ... as select from としてのみ機能することです。典型的な挿入には、次のものを使用する必要があります。

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

テーブルにはパーティションやインデックスを含めることができます (ただし、私の経験ではうまく機能しません) が、これはリレーショナル データベースではないため、外部キーを使用することはできません。

HBase の場合はまったく異なります。これはnoSQLデータベースの1つです(ただし、 以前の投稿で回答されたように、HiveはSQLクエリ用のHBaseインターフェースになる可能性があります)キー->値で構成されたテーブルがあります。いくつかのコマンドを比較してみましょう (テーブルの作成、テーブルへの挿入、テーブルからの選択、テーブルの削除)

ハイブ:

create table table_name (
  id                int,
  value1       string,
  value2             string
)
partitioned by (date string)

LOAD DATA INPATH 'filepath' ] INTO TABLE table_name [PARTITION (partcol1=val1, partcol2=val2 ...)]

INSERT INTO table_name as select * from othertable

SELECT * FROM table_name

DROP TABLE table_name

HBase:

hbase> create 'test', 'cf' 

hbase> put 'test', 'row1', 'cf:a', 'value1'

hbase> get 'test', 'row1'

hbase> disable 'test'
hbase> drop 'test'

ご覧のとおり、構文はまったく異なります。SQL ユーザーにとって、HCatalog を使用するのは当然のことです。noSQL データベースを使用するユーザーは、HBase を快適に使用できます。

于 2014-08-22T08:19:30.183 に答える