【问题标题】:Sqoop export for 100 million records faster更快地导出 1 亿条记录的 Sqoop
【发布时间】:2019-02-26 10:16:42
【问题描述】:

我有类似下面的查询

sqoop export 
    --connect jdbc:teradata://server/database=BIGDATA 
    --username dbuser 
    --password dbpw 
    -Dsqoop.export.records.per.statement=500
    --batch 
    --hive-table country
    --table COUNTRY
    --input-null-non-string '\\N' \ --input-null-string '\\N'  

上述查询对 300 万条记录运行良好(将数据加载到 TeraData 表需要 1 小时)。对于将数据导出到 Teradata 空表的 1 亿条记录,我认为完成导出可能需要更多时间。如何有效地编写查询以更快地导出数据而不会导致查询失败?

【问题讨论】:

  • @JamesZ 我不明白你的意思,但我改变了措辞。
  • Teradata 表是什么样的? (关于倾斜的主索引定义)您可以先加载定义为无主索引表的临时表吗?您是否排除了网络作为限制因素? sqoop 是否使用了足够的工作任务来最大化并行效率?
  • teradata 表是多负载的(类似这样,我不记得确切的类型,但它是一个简单的表,它将第一列作为主键)。我没有定义任何限制因素,也没有定义它的主键。是的,sqoop 作业有足够的资源,但需要配置为最佳性能而不会因为更多的并行任务而失败,并且运行速度比消耗的时间快。 @RobPaller
  • @RobPaller 如果您可以通过优化提供/更新查询,我会更加清楚。
  • 我的意思是使用“十万”,我已经删除了。

标签: hadoop export teradata sqoop


【解决方案1】:

您可能需要考虑将您的 --fetch-size(sqoop 必须获取的每个数据勺的条目数)从默认的 1000 增加到 e.g --fetch-size 10000 0r 20000,具体取决于您的可用内存以及您的环境的带宽。

【讨论】:

  • 是否可以将 fetch-size 与参数“-Dsqoop.export.records.per.statement=500”和“--batch”一起使用,这些参数已经作为批处理和可配置和使用的记录运行现在是 500。
  • 我也在尝试 hadoop teradata 连接器,它在时间戳上出错,因此设置此属性可能有效
    tdch.input.timestamp.formatyyyy-MM-dd HH:mm:ss此元存储应侦听的端口。
  • 可能我正在尝试使用以下连接器
    hadoop jar $TDCH_JAR com.teradata.connector.common.tool.ConnectorExportTool -url jdbc:teradata://1.1.1.1/DATABASE= test_db -username user123 -password pwd123 -jobtype hdfs -fileformat textfile -method internal.fastload -separator "\u0001" -sourcepaths /apps/hive/wareho -targettable td_tab1 -nummappers 5 但我仍然看到一些问题是索引超出范围异常
猜你喜欢
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2018-09-29
相关资源
最近更新 更多