sqoop 数据同步方案理解+问题解决

news2024/11/18 13:55:55

sqoop数据同步——问题与解决方案

1、sqoop导出oracle数据,数据源无法选择表空间,只能指定默认表空间的表。

  • 方案:不指定数据源的表名,而是使用–query,利用sql语句把数据带出来。
    例:--query "SELECT REQUESTID, WORKFLOWID, LASTNODEID, LASTNODETYPE FROM ECOLOGY.WORKFLOW_REQUESTBASE WHERE \$CONDITIONS"
  • 注意点:
    –table 是直接导出表中所有数据列,导入hive时,字段名字不会相匹配,只会按照顺序导入,所以这种导入方式要注意hive的建表语句中字段顺序应与原表一致。
    –query 是sql抽取出数据列,数据可以来自不同表,也可以转换/计算。这种导入方式抽取的数据列会与hive中的字段名匹配,所以当sql进行数据计算时,取别名一定要与hive字段名匹配,否则不匹配的字段将会是NULL。
    注:sqoop1.4.6不支持–query和–as-parquetfile同时使用,但是sqoop1.4.7支持。

2、sqoop导出oracle数据,数据源的表字段中有CLOB类型,导致数据类型转换失败报错:ERROR tool.ImportTool: Import failed: Cannot convert SQL type 2005。

  • 方案1:利用–query将数据列抽取出来,同时对CLOB类型的数据做类型转换。
    例:--query "SELECT ID, FLMC, CAST(FLFZR as VARCHAR2(10))FLFZR, FKFSJQX FROM ECOLOGY.UF_XDF WHERE \$CONDITIONS"
    注:但是这种方案一定要保证转换成VARCHAR2类型的字符串的长度一定要够长,否则转换完的数据还是错的。
  • 方案2:导入hive前,利用–map-column-java对指定数据列做数据类型的转换。(推荐使用)
    例:--map-column-java HRMIDS=String

3、sqoop导出oracle数据,指定非默认表空间时,报错:INFO mapreduce.Job: Task Id : attempt_1472465929944_0013_m_000000_0, Status : FAILED Error: Java heap space。

  • 方案:sqoop开启时指定参数:mapreduce.map.java.opts和mapreduce.map.memory.mb
    例:-Dmapreduce.map.java.opts=-Xmx3600m -Dmapreduce.map.memory.mb=4000
    个人推断时表字段过多造成的内存溢出,可以断定与数据的条数无关。
  • 注意点:
    这两个都是Map Memory的指定参数,mapreduce.map.memory.mb(map的运行内存大小)与Yarn的内存大小有关,Yarn内存默认为4G,所以设定mapreduce.map.memory.mb=4000;mapreduce.map.java.opts(JVM 堆大小)应小于mapreduce的运行内存大小,因为要预留内存空间用于存储java代码。

4、sqoop导出oracle数据,数据源数据时间数据类型:timestamp,hive端数据类型默认转换为:bigint的时间戳格式。

  • 方案:利用–query,在数据导出时将数据类型转换为varchar字符串类型。
    例:--query "SELECT FCREATORID, TO_CHAR(FCREATETIME,'yyyy-MM-dd HH24:mi:ss')FCREATETIME, FLASTUPDATEUSERID, TO_CHAR(FLASTUPDATETIME,'yyyy-MM-dd HH24:mi:ss')FLASTUPDATETIME, CFISFEEDCONUT FROM LIHUA.CT_BRL_PIGSIYANG WHERE \$CONDITIONS"

5、sqoop导出oracle数据,导入hive,但hive表不存在,依旧显示导入成功任务,以后需注意,导入任务结束后最好再确认一下。

  • sqoop命令:
