我们使用的是clouderacdh4,我们能够像预期的那样将表从oracle数据库导入hdfs仓库。问题是,我们的数据库中有成千上万个表,而sqoop只支持一次导入一个表。有哪些选项可用于将多个表导入hdfs或hive?例如,一次将200个表从oracle导入hdfs或hive的最佳方式是什么?到目前为止,我看到的唯一解决方案是为每个表导入创建一个sqoop作业,然后分别运行它们。由于hadoop是为处理大型数据集而设计的,因此似乎应该有更好的方法。
nbnkbykc1#
您可以使用“importalltables”选项一次将所有表加载到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'
92dk7w1h2#
您可能可以导入多个表:http://sqoop.apache.org/docs/1.4.2/sqoopuserguide.html#_literal_sqoop_import_all_tables_literal
crcmnpdw3#
假设每个表的sqoop配置相同,您可以列出需要导入的所有表,然后通过启动sqoop作业对它们进行迭代(理想情况下异步启动它们)。可以运行以下操作从oracle获取表列表: SELECT owner, table_name FROM dba_tables 参考sqoop提供了一个导入所有表的选项。检查此链接。但也有一些局限性。修改sqoop源代码并根据需要重新编译。sqoop代码库有很好的文档记录和良好的安排。
SELECT owner, table_name FROM dba_tables
w6lpcovy4#
--使用“导入所有表”时,目标目录不是有效选项。要导入特定目录中的所有表,请使用--warehouse dir而不是--target dir。例子:$sqoop导入所有表--连接jdbc:mysql用法:/localhost/movies--用户名root--密码xx--仓库目录'/user/cloudera/sqoop/allmoviestables'-m1
sauutmhj5#
你可以使用sqoop“ import-all-tables “导入数据库中所有表的功能。这还有另一个参数, --exclude-tables ,同时可以排除一些不希望导入数据库的表。注: --exclude-tables 仅适用于“导入所有表”命令。
import-all-tables
--exclude-tables
gkl3eglg6#
最好的选择是执行shell脚本准备一个具有dbname.tablename列表的inputfile 2)shell脚本将此文件作为输入,逐行迭代,并对每行执行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
6条答案
按热度按时间nbnkbykc1#
您可以使用“importalltables”选项一次将所有表加载到hdfs中。
如果我们想排除一些要加载到hdfs中的表,我们可以使用“--exclude tables”选项
前任:
如果我们想存储在指定的目录中,那么可以使用“--warehouse dir”选项
前任:
92dk7w1h2#
您可能可以导入多个表:http://sqoop.apache.org/docs/1.4.2/sqoopuserguide.html#_literal_sqoop_import_all_tables_literal
crcmnpdw3#
假设每个表的sqoop配置相同,您可以列出需要导入的所有表,然后通过启动sqoop作业对它们进行迭代(理想情况下异步启动它们)。可以运行以下操作从oracle获取表列表:
SELECT owner, table_name FROM dba_tables
参考sqoop提供了一个导入所有表的选项。检查此链接。但也有一些局限性。
修改sqoop源代码并根据需要重新编译。sqoop代码库有很好的文档记录和良好的安排。
w6lpcovy4#
--使用“导入所有表”时,目标目录不是有效选项。
要导入特定目录中的所有表,请使用--warehouse dir而不是--target dir。
例子:
$sqoop导入所有表--连接jdbc:mysql用法:/localhost/movies--用户名root--密码xx--仓库目录'/user/cloudera/sqoop/allmoviestables'-m1
sauutmhj5#
你可以使用sqoop“
import-all-tables
“导入数据库中所有表的功能。这还有另一个参数,--exclude-tables
,同时可以排除一些不希望导入数据库的表。注:
--exclude-tables
仅适用于“导入所有表”命令。gkl3eglg6#
最好的选择是执行shell脚本
准备一个具有dbname.tablename列表的inputfile 2)shell脚本将此文件作为输入,逐行迭代,并对每行执行sqoop语句。