• Hadoop


    1.概述

      在调度 Hadoop 的相关作业时,有以下几种方式:

    • 基于 Linux 系统级别的 Crontab。
    • Java 应用级别的 Quartz。
    • 第三方的调度系统。
    • 自行开发 Hadoop 应用调度系统。

      对于前两种,使用 Crontab 和 Quartz 是基本可以满足业务需求,但有其弊端。在 Job 数量庞大的情况下,Crontab 脚本的编写,变得异常复杂。其调度的过程也不能透明化,让管理变得困难。Quartz 虽然不用编写脚本,实现对应的调度 API 即可,然其调度过程不透明,不涵盖 Job 运行详情。需自行开发其功能。

      因而,第三方的调度系统便应运而生了。在《Hadoop - 任务调度系统比较》一文中,介绍第三方调度系统之间的差异。这里笔者就不多赘述了。本篇博文,笔者给大家介绍 Azkaban 的相关使用心得,以及在使用中遇到的种种问题和解决思路。

    2.内容

      Azkaban 托管在 Github 上,属于开源产品。它由以下几部分组成:

    • Web Server
    • Executor Server
    • MySQL
    • Plugins(HDFS,JobType,HadoopSecurityManager,JobSummary,PigVisualizer,Reportal)

      其各个模块的功能,在《Hadoop - 任务调度系统比较》中有对应的介绍,这里就不多赘述了。

    2.1 How to use

      在介绍完其核心模块后,我们如何使用这样一个调度系统,来调度我们所编写好的应用。下面,笔者将详细为大家介绍如何来完成这部分工作。

      首先,Azkaban 是一个独立的系统,不需要依赖 Hadoop 集群环境。我们可以用单独的节点来构建这样一个调度系统。但是根据系统本身的需要,依赖以下环境:

    • JDK
    • MySQL

      在准备完成以上依赖环境后,我们可以构建这样一个调度系统。在[官网]上下载二进制安装包。官网更新的二进制安装包比 Github 发布的较低,若需要使用新版本的 Azkaban ,可在 Github 上下载。

      在准备好安装包后,我们开始去部署相关安装包。

    2.2 How to install

    2.2.1 DB Setup

      首先,我们要在 MySQL 中新建 Azkaban 的数据库,操作内容如下所示:

    mysql> CREATE DATABASE azkaban;
    

      然后,我们创建所需要的表,内容如下:

    mysql>source ${AZKABAN_HOME}/sql/create-all-sql-2.5.0.sql;
    

      SQL 文件在你安装包 azkaban-sql-script-2.5.0.tar.gz 中,找到 create-all-sql-2.5.0.sql 执行即可。执行成功后,会在 Azkaban 的数据库下,生成以下表:

    2.2.2 Web Server Setup

      接下来是安装 Web Server,解压其安装包,然后在 conf 目录下配置相关文件即可:

    • azkaban.properties
    #Azkaban Personalization Settings
    azkaban.name=Test
    azkaban.label=My Local Azkaban
    azkaban.color=#FF3601
    azkaban.default.servlet.path=/index
    web.resource.dir=/home/hadoop/azkaban/server/web/web/
    #default.timezone.id=America/Los_Angeles
    default.timezone.id=Asia/Shanghai
    #Azkaban UserManager class
    user.manager.class=azkaban.user.XmlUserManager
    user.manager.xml.file=/home/hadoop/azkaban/server/web/conf/azkaban-users.xml
    
    #Loader for projects
    executor.global.properties=conf/global.properties
    azkaban.project.dir=projects
    
    #plugins
    viewer.plugin.dir=/home/hadoop/azkaban/server/web/plugins/viewer/hdfs
    #viewer.plugin.dir=hdfs
    #viewer.plugins=hdfs
    
    database.type=mysql
    mysql.port=3306
    mysql.host=nna
    mysql.database=azkaban
    mysql.user=root
    mysql.password=root
    mysql.numconnections=100
    
    # Velocity dev mode
    velocity.dev.mode=false
    
    # Azkaban Jetty server properties.
    jetty.maxThreads=25
    jetty.ssl.port=8443
    jetty.port=8081
    jetty.keystore=/home/hadoop/azkaban/server/web/conf/keystore
    jetty.password=password
    jetty.keypassword=password
    jetty.truststore=/home/hadoop/azkaban/server/web/conf/keystore
    jetty.trustpassword=password
    
    # Azkaban Executor settings
    executor.port=12321
    
    # mail settings
    mail.user=your_mail_server@example.com
    mail. password=xxxxx
    
    lockdown.create.projects=false
    
    cache.directory=cache
    

      另外,Azkaban 需要使用到 KeyStore,在 ${AZKABAN_WEB_SERVER}/conf 下运行如下命令,内容如下所示:

    keytool -keystore keystore -alias azkaban -genkey -keyalg RSA
    

      启动之前先在 ${AZKABAN_WEB_SERVER} 目录下创建 logs 目录,进入 ${AZKABAN_WEB_SERVER} 目录,运行如下命令:

    ../bin/azkaban-web-start
    

      成功启动,出现以下截图信息:

      然后,输入在浏览器中 https://your_host:8443 出现以下界面:

      接着输入用户名和密码:azkaban/azkaban 便可进入到调度系统中。

    2.2.3 Executor Setup

       Web Server 只是提供可视化,要想调度我们所编写的应用,需要依赖 Executor 服务。在 ${AZKABAN_EXECUTOR}/conf 下配置以下内容:

    • azkaban.properties
    #Azkaban
    default.timezone.id=America/Los_Angeles
    
    # Azkaban JobTypes Plugins
    azkaban.jobtype.plugin.dir=plugins/jobtypes
    
    #Loader for projects
    executor.global.properties=conf/global.properties
    azkaban.project.dir=projects
    
    database.type=mysql
    mysql.port=3306
    mysql.host=nna
    mysql.database=azkaban
    mysql.user=root
    mysql.password=root
    mysql.numconnections=100
    
    # Azkaban Executor settings
    executor.maxThreads=50
    executor.port=12321
    executor.flow.threads=30
    

      然后执行以下命令即可:

    azkaban-executor-start.sh
    

    3.Flow

      下面给大家介绍使用流程,首先,我们在 Web Server 的 Web Console 上创建一个项目,如下图所示:

      然后,点击上传按钮,将我们编写好的应用进行打包上传。这里 WordCount 为例子。如下图所示:

      在 WordCount.zip 文件中,包含两个文件,一个是我们编写需要执行的 JAR 文件,另一个是对 JAR 文件进行描述的 Job 文件,即:WordCount.job,其内容涉及如下:

    type=javaprocess
    java.class=cn.java.Hello

      这里笔者只是做了最小化配置,指明执行类型,和 Java 的 MainClass。

      在 Executor Flow 中可以设置,告警通知者,在执行完成,或是失败的时候通知应用开发者,让其知晓执行进度,如下所示:

      如上图,我们点击 Schedule 按钮,可以设置调度的时间。如下图所示:

      在调度模块,现实该项目任务的调度信息,如下图所示:

      在上图中,我们还可以设置 SLA 告警模块,在执行 Job 的过程中,若是任务超出限定时间,会将告警信息通知所这是的人。如下图所示:

      另外,我们可以在 Executing 模块查看正在执行的 Job,在 History 模块下可以查看已执行完成的 Job。若是需要使用 Azkaban 来查看 HDFS 文件系统的结构目录,添加对应的插件即可。这里就不多赘述了。

    4.总结

      这里需要注意的是,由于我们所编写的应用会上传到 MySQL 存储,这里需要设置 MySQL 的 max_allowed_packet 变量,在 /etc/my.cnf 中进行配置,内容如下所示:

    [mysqld]
    max_allowed_packet=1024M
    

      然后重启 MySQL 的服务即可。另外,官方发布的 Azkaban-2.5 版本,路径设置有问题,解决方式有两种:第一,按照错误提示,配置对应的路径;第二,修改源码中的路径读取代码,然后重新打包编译。

    5.结束语

      这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

  • 相关阅读:
    Cnic.SafeNativeMethods
    KnockOut文档--模板绑定
    luoguP1120 小木棍 [数据加强版]
    luoguP1951 收费站_NOI导刊2009提高(2)
    luoguP1821 [USACO07FEB]银牛派对Silver Cow Party
    luoguP2991 [USACO10OPEN]水滑梯Water Slides
    luoguP4198 楼房重建
    (数位dp)吉利数字 区间k大
    数字游戏
    Amount of Degrees
  • 原文地址:https://www.cnblogs.com/smartloli/p/5191155.html
Copyright © 2020-2023  润新知