sqoop import --connect ${rdbms_connstr} \
--username ${rdbms_username} \
--password ${rdbms_pwd} \
--query "SELECT FCREATORID, TO_CHAR(FCREATETIME,'yyyy-MM-dd HH24:mi:ss')FCREATETIME, FLASTUPDATEUSERID, TO_CHAR(FLASTUPDATETIME,'yyyy-MM-dd HH24:mi:ss')FLASTUPDATETIME, FCONTROLUNITID, FNUMBER, TO_CHAR(FBIZDATE,'yyyy-MM-dd HH24:mi:ss')FBIZDATE, FHANDLERID, FDESCRIPTION, FHASEFFECTED, FAUDITORID, FSOURCEBILLID, FSOURCEFUNCTION, FID, FFIVOUCHERED, CFORGUNITID, CFISFEEDCOUNT, CFAUDITUSERID, CFIFAUDITING FROM LIHUA.CT_PIG_INTEGRATIONSIYANG WHERE \$CONDITIONS" \
--hive-overwrite \
--hive-database ${hive_database} \
--hive-table ${hive_table} \
--delete-target-dir \
--target-dir /db/${hive_database}/${hive_table} \
--fields-terminated-by "\001" \
--as-parquetfile \
--m 1
  • 个人推测该命令未找到对应表名,则直接将数据压缩存储值指定 target-dir。之后直接建表,指定存储路径保持一致,便可以查到表数据了。

6、hive黑界面直接查询导入数据量(count),数据溢出报错:FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

  • 报错信息:
    在这里插入图片描述
  • 分析思路:
    可以看出,mr进程在map过程中数据就溢出了,所以可以调节map的相关参数:
  • map默认的启动数量与文件数有关,一个文件启动一个map。通过增大map数来提高并行度:
set mapred.max.split.size=67108864;(设置每个map的切分大小)但是该设置对压缩格式无效
set mapred.reduce.tasks=100;(直接设置map的数量)→解决问题
set hive.exec.mappers.bytes.per.mapper=20971520;(设定每个map处理的数据量默认为为20Mb=20 000 000)
  • 另一种方法:
set mapreduce.job.maps = 10;(每个job默认开启map的数量)
  • 设定map运行的占用资源:
set mapreduce.map.memory.mb=2048;
set mapreduce.reduce.memory.mb=2048;
set mapreduce.map.java.opts=Xmx1800M;
set mapreduce.reduce.java.opts=Xmx1800M;
set mapreduce.map.cpu.vcores=2;
set mapreduce.reduce.cpu.vcores=2;
  • 数据倾斜时,可以启用自动小文件合并:
set hive.input.format= org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
  • 提高sql的执行速度,开启并行:
set hive.exec.parallel=true; (打开任务并行执行)
set hive.exec.parallel.thread.number=16; (同一个 sql 允许最大并行度,默认为 8)

6、为提高数据导入效率和表数据读取的效率,最好保持每个数据块在 128M左右,为此需要调整 map 的启动数量

  • sqoop 命令:
 sqoop import -Dmapreduce.map.java.opts=-Xmx3600m -Dmapreduce.map.memory.mb=4000 \
--connect ${rdbms_connstr} \
--username ${rdbms_username} \
--password ${rdbms_pwd} \
--query "SELECT FSEQ, FPARENTID, FID, FGRADEID, FCAGEBRLRQTY, FQTY, FGROSSWT, FCAGEWT, FNETWT, FSELPRICE, FSELAMT, FGENETICSMRKID, FPASTITEM, FBATCH, FNEXTNAME, FTYP, FAUDITBILLENTRYID, FCOEFFPRICE, FAUDITPRICE, CFPURBILLNUM, CFPURBILLID, CFREARERID, CFAVGWT, CFPOUNDID, CFSHILONG, TO_CHAR(CFPURDATE,'yyyy-MM-dd HH24:mi:ss')CFPURDATE, CFCALCPRICE FROM LIHUA.T_KD_BROILERSELLENTRYS1 WHERE \$CONDITIONS" \
--hive-overwrite \
--hive-database ${hive_database} \
--hive-table ${hive_table} \
--delete-target-dir \
--target-dir /db/${hive_database}/${hive_table} \
--fields-terminated-by "\001" \
--as-parquetfile \
--split-by "MOD(ORA_HASH(FID),10)" \
--m 10

