尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Azkaban单机版安装配置指南:从零搭建开源工作流调度系统

Azkaban单机版安装配置指南:从零搭建开源工作流调度系统 1. 项目概述为什么我们需要Azkaban在数据开发与运维的日常工作中任务调度是一个绕不开的核心环节。想象一下你手头有几十个甚至上百个数据处理脚本它们之间存在着复杂的依赖关系脚本B必须在脚本A成功运行后才能启动而脚本C又依赖于B和另一个脚本D的输出。如果全靠人工手动触发不仅效率低下而且极易出错尤其是在凌晨需要定时执行的任务对开发人员来说简直是噩梦。这时一个可靠的任务调度系统就显得至关重要。Azkaban正是为解决这类问题而生的开源工作流调度器由LinkedIn开发并开源。它通过简单的Web界面允许你以可视化的方式定义、调度和监控复杂的工作流。其核心优势在于“配置即代码”的理念使用易于理解的.job和.flow文件来描述任务及其依赖关系学习成本相对较低。对于中小型团队或个人开发者而言从单机版开始部署和试用Azkaban是理解其工作原理、验证工作流设计的最佳途径。本教程将手把手带你完成Azkaban的下载、安装及单机模式配置让你能快速搭建起一个可用的本地调度环境为后续的自动化数据流水线开发打下坚实基础。2. 环境准备与前置依赖检查在开始安装Azkaban之前确保你的服务器或本地开发环境满足基本要求可以避免后续出现许多令人头疼的兼容性问题。2.1 系统与Java环境Azkaban是基于Java构建的因此一个正确配置的JDK环境是首要条件。操作系统Azkaban兼容主流Linux发行版如CentOS、Ubuntu和macOS。在Windows上部署相对复杂通常建议在WSL2或虚拟机中进行。本教程以Linux环境Ubuntu 20.04 LTS为例进行说明。Java版本Azkaban 3.x版本需要JDK 8或JDK 11。强烈建议使用JDK 8因为这是经过最广泛测试的版本。你可以通过以下命令检查java -version如果显示版本为1.8.x则符合要求。如果未安装或版本不对可以通过包管理器安装如apt install openjdk-8-jdk或从Oracle官网下载安装包手动配置。环境变量确保JAVA_HOME环境变量已正确设置。这通常是Azkaban启动脚本寻找Java运行时所必需的。可以通过编辑~/.bashrc或~/.bash_profile文件来设置export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 # 请根据你的实际路径修改 export PATH$JAVA_HOME/bin:$PATH然后执行source ~/.bashrc使配置生效并通过echo $JAVA_HOME验证。2.2 数据库准备Azkaban需要数据库来存储项目、工作流、执行历史等元数据。单机版支持两种内置数据库H2和外部数据库MySQL。对于学习和测试内置H2数据库最简单开箱即用。但对于任何严肃的试用或准生产环境强烈建议使用MySQL因为H2是内存数据库Azkaban服务重启后所有元数据会丢失。如果你选择MySQL推荐安装MySQL服务器版本5.6或5.7均可避免使用8.0初期版本以防兼容性问题sudo apt update sudo apt install mysql-server -y启动MySQL并设置开机自启sudo systemctl start mysql sudo systemctl enable mysql运行安全安装脚本设置root密码并移除匿名用户等不安全配置sudo mysql_secure_installation登录MySQL为Azkaban创建专用的数据库和用户mysql -u root -p在MySQL提示符下执行CREATE DATABASE azkaban DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER azkabanlocalhost IDENTIFIED BY YourStrongPassword123!; -- 请替换为强密码 GRANT ALL PRIVILEGES ON azkaban.* TO azkabanlocalhost; FLUSH PRIVILEGES; EXIT;注意记住这里创建的数据库名、用户名和密码在后续配置文件中会用到。使用localhost限制连接仅来自本机更安全。3. Azkaban安装包下载与解压Azkaban的发行版主要由三部分组成Web服务器Web Server、执行服务器Executor Server和数据库DB。单机模式Solo Server是将Web Server和Executor Server打包在一个进程中运行最为简单。确定版本访问Azkaban的GitHub Releases页面https://github.com/azkaban/azkaban/releases 。对于新手建议选择较新且稳定的3.x版本例如3.90.0。避免使用最新的alpha或beta版。下载安装包你需要下载azkaban-solo-server的压缩包。例如使用wget命令直接下载wget https://github.com/azkaban/azkaban/releases/download/3.90.0/azkaban-solo-server-3.90.0.tar.gz如果下载速度慢可以尝试寻找国内的镜像源。解压与目录规划选择一个合适的安装目录例如/opt或/usr/local然后解压sudo tar -zxvf azkaban-solo-server-3.90.0.tar.gz -C /opt/ cd /opt sudo mv azkaban-solo-server-3.90.0 azkaban # 重命名为简单目录名 sudo chown -R $USER:$USER azkaban # 将目录所有权改为当前用户避免权限问题 cd azkaban解压后的目录结构通常包含bin/启动和停止脚本。conf/配置文件目录。lib/依赖的Jar包。plugins/可以放置各种扩展插件如HDFS、Hive、Email通知等。web/Web服务器的静态资源。4. 单机版核心配置详解单机版的配置主要集中在conf目录下的几个关键文件。配置前建议先备份原始文件。4.1 配置Azkaban内部属性azkaban.properties这是Azkaban最核心的配置文件位于conf/azkaban.properties。配置数据库连接如果使用MySQL 找到并修改以下段落将占位符替换为你在2.2节中创建的信息# 使用MySQL数据库 database.typemysql mysql.port3306 mysql.hostlocalhost mysql.databaseazkaban mysql.userazkaban mysql.passwordYourStrongPassword123! mysql.numconnections100如果坚持使用内置H2数据库则保持database.typeh2但务必知晓数据非持久化的风险。配置Web服务器# Web服务器的Jetty配置 jetty.port8081 # 指定Web UI的访问端口默认8081确保未被占用 azkaban.webserver.urlhttp://localhost:${jetty.port} # 定义Web服务器的外部访问URL单机版通常是localhost配置Executor单机模式下在同一进程# 执行器配置 executor.port12321 # Executor的RPC端口 azkaban.executorselector.filtersStaticRemainingFlowSize # 执行器选择策略配置邮件报警可选但重要 工作流成功或失败时发送邮件通知非常实用。你需要一个SMTP服务器如公司邮箱或QQ邮箱的SMTP服务。# 邮件服务器配置 mail.senderyour_emailexample.com mail.hostsmtp.example.com # SMTP服务器地址 mail.useryour_emailexample.com mail.passwordyour_smtp_password # 可能是授权码而非登录密码 mail.tlstrue # 根据SMTP服务器要求启用 job.failure.emailreceiverexample.com # 默认的失败通知接收邮箱 job.success.emailreceiverexample.com # 默认的成功通知接收邮箱用户管理配置默认使用简单XML文件管理 单机版默认使用conf/azkaban-users.xml文件管理用户。确保以下配置存在user.manager.classazkaban.user.XmlUserManager user.manager.xml.fileconf/azkaban-users.xml4.2 配置用户文件azkaban-users.xml编辑conf/azkaban-users.xml定义可以登录Web UI的用户。密码是明文生产环境需改用LDAP等角色定义了权限admin拥有所有权限。azkaban-users user usernameadmin passwordadmin rolesadmin groupsazkaban / user usernamedata_engineer passwordengineer123 rolesmetrics,execute / role nameadmin permissionsADMIN / role namemetrics permissionsMETRICS / role nameexecute permissionsEXECUTE / /azkaban-users这里创建了两个用户admin密码admin全权限和data_engineer密码engineer123仅能查看指标和执行任务。4.3 配置日志输出log4j.properties日志对于排查问题至关重要。你可以根据需要调整conf/log4j.properties文件例如修改日志级别、输出格式和文件路径。默认配置通常已足够用于初步调试。log4j.rootLoggerINFO, Console, DailyFile log4j.appender.DailyFileorg.apache.log4j.DailyRollingFileAppender log4j.appender.DailyFile.Filelogs/azkaban.log # 日志文件路径5. 启动、验证与基本操作完成配置后就可以启动Azkaban单机服务了。5.1 启动与停止服务进入Azkaban的安装目录cd /opt/azkaban启动服务./bin/start-solo.sh这个脚本会在后台启动Jetty服务器。你可以查看启动日志来确认是否成功tail -f logs/azkaban-webserver.log当看到类似“Started SelectChannelConnector0.0.0.0:8081”和“Azkaban Web Server started on port 8081”的日志时说明启动成功。停止服务使用./bin/shutdown-solo.sh5.2 访问Web UI并验证打开浏览器访问http://你的服务器IP:8081本地则为http://localhost:8081。使用在azkaban-users.xml中配置的用户名和密码登录例如admin/admin。登录后你应该能看到Azkaban的主仪表盘。可以点击导航栏的“Projects”来管理项目。5.3 创建并运行第一个工作流这是验证安装是否完全成功的关键一步。创建项目在Web UI中点击“Create Project”输入项目名称如HelloAzkaban和描述然后点击“Create”。准备工作流文件在本地创建一个临时目录准备两个文件hello.job这是一个最简单的Shell任务。# hello.job typecommand commandecho Hello, Azkaban! The time is $(date)basic.flow定义一个包含一个任务的工作流。# basic.flow nodes: - name: hello_task type: command config: command: echo Hello from Flow!打包与上传将这两个文件打包成ZIP压缩包注意必须直接打包文件而不是包含它们的文件夹。在Azkaban项目页面点击“Upload”选择这个ZIP包上传。执行工作流上传成功后点击工作流名称“basic”然后点击右上角的“Execute Flow”。在弹出窗口中你可以配置执行参数这里保持默认点击“Execute”。查看结果页面会跳转到本次执行的详情页。你可以看到任务的状态从“准备中”变为“运行中”最后变为“成功”。点击“hello_task”的“Details”或“Logs”可以查看任务执行的标准输出日志里面应该有你定义的echo语句输出。如果能看到“Hello, Azkaban!”或“Hello from Flow!”的输出并且状态为“SUCCEEDED”那么恭喜你Azkaban单机版已经成功安装并运行起来了6. 常见问题与深度排查指南在实际安装和初期使用中你可能会遇到一些典型问题。以下是一些常见问题的排查思路和解决方法。6.1 服务启动失败问题现象执行./bin/start-solo.sh后很快退出或者logs/azkaban-webserver.log中出现错误日志。排查步骤检查Java环境首先确认java -version和echo $JAVA_HOME输出正确。Azkaban启动脚本对JAVA_HOME非常敏感。检查端口占用Azkaban默认使用8081端口。使用netstat -tlnp | grep 8081或lsof -i:8081检查端口是否被其他进程占用。如果被占用可以在azkaban.properties中修改jetty.port。检查数据库连接如果使用MySQL这是最常见的启动失败原因。确认MySQL服务正在运行sudo systemctl status mysql。检查azkaban.properties中的数据库连接参数主机、端口、库名、用户名、密码是否完全正确。特别注意密码中的特殊字符是否需要转义。手动测试连接mysql -u azkaban -p -h localhost azkaban输入密码看能否登录。检查MySQL是否允许localhost连接。有时127.0.0.1和localhost在MySQL权限中被视为不同主机。可以尝试将配置中的localhost改为127.0.0.1或者在MySQL中同时授予azkaban127.0.0.1的权限。检查配置文件语法azkaban.properties和XML文件对格式敏感。确保没有多余的空格尤其是行末、使用了正确的等号、属性名拼写正确。可以尝试用cat -A命令查看文件检查是否有不可见字符。6.2 Web UI无法访问或登录失败问题现象浏览器无法打开页面或者登录时提示无效用户。排查步骤防火墙/SELinux如果是在云服务器或开启了防火墙的本地机器确保8081端口已开放。对于Ubuntu可以使用sudo ufw allow 8081/tcp。对于CentOS可以使用sudo firewall-cmd --permanent --add-port8081/tcp sudo firewall-cmd --reload。同时检查SELinux是否处于 enforcing 模式并阻止了访问可临时设置为permissive模式测试sudo setenforce 0。服务未成功启动再次检查logs/azkaban-webserver.log确认是否有启动成功的最终日志。有时Jetty启动较慢稍等片刻再刷新页面。用户认证失败确认conf/azkaban-users.xml文件格式正确且已随服务启动被加载修改此文件后需要重启Azkaban服务。检查登录时输入的用户名和密码是否与XML文件中定义的完全一致大小写敏感。查看logs/azkaban-webserver.log搜索“Login”或“user”关键词看是否有相关的错误或认证日志。6.3 工作流执行失败问题现象工作流上传成功但执行后任务状态为“FAILED”。排查步骤查看执行日志这是最直接的排错手段。在Azkaban UI中进入失败的执行实例点击失败的任务查看“Logs”。日志通常会给出明确的错误原因例如“command not found”命令未找到或权限错误。检查任务类型和命令对于typecommand的任务Azkaban会在其自身的进程空间执行命令。确保你写的命令如echo,python,bash脚本路径在Azkaban运行用户的环境下是存在的且可执行的。可以使用type command来验证。路径问题如果命令中使用了相对路径这个路径是相对于Azkaban执行器的工作目录的通常不是项目上传的目录。最佳实践是使用绝对路径或者将依赖的脚本/资源文件一并打包到ZIP中Azkaban会解压到临时目录你可以通过${job.working.dir}来引用这个目录。权限问题Azkaban执行器通常以启动它的系统用户身份运行命令。如果命令需要读写某些文件或目录请确保该用户拥有相应的权限。例如如果你试图写入/tmp以外的系统目录可能会因权限不足而失败。资源限制检查服务器内存和CPU是否充足。长时间运行或内存消耗大的任务可能导致执行器进程被终止。可以在.job文件中设置内存限制但单机版资源管理能力有限。6.4 数据库相关疑难杂症问题现象服务启动时报数据库连接错误或运行一段时间后出现数据库错误。排查与解决字符集问题如果日志中出现中文乱码或提示不支持的字符集请确保MySQL数据库创建时指定了utf8mb4字符集如2.2节所示。Azkaban的表默认会继承数据库的字符集。时区问题Azkaban会将时间戳存储到数据库。确保MySQL服务器的时区设置与运行Azkaban的机器时区一致以避免调度时间出现偏差。可以在MySQL中执行SELECT global.time_zone, session.time_zone;查看。连接数耗尽在长时间运行或高并发测试后可能出现“Too many connections”错误。可以适当增加azkaban.properties中的mysql.numconnections值同时也需要调整MySQL自身的max_connections参数。数据清理Azkaban会积累大量的执行历史记录可能导致数据库膨胀。Azkaban内置了清理作业但需要配置。在生产环境中规划定期的历史数据清理策略如只保留30天数据是必要的。7. 生产环境考量与进阶配置单机版适合学习和测试但若想用于更稳定的场景甚至为小团队提供服务就需要进行一些增强配置。7.1 使用独立的MySQL数据库如前所述这是从“玩具”走向“工具”的第一步。除了安装MySQL你还需要初始化Azkaban的表结构。Azkaban安装包的sql目录下提供了创建脚本cd /opt/azkaban mysql -u azkaban -p azkaban sql/create-all-sql-3.90.0.sql # 请匹配你的版本号执行此脚本后再启动Azkaban它就会自动连接到MySQL并使用这些表。7.2 启用SSL加密HTTPS访问在Web UI中传输密码和敏感信息时使用HTTPS是基本的安全要求。生成或获取SSL证书和私钥例如使用Let‘s Encrypt或自签名证书。在azkaban.properties中配置jetty.ssl.port8443 # HTTPS端口 jetty.ssl.keystore/path/to/your/keystore jetty.ssl.passwordkeystore_password jetty.ssl.keypasswordkey_password jetty.ssl.truststore/path/to/your/truststore jetty.ssl.trustpasswordtruststore_password同时将azkaban.webserver.url改为https://your-hostname:8443。重启Azkaban后即可通过HTTPS访问。7.3 配置插件扩展功能Azkaban的强大之处在于其插件体系。将插件JAR包放入plugins目录下的相应子目录即可启用。邮件插件email通常已内置配置azkaban.properties中的邮件参数即可。HDFS查看器插件允许在UI中直接查看HDFS上的任务日志。需要将插件JAR包放入plugins/jobtype目录并配置HDFS相关参数。条件工作流插件允许基于之前任务的输出状态或参数来动态决定执行路径。用户自定义通知插件可以集成企业微信、钉钉、Slack等通知渠道。安装插件后通常需要在plugins目录下创建对应的配置文件并重启Azkaban服务。7.4 日志与监控日志聚合将logs/azkaban-webserver.log和logs/azkaban-execserver.log单机版可能合并接入ELKElasticsearch, Logstash, Kibana或类似日志平台便于集中查询和分析。指标监控Azkaban内置了Metrics机制可以通过JMX或HTTP端点/metrics暴露运行指标如队列中的任务数、执行成功/失败率等。可以将这些指标接入Prometheus和Grafana建立监控仪表盘。定期备份定期备份MySQL中的azkaban数据库。这是恢复服务的最重要保障。7.5 从单机版迁移到多执行器模式当单机版成为性能瓶颈如并发任务太多时就需要考虑拆分为独立的Web Server和多个Executor Server的集群模式。这涉及到更复杂的配置包括单独部署Azkaban Web Server和Azkaban Executor Server。配置数据库让Web Server和Executor都能访问。在Web Server的配置中指定Executor的地址。可能需要配置共享存储如HDFS或NFS来让Web Server和Executor都能访问项目文件。这个过程需要详细的规划建议参考Azkaban官方文档的集群部署部分。
返回列表