9

Cloudera CDH 4 を使用しており、期待どおりに Oracle データベースから HDFS ウェアハウスにテーブルをインポートできます。問題は、データベース内に何万ものテーブルがあり、sqoop は一度に 1 つのテーブルのインポートしかサポートしないことです。

複数のテーブルを HDFS または Hive にインポートするために使用できるオプションは何ですか? たとえば、Oracle から HDFS または Hive に一度に 200 個のテーブルをインポートする最良の方法は何でしょうか?

これまでに見た唯一の解決策は、テーブルのインポートごとに sqoop ジョブを作成し、それらをすべて個別に実行することです。Hadoop は大規模なデータセットで動作するように設計されているため、より良い方法があるはずです。

4

7 に答える 7

7

「import-all-tables」オプションを使用して、一度にすべてのテーブルを HDFS にロードできます。

sqoop import-all-tables --connect jdbc:mysql://localhost/sqoop --username root --password hadoop  --target-dir '/Sqoop21/AllTables'

一部のテーブルを除外して hdfs にロードする場合は、「 --exclude-tables 」オプションを使用できます

元:

sqoop import-all-tables --connect jdbc:mysql://localhost/sqoop --username root --password hadoop  --target-dir '/Sqoop21/AllTables'  --exclude-tables <table1>,<tables2>

指定したディレクトリに保存したい場合は、「 --warehouse-dir 」オプションを使用できます

元:

sqoop import-all-tables --connect jdbc:mysql://localhost/sqoop --username root --password hadoop --warehouse-dir '/Sqoop'
于 2014-05-21T05:28:42.563 に答える
2

最良のオプションは、シェルスクリプトを実行することです

DBNAME.TABLENAME のリストを含む入力ファイルを準備します。 2) シェル スクリプトはこのファイルを入力として受け取り、行ごとに繰り返し、各行に対して sqoop ステートメントを実行します。

while read line;
do

    DBNAME=`echo $line | cut -d'.' -f1` 
    tableName=`echo $line | cut -d'.' -f2`


    sqoop import -Dmapreduce.job.queuename=$QUEUE_NAME --connect '$JDBC_URL;databaseName=$DBNAME;username=$USERNAME;password=$PASSWORD' --table $tableName  --target-dir $DATA_COLLECTOR/$tableName  --fields-terminated-by '\001'  -m 1 

done<inputFile
于 2016-06-06T04:21:39.127 に答える
1

おそらく複数のテーブルをインポートできます: http://sqoop.apache.org/docs/1.4.2/SqoopUserGuide.html#_literal_sqoop_import_all_tables_literal

于 2013-06-19T18:54:17.510 に答える
0

Sqoop " import-all-tables" 機能を使用して、データベース内のすべてのテーブルをインポートできます。--exclude-tablesこれには、データベースにインポートしたくないテーブルの一部を除外できる別のパラメーターもあります。

注: --exclude-tablesimport-all-tables コマンドでのみ機能します。

于 2016-11-25T12:21:22.907 に答える