–map 需要和 --split-by 一起连用
–map 指定读取数据的启动的map数量
–split-by 指定切分的规则,本处是按 FID 的hash值对10取余的数进行切分。

  • 导出结果如图:

在这里插入图片描述

未解决问题:有时指定map数量为N,但是最后导出的文件数为N-1,少了一个,但是会有一个文件的size是其他文件的两倍左右,不知道是什么原因,这个希望有大佬可以解释一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/338572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【游戏逆向】内存构造发包结构体实现协议发送简单代码

捕捉到游戏的封包以后 我们可以对其进行发送来实现功能 基本有两种方式 第一种直接调用明文发包函数 第二种构造明文封包以后,再调用加密算法,然后通过send等发包函数对其进行发送 如果能够把加密算法分析透彻的话,第二种方式是最好的 …

element Ui树状图控件 spring boot Vue 实现角色授权功能

目录 前言: 二. element ui 2.1官网提供的核心代码 三.表结构 ​编辑 四.后端 4.1功能分析 4.2实体类 4.3 查询全部权限显示的结果 4.2修改角色权限的后台方法 五.vue 5.0代码总览 5.1树形图 5.2所需要的绑定数据 5.3所需方法 前言: 先上图…

微搭低代码从入门到精通04-创建自定义应用

微搭中的应用分为两类,模型应用和自定义应用。上一篇我们介绍了模型应用的创建方法,本篇我们介绍一下自定义应用的创建方法。 登录微搭的控制台,在左侧的菜单里点击应用,点击新建应用,选择新建自定义应用 输入应用的名…

logstash毫秒时间戳转日期以及使用业务日志时间戳替换原始@timestamp

文章目录问题解决方式参考问题 在使用Kibana观察日志排查问题时发现存在很多组的timestamp 数据一样,如下所示 详细观察内部数据发现其中日志数据有一个timestamp字段保存的是业务日志的毫秒级时间戳,经过和timestamp数据对比发现二者的时间不匹配。经…

1630_GNU的二进制分析工具nm简单使用探索

全部学习汇总: GreyZhang/toolbox: 常用的工具使用查询,非教程,仅作为自我参考! (github.com) GNU有一套二进制的分析工具,之前是用过objdump的,但是也没有系统掌握。如果做底层软件的设计,这些…

OpenWrt路由器设置域名动态解析手把手教程

