sqoop采集完成后导致hdfs数据与Oracle数据量不符的问题。怎么解决?

原因:

sqoop以文本格式导入数据时,默认的换行符是特殊字符

当oracle中的数据列中出现了\n、\r、\t等特殊符号,就会被划分为多行

例如:

oracle数据:

id name age

001 zhangsan\nsan 18

sqoop遇到特殊字段就作为一行

001 zhangsan

san 18

就导致hive里面:

id name age

001 zhangsan

san 18

总的来说就是,oracle里面有特殊符号不影响,但是sqoop里面有特殊符号会换行,导致行号出问题,从而导致数据出问题

解决:

方案一:删除或者替换数据中的换行符

--hive-drop-import-delims:删除换行符

--hive-delims-replacement char:替换换行符

不建议使用:侵入了原始数据,对数据做了修改,但是不能对数据本身随便修改,万一客户需求就是要这种数据

方案二:使用特殊文件格式:avro格式

为什么用avro格式,因为建表在hive里面,计算在spark里面,所以选择一种hive和spark都支持的格式就是avro格式,其次Avro 的 Schema 包含字段名称、类型、默认值、注释等元信息,Sqoop 在导入 Oracle 时,会自动生成与 Oracle 表结构完全对应的 Avro Schema(包括复杂类型如DATETIMESTAMPCLOB

常见格式介绍

sparkcore缺点:rdd【数据】:没有schema

sparksql优点:dataframe【数据+schema】

schema:列的信息【列的名称、类型】

schema是什么?

**Schema(元数据)**是对数据结构的 "描述信息",简单来说就是定义了数据集中每一列的 "规则"

假设有一个存储用户信息的 DataFrame,数据内容如下:

id name age is_student
1 Alice 20 true
2 Bob 25 false

它的 Schema 会明确描述为:

列名 "id",类型为IntegerType(整数),不可为空;

列名 "name",类型为StringType(字符串),不可为空;

列名 "age",类型为IntegerType(整数),不可为空;

列名 "is_student",类型为BooleanType(布尔值),不可为空。

DataFrame是一种分布式的、具有结构化数据的集合,可以理解为 "分布式的表格"------ 它像数据库中的表一样,有行和列的结构,同时还具备分布式计算的特性(数据存储在集群的多个节点上)

avro格式特点

优点:二进制数据存储,性能好、效率高

使用json描述模式,支持场景更丰富

schema和数据统一存储,信息自描述

模式定义允许定义数据的排序

缺点:

只支持avro自己的序列化格式

少量列的读取性能比较差,压缩比较低

场景:基于行的大规模结构化数据写入、列的读取非常多(ods)或者schema变更操作比较频繁的场景

sqoop使用avro格式

选项: --as-avrodatafile

注意:如果使用了mr的uber模式,必须在程序中加上以下参数避免类冲突问题

-Dmapreduce.job.user.classpath.first=true

相关推荐
qqxhb19 小时前
系统架构设计师备考第68天——大数据处理架构
大数据·hadoop·flink·spark·系统架构·lambda·kappa
yumgpkpm1 天前
Hadoop大数据平台在中国AI时代的后续发展趋势研究CMP(类Cloudera CDP 7.3 404版华为鲲鹏Kunpeng)
大数据·hive·hadoop·python·zookeeper·oracle·cloudera
凯子坚持 c1 天前
基于VMware与CentOS 7的Hadoop集群部署全景指南
linux·hadoop·centos
KANGBboy2 天前
ES 总结
hive·elasticsearch
大数据CLUB2 天前
酒店预订数据分析及预测可视化
大数据·hadoop·分布式·数据挖掘·数据分析·spark·mapreduce
TTBIGDATA2 天前
【Ambari开启Kerberos】Step1-KDC服务初始化安装-适合Ubuntu
运维·数据仓库·hadoop·ubuntu·ambari·hdp·bigtop
TTBIGDATA3 天前
【Ambari开启Kerberos】KERBEROS SERVICE CHECK 报错
大数据·运维·hadoop·ambari·cdh·bigtop·ttbigdata
码·蚁3 天前
SpringMVC
数据仓库·hive·hadoop
杂家4 天前
Hadoop完全分布式部署(超详细)
大数据·hadoop·分布式
BD_Marathon4 天前
【Hadoop】hadoop3.3.1完全分布式配置
大数据·hadoop·分布式