sqoop资源优化记录

  1. 场景:

利用sqoop 导入千万级大概1K8W条Oracle数据到hive多分区表中

集群资源:132G,96cores

队列highway资源:

yarn.scheduler.capacity.root.highway.capacity=40

yarn.scheduler.capacity.root.highway.maximum-capacity=70

yarn.scheduler.capacity.root.highway.minimum-user-limit-percent=80

yarn.scheduler.capacity.root.highway.state=RUNNING

yarn.scheduler.capacity.root.highway.user-limit-factor=2

分区字段:

原本sqoop脚本:

复制代码
sqoop import --D mapred.job.queue.name=highway \
--connect "jdbc:oracle:thin:@//localhost:61521/LZY2" \
--username LZSHARE \
--password '123456' \
--query "SELECT 
    TO_CHAR(GCRQ, 'YYYY') AS gcrq_year,
    TO_CHAR(GCRQ, 'MM') AS gcrq_month,
    TO_CHAR(GCRQ, 'DD') AS gcrq_day,
    YEAR,
    TO_CHAR(GCRQ, 'YYYY-MM-DD HH24:MI:SS') AS GCRQ,
    GCZBS,
    HOUR,
    MINUTE,
    ......
    DELETE_BY,
    TO_CHAR(DELETE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS DELETE_TIME,
    CREATE_BY,
    TO_CHAR(CREATE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS CREATE_TIME,
    UPDATE_BY,
    TO_CHAR(UPDATE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS UPDATE_TIME,
    TO_CHAR(INSERT_TIME, 'YYYY-MM-DD HH24:MI:SS') AS INSERT_TIME
	FROM LZJHGX.dat_dcsj_time
WHERE TO_CHAR(GCRQ , 'YYYY-MM-DD') < TO_CHAR(SYSDATE, 'YYYY-MM-DD') AND \$CONDITIONS" \
--split-by MINUTE \
--hcatalog-database dw \
--hcatalog-table ods_pre_dat_dcsj_time \
--hcatalog-storage-stanza 'stored as orc' \
--num-mappers 5

问题1:Error: Java heap space Out of Memory

解决思路:分析splitby字段,这是作为splitby字段MINUTE的情况:

如果按照上述划分,如果5个mapper,平均一个mapper处理4.5百万数据。明显不合理,另选一个splitby字段 (由于没有id和自增键),情况如下:

范围是1~288,每个分组6W多条数据。

第二,增加mapper个数,设定每个mapper所使用的个数

-D mapreduce.map.memory.mb=4096 \
-D mapreduce.map.java.opts=-Xmx3072m \

--num-mappers 20

其实还有一个,尽量避免复杂查询。

bash 复制代码
sqoop import -D mapred.job.queue.name=highway \
-D mapreduce.map.memory.mb=4096 \
-D mapreduce.map.java.opts=-Xmx3072m \
--connect "jdbc:oracle:thin:@//localhost:61521/LZY2" \
--username LZSHARE \
--password '123456' \
--query "SELECT 
    TO_CHAR(GCRQ, 'YYYY') AS gcrq_year,
    TO_CHAR(GCRQ, 'MM') AS gcrq_month,
    TO_CHAR(GCRQ, 'DD') AS gcrq_day,
    YEAR,
    TO_CHAR(GCRQ, 'YYYY-MM-DD HH24:MI:SS') AS GCRQ,
    GCZBS,
    .......
    ERR_CODE,
    ERR_DESC,
    DELETE_BY,
    TO_CHAR(DELETE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS DELETE_TIME,
    CREATE_BY,
    TO_CHAR(CREATE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS CREATE_TIME,
    UPDATE_BY,
    TO_CHAR(UPDATE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS UPDATE_TIME,
    TO_CHAR(INSERT_TIME, 'YYYY-MM-DD HH24:MI:SS') AS INSERT_TIME
	FROM LZJHGX.dat_dcsj_time
WHERE TO_CHAR(GCRQ , 'YYYY-MM-DD') < TO_CHAR(SYSDATE, 'YYYY-MM-DD') AND \$CONDITIONS" \
--split-by sjxh \
--hcatalog-database dw \
--hcatalog-table ods_pre_dat_dcsj_time \
--hcatalog-storage-stanza 'stored as orc' \
--num-mappers 20

最后再次运行:耗时4分钟左右

成功导入:

相关推荐
William Dawson3 天前
【踩坑实录|Hive1\.2\.1数据服务接口5大疑难问题调试与全方位优化方案】
java·hive·spring boot
ha_lydms3 天前
Hologres 简介
大数据·hadoop·阿里云·mapreduce·yarn·dataworks·hologres
Francek Chen6 天前
【大数据处理与分析】实验5:MapReduce初级编程实践
大数据·hadoop·分布式·mapreduce
牛奶咖啡1310 天前
大数据Hadoop运维应用实践——HIVE与Hadoop实现整合_Hive的配置安装与使用
大数据·hive·hive的配置与安装·metastore服务的配置·hiveserver2服务配置·hive的常用sql操作·beeline的使用
Zhu75811 天前
在k8s集群环境部署高可用的Apache Hadoop3.1.1定制版集群
hadoop·kubernetes
还有你Y12 天前
软件工程架构
hadoop·架构·软件工程
向夏威夷 梦断明暄12 天前
基于Tez引擎的 Hive SQL 性能优化
hive·sql·性能优化
曾阿伦16 天前
Windows 下运行 Hadoop 并部署到 AWS EMR 指南
hadoop·windows·aws
极光代码工作室17 天前
基于Spark的日志监控与分析平台
大数据·hadoop·python·spark·数据可视化
liuxiaowei318 天前
Winform+WPF双框架实战:喷涂工艺SCADA上位机从0到1搭建(附采集监控源码+车间踩坑实录)
大数据·hadoop·wpf