• review第1遍,220628,oozie工作流调度,数据质量监控,git,md+本地视频,


    知识点10:自动化调度方案--工作流调度与oozie

    • workflow工作流的概念

      • 工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。

      • 工作流解决的主要问题是:为了实现某个业务目标,利用计算机软件在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

      • 核心概念:依赖执行 周期重复执行

      • DAG(有向无环图)

    • Apache Oozie介绍

      • Oozie是一个用来管理 Hadoop生态圈job的工作流调度系统。由Cloudera公司贡献给Apache。

        • oozie本身单独使用极其不方便,配置文件极其繁琐,不管是使用shell命令提交工作流还是使用java API提交工作流,都需要编写大量繁琐的xml配置文件;

        • 但是oozie和hue整合之后使用还是非常不错的,在hue页面上提供了拖拽功能,直接选择想要调度的脚本或者其他任务,还可以根据自己的需求编写定时规则。

      • 栗子 1:在Hue上使用oozie提交一个shell脚本执行

        • step1:打开hue页面

          http://hadoop02:8889/hue 用户名、密码:hue

        • step2:上传一个shell脚本或者使用hue在线编写一个shell脚本

     

     

     追加,覆盖,

    在那台机器运行,有yarn决定,

    栗子2:针对栗子1的调度任务,配置周期定时执行coordinator。

    刚才配置的workflow属于一次性的工作流,执行完就结束了。

    可以配置coordinator来控制workflow的执行周期和触发频率。

    #获取今天的日期
    date
    date +%Y%m%d

    #获取指定日期的年月日格式输出
    date -d "2014-11-12" +%Y%m%d

    #获取指定日期的星期(周几)格式输出
    date --date="2014-11-23" +%w

    #获取上周日期(day,month,year,hour)
    date -d "-1 week" +%Y%m%d

    #获取昨天日期
    date -d '-1 day' "+%Y-%m-%d"
    date --date="-24 hour" +%Y%m%d

    变量提取、反引号的功能

    name="allen"
    echo ${name}

    date
    nowTime=date
    echo ${nowTime}

    date
    nowTime=`date`
    echo ${nowTime}

    #双小括号命令是用来执行数学表达式的,可以在其中进行各种逻辑运算、数学运算,也支持更多的运算符(如++、--等)

    echo $(((5 * 2)))

    i=5
    echo $(((i=$i*2))) #10
    echo $(((i=i*2)))  #20

    # $((( )))的缩写。
    echo $(((i*2))) #40
    echo $((i*2)) #40

    #shell脚本默认是按顺序串行执行的,使用&可以将一个命令放在后台运行,从而使shell脚本能够继续往后执行

    sleep 5 &
    echo "done"

    sleep 5  #休眠5s
    echo "done"

    #上面的脚本执行后会立即打印出"done",sleep命令被扔给后台执行,不会阻塞脚本执行。

    #如果想要在进入下个循环前,必须等待上个后台命令执行完毕,可以使用wait命令
    sleep 5 &
    wait
    echo "done"

    #这样,需要等待5s后才能在屏幕上看到"done"。

    shell动态传参

    $1 $2 代表的是传递的第几个参数

    $0 执行脚本的名字

    $# 传递参数的总个数

    $* 显示所有传入参数 以列表展示

    [root@hadoop02 ~]# vim 4.sh
    #!/bin/bash
    echo "$1"
    echo "$3"
    echo "$0"
    echo "$#"
    echo "$*"

    [root@hadoop02 ~]# sh 4.sh  11 22 33 44
    11
    33
    4.sh
    4
    11 22 33 44

    知识点12:自动化调度方案--脚本实现、调度实现

    • 脚本实现

      脚本实现的关键是如何在shell建表中执行sqoop命令、hive sql文件、presto sql文件

      并且关于时间的地方不能写死,而是使用shell date命令来动态获取

      • 例子一:ODS数据导入

      • #! /bin/bash
        SQOOP_HOME=/usr/bin/sqoop
        if [[ $1 == "" ]];then
           TD_DATE=`date -d '1 days ago' "+%Y-%m-%d"`
        else
           TD_DATE=$1
        fi

        #上述这段shell是什么意思?能否看懂?
            如果用户不指定日期 默认采集当前天的前一天的数据。
            用户也可以根据自己需求传入指定日期作为参数  就采集指定那一天的数据。

    首次执行脚本

    #仅新增

    # 新增和更新同步

     

    循环执行脚本

    1、通过sqoop的query查询把增量数据查询出来。

    增量的范围是TD_DATE值的 00:00:00 至 23:59:59

    2、判断的字段是

    如果是仅新增同步,使用create_time创建时间即可

    如果是新增和更新同步,需要使用create_time 和 update_time两个时间

    3、这也要求在业务系统数据库设计的时候,需要有意识的增加如下字段

    create_user

    create_time

    update_user

    update_time

    例子二:DWB层sql脚本执行

    在shell中执行hive sql的方式有两种

    bin/hive -e ‘sql语句’

    bin/hive -f xxx.sql文件

    • 首次执行

     循环执行

    例子三:Presto的sql如何在shell中执行

    #! /bin/bash
    #昨天
    if [[ $1 == "" ]];then
       TD_DATE=`date -d '1 days ago' "+%Y-%m-%d"`
    else
       TD_DATE=$1
    fi

    PRESTO_HOME=/opt/cloudera/parcels/presto/bin/presto


    ${PRESTO_HOME} --catalog hive --server 172.17.0.202:8090 --execute "
    delete from yp_rpt.rpt_sale_store_cnt_month where date_time = '${TD_DATE}';
    .......
    "


    #改写上述的模板 练习一下如何使用shell执行presto sql

    /export/server/presto/bin/presto --catalog hive --server hadoop01:8090 --execute "select * from yp_rpt.rpt_sale_store_cnt_month where date_time = '2021-03-17'"

        • 去中心化模式

        • 优点

          • 不需要联网,自己的笔记本就是个本地版本库,直接利用自己的笔记本实现版本的管理

          • 自己可以管理任意多个版本

          • 不需要担心公共的版本库故障,每个人的本地都有版本库

    • Git的特点

      • 适合于分布式开发,多人可以共同开发,强调个体

      • 公共的版本库服务器的压力不会太大

      • 速度快、更加灵活

      • 任意的开发者之间如果产生冲突也容易解决

      • 不需要联网也可以实现多版本管理

    1.1 Oozie Azkaban 对比
    1.Oozie是基于Hadoop系统进行操作,而Azkaban是基于命令行进行操作。使用hadoop提供
    的第三方包JobClient比直接在底层跑shell命令 开发成本小 ,可能 遇到的坑也少 (一个是基于
    Hadoop平台,一个是基于Linux系统)。
    2.Oozie的操作是放在Hadoop中,而Azkaban的运行是服务器运行shell命令。为 保证服务器的
    稳定 ,使用Oozie靠谱点。
    3.Ooize提供查询 任务执行状态 ,Azkaban查询的是进程执行的结果,如果某进程执行的shell
    命令出错,其进程仍展示位成功,混淆了任务输出。
    4.Oozie将任务执行的状态 持久化到数据库中 ,Azkaban将任务的状态存储在服务器内存中,
    如果掉电,则Azkaban会丢失任务信息。
    5.Ooize中定义的action类型更为丰富,而Azkaban中的依赖较为简单,当面对 复杂的逻辑
    Oozie 执行的 比较顺畅
    6.两者均可以通过WEB界面进行配置操作,Azkaban和Oozie均拥有自带WEB,而 Oozie 同时
    被HUE集成 ,通过HUE集成管理,可以更加方便的在Web页面上完成workflow的启动、停止、恢
    复。
    7. CDH原生支持Oozie ,而Azkaban还需要额外的编译及安装配置。
    1.3.4 修复异常
    org.apache.oozie.action. ActionExecutorException : JA009 : Invalid resource request! Cannot
    allocate containers as requested resource is greater than maximum allowed allocation.
    Requested resource type=[memory-mb], Requested resource=<memory:2048, vCores:1>,
    maximum allowed allocation=<memory:1024, vCores:4>, please note that maximum allowed
    allocation is calculated by scheduler based on maximum resource of registered NodeManagers,
    which might be less than configured maximum allocation=<memory:1024, vCores:4>
    这是内存分配导致的错误,需要设置内存并重启Yarn:将 maximum改为和nodemanager内存一样的值
    2.1.1 获取今天的日期
    date
    date +%Y%m%d
    2.1.2 指定日期获取内容 -d或--date=
    #获取指定日期的年月日格式输出
    date -d "2014-11-12" +%Y%m%d
    #获取指定日期的星期(周几)格式输出
    date --date="2014-11-23" +%w
    2.1.3 日期加减 -d或--date==
    #获取上周日期(day,month,year,hour)
    date -d "-1 week" +%Y%m%d
    #获取昨天日期
    date -d '-1 day' "+%Y-%m-%d"
    date --date= "-24 hour" +%Y%m%d
    日期格式化规则:
    %a 当前域的星期缩写 (Sun..Sat)
    %A 当前域的星期全写 (Sunday..Saturday)
    %b 当前域的月份缩写(Jan..Dec)
    %B 当前域的月份全称 (January..December)
    %d 两位的天 (01..31)
    %D 短时间格式 (mm/dd/yy)
    %e 短格式天 ( 1..31)
    %F 文件时间格式 same as %Y-%m-%d
    %h same as %b
    %H 24小时制的小时 (00..23)
    %I 12小时制的小时 (01..12)
    %j 一年中的第几天 (001..366)
    %k 短格式24小时制的小时 ( 0..23)
    %m 双位月份 (01..12)
    %M 双位分钟 (00..59)
    %r 12小时制的时间表示(时:分:秒,双位)
    time, 12-hour (hh:mm:ss [AP]M)
    %R 24小时制的时间表示 (时:分,双位)time, 24-hour (hh:mm)
    %s 自基础时间 1970-01-01 00:00:00 到当前时刻的秒数(a GNU extension)
    %T 24小时制时间表示(hh:mm:ss)
    %u 数字表示的星期(从星期一开始 1-7)
    %x 本地日期格式 (mm/dd/yy)
    %X 本地时间格式 (%H:%M:%S)
    %y 两位的年(00..99)
    %Y 年 (1970…)
    在 bash shell 中, ${} 是用来作变量替换的。
    一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围。
    A=Linux
    echo $AB #表示变量AB
    echo ${A} B #表示变量A后连接着B
    在 bash shell 中, $( )与` ` (反引号)都是用来作命令替换的。
    命令替换与变量替换差不多,区别是一个为 执行变量 ,一个为 执行命令 ,先完成引号里的命令
    行,然后将其结果替换出来,再重组成新的命令行。
    echo $(date "+%Y-%m-%d") #2020-07-01
    echo today is `date "+%Y-%m-%d"` #today is 2020-07-01
    双小括号命令是用来执行 数学表达式 的,可以在其中进行各种逻辑运算、数学运算,也支持更
    多的运算符(如++、--等)。
    echo $( ((5 * 2)) ) #10
    在(( )) 中的 变量名称 ,可于其前面加 $ 符号 来执行替换, 也可以不用
    i=5
    echo $( ((i=$i*2)) ) #10
    echo $( ((i=i*2)) ) #20
    $((( )))的缩写。
    echo $(((i*2))) #40
    echo $((i*2)) #40
    shell脚本默认是 按顺序串行 执行的,使用&可以将一个命令放在后台运行,从而使shell脚本能
    够继续往后执行:
    sleep 5 &
    echo "done"
    上面的脚本执行后会立即打印出"done",sleep命令被扔给后台执行,不会阻塞脚本执行。
    如果想要在进入下个循环前, 必须 等待上个后台命令执行完毕,可以使用wait命令
    sleep 5 &
    wait
    echo "done"
    这样,需要等待5s后才能在屏幕上看到"done"。
    简单的hive执行sql命令。
    #! /bin/bash
    HIVE_HOME=/usr/bin/hive
    ${HIVE_HOME} -S -e " …… "
    简单的sqoop脚本命令,新增同步、更新同步数据时,数据日期DT字段需要用到昨天日期变量。
    #! /bin/bash
    #SQOOP_HOME=/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/bin/sqoop
    SQOOP_HOME=/usr/bin/sqoop
    if [[ $1 == "" ]];then
    TD_DATE=`date -d '1 days ago' "+%Y-%m-%d"`
    else
    TD_DATE=$1
    fi
    循环执行时,sqoop的sql查询条件,需要用到昨天日期变量
    #! /bin/bash
    #SQOOP_HOME=/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/bin/sqoop
    SQOOP_HOME=/usr/bin/sqoop
    if [[ $1 == "" ]];then
    TD_DATE=`date -d '1 days ago' "+%Y-%m-%d"`
    else
    TD_DATE=$1
    fi
    循环执行时,拉链表的条件需要用到昨天日期变量。
    DWB关联查询时,需要将30天内的数据(上个月1日至今)覆盖插入,用到了变量:上个月1
    日。
    #! /bin/bash
    HIVE_HOME=/usr/bin/hive
    # 上个月 1
    Last_Month_DATE=$(date -d "-1 month" +%Y-%m-01)
    ${HIVE_HOME} -S -e "
    销售主题,要重新计算年月日数据,条件需要用到昨天所在年的起始日期:${TD_DATE_YEAR}; 商品主题和用户主题,需要进行累加,获取昨日数据和上个月数据时,都需要${TD_DATE}变 量。

     暂时看到::::::::::::::

    未看,阿里数据质量规范,

    数据质量教程概述 - 大数据开发治理平台 DataWorks - 阿里云icon-default.png?t=M5H6https://help.aliyun.com/document_detail/124781.html

  • 相关阅读:
    计算机视觉+人工智能面试笔试总结——CNN模型总结
    最好的开放式蓝牙耳机有哪些?排名前五的开放式耳机五强
    Eclipse - Text Editors (文本编辑器)
    TCP/IP五层协议栈(1)
    06文本搜索工具——grep以及正则表达式
    Java程序员:三个月刷完1000道面试真题,没想到老板直接给我升职了
    Flink--8、时间语义、水位线(事件和窗口、水位线和窗口的工作原理、生产水位线、水位线的传递、迟到数据的处理)
    重装系统后要安装哪些驱动
    计算机毕业设计Java论坛管理系统(源码+mysql数据库+系统+lw文档)
    AR人体姿态识别,实现无边界的人机交互
  • 原文地址:https://blog.csdn.net/m0_48941160/article/details/125508848