Hive+Spark离线数仓工业项目实战--数仓设计及数据采集(2)

news2024/12/25 8:50:43

MR的Uber模式

目标:了解MR的Uber模式的配置及应用

实施

  - Spark为什么要比MR要快

    - MR慢
  - 只有Map和Reduce阶段,每个阶段的结果都必须写入磁盘
        - 如果要实现Map1 -> Map2 -> Reduce1 -> Reduce2 
    - Mapreduce1:Map1
        - MapReduce2:Map2 -> Reduce1
    - Mapreduce3:Reduce2
      - MapReduce程序处理是进程级别:MapTask进程、ReduceTask进程

问题:MR程序运行在YARN上时,有一些轻量级的作业要频繁的申请资源再运行,性能比较差怎么办?

Uber模式

功能:Uber模式下,程序只申请一个AM Container:所有Map Task和Reduce Task,均在这个Container中顺序执行

  默认不开启

配置:${HADOOP_HOME}/etc/hadoop/mapred-site.xml

特点

    - Uber模式的进程为AM,所有资源的使用必须小于AM进程的资源
    - Uber模式条件不满足,不执行Uber模式
    - Uber模式,会禁用推测执行机制

Sqoop采集数据格式问题

目标:掌握Sqoop采集数据时的问题

路径

  - step1:现象
  - step2:问题
  - step3:原因
  - step4:解决

实施

现象

    - step1:查看Oracle中CISS_SERVICE_WORKORDER表的数据条数

- step2:采集CISS_SERVICE_WORKORDER的数据到HDFS上


    
    - step3:Hive中建表查看数据条数


    
  问题:Sqoop采集完成后导致HDFS数据与Oracle数据量不符

原因

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

    - Oracle中的数据列中如果出现了\n、\r、\t等特殊字符,就会被划分为多行

 解决

    - 方案一:删除或者替换数据中的换行符
      - --hive-drop-import-delims:删除换行符
      - --hive-delims-replacement  char:替换换行符
      - 不建议使用:侵入了原始数据
    - 方案二:使用特殊文件格式:AVRO格式

问题解决:Avro格式

目标:掌握使用Avro格式解决采集换行问题

路径

  - step1:常见格式介绍
  - step2:Avro格式特点
  - step3:Sqoop使用Avro格式
  - step4:使用测试

实施

常见格式介绍

    - SparkCore缺点:RDD【数据】:没有Schema
    - SparkSQL优点:DataFrame【数据 + Schema】
    - Schema:列的信息【名称、类型】

Avro格式特点

    - 优点
      - 二进制数据存储,性能好、效率高
      - 使用JSON描述模式,支持场景更丰富
      - Schema和数据统一存储,消息自描述
      - 模式定义允许定义数据的排序
    - 缺点
      - 只支持Avro自己的序列化格式
      - 少量列的读取性能比较差,压缩比较低
    - 场景:基于行的大规模结构化数据写入、列的读取非常多或者Schema变更操作比较频繁的场景

Sqoop使用Avro格式

使用测试

Sqoop增量采集方案回顾

目标:回顾Sqoop增量采集方案

路径

  - step1:Append
  - step2:Lastmodified
  - step3:特殊方式

实施

Append

    - 要求:必须有一列自增的值,按照自增的int值进行判断

    - 特点:只能导入增加的数据,无法导入更新的数据

    - 场景:数据只会发生新增,不会发生更新的场景

    - 代码

Lastmodified

    - 要求:必须包含动态时间变化这一列,按照数据变化的时间进行判断

    - 特点:既导入新增的数据也导入更新的数据

    - 场景:一般无法满足要求,所以不用

 特殊方式

    - 要求:每次运行的输出目录不能相同

    - 特点:自己实现增量的数据过滤,可以实现新增和更新数据的采集

    - 场景:一般用于自定义增量采集每天的分区数据到Hive

    - 代码

脚本开发思路

目标:实现自动化脚本开发的设计思路分析

