at 25.11-pre 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 '' 59 start_all() 60 61 namenode.wait_for_unit("hdfs-namenode") 62 namenode.wait_for_unit("network.target") 63 namenode.wait_for_open_port(8020) 64 namenode.succeed("systemd-cat ss -tulpne") 65 namenode.succeed("systemd-cat cat /etc/hadoop*/hdfs-site.xml") 66 namenode.wait_for_open_port(9870) 67 68 datanode.wait_for_unit("hdfs-datanode") 69 datanode.wait_for_unit("network.target") 70 '' 71 + ( 72 if lib.versionAtLeast package.version "3" then 73 '' 74 datanode.wait_for_open_port(9864) 75 datanode.wait_for_open_port(9866) 76 datanode.wait_for_open_port(9867) 77 78 datanode.succeed("curl -f http://datanode:9864") 79 '' 80 else 81 '' 82 datanode.wait_for_open_port(50075) 83 datanode.wait_for_open_port(50010) 84 datanode.wait_for_open_port(50020) 85 86 datanode.succeed("curl -f http://datanode:50075") 87 '' 88 ) 89 + '' 90 namenode.succeed("curl -f http://namenode:9870") 91 92 datanode.succeed("sudo -u hdfs hdfs dfsadmin -safemode wait") 93 datanode.succeed("echo testfilecontents | sudo -u hdfs hdfs dfs -put - /testfile") 94 assert "testfilecontents" in datanode.succeed("sudo -u hdfs hdfs dfs -cat /testfile") 95 96 '' 97 + lib.optionalString (lib.versionAtLeast package.version "3.3") '' 98 namenode.wait_for_unit("hdfs-httpfs") 99 namenode.wait_for_open_port(14000) 100 assert "testfilecontents" in datanode.succeed("curl -f \"http://namenode:14000/webhdfs/v1/testfile?user.name=hdfs&op=OPEN\" 2>&1") 101 ''; 102 } 103)