尝试使用 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 非常慢的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 java.sql.SQLException:[SQL7008] database_name 中的 table_name 对操作无效,而 sqoop 从 hdfs 导出到 DB2