当前位置: 首页 > news >正文

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,数据内容如下:

idnameageis_student
1Alice20true
2Bob25false

它的 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

http://www.dtcms.com/a/511702.html

相关文章:

  • 洛阳有做网站开发的吗平台网站建设源码
  • 从零开始的C++学习生活 12:AVL树全面解析
  • Spring Boot 启动慢?启动过程深度解析与优化策略
  • telnet工具使用详解
  • YOLOv4:目标检测界的 “集大成者”
  • 从零开始的C++学习生活 11:二叉搜索树全面解析
  • 【QT常用技术讲解】控件随窗口自适应变化大小或者移动位置
  • Kafka面试精讲 Day 30:Kafka面试真题解析与答题技巧
  • 江苏建设准考证打印在哪个网站医疗网站 seo怎么做
  • 数据结构9:队列
  • 逆向分析星星充电APP:从签名生成到数据深度解析
  • Vue + WebApi 实现上传下载功能
  • 建设门户网站预算做旅游网站多少钱
  • 【Rust创作】Rust 错误处理:从 panic 到优雅控制
  • 常见激活函数的Lipschitz连续证明
  • 专做皮具的网站网站建设公司排行榜
  • 第三次面试:C++实习开发
  • 公司网站内容更新该怎么做wordpress显示目录
  • 边界扫描测试原理 2 -- 边界扫描测试设备的构成
  • 如何入侵网站后台晴天影视
  • Linux top 命令使用说明
  • 研发图文档管理的革新:从无序到智能协同
  • springboot点餐系统的设计与实现(代码+数据库+LW)
  • ArcoDesignVue Select组件分离问题
  • Python开发:接口场景设计
  • 汽车网站flash模板定制高端网站建设
  • 【Ubuntu18.04 D435i RGB相机与IMU标定详细版(三)】
  • 单肩包自定义页面设计模板seo关键词优化软件app
  • 朊病毒检测市场:技术突破与公共卫生需求驱动下的全球增长
  • 思维清晰的基石:概念和命题解析