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

相关推荐
鲨莎分不晴2 小时前
大数据基石深度解析:系统性读懂 Hadoop 与 ZooKeeper
大数据·hadoop·zookeeper
德彪稳坐倒骑驴1 天前
Sqoop入门常用命令
数据库·hadoop·sqoop
俊哥大数据1 天前
【项目6】基于Hadoop+Hive+Springboot+vue新闻资讯大数据仓库项目
数据仓库·hive·hadoop
俊哥大数据1 天前
【实战项目4】Hadoop金融信贷大数据离线分析项目
大数据·hadoop·金融
鹿衔`3 天前
Hadoop HDFS 核心机制与设计理念浅析文档
大数据·hadoop·hdfs
Justice Young3 天前
Sqoop复习笔记
hadoop·笔记·sqoop
大厂技术总监下海3 天前
从Hadoop MapReduce到Apache Spark:一场由“磁盘”到“内存”的速度与范式革命
大数据·hadoop·spark·开源
zgl_200537793 天前
ZGLanguage 解析SQL数据血缘 之 Python提取SQL表级血缘树信息
大数据·数据库·数据仓库·hive·hadoop·python·sql
Justice Young4 天前
Hive第四章:HIVE Operators and Functions
大数据·数据仓库·hive·hadoop
LF3_4 天前
hive,Relative path in absolute URI: ${system:user.name%7D 解决
数据仓库·hive·hadoop