ติดตั้ง Azkaban 3.84.14 บน Ubuntu 18.04.5 LTS

Link

อันนี้ติดตั้งแบบ Solo Server

In solo server mode, the DB is embedded H2 and both web server and executor server run in the same process.

The multiple executor mode is for most serious production environment. Its DB should be backed by MySQL instances with master-slave set up. The web server and executor servers should ideally run in different hosts

ติดตั้ง Azkaban 3.84.14 บน Ubuntu 18.04.5 LTS

และลอง ติดตั้ง Azkaban 3.90.0 บน Ubuntu 20.04.6 LTS ได้

แต่ลอง ติดตั้ง Azkaban 4.0.0 บน Ubuntu 20.04.6 LTS ไม่ได้ ติดตอน bin/start-solo.sh แล้ว error No implementation for azkaban.imagemgmt.services.ImageRampupService was bound.

อัพเดทแพกเกจ

sudo apt update

ถ้าเดิมมี ติดตั้ง Java 11 ให้เอาออกก่อน (Uninstall OpenJDK in Ubuntu. Though the Ubuntu environments comes… | by Hirosh Tharaka (BSc.Hons, CTFL) | Medium)

$ sudo apt-get purge --auto-remove openjdk*

ติดตั้ง Java 8

sudo apt install openjdk-8-jdk

ติดตั้ง Hadoop

ถ้าใช้ Hadoop ก็ ติดตั้ง Hadoop in Stand-Alone Mode บน Ubuntu 18.04

ติดตั้ง Azkaban

ดาว์นโหลด Azkaban 3.84.14

git clone https://github.com/phaisarnsut/azkaban3.84.14.git
หรือ
git clone https://github.com/phaisarnsut/azkaban3.90.0.git
$ mv azkaban3.84.14/ azkaban
$ cd azkaban/
$ chmod +x gradlew

Build

แก้ไขไฟล์ azkaban-web-server/build.gradle จาก

distBaseUrl = 'https://nodejs.org/dist'

เป็น

distBaseUrl = 'https://direct.nodejs.org/dist/'
$ ./gradlew distZip
Downloading https://services.gradle.org/distributions/gradle-4.6-all.zip
...

unzip Azkaban solo server

sudo apt install unzip
$ unzip azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.zip

สร้างไฟล์ config

หรือ copy ตัวอย่างมาจาก azkaban-solo-server/src/main/resources/conf/ หรือ azkaban/azkaban-solo-server/src/main/resources/conf at master · azkaban/azkaban · GitHub

$ cd azkaban-solo-server-0.1.0-SNAPSHOT/
$ mkdir conf
$ cd 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=web/
default.timezone.id=America/Los_Angeles
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
database.type=h2
# h2.path=./h2
h2.path=.
# h2.create.tables=true
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081
# Azkaban Executor settings
executor.port=12321
# mail settings
mail.sender=
mail.host=
# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
# enduser -> myazkabanhost:443 -> proxy -> localhost:8081
# when this parameters set then these parameters are used to generate email links.
# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
# azkaban.webserver.external_hostname=myazkabanhost.com
# azkaban.webserver.external_ssl_port=443
# azkaban.webserver.external_port=8081
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes
# Number of executions to be displayed
azkaban.display.execution_page_size=16
azkaban.use.multiple.executors=true
azkaban.executor.runtimeProps.override.eager=false
# Azkaban Ramp Feature Configuration
#Ramp Feature Related
azkaban.ramp.enabled=true
azkaban.ramp.status.polling.enabled=true
azkaban.ramp.status.polling.interval.min=30
azkaban.ramp.status.push.interval.threshold=15
azkaban.ramp.status.pull.interval.threshold=100

สร้างไฟล์ azkaban-users.xml

<azkaban-users>
  <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
  <user password="metrics" roles="metrics" username="metrics"/>

  <role name="admin" permissions="ADMIN"/>
  <role name="metrics" permissions="METRICS"/>
</azkaban-users>

สร้างไฟล์เปล่า global.properties

touch global.properties
cd ..

Start the server

$ cd azkaban-solo-server-0.1.0-SNAPSHOT/
$ pwd
/home/jack/Downloads/azkaban/azkaban-solo-server-0.1.0-SNAPSHOT

Start the solo server:

$ bin/start-solo.sh

ดูว่า start ขึ้นมั๊ย

$ cat soloServerLog_*
เช่น
$ cat soloServerLog__2022-05-05+14:52:27.out

Stop server

$ bin/shutdown-solo.sh

ทดลองเรียกไปที่ http://localhost:8081/

ตัวอย่าง Flow แบบง่าย

สร้างไฟล์ flow20.project

azkaban-flow-version: 2.0

สร้างไฟล์ basic.flow

nodes:
  - name: jobA
    type: command
    config:
      command: echo "This is an echoed text."

ตัวอย่าง Flow แบบมี Dependencies

แก้ไขไฟล์ basic.flow

nodes:
  - name: jobC
    type: noop
    # jobC depends on jobA and jobB
    dependsOn:
      - jobA
      - jobB

  - name: jobA
    type: command
    config:
      command: echo "This is an echoed text."

  - name: jobB
    type: command
    config:
      command: pwd

type: noop คือ A job that takes no parameters and is essentially a null operation. Used for organizing your graph. (Azkaban 3.0 Documentation #builtin-jobtypes)

ตัวอย่าง Flow แบบมี Dependencies เป็น flow

nodes:
  - name: jobC
    type: noop
    dependsOn:
      - embedded_flow

  - name: embedded_flow
    type: flow
    config:
      flow.num.job.threads: 3
    nodes:
      - name: job01
        type: command
        config:
          command: sleep 10

      - name: job02
        type: command
        config:
          command: sleep 10

      - name: job03
        type: command
        config:
          command: sleep 10

      - name: job04
        type: command
        config:
          command: sleep 10

      - name: job05
        type: command
        config:
          command: sleep 10

      - name: job06
        type: command
        config:
          command: sleep 10

กำหนดจำนวน thread ที่ flow.num.job.threads

การสั่งให้ job รันมากกว่า 1 คำสั่ง

ถ้าใส่มากกว่า 1 คำสั่งเข้าไปตรงๆ จะ error เช่น

command: cd /home/jack/; ./run_some_job

ให้ปรับเป็นใส่คำสั่งเรียก shell script แทน เช่น

command: /home/jack/run_some_shell.sh

แล้วใส่คำสั่งใน run_some_shell.sh แทน

cd /home/jack/
./run_some_job