1{ config, lib, pkgs, ...}:
2let
3 cfg = config.services.hadoop;
4 hadoopConf = import ./conf.nix { hadoop = cfg; pkgs = pkgs; };
5in
6with lib;
7{
8 options.services.hadoop.yarn = {
9 resourcemanager.enabled = mkOption {
10 type = types.bool;
11 default = false;
12 description = ''
13 Whether to run the Hadoop YARN ResourceManager
14 '';
15 };
16 nodemanager.enabled = mkOption {
17 type = types.bool;
18 default = false;
19 description = ''
20 Whether to run the Hadoop YARN NodeManager
21 '';
22 };
23 };
24
25 config = mkMerge [
26 (mkIf (
27 cfg.yarn.resourcemanager.enabled || cfg.yarn.nodemanager.enabled
28 ) {
29
30 users.users.yarn = {
31 description = "Hadoop YARN user";
32 group = "hadoop";
33 uid = config.ids.uids.yarn;
34 };
35 })
36
37 (mkIf cfg.yarn.resourcemanager.enabled {
38 systemd.services."yarn-resourcemanager" = {
39 description = "Hadoop YARN ResourceManager";
40 wantedBy = [ "multi-user.target" ];
41
42 environment = {
43 HADOOP_HOME = "${cfg.package}";
44 };
45
46 serviceConfig = {
47 User = "yarn";
48 SyslogIdentifier = "yarn-resourcemanager";
49 ExecStart = "${cfg.package}/bin/yarn --config ${hadoopConf} " +
50 " resourcemanager";
51 };
52 };
53 })
54
55 (mkIf cfg.yarn.nodemanager.enabled {
56 systemd.services."yarn-nodemanager" = {
57 description = "Hadoop YARN NodeManager";
58 wantedBy = [ "multi-user.target" ];
59
60 environment = {
61 HADOOP_HOME = "${cfg.package}";
62 };
63
64 serviceConfig = {
65 User = "yarn";
66 SyslogIdentifier = "yarn-nodemanager";
67 ExecStart = "${cfg.package}/bin/yarn --config ${hadoopConf} " +
68 " nodemanager";
69 };
70 };
71 })
72
73 ];
74}