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

时间:2018-11-30 23:29:04

标签: hive db2 hbase sqoop

谢谢。

我一直在尝试使用SQOOP将数据从DB2导入到HBase表中,这甚至需要很长时间才能启动映射和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 Side中,我尝试调整查询以及一些小的配置 -m 4在记录中创建一些不一致的地方 -删除了过滤器(timestamps(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

1 个答案:

答案 0 :(得分:1)

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

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

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