助力工业物联网,工业大数据之ODS层构建:需求分析【八】

news/2024/11/29 1:41:42/

文章目录

    • 01:ODS层构建:需求分析
    • 02:ODS层构建:创建项目环境
    • 03:ODS层构建:代码导入

01:ODS层构建:需求分析

  • 目标:掌握ODS层构建的实现需求

  • 路径

    • step1:目标
    • step2:问题
    • step3:需求
    • step4:分析
  • 实施

    • 目标:将已经采集同步成功的101张表的数据加载到Hive的ODS层数据表中

    • 问题

      • 难点1:表太多,如何构建每张表?

        • 101张表的数据已经存储在HDFS上

        • 建表

          • 方法1:手动开发每一张表建表语句,手动运行

          • 方法2:通过程序自动化建表

            • 拼接建表的SQL语句

              create external table 数据库名称.表名
              comment '表的注释'
              partitioned by
              ROW FORMAT SERDE'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
              STORED AS INPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
              OUTPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
              location '这张表在HDFS上的路径'
              TBLPROPERTIES ('这张表的Schema文件在HDFS上的路径'
              • 表名、表的注释、表在HDFS上的路径、Schema文件在HDFS上的路径
            • 将SQL语句提交给Hive或者Spark来执行

        • 申明分区

          alter table 表名 add partition if not exists partition(key=value)
          
      • 难点2:如果使用自动建表,如何获取每张表的字段信息?

        • Schema文件:每个Avro格式的数据表都对应一个Schema文件

        • 统一存储在HDFS上

  • 需求:加载Sqoop生成的Avro的Schema文件,实现自动化建表

  • 分析

    • step1:代码中构建一个Hive/SparkSQL的连接

    • step2:创建ODS层数据库

      create database if not exists one_make_ods;
      
    • step3:创建ODS层全量表:44张表

      create external table one_make_ods_test.ciss_base_areascomment '行政地理区域表'PARTITIONED BY (dt string)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
      STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
      OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'location '/data/dw/ods/one_make/full_imp/ciss4.ciss_base_areas'TBLPROPERTIES ('avro.schema.url'='hdfs://bigdata.maynor.cn:9000/data/dw/ods/one_make/avsc/CISS4_CISS_BASE_AREAS.avsc');
      
      • 读取全量表表名

        • 动态获取表名:循环读取文件
      • 获取表的信息:表的注释

        • Oracle:表的信息
        • 从Oracle中获取表的注释
      • 获取表的文件:HDFS上AVRO文件的地址

        /data/dw/ods/one_make/full_imp
        
      • 获取表的Schema:HDFS上的Avro文件的Schema文件地址

        /data/dw/ods/one_make/avsc
        
      • 拼接建表字符串

        • 方式一:直接相加:简单

          str1 = "I "
          str2 = "like China"
          str3 = str1 + str2
          
        • 方式二:通过列表拼接:复杂

      • 执行建表SQL语句

    • step4:创建ODS层增量表:57张表

      • 读取增量表表名

        • 动态获取表名:循环读取文件
      • 获取表的信息:表的注释

        • Oracle:表的信息
        • 从Oracle中获取表的注释
      • 获取表的文件:HDFS上AVRO文件的地址

        /data/dw/ods/one_make/incr_imp
        
      • 获取表的Schema:HDFS上的Avro文件的Schema文件地址

        /data/dw/ods/one_make/avsc
        
      • 拼接建表字符串

      • 执行建表SQL语句

  • 小结

    • 掌握ODS层构建的实现需求

02:ODS层构建:创建项目环境

  • 目标实现Pycharm中工程结构的构建

  • 实施

    • 安装Python3.7环境

      image-20210930150020688

      • 项目使用的Python3.7的环境代码,所以需要在Windows中安装Python3.7,与原先的Python高版本不冲突,正常安装即可
    • 创建Python工程

      image-20210930150438112
    • 安装PyHive、Oracle库

      • step1:在Windows的用户家目录下创建pip.ini文件

        • 例如:C:\Users\Frank\pip\pip.ini

        • 内容:指定pip安装从阿里云下载

          [global]index-url=http://mirrors.aliyun.com/pypi/simple/[install]trusted-host=mirrors.aliyun.com
          
      • step2:将文件添加到Windows的Path环境变量

        image-20210930150905946

      • step3:进入项目环境目录

        • 例如我的项目路径是:D:\PythonProject\OneMake_Spark\venv\Scripts

          image-20210930151306714

        • 将提供的sasl-0.2.1-cp37-cp37m-win_amd64.whl文件放入Scripts目录下

          image-20210930151549478

        • 在CMD中执行以下命令,切换到Scripts目录下

          #切换到D盘
          D:
          #切换到项目环境的Scripts目录下
          cd D:\PythonProject\OneMake_Spark\venv\Scripts
          

          image-20210930151448348

      • step4:CMD中依次执行以下安装命令

        # 安装sasl包 -> 使用pycharm安装,会存在下载失败情况,因此提前下载好,对应python3.7版本
        pip install sasl-0.2.1-cp37-cp37m-win_amd64.whl
        # 安装thrift包
        pip install thrift
        # 安装thrift sasl包One
        pip install thrift-sasl
        # 安装python操作oracle包
        pip install cx-Oracle
        # 安装python操作hive包,也可以操作sparksql
        pip install pyhive
        

        image-20210930152134126

      • step5:验证安装结果

        image-20210930152732079
      • 温馨提示:其实工作中你也可以通过Pycharm直接安装

  • 小结

    • 实现Pycharm中工程结构的构建

03:ODS层构建:代码导入

  • 目标实现Python项目代码的导入及配置

  • 实施

    • Oracle本地驱动目录:将提供的instantclient_12_2目录放入D盘的根目录下

      image-20210930153737086

      • PyHive本地连接配置:将提供的CMU目录放入C盘的根目录下

    image-20210930153652800

    • auto_create_hive_table包

      • 创建路径包

        image-20210930153142799

        auto_create_hive_table.cn.maynor.datatohive
        

        image-20210930154056029

        • 在datatohive的init文件中放入如下代码

          from auto_create_hive_table.cn.maynor.datatohive import LoadData2DWD
          from auto_create_hive_table.cn.maynor.datatohive.CHiveTableFromOracleTable import CHiveTableFromOracleTable
          from auto_create_hive_table.cn.maynor.datatohive.CreateHiveTablePartition import CreateHiveTablePartition
          
        • 其他包的init都放入如下内容

          #!/usr/bin/env python
          # @desc :
          __coding__ = "utf-8"
          __author__ = "maynor"
          
          • 将对应的代码文件放入对应的包或者目录中
  • step1:从提供的代码中复制config、log、resource这三个目录直接粘贴到auto_create_hive_table包下 image-20210930155013278

  • step2:从提供的代码中复制entity、utils、EntranceApp.py这三个直接粘贴到maynor包下 image-20210930155111676

  • step3:从提供的代码中复制fileformat等文件直接粘贴到datatohive包下 image-20210930155239773

    • DW归档目录**:将提供的代码中的dw目录直接粘贴到项目中

      image-20210930155529688

  • 小结

    • 实现Python项目代码的导入及配置

http://www.ppmy.cn/news/46269.html

相关文章

零入门kubernetes网络实战-29->在同一个宿主机上基于虚拟网桥bridge链接不同网段的不同网络命名空间的通信方案

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 上一篇文章,我们分享了使用虚拟网桥来连接同网段的不同网络命名空间下的通信情况。 那么,本篇文章, 我们想测试一下&…

【mysql性能调优 • 四】mysql用户权限原理和实战(史上最详细)

前言 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系…

Python 自然语言处理实用指南:第一、二部分

原文:Hands-on natural language processing with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象&#xff…

对话ChatGPT:Prompt是普通人“魔法”吗?

在ChatGPT、Midjourney、Stable Diffusion等新事物的作用下,不少人或多或少听说过Prompt的概念。 虽然OpenAI掀起的大模型浪潮再度刷新了人们对AI的认知,但现阶段的AI终归还不是强人工智能,大模型里的“知识”存储在一个隐性空间里&#xff0…

基于互相关性的信号同步

许多测量涉及多个传感器异步采集的数据。如果您要集成信号并以关联式研究它们,您必须同步它们。为此,请使用 xcorr。 例如,假设有一辆汽车经过一座桥。它产生的振动由位于不同位置的三个相同传感器进行测量。信号有不同到达时间。 将三个时…

Java集合底层原理

目录 ArrayList集合源码创建ArrayList集合扩容机制 LinkedList集合源码添加数据 迭代器源码HashSet底层原理HashMap源码创建HashMap对象添加元素 TreeMap源码基本属性与构造器添加元素 以下源码来自JDK11 ArrayList集合源码 创建ArrayList集合 /* 无参构造,返回一个空数组 参…

DPDK系列之十三虚拟化virtio源码分析之应用层

一、应用 其实不管怎么设计,如何开发,结果都是要展现一个结果,能够为人所用。虽然说virtio的应用场景有不少,但是在DPDK中主要就是网卡。所以,在此处主要是对网卡的抽象的实现,即对上层的应用实现底层的vi…

【ChatGPT】基于tensorflow2实现transformer(GPT-3.5)

请记住,您是一位NLP领域的专家和优秀的算法工程师。使用带有 tensorflow2.0 subclass api 的 python 从头开始实现 transformer 模型。 全部内容如下: 构建transformer模型架构和依赖层;生成并预处理一些假样本数据,用于训练上面…