Hive の外部テーブルと内部テーブルの違いを教えてください。テーブルをドロップすると違いが生じることを私は知っています。データとメタデータが内部で削除され、メタデータのみが外部テーブルで削除されるという意味がわかりません。ノードに関して誰か説明してくれませんか。
18 に答える
Hive には、状態を追跡するために使用するマスター ノードにリレーショナル データベースがあります。たとえばCREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/';
、このテーブル スキーマはデータベースに格納されます。
パーティション化されたテーブルがある場合、パーティションはデータベースに格納されます (これにより、Hive はファイル システムに移動してパーティションを検索することなく、パーティションのリストを使用できます)。これらの種類のものは「メタデータ」です。
内部テーブルを削除すると、データが削除され、メタデータも削除されます。
外部表を削除すると、メタデータのみが削除されます。つまり、ハイブは現在そのデータを認識していません。データ自体には触れません。
内部テーブル データはウェアハウス フォルダーに保存されますが、外部テーブル データはテーブル作成で指定した場所に保存されます。
したがって、内部テーブルを削除すると、ウェアハウス フォルダーの下のデータだけでなくスキーマも削除されますが、外部テーブルの場合はスキーマのみが失われます。
そのため、外部テーブルを削除した後に再び元に戻したい場合は、同じスキーマでテーブルを再度作成し、元のデータの場所を指すことができます。それが今はっきりしていることを願っています。
外部テーブルでは、ドロップすると、テーブルのスキーマのみが削除され、テーブル データは物理的な場所に存在します。したがって、データを削除するには、hadoop fs -rmr tablename を使用します。マネージド テーブル ハイブは、テーブルを完全に制御できます。外部テーブルでは、ユーザーがそれを制御できます。
内部テーブルは、削除を含むデータの完全なライフサイクルを Hive で管理する場合に役立ちます。一方、外部テーブルは、ファイルが Hive の外部で使用されている場合に役立ちます。
外部テーブルに最適な次のシナリオを検討してください。
MapReduce (MR) ジョブは、巨大なログ ファイルをフィルタリングしてn
サブ ログ ファイル (たとえば、各サブ ログ ファイルには特定のメッセージ タイプのログが含まれる) を吐き出し、出力、つまりn
サブ ログ ファイルは hdfs に格納されます。
これらのログ ファイルは、さらに分析を実行するために Hive テーブルにロードされます。このシナリオでは、外部テーブルをお勧めします。実際のログ ファイルは、外部プロセス、つまり MR ジョブによって生成および所有されるためです。生成された各ログ ファイルをそれぞれの Hive テーブルにロードする追加の手順も必要です。
また、Hive はビッグ データ ウェアハウスであることにも注意してください。テーブルを削除したい場合、ギガバイトまたはテラバイトのデータを失いたくありません。その規模でデータを生成、移動、およびコピーすると、時間がかかる場合があります。「マネージド」テーブル ハイブを削除すると、そのデータも破棄されます。「外部」テーブルを削除すると、ハイブ メタストアからのスキーマ定義のみが削除されます。hdfs 上のデータはまだ残っています。
外部ハイブ テーブルには、テーブルを削除してもファイルが削除されないという利点があります。
ハイブ内の外部テーブルの最適な使用例は、CSV またはテキストのいずれかのファイルからテーブルを作成する場合です。
HDFS に既にデータがある場合は、外部の Hive テーブルを作成してデータを記述することができます。EXTERNAL と呼ばれるのは、外部テーブルのデータがデフォルトのウェアハウス ディレクトリではなく LOCATION プロパティで指定されているためです。
内部テーブルにデータを保持する場合、Hive はテーブルとデータのライフサイクルを完全に管理します。これは、内部テーブルが削除されると、データが削除されることを意味します。外部テーブルが削除されると、テーブルのメタデータは削除されますが、データは保持されます。ほとんどの場合、誤ってテーブルと一緒にデータを削除することを避けるために、外部テーブルが好まれます。
管理されたテーブルの場合、Hive がデータのライフサイクルを制御します。Hive は、管理対象テーブルのデータを、デフォルトで hive.metastore.warehouse.dir で定義されたディレクトリの下のサブディレクトリに保存します。
管理されたテーブルを削除すると、Hive はテーブル内のデータを削除します。ただし、管理されたテーブルは、他のツールと共有するにはあまり便利ではありません。たとえば、主に Pig によって作成および使用されるデータがあり、それに対していくつかのクエリを実行したいが、データの所有権を Hive に付与したくないとします。
その時点で、そのデータを指す外部テーブルが定義されますが、そのデータの所有権は取得されません。
ハイブはメタデータのみをメタストアに格納し、元のデータはハイブの外側に格納します。外部テーブルを使用する場合、これらによって場所を指定できます。テーブルを削除しても、元のデータは影響を受けません。