summaryrefslogtreecommitdiffstats
path: root/nixos/tests/hadoop/hdfs.nix
blob: cb51afa42a5362c3ca0a8426b78fbcf044913989 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Test a minimal HDFS cluster with no HA
import ../make-test-python.nix (
  { package, lib, ... }:
  {
    name = "hadoop-${package.version}-hdfs";

    nodes =
      let
        coreSite = {
          "fs.defaultFS" = "hdfs://namenode:8020";
          "hadoop.proxyuser.httpfs.groups" = "*";
          "hadoop.proxyuser.httpfs.hosts" = "*";
        };
      in
      {
        namenode =
          { pkgs, ... }:
          {
            services.hadoop = {
              inherit package;
              hdfs = {
                namenode = {
                  enable = true;
                  openFirewall = true;
                  formatOnInit = true;
                };
                httpfs = {
                  # The NixOS hadoop module only support webHDFS on 3.3 and newer
                  enable = lib.mkIf (lib.versionAtLeast package.version "3.3") true;
                  openFirewall = true;
                };
              };
              inherit coreSite;
            };
          };
        datanode =
          { pkgs, ... }:
          {
            virtualisation.diskSize = 4096;
            services.hadoop = {
              inherit package;
              hdfs.datanode = {
                enable = true;
                openFirewall = true;
                dataDirs = [
                  {
                    type = "DISK";
                    path = "/tmp/dn1";
                  }
                ];
              };
              inherit coreSite;
            };
          };
      };

    testScript = ''
      start_all()

      namenode.wait_for_unit("hdfs-namenode")
      namenode.wait_for_unit("network.target")
      namenode.wait_for_open_port(8020)
      namenode.succeed("systemd-cat ss -tulpne")
      namenode.succeed("systemd-cat cat /etc/hadoop*/hdfs-site.xml")
      namenode.wait_for_open_port(9870)

      datanode.wait_for_unit("hdfs-datanode")
      datanode.wait_for_unit("network.target")
    ''
    + (
      if lib.versionAtLeast package.version "3" then
        ''
          datanode.wait_for_open_port(9864)
          datanode.wait_for_open_port(9866)
          datanode.wait_for_open_port(9867)

          datanode.succeed("curl -f http://datanode:9864")
        ''
      else
        ''
          datanode.wait_for_open_port(50075)
          datanode.wait_for_open_port(50010)
          datanode.wait_for_open_port(50020)

          datanode.succeed("curl -f http://datanode:50075")
        ''
    )
    + ''
      namenode.succeed("curl -f http://namenode:9870")

      datanode.succeed("sudo -u hdfs hdfs dfsadmin -safemode wait")
      datanode.succeed("echo testfilecontents | sudo -u hdfs hdfs dfs -put - /testfile")
      assert "testfilecontents" in datanode.succeed("sudo -u hdfs hdfs dfs -cat /testfile")

    ''
    + lib.optionalString (lib.versionAtLeast package.version "3.3") ''
      namenode.wait_for_unit("hdfs-httpfs")
      namenode.wait_for_open_port(14000)
      assert "testfilecontents" in datanode.succeed("curl -f \"http://namenode:14000/webhdfs/v1/testfile?user.name=hdfs&op=OPEN\" 2>&1")
    '';
  }
)