at master 3.1 kB view raw
1# Test a minimal HDFS cluster with no HA 2import ../make-test-python.nix ( 3 { package, lib, ... }: 4 { 5 name = "hadoop-hdfs"; 6 7 nodes = 8 let 9 coreSite = { 10 "fs.defaultFS" = "hdfs://namenode:8020"; 11 "hadoop.proxyuser.httpfs.groups" = "*"; 12 "hadoop.proxyuser.httpfs.hosts" = "*"; 13 }; 14 in 15 { 16 namenode = 17 { pkgs, ... }: 18 { 19 services.hadoop = { 20 inherit package; 21 hdfs = { 22 namenode = { 23 enable = true; 24 openFirewall = true; 25 formatOnInit = true; 26 }; 27 httpfs = { 28 # The NixOS hadoop module only support webHDFS on 3.3 and newer 29 enable = lib.mkIf (lib.versionAtLeast package.version "3.3") true; 30 openFirewall = true; 31 }; 32 }; 33 inherit coreSite; 34 }; 35 }; 36 datanode = 37 { pkgs, ... }: 38 { 39 virtualisation.diskSize = 4096; 40 services.hadoop = { 41 inherit package; 42 hdfs.datanode = { 43 enable = true; 44 openFirewall = true; 45 dataDirs = [ 46 { 47 type = "DISK"; 48 path = "/tmp/dn1"; 49 } 50 ]; 51 }; 52 inherit coreSite; 53 }; 54 }; 55 }; 56 57 testScript = '' 58 start_all() 59 60 namenode.wait_for_unit("hdfs-namenode") 61 namenode.wait_for_unit("network.target") 62 namenode.wait_for_open_port(8020) 63 namenode.succeed("systemd-cat ss -tulpne") 64 namenode.succeed("systemd-cat cat /etc/hadoop*/hdfs-site.xml") 65 namenode.wait_for_open_port(9870) 66 67 datanode.wait_for_unit("hdfs-datanode") 68 datanode.wait_for_unit("network.target") 69 '' 70 + ( 71 if lib.versionAtLeast package.version "3" then 72 '' 73 datanode.wait_for_open_port(9864) 74 datanode.wait_for_open_port(9866) 75 datanode.wait_for_open_port(9867) 76 77 datanode.succeed("curl -f http://datanode:9864") 78 '' 79 else 80 '' 81 datanode.wait_for_open_port(50075) 82 datanode.wait_for_open_port(50010) 83 datanode.wait_for_open_port(50020) 84 85 datanode.succeed("curl -f http://datanode:50075") 86 '' 87 ) 88 + '' 89 namenode.succeed("curl -f http://namenode:9870") 90 91 datanode.succeed("sudo -u hdfs hdfs dfsadmin -safemode wait") 92 datanode.succeed("echo testfilecontents | sudo -u hdfs hdfs dfs -put - /testfile") 93 assert "testfilecontents" in datanode.succeed("sudo -u hdfs hdfs dfs -cat /testfile") 94 95 '' 96 + lib.optionalString (lib.versionAtLeast package.version "3.3") '' 97 namenode.wait_for_unit("hdfs-httpfs") 98 namenode.wait_for_open_port(14000) 99 assert "testfilecontents" in datanode.succeed("curl -f \"http://namenode:14000/webhdfs/v1/testfile?user.name=hdfs&op=OPEN\" 2>&1") 100 ''; 101 } 102)