路径

  - step1:脚本目标
  - step2:实现流程
  - step3:脚本选型
  - step4:单个测试

实施

脚本目标:实现自动化将多张Oracle中的数据表全量或者增量采集同步到HDFS中

实现流程

    - a. 获取表名
    - b.构建Sqoop命令
    - c.执行Sqoop命令
    - d.验证结果

脚本选型

    - Shell:Linux原生Shell脚本,命令功能全面丰富,主要用于实现自动化Linux指令,适合于Linux中简单的自动化任务开发
    - Python:多平台可移植兼容脚本,自身库功能强大,主要用于爬虫、数据科学分析计算等,适合于复杂逻辑的处理计算场景
    - 场景:一般100行以内的代码建议用Shell,超过100行的代码建议用Python
    - 采集脚本选用:Shell

单个测试

 

 全量及增量采集脚本运行

目标:实现全量采集脚本的运行

实施

全量目标:将所有需要将实现全量采集的表进行全量采集存储到HDFS上

    - Oracle表:组织机构信息、地区信息、服务商信息、数据字典等

    - HDFS路径

Schema备份及上传

目标:了解如何实现采集数据备份

实施

 Python脚本

目标:了解如果使用Python脚本如何实现

实施

原理本质

    - 问题:所有的操作是Sqoop、HDFS等命令操作,如何能通过Python代码控制?

    - 解决:本质上是使用Python执行了Linux的Shell命令来实现的

    - 导包

 

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

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

相关文章

完全可移植c2000控制器工程模板创建

完全可移植c2000控制器工程模板创建前言步骤创建工程库函数支撑文件拷贝寄存器支撑文件拷贝参考博文及资料前言 迄今为止只学过TI的两款c2000控制器TMS320F280049C和28335,并且所有代码编写都是通过写寄存器来实现的。相较于直接使用TI编写好的库函数,写…

Node.js--》Node环境及nvm版本管理安装及使用

目录 初识Node.js Node.js环境安装 nvm的安装 Node.js环境执行JS代码 初识Node.js Node.js是一个开源、跨平台的 JavaScript 运行时环境。其中文的官方网址为:Node.js官方网址 注意:浏览器是JavaScript的前端运行环境;Node.js是JavaScri…

OpManager 实时网络监控

网络是全球企业背后的基础。它在为您的员工提供行政服务以及为各大洲的客户提供服务方面发挥着关键作用。网络可帮助您将信息保存在一个集中位置 - 需要和限制所有其他入站请求的人员可以访问。那么,您如何提供持续的一流最终用户体验并维护快速发展的网络呢&#x…

JS面试题--ES6知识大全

ES6知识 字面量增强的写法的三种写法 ES6中对 对象字面量 进行了增强,称之为 Enhanced object literals(增强对象字面量)。 字面量的增强主要包括下面几部分: 属性的简写:Property Shorthand方法的简写&#xff1a…

测开工具:二次开发junit接口自动化框架

一:背景 源码地址:GitHub - 18713341733/AutoApi Java 接口自动化框架,一般就是junit与testng。这里我们讲一下junit接口自动化框架的二次开发。 1.1 我们实现了哪些功能 1、自定义了一些注解,用来管理case。包括case的描述、…

如何使用depcheck检查依赖?

目录 1. 你是否遇到过以下问题: 2. 原因 3. 解决 4. depcheck的其他功能 5.需要说明可能存在的问题 总结 1. 你是否遇到过以下问题: 1. GitHub上面克隆的项目,运行报错… 2.去一家新公司,用新电脑运行项目各种报错… 3.明…

有关linux中的文件IO的操作

Linux 应用编程中最需要掌握的基础就是文件 I/O的操作,学习过linux或者有过了解的应该都会听过一句话:linux中一切皆文件,文件是linux系统的核心设计思想。所以掌握文件的操作是很重要的。 那文件 I/O 又是什么?文件I/O指的是对文…

