2021-11-02 11:59:58 +05:30
|
|
|
# Test a minimal HDFS cluster with no HA
|
2022-02-27 10:41:05 +05:30
|
|
|
import ../make-test-python.nix (
|
|
|
|
{ package, lib, ... }:
|
|
|
|
{
|
2022-01-08 18:38:34 +05:30
|
|
|
name = "hadoop-hdfs";
|
|
|
|
|
2022-02-27 10:41:05 +05:30
|
|
|
nodes =
|
|
|
|
let
|
|
|
|
coreSite = {
|
|
|
|
"fs.defaultFS" = "hdfs://namenode:8020";
|
|
|
|
"hadoop.proxyuser.httpfs.groups" = "*";
|
|
|
|
"hadoop.proxyuser.httpfs.hosts" = "*";
|
|
|
|
};
|
|
|
|
in
|
|
|
|
{
|
2022-01-08 18:38:34 +05:30
|
|
|
namenode =
|
|
|
|
{ pkgs, ... }:
|
|
|
|
{
|
2018-05-20 21:09:31 -04:00
|
|
|
services.hadoop = {
|
2022-01-08 18:38:34 +05:30
|
|
|
inherit package;
|
2021-11-02 18:34:04 +05:30
|
|
|
hdfs = {
|
|
|
|
namenode = {
|
2021-11-02 21:46:48 +05:30
|
|
|
enable = true;
|
2022-01-08 16:19:15 +05:30
|
|
|
openFirewall = true;
|
2021-11-02 18:34:04 +05:30
|
|
|
formatOnInit = true;
|
2024-12-10 20:26:33 +01:00
|
|
|
};
|
2022-01-08 16:19:15 +05:30
|
|
|
httpfs = {
|
2022-02-27 10:41:05 +05:30
|
|
|
# The NixOS hadoop module only support webHDFS on 3.3 and newer
|
2023-04-30 11:26:16 -03:00
|
|
|
enable = lib.mkIf (lib.versionAtLeast package.version "3.3") true;
|
2022-01-08 16:19:15 +05:30
|
|
|
openFirewall = true;
|
2024-12-10 20:26:33 +01:00
|
|
|
};
|
|
|
|
};
|
2022-02-27 10:41:05 +05:30
|
|
|
inherit coreSite;
|
2024-12-10 20:26:33 +01:00
|
|
|
};
|
2021-11-02 18:34:04 +05:30
|
|
|
};
|
2022-01-08 16:19:15 +05:30
|
|
|
datanode =
|
|
|
|
{ pkgs, ... }:
|
2024-12-10 20:26:33 +01:00
|
|
|
{
|
2024-12-13 23:20:27 +05:30
|
|
|
virtualisation.diskSize = 4096;
|
2022-02-27 10:41:05 +05:30
|
|
|
services.hadoop = {
|
2023-04-30 11:26:16 -03:00
|
|
|
inherit package;
|
|
|
|
hdfs.datanode = {
|
|
|
|
enable = true;
|
2022-01-08 16:19:15 +05:30
|
|
|
openFirewall = true;
|
2022-03-02 12:50:01 +05:30
|
|
|
dataDirs = [
|
2024-12-10 20:26:33 +01:00
|
|
|
{
|
2022-03-02 12:50:01 +05:30
|
|
|
type = "DISK";
|
|
|
|
path = "/tmp/dn1";
|
2024-12-10 20:26:33 +01:00
|
|
|
}
|
|
|
|
];
|
|
|
|
};
|
2022-02-27 10:41:05 +05:30
|
|
|
inherit coreSite;
|
2024-12-10 20:26:33 +01:00
|
|
|
};
|
2022-01-08 16:19:15 +05:30
|
|
|
};
|
2018-05-20 21:09:31 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
testScript =
|
|
|
|
''
|
2019-12-16 21:43:19 +01:00
|
|
|
start_all()
|
2018-05-20 21:09:31 -04:00
|
|
|
|
2019-12-16 21:43:19 +01:00
|
|
|
namenode.wait_for_unit("hdfs-namenode")
|
|
|
|
namenode.wait_for_unit("network.target")
|
|
|
|
namenode.wait_for_open_port(8020)
|
2023-11-07 19:57:23 +03:00
|
|
|
namenode.succeed("systemd-cat ss -tulpne")
|
|
|
|
namenode.succeed("systemd-cat cat /etc/hadoop*/hdfs-site.xml")
|
2019-12-16 21:43:19 +01:00
|
|
|
namenode.wait_for_open_port(9870)
|
2018-05-20 21:09:31 -04:00
|
|
|
|
2019-12-16 21:43:19 +01:00
|
|
|
datanode.wait_for_unit("hdfs-datanode")
|
|
|
|
datanode.wait_for_unit("network.target")
|
2023-04-30 11:26:16 -03:00
|
|
|
''
|
|
|
|
+ (
|
|
|
|
if lib.versionAtLeast package.version "3" then
|
|
|
|
''
|
2019-12-16 21:43:19 +01:00
|
|
|
datanode.wait_for_open_port(9864)
|
|
|
|
datanode.wait_for_open_port(9866)
|
|
|
|
datanode.wait_for_open_port(9867)
|
2018-05-20 21:09:31 -04:00
|
|
|
|
2020-09-16 10:01:10 -07:00
|
|
|
datanode.succeed("curl -f http://datanode:9864")
|
2022-02-27 10:41:05 +05:30
|
|
|
''
|
|
|
|
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")
|
2021-11-02 11:59:58 +05:30
|
|
|
|
|
|
|
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")
|
2021-11-02 18:34:04 +05:30
|
|
|
|
2023-04-30 11:26:16 -03:00
|
|
|
''
|
|
|
|
+ lib.optionalString (lib.versionAtLeast package.version "3.3") ''
|
2021-11-02 18:34:04 +05:30
|
|
|
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")
|
2018-05-20 21:09:31 -04:00
|
|
|
'';
|
|
|
|
}
|
|
|
|
)
|