This is a basic HyperFlow job executor that uses local directory path to read and write files, and Redis (or RabbitMQ/Redis) for communication with the HyperFlow engine.
- Install Node.js 12.x or higher
- Install the executor package:
- Latest version:
npm install -g @hyperflow/job-executor - Specific version:
npm install -g @hyperflow/[email protected] - From master branch:
npm install -g https://github.com/hyperflow-wms/hyperflow-job-executor/archive/master.tar.gz
- Latest version:
Jobs can be run with either of the following commands:
hflow-job-execute <taskId> <redisUrl>, wheretaskIdis a unique job identifier, whileredisUrlis an URL to the Redis server where the actual job command is fetched from. Both parameters are available in HyperFlow functions ascontext.taskIdandcontext.redis_url, respectively.hflow-job-execute <redisUrl> -a -- <taskId>...-- to run multiple jobs sequentially (useful for agglomeration of small jobs).
Jobs can be submitted e.g. using the HyperFlow function k8sCommand. See RemoteJobs example to learn more details.
The AMQP listener can be run with the following command:
hflow-job-listener.js
Note that in order to run an executor following variables must be set with proper values:
RABBIT_HOSTNAMEQUEUE_NAME
More details about those configuration variables are in Configuration chapter.
Use environmental variables to adjust the configuration of services.
HF_VAR_OPT_URL(eg.collector-gateway): provide name under which collector should be accessible (process should be able to call http://{HF_VAR_OPT_URL}:4318/v1/traces')HF_VAR_ENABLE_TRACING(0or1): emit traces, spans, and metrics
The executor creates log files in directory <work_dir>/logs-hf that contain:
- command used to execute the job
stdoutandstderrof the job- metrics (CPU/memory/IO/network usage)
- events (job start/end)
- system information (e.g. hardware configuration)
- all environment variables starting with
HF_LOG_-- a JSON object is logged following conventions from the read-env package
The following environment variables can be used to adjust the behavior of the job executor:
HF_VAR_PROBE_INTERVAL(default2000): time interval (in ms) at which to probe and log metrics.HF_VAR_NUMBER_OF_RETRIES(default1): how many times the job should be re-executed if it returns a non-zero exit code.HF_VAR_BACKOFF_SEED(default10): factor used in calculating the backoff delay between retries.HF_VAR_WAIT_FOR_INPUT_FILES: if set to1, the executor will check if input files exist and wait for them (useful in systems where files are synchronized in an eventually consistent fashion).HF_VAR_FILE_WATCH_NUM_RETRIES(default10): how many times should the executor check for existence of the input files (with backoff waits in between).HF_VAR_WORK_DIR: path to the working directory where the job should be executed. If not set,/work_dirwill be used if exists, otherwise the executor will not change the working directory.HF_VAR_LOG_DIR: path to the directory where log files should be written. If not set,<work dir>/logs-hfwill be used.HF_VAR_LOG_LEVEL(defaultinfo): set logging level (trace,debug,info,warn,error,fatal).HF_VAR_ENABLE_NETHOGS: if set (to any value), logs from nethogs will be written (experimental).HF_VAR_DRY_RUN: (for testing/debugging) if set to1, the executor will immediately return with job exit status0(success).HF_LOG_*: all variables starting withHF_LOG_will be logged in the job log filesRABBIT_HOSTNAME: RabbitMQ instance hostname. Can be supplied with basic auth credentials, for example:username:[email protected]. When no username nor password are specified, default RabbitMQ guest:guest credentials are used. Required in AMQP executor modeQUEUE_NAMEthe name of the queue at which executor will wait for task messages. Required in AMQP executor mode
For quick and dirty developer releases
# Commit your changes
make dev-releaseTo release a proper version:
# Commit your changes
# Use npm version <arg>, to tag your changes and bump npm version
make release