Sqoopで次のコマンドの違いを理解できませんでした。誰かが小さな例を使って説明できればもっと良いでしょう。
--warehouse-dir and --target-dir
ありがとう
以下のパラメーターは、デフォルトのHiveテーブルの場所を指します。これは、内部テーブルでいくつかのテストを実行するだけの開発目的で使用できます。
--warehouse-dir
以下のパラメーターは、外部Hiveテーブルをマウントできるhdfsの場所を指します。これは、すべてのデータを外部ディレクトリと外部テーブルで使用できるようにする運用環境で役立ちます。
--target-dir
インポートの場合に得たように:
-warehouse-dir:データベースディレクトリ(sqoop_db_movies)およびテーブル名( importコマンド)ウェアハウスdir(データベースディレクトリ)にインポートされたファイルで自動的に作成されたディレクトリ。
例:sqoop import --options-file /home/cloudera/sqoop/conn --table movies --warehouse-dir /sqoop_db_movies -m 1
出力:
/ sqoop_db_movies/movies
/ sqoop_db_movies/movies/_SUCCESS
/ sqoop_db_movies/movies/part-m-00000
-target-dir:インポートされたファイルでテーブル名(sqoop_table_movies)として機能するディレクトリを作成します。
例:sqoop import --options-file /home/cloudera/sqoop/conn --table movies --target-dir /sqoop_table_movies -m 1
出力:
/ sqoop_table_movies/_SUCCESS
/ sqoop_table_movies/part-m-00000
--warehouse-dir
通常、sqoopを使用してimport-all-tablesツールですべてのテーブルをインポートするときにこのオプションを使用します。このディレクトリHive/data/warehouseディレクトリまたは他の親ディレクトリのいずれかです。すべてのテーブルはこの親ディレクトリにインポートされます。
--target-dir
このオプションは、インポートテーブルツールを使用して単一のテーブルをインポートする場合に使用します。各テーブルについて、ディレクトリに言及する必要があり、パスにまだ存在していてはなりません。
複数のテーブルに対して複数のSqoopジョブを実行する場合は、呼び出しごとに--target-dirパラメーターを変更する必要があります。
代わりに、Sqoopは出力ディレクトリを選択するための別のパラメーターを提供します。最終ディレクトリを直接指定する代わりに、パラメーター--warehouse-dirを使用すると、親ディレクトリのみを指定できます。
Sqoopは、ウェアハウスディレクトリにデータを書き込むのではなく、ウェアハウスディレクトリ内のテーブルと同じ名前のディレクトリを作成し、そこにデータをインポートします。
これは、SqoopがHDFS上のホームディレクトリにデータをインポートするデフォルトのケースと似ていますが、-warehouse-dirパラメーターを使用すると、ホームディレクトリ以外のディレクトリを使用できるという注目すべき例外があります。同じ名前のテーブルをインポートする場合を除いて、このパラメーターはテーブルをインポートするたびに変更する必要はありません。
--warehouse-dirは、データをインポートするためのHiveフォルダーをポイントします(テーブルをインポートするときに使用しました)。後者のシナリオでは、マッパーがLOAD INPATHを実行するための一時領域として使用されます。 --target-dirを--warehouse-dirと同じように設定し(テーブル全体からクエリインポートに切り替えた後)、空のテーブルを取得していました。 sqoopコマンドから--warehouse-dirを削除し、-target-dirを/ tmp/newfolderに変更しました。Hiveへのインポートは問題ありませんでした。
Warehouse dirは、複数のテーブルまたは単一のテーブルが正常に機能する場合でも、通常は使用します。
もう1つの利点は、外部テーブルデータをs3に格納する場合、warehouse-dirのみがS3で機能することです。これは非常に重要です。