NumPy transpose 的定义与计算过程

NumPy transpose 的定义与计算过程NumPy documentation https://numpy.org/doc/stable/index.html numpy.transpose https://numpy.org/doc/stable/reference/generated/numpy.transpose.html numpy.ndarray.transpose https://numpy.org/doc/stable/reference/generated/num…

π120M31 10Mbps双通道数字隔离器兼容代替ADuM1200BR

π120M31 10Mbps双通道数字隔离器兼容代替ADuM1200BR 。具有出色的性能特征和可靠性,整体性能优于光耦和基于其他原理的数字隔离器产品。传输通道间彼此独立,可实现多种传输方向的配置,可实现 3.0kV rms 隔离耐压等级和 DC 到 10Mbps 信号传输…

网络通信基础

2022年圣诞节到来啦,很高兴这次我们又能一起度过~ 祝大家圣诞快乐🎄 网络互连的目的是进行网络通信, 也即是网络数据传输, 再具体一点, 是网络主机中的不同进程间, 基于网络传输数据. 那么, 在组建的网络中, 如何判断到底是从哪台主机, 将数据传输到那…

JAVA物联网云平台源码/Modbus/视频接入 物联网智能看板源码

JAVA物联网云平台使用 Java 语言、主流技术组合(MQTT、Spring Boot、Shiro、MyBatis、Druid、Ehcache、Thymeleaf、Bootstrap、Swagger)开发,支持多数据源,支持代码一键生成。 1、包含物联网云平台源码(源码全部开放&a…

【Three.js入门】灯光与阴影、平行光阴影属性、聚光灯的属性和应用

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端 📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀未…

百趣代谢组学分享:针灸改善乳腺癌相关性疲劳!非靶代谢组学…

非靶代谢组学肠道菌群测序:改善乳腺癌相关性疲劳—针灸! 文章标题:Acupuncture ameliorates breast cancer-related fatigue by regulating the gut microbiota-gut-brain axis 发表期刊:Frontiers in Endocrinology 影响因子&#xff1…

HTML5 新增元素

文章目录HTML5 新增元素概述headernavarticleasidesectionfooter表单元素新增type属性值(验证型)新增type属性值(取值型)output元素addressprogressmeterfigure 和 figcaptionfieldset 和 legendascriptHTML5 新增元素 概述 HTM…

BOM对象

1、什么是BOM BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window。 BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。 BOM 缺乏标…

B端产品-筛选功能如何设计

相信大家在设计B端产品时,最常打交道的就是列表,而列表最常用的一个功能就是搜索,别小看一个简简单单的搜索功能,其实里边的门道也是有很多的。那么如何设计一个好用的搜索栏呢?今天就与大家分享一下,自己负…

【动态规划篇】最少分割回文 编辑距离 不同的子序列

🌠作者:阿亮joy. 🎆专栏:《数据结构与算法要啸着学》 🎇座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉…

音视频技术开发周刊 | 277

每周一期,纵览音视频技术领域的干货。新闻投稿:contributelivevideostack.com。GNNear:基于近内存处理的大规模图神经网络训练加速器图神经网络(GNNs)已经成为分析非欧几里得图数据的最新算法。然而,实现高效的GNN训练是一项挑战&…

西门子1513CPU冗余组态

西门子1513R冗余配置 1、打开博图16软件,新建项目,添加新设备,在弹出的控制器目录下找到CPU 1513R-1 PN硬件,然后系统自动生成PLC_1和PLC_2; 2、打开设备组态中的网络视图,添加接口模块; 3、在…

Springboot 统计 代码执行耗时时间 ,玩法多到眼花

前言 近日群里有萌新提到关于统计代码执行时间的事: 开始 System.currentTimeMillis() 减去 结束 System.currentTimeMillis() 等于 耗时 其实我个人感觉OK的,就这样就蛮好的,很多项目都是这样用的。 简简单单的挺好。 这一篇就是 …