一、知识梳理(作业,标注哪些会,哪些不熟,哪些不会)

画脑图的软件:xmind
Day20-Azkaban - 图1

二、Azkaban

1、环境安装(参照昨天的文档)

  1. 总结:配置文件写错了(直接粘贴我的文档) mysql的驱动包使用 8.0 的版本。

2、Azkaban的使用

1)Azkaban的Flow1.0 (编写脚本的老版本)

1. azkaban的job流文件,后缀是.job
    1)  type属性 必须赋值
        值有:command,java,pig
2. azkaban执行的job必须要提前打包,打包的格式必须是zip格式
3. 流文件里的书写格式:
    1)一定要注意行末不要有空格
    2)编码集的问题,如果在window上实在不行,可以上传到linux进行zip压缩,然后下载到windows上,再上传到azkaban

举例:编写一个简单的job:
第一步:编写first.job

type=command
command=echo 'hello,'$JAVA_HOME'';

确保我们的脚本中的每一行没有空格:
image.png
第二步:将我们的job进行压缩,zip
image.png
第三步:上传到azkaban的平台上:
http://bigdata01:8081
先创建项目(如果之前有项目,可以不创建)
image.png
打开项目,上传压缩包:
image.png
接着执行该job任务:
image.png
image.png
image.png
image.png
image.png
image.png
如果你出现了这个错误:
image.png
修改exec-server中的一个配置即可:
修改exec-server 中的 azkaban.properties

azkaban.jobtype.plugin.dir=/usr/local/azkaban-3.56.0/exec-server/plugins/jobtypes

重启exec-server 即可。

进入bin 
shutdown-exec.sh
start-exec.sh

2)Azkaban的Flow2.0 (编写脚本的新版本)

Azkaban 可以 调度 我们shell脚本,mr任务,hive的hql语句,设置定时任务,设置工作流等。

Azkaban 目前同时支持 Flow 1.0 和 Flow2.0 ,但是官方文档上更推荐使用 Flow 2.0,因为 Flow 1.0 会在将来的版本被移除。Flow 2.0 的主要设计思想是提供 1.0 所没有的流级定义。用户可以将属于给定流的所有 job / properties 文件合并到单个流定义文件中,其内容采用 YAML 语法进行定义,同时还支持在流中再定义流,称为为嵌入流或子流。

演示:
第一个案例:
第一步,编写 flow文件 ,比如 simple.flow

nodes:

   - name: jobA
     type: command
     config:
        command: echo "this is a simple test"
   - name: jobB
     type: command
     config:
        command: echo "this is a jobB!"

第二步:编写一个project 文件 ,比如 a.project

azkaban-flow-version: 2.0

第三步:打包成zip文件,上传至我们的项目中(可以是老项目,也可以重新创建一个新项目)
执行一下,查看结果,后面的步骤跟flow1 是一样的。
目前企业中普遍使用第二种写法。

理论(主要学习yaml的语法):

1. 大小写敏感
2. 使用缩进表示层级关系 ;
3. 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级;
4. 使用#表示注释 ;
5. 字符串默认不用加单双引号,但单引号和双引号都可以使用,双引号表示不需要对特殊字符进行转义;
6. YAML 中提供了多种常量结构,包括:整数,浮点数,字符串,NULL,日期,布尔,时间。

具体的细节:
编写yaml (yml) 就好比是 以前写的 xml
4.3.2 对象的写法

# value 与 : 符号之间必须要有一个空格
key: value

4.3.3 map的写法

# 写法一 同一缩进的所有键值对属于一个map
key: 
    key1: value1
    key2: value2

# 写法二
{key1: value1, key2: value2}

4.3.4 数组的写法

# 写法一 使用一个短横线加一个空格代表一个数组项
- a
- b
- c

# 写法二
[a,b,c]

4.3.5 单双引号

s1: '内容\n 字符串'
s2: "内容\n 字符串"

转换后:
{ s1: '内容\\n 字符串', s2: "内容\n 字符串" }

4.3.6 特殊符号

一个 YAML 文件中可以包括多个文档,使用 `---` 进行分割。

4.3.7 配置引用

Flow 2.0 建议将公共参数定义在 `config` 下,并通过 `${}` 进行引用。

第二个案例:多任务串联
第一步:创建文件 second.flow

nodes:
  - name: jobE
    type: command
    config:
      command: echo "This is job E"
    # jobE depends on jobD
    dependsOn: 
      - jobD
  - name: jobD
    type: command
    config:
      command: echo "This is job D"
    # jobD depends on jobA jobB jobC
    dependsOn:
      - jobA
      - jobB
      - jobC
  - name: jobA
    type: command
    config:
      command: echo "This is job A"
  - name: jobB
    type: command
    config:
      command: echo "This is job B"
  - name: jobC
    type: command
    config:
      command: echo "This is job C"