文章目录0、前言1、准备工作2、详细步骤2.1、OpenWrt路由器软件包安装2.2、防火墙放行入站数据(修改为“接受”并保存应用)2.3、域名解析服务商对域名的解析设置2.4、路由器中动态域名插件的设置0、前言 因为一直用着内网穿透(zerotier或者是…

SQLyog Ultimate 13.2 Crack

SQLyog终极版 MySQL开发工具 让您的数据库开发人员在短时间内完成大量工作并不是确保质量结果的最佳方式。当涉及到您的 MySQL 数据库时,您不想偷工减料 — 尤其是当这样做会导致代价高昂的中断时。 使用 SQLyog 获得可靠的数据库备份和数据同步:一个强大…

HTTP协议路由转发小结

问题介绍:个人电脑 hosts 文件配置如下: xx.xx.xx.243 xxx.domain.com 其中 xx.xx.xx.243 是里约网关的服务器ip,而应用部署在 xx.xx.xx.93 上,但最终请求为何会转发到93这台服务器上呢? 原因是里约网关配置了转发规则…

【hello, world】计算机系统漫游

文章目录hello程序信息就是位 上下文程序被其他程序翻译成不同的格式预处理阶段编译阶段汇编阶段链接阶段了解编译系统如何工作是大有益处的优化程序性能理解链接时出现的错误避免安全漏洞处理器读并解释储存在内存中的指令系统的硬件组成总线I/O设备主存处理器运行hello程序高…

web3:区块链共识机制系列-POS(Proof of Stake)股权证明算法

web3相关学习一并收录至该博客:web3学习博客目录大全 前情衔接:web3:区块链常见的几大共识机制及优缺点 目录前言算法公式与原理算法公式运作原理以Peer Coin为例缺陷优点缺点特点分类发展历程casper协议1.什么是无成本利益关系问题2.引入casper协议解决…

力扣33.搜索旋转排序数组

文章目录力扣33.搜索旋转排序数组题目描述方法1&#xff1a;二分查找力扣33.搜索旋转排序数组 题目描述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&…

Android框架WiFi架构

同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 一、wpa_supplicant:wpa_supplicant本身开源项目源码,被谷歌收购之后加入Android移…

Python中的类和对象(4)

1. 构造函数 &#xff08;_ init _(self[,……])&#xff09; 在类中定义 _init _() 方法&#xff0c;可以实现在实例化对象的时候进行个性化定制&#xff1a; >>> class C: ... def __init__(self, x, y): ... self.x x ... self.y y ... …

离散数学 课时二 命题逻辑等值演算

等值式(等值联结词) 1、设A、B是两个命题公式,若A、B构成的等价式 A等价于B 为重言式,那么称A与B是等值的 2、常用等值式&#xff1a; 注意&#xff1a; 1 双否定律 2 幂等律 3 交换律 4 结合律 5 吸收律 6 德摩根律 7 同一律 8 零律 9 矛盾律 10 排中律 11 蕴含表达式 12 …

十分钟带你体验一下什么是分布式事务

我们经常在网上看到很多人发关于分布式事务的理论&#xff0c;但是讲实战的却非常少&#xff0c;所以我今天想通过一个案例&#xff0c;来让小伙伴们都感受一下什么是分布式事务&#xff0c;这篇文章理论偏少&#xff0c;请文明观看。咱们今天的主角是 Seata&#xff01; 分布…

Django项目开发

一.认识NoSQL 1.SQL 关系型数据库 结构化: 定义主键&#xff0c;无符号型数据等关联的&#xff1a;结构化表和表之间的关系通过外键进行关联&#xff0c;节省存储空间SQL查询&#xff1a;语法固定 SELECT id,name,age FROM tb_user WHERE id1 ACID 2.NoSQL 非关系型数据库 Re…

通过实例告诉你lua中ipairs到底是怎么遍历的!

这个的文章挺多的&#xff0c;但是有好几种说法并且不全。有人说是忽略手动设定值&#xff0c;有人说是从1开始数&#xff0c;直到序号断开&#xff0c;还有人给出结果&#xff0c;但是和我实机测试的效果不一样&#xff0c; 所以我自己总结一篇。经过我的测试和总结得到以下结…

【2023】Prometheus-Alertmanager高可用集群

本次实验准备了三个节点&#xff0c;分别为laert-01~03 目录1.安装Alertmanager2.配置启动文件3.验证集群4.关于集群的配置项1.安装Alertmanager 这部分内容在三个节点上都要执行 下载安装包&#xff0c;将安装包解压至/data目录下 wget https://github.com/prometheus/aler…

javassm高校学生评教系统的设计与实现idea msyql

伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;管理系统这一名词已不陌生&#xff0c;越来越多的学校、公司等机构都会定制一款属于自己个性化的管…

Scout:一款功能强大的轻量级URL模糊测试与爬取工具

关于Scout Scout是一款功能强大的轻量级URL模糊测试与爬取工具&#xff0c;可以帮助广大研究人员进行URL模糊测试&#xff0c;并爬取目标Web服务器中难以扫描发现的VHSOT、文件和目录等资源。 项目中包含了一个完整的字典文件&#xff0c;并尽可能地提供了更多的便携性&#…