尝试使用 Sqoop 从 DB2 获取数据到 Hbase 非常慢

Posted

技术标签:

【中文标题】尝试使用 Sqoop 从 DB2 获取数据到 Hbase 非常慢【英文标题】:Trying to fetch data from DB2 to Hbase using Sqoop is very slow 【发布时间】:2018-11-30 23:29:03 【问题描述】:

提前致谢。

我一直在尝试使用 SQOOP 将数据从 DB2 导入 HBase 表,这甚至需要很长时间才能启动 map 和 reduce 。我一直只能看到 Map 0 和 Reduce 0 。

我可以在 DB2 中输入相同的命令,结果比我预期的要快得多。但是当我将其导入 HBASE 时。花费很长时间(10小时)。在 DB2 中创建了一个样本数据(150 条记录)并尝试导入到 HBASE 仍然花费相同的时间。

sqoop import --connect jdbc:db2://hostname:50001/databasename --username user --password pass --hbase-create-table --hbase-table new_tbl --column-family abc --hbase-row-key=same  --query "select a,b,c,d,e concat(a,e) from table_name where \$CONDITIONS AND a>='2018-08-01 00:00:01' and b<='2018-08-01 00:00:02'"  -m 1

尝试调整所有配置

yarn.nodemanager.resource.memory-mb=116800
yarn.scheduler.minimum-allocation-mb=4096
mapreduce.map.memory.mb=4096
mapreduce.reduce.memory.mb=8192
mapreduce.map.java.opts=-Xmx3072m
mapreduce.reduce.java.opts=-Xmx6144m
yarn.nodemanager.vmem-pmem-ratio=2.1

在 Sqoop 方面,我也尝试调整查询以及一些小配置 -m 4 在记录中创建一些不一致 -删除过滤器(时间戳(a,b))仍然需要很长时间(10小时)

HBASE 性能测试结果还不错。

        HBase Performance Evaluation
                Elapsed time in milliseconds=705914
                Row count=1048550
        File Input Format Counters
                Bytes Read=778810
        File Output Format Counters
                Bytes Written=618

real    1m29.968s
user    0m10.523s
sys     0m1.140s

【问题讨论】:

阅读此关于拆分列***.com/a/37389134/2700344 【参考方案1】:

除非您显示示例数据和数据类型,否则很难给出建议。只有当您在映射器之间公平分配记录时,额外的映射器才能正确有效地工作。如果表中有可用的主键,则可以将其作为拆分列提供,映射器将平均分配工作负载并开始以平衡模式获取切片。运行时,您还可以从日志本身查看拆分键分布和记录数。

如果您的集群没有足够的内存来存储资源,则可能需要更长的时间,有时它会长时间处于提交模式,因为 YARN 无法分配内存来运行它。

您可以先尝试使用 HDFS 作为存储位置而不是尝试 HBase,然后查看性能并检查作业详细信息以了解 MapReduce 行为。

【讨论】:

以上是关于尝试使用 Sqoop 从 DB2 获取数据到 Hbase 非常慢的主要内容,如果未能解决你的问题,请参考以下文章

sqoop 从 db2 特定模式导入全部到 hive

如何解决 java.sql.SQLException:[SQL7008] database_name 中的 table_name 对操作无效,而 sqoop 从 hdfs 导出到 DB2

Sqoop简单回顾总结

使用 Sqoop 将来自 MySQL 的数据加载到 PIG

使用 sqoop 从 Oracle 获取数据到 hive 时出错

利用oozie,执行sqoop action将DB2中的数据导入到hive分区表中