第二步:创建 second.project

azkaban-flow-version: 2.0

第三步:压缩上传,执行
注意:
1、出现字符集问题,请用notepad++将文件修改为utf-8 的字符集,然后删除特殊字符
image.png
image.png
将文件从ansi 格式修改为 utf-8 with out bom 格式 即可,删除里面的特殊字符
image.png

2、dependsOn:
- jobA
此处的-只要一个,不要写两个,要有空格隔开。
image.png

第三个案例:
编写脚本:
third.flow

nodes:
  - name: jobC
    type: command
    config:
      command: echo "This is job C"
    dependsOn:
      - embedded_flow

  - name: embedded_flow
    type: flow
    config:
      prop: value
    nodes:
      - name: jobB
        type: command
        config:
          command: echo "This is job B ${prop}"
        dependsOn:
          - jobA

      - name: jobA
        type: command
        config:
          command: echo "This is job A"

third.project:

azkaban-flow-version: 2.0

image.png
编写文件的时候,注意字符集(gbk —> utf-8 )
关于定时任务:
image.png
azkaban的重试机制:

# 重试次数
retries: 3
# 每次重试时间间隔
retry.backoff: 10000


案例:
nodes:
   - name: jobA
     type: command
     config:
        command: echo "this is a simple test"
        retries: 3
        retry.backoff: 10000

3) azkaban的报警机制(运维)

1、邮箱通知

第一步:找一个你经常使用的邮箱,获取秘钥:
image.png
image.png
image.png
接着进行配置:
在azkaban的 web-server 端,进行邮箱的配置:

mail.sender=dana666@yeah.net
mail.host=smtp.yeah.net
mail.user=dana666@yeah.net
mail.password=XDBXQZLWMDKQTCVO

接着在要执行的任务上,进行配置即可:
image.png
image.png

2、电话通知

需要借助于第三方平台:https://www.aiops.com/ 注册,登录
image.png
image.png
记得提交保存。
image.png
image.png
接着,拷贝该平台给你的邮箱。
image.png
image.png

二、superset

官网:https://superset.apache.org/
作用:不需要编写任何的代码就可以将mysql中的数据展示为各种图标(数据改变,图标也跟着变。)
安装步骤:
1、下载:
https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

2、安装 miniconda(它是py的集成环境)
image.png
3、上传,安装 (/home/soft)

bash Miniconda3-latest-Linux-x86_64.sh

安装过程中,会先让你查看协议,一直摁回车即可,到头以后,问你是否同意该协议? 你输入 yes.
后面 让你指定安装的路径, [/root/miniconda3] >>> /usr/local/miniconda3
image.png
4、修改环境变量 /etc/profile

export CONDA_HOME=/usr/local/miniconda3
export PATH=$PATH:$CONDA_HOME/bin

一定要 source /etc/profile

5、取消激活base环境

conda config --set auto_activate_base false

6、配置python3.6环境
第一步:

conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --set show_channel_urls yes

查看执行效果:
查看下.condarc文件,是否是如下配置
image.png
第二步:创建superset环境

conda create -n superset python=3.6

不要执行文档中的后面几个说明的命令,那个是说明命令的用法的。

第三步:激活superset环境

source activate

conda activate superset

7、superset的部署
1)安装依赖:

yum install -y python-setuptools

yum install -y gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel

2)安装(更新)setuptools和pip

pip install --upgrade setuptools pip -i https://pypi.douban.com/simple/

说明:pip是python的包管理工具,可以和centos中的yum类比。
3) 安装superset

pip install apache-superset -i https://pypi.douban.com/simple/

看到这个successful即可:
image.png
4) 初始化数据库:

superset db upgrade

会遇到错误:
image.png

ImportError: cannot import name '_ColumnEntity'

这个错误:
解决方案:
pip install tushare --upgrade 

pip install sqlalchemy==1.3.24

记得,一样看一下前面是否有:(superset)

image.png
image.png

上面错误的解决方案:
pip install dataclasses
如果执行这个命令,报红了,网速有点慢造成的。
解决办法:
pip install dataclasses -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install dataclasses

如果不再报错,继续初始化我们的数据库:

superset db upgrade

如果以上都没有错误,就说明这一步结束了。

创建管理员:

export FLASK_APP=superset

flask fab create-admin

image.png
在superset 环境下,进行初始化:

superset init

image.png
启动superset环境:

pip install gunicorn -i https://pypi.douban.com/simple/
gunicorn -w 1 -t 120 -b bigdata01:8787 "superset.app:create_app()"

一定要确保是在 superset的环境里面启动的,否则会失败的,如何判定当前的环境呢?
image.png,如果不在,怎么进入呢?conda activate superset
image.png
通过浏览器访问surset : http://192.168.32.100:8787
image.png
账户和密码都是root。