sqoop导入多个表

ujv3wf0j  于 2021-06-04  发布在  Hadoop
关注(0)|答案(6)|浏览(383)

我们使用的是clouderacdh4,我们能够像预期的那样将表从oracle数据库导入hdfs仓库。问题是,我们的数据库中有成千上万个表,而sqoop只支持一次导入一个表。
有哪些选项可用于将多个表导入hdfs或hive?例如,一次将200个表从oracle导入hdfs或hive的最佳方式是什么?
到目前为止,我看到的唯一解决方案是为每个表导入创建一个sqoop作业,然后分别运行它们。由于hadoop是为处理大型数据集而设计的,因此似乎应该有更好的方法。

nbnkbykc

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'
92dk7w1h

92dk7w1h2#

您可能可以导入多个表:http://sqoop.apache.org/docs/1.4.2/sqoopuserguide.html#_literal_sqoop_import_all_tables_literal

crcmnpdw

crcmnpdw3#

假设每个表的sqoop配置相同,您可以列出需要导入的所有表,然后通过启动sqoop作业对它们进行迭代(理想情况下异步启动它们)。可以运行以下操作从oracle获取表列表: SELECT owner, table_name FROM dba_tables 参考
sqoop提供了一个导入所有表的选项。检查此链接。但也有一些局限性。
修改sqoop源代码并根据需要重新编译。sqoop代码库有很好的文档记录和良好的安排。

w6lpcovy

w6lpcovy4#

--使用“导入所有表”时,目标目录不是有效选项。
要导入特定目录中的所有表,请使用--warehouse dir而不是--target dir。
例子:
$sqoop导入所有表--连接jdbc:mysql用法:/localhost/movies--用户名root--密码xx--仓库目录'/user/cloudera/sqoop/allmoviestables'-m1

sauutmhj

sauutmhj5#

你可以使用sqoop“ import-all-tables “导入数据库中所有表的功能。这还有另一个参数, --exclude-tables ,同时可以排除一些不希望导入数据库的表。
注: --exclude-tables 仅适用于“导入所有表”命令。

gkl3eglg

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

相关问题