2022-05-07 12:30:04 +00:00
|
|
|
# Test a minimal hbase cluster
|
|
|
|
{ pkgs, ... }:
|
|
|
|
import ../make-test-python.nix ({ hadoop ? pkgs.hadoop, hbase ? pkgs.hbase, ... }:
|
|
|
|
with pkgs.lib;
|
|
|
|
{
|
|
|
|
name = "hadoop-hbase";
|
|
|
|
|
|
|
|
nodes = let
|
|
|
|
coreSite = {
|
|
|
|
"fs.defaultFS" = "hdfs://namenode:8020";
|
|
|
|
};
|
|
|
|
defOpts = {
|
|
|
|
enable = true;
|
|
|
|
openFirewall = true;
|
|
|
|
};
|
|
|
|
zookeeperQuorum = "zookeeper";
|
2022-08-07 18:41:00 +00:00
|
|
|
in {
|
2022-05-07 12:30:04 +00:00
|
|
|
zookeeper = { ... }: {
|
|
|
|
services.zookeeper.enable = true;
|
|
|
|
networking.firewall.allowedTCPPorts = [ 2181 ];
|
|
|
|
};
|
|
|
|
namenode = { ... }: {
|
|
|
|
services.hadoop = {
|
|
|
|
hdfs = {
|
|
|
|
namenode = defOpts // { formatOnInit = true; };
|
|
|
|
};
|
|
|
|
inherit coreSite;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
datanode = { ... }: {
|
|
|
|
virtualisation.diskSize = 8192;
|
|
|
|
services.hadoop = {
|
|
|
|
hdfs.datanode = defOpts;
|
|
|
|
inherit coreSite;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
master = { ... }:{
|
|
|
|
services.hadoop = {
|
|
|
|
inherit coreSite;
|
|
|
|
hbase = {
|
|
|
|
inherit zookeeperQuorum;
|
|
|
|
master = defOpts // { initHDFS = true; };
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
regionserver = { ... }:{
|
|
|
|
services.hadoop = {
|
|
|
|
inherit coreSite;
|
|
|
|
hbase = {
|
|
|
|
inherit zookeeperQuorum;
|
|
|
|
regionServer = defOpts;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
2023-02-11 14:17:13 +00:00
|
|
|
thrift = { ... }:{
|
|
|
|
services.hadoop = {
|
|
|
|
inherit coreSite;
|
|
|
|
hbase = {
|
|
|
|
inherit zookeeperQuorum;
|
|
|
|
thrift = defOpts;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
rest = { ... }:{
|
|
|
|
services.hadoop = {
|
|
|
|
inherit coreSite;
|
|
|
|
hbase = {
|
|
|
|
inherit zookeeperQuorum;
|
|
|
|
rest = defOpts;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
2022-05-07 12:30:04 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
|
|
|
start_all()
|
|
|
|
|
|
|
|
# wait for HDFS cluster
|
|
|
|
namenode.wait_for_unit("hdfs-namenode")
|
|
|
|
namenode.wait_for_unit("network.target")
|
|
|
|
namenode.wait_for_open_port(8020)
|
|
|
|
namenode.wait_for_open_port(9870)
|
|
|
|
datanode.wait_for_unit("hdfs-datanode")
|
|
|
|
datanode.wait_for_unit("network.target")
|
|
|
|
datanode.wait_for_open_port(9864)
|
|
|
|
datanode.wait_for_open_port(9866)
|
|
|
|
datanode.wait_for_open_port(9867)
|
|
|
|
|
|
|
|
# wait for ZK
|
|
|
|
zookeeper.wait_for_unit("zookeeper")
|
|
|
|
zookeeper.wait_for_open_port(2181)
|
|
|
|
|
|
|
|
# wait for HBase to start up
|
|
|
|
master.wait_for_unit("hbase-master")
|
|
|
|
regionserver.wait_for_unit("hbase-regionserver")
|
|
|
|
|
|
|
|
assert "1 active master, 0 backup masters, 1 servers" in master.succeed("echo status | HADOOP_USER_NAME=hbase hbase shell -n")
|
|
|
|
regionserver.wait_until_succeeds("echo \"create 't1','f1'\" | HADOOP_USER_NAME=hbase hbase shell -n")
|
|
|
|
assert "NAME => 'f1'" in regionserver.succeed("echo \"describe 't1'\" | HADOOP_USER_NAME=hbase hbase shell -n")
|
2023-02-11 14:17:13 +00:00
|
|
|
|
|
|
|
rest.wait_for_open_port(8080)
|
|
|
|
assert "${hbase.version}" in regionserver.succeed("curl http://rest:8080/version/cluster")
|
|
|
|
|
|
|
|
thrift.wait_for_open_port(9090)
|
2022-05-07 12:30:04 +00:00
|
|
|
'';
|
2023-02-11 14:17:13 +00:00
|
|
|
|
|
|
|
meta.maintainers = with maintainers; [ illustris ];
|
2022-05-07 12:30:04 +00:00
|
|
|
})
|