1import ../make-test.nix ({...}: {
2 nodes = {
3 namenode = {pkgs, ...}: {
4 services.hadoop = {
5 package = pkgs.hadoop_3_1;
6 hdfs.namenode.enabled = true;
7 coreSite = {
8 "fs.defaultFS" = "hdfs://namenode:8020";
9 };
10 hdfsSite = {
11 "dfs.replication" = 1;
12 "dfs.namenode.rpc-bind-host" = "0.0.0.0";
13 "dfs.namenode.http-bind-host" = "0.0.0.0";
14 };
15 };
16 networking.firewall.allowedTCPPorts = [
17 9870 # namenode.http-address
18 8020 # namenode.rpc-address
19 ];
20 };
21 datanode = {pkgs, ...}: {
22 services.hadoop = {
23 package = pkgs.hadoop_3_1;
24 hdfs.datanode.enabled = true;
25 coreSite = {
26 "fs.defaultFS" = "hdfs://namenode:8020";
27 };
28 };
29 networking.firewall.allowedTCPPorts = [
30 9864 # datanode.http.address
31 9866 # datanode.address
32 9867 # datanode.ipc.address
33 ];
34 };
35 };
36
37 testScript = ''
38 startAll
39
40 $namenode->waitForUnit("hdfs-namenode");
41 $namenode->waitForUnit("network.target");
42 $namenode->waitForOpenPort(8020);
43 $namenode->waitForOpenPort(9870);
44
45 $datanode->waitForUnit("hdfs-datanode");
46 $datanode->waitForUnit("network.target");
47 $datanode->waitForOpenPort(9864);
48 $datanode->waitForOpenPort(9866);
49 $datanode->waitForOpenPort(9867);
50
51 $namenode->succeed("curl http://namenode:9870");
52 $datanode->succeed("curl http://datanode:9864");
53 '';
54})