1# Test a minimal hbase cluster
2{ pkgs, ... }:
3import ../make-test-python.nix ({ hadoop ? pkgs.hadoop, hbase ? pkgs.hbase, ... }:
4with pkgs.lib;
5{
6 name = "hadoop-hbase";
7
8 nodes = let
9 coreSite = {
10 "fs.defaultFS" = "hdfs://namenode:8020";
11 };
12 defOpts = {
13 enable = true;
14 openFirewall = true;
15 };
16 zookeeperQuorum = "zookeeper";
17 in {
18 zookeeper = { ... }: {
19 services.zookeeper.enable = true;
20 networking.firewall.allowedTCPPorts = [ 2181 ];
21 };
22 namenode = { ... }: {
23 services.hadoop = {
24 hdfs = {
25 namenode = defOpts // { formatOnInit = true; };
26 };
27 inherit coreSite;
28 };
29 };
30 datanode = { ... }: {
31 virtualisation.diskSize = 8192;
32 services.hadoop = {
33 hdfs.datanode = defOpts;
34 inherit coreSite;
35 };
36 };
37
38 master = { ... }:{
39 services.hadoop = {
40 inherit coreSite;
41 hbase = {
42 inherit zookeeperQuorum;
43 master = defOpts // { initHDFS = true; };
44 };
45 };
46 };
47 regionserver = { ... }:{
48 services.hadoop = {
49 inherit coreSite;
50 hbase = {
51 inherit zookeeperQuorum;
52 regionServer = defOpts;
53 };
54 };
55 };
56 thrift = { ... }:{
57 services.hadoop = {
58 inherit coreSite;
59 hbase = {
60 inherit zookeeperQuorum;
61 thrift = defOpts;
62 };
63 };
64 };
65 rest = { ... }:{
66 services.hadoop = {
67 inherit coreSite;
68 hbase = {
69 inherit zookeeperQuorum;
70 rest = defOpts;
71 };
72 };
73 };
74 };
75
76 testScript = ''
77 start_all()
78
79 # wait for HDFS cluster
80 namenode.wait_for_unit("hdfs-namenode")
81 namenode.wait_for_unit("network.target")
82 namenode.wait_for_open_port(8020)
83 namenode.wait_for_open_port(9870)
84 datanode.wait_for_unit("hdfs-datanode")
85 datanode.wait_for_unit("network.target")
86 datanode.wait_for_open_port(9864)
87 datanode.wait_for_open_port(9866)
88 datanode.wait_for_open_port(9867)
89
90 # wait for ZK
91 zookeeper.wait_for_unit("zookeeper")
92 zookeeper.wait_for_open_port(2181)
93
94 # wait for HBase to start up
95 master.wait_for_unit("hbase-master")
96 regionserver.wait_for_unit("hbase-regionserver")
97
98 assert "1 active master, 0 backup masters, 1 servers" in master.succeed("echo status | HADOOP_USER_NAME=hbase hbase shell -n")
99 regionserver.wait_until_succeeds("echo \"create 't1','f1'\" | HADOOP_USER_NAME=hbase hbase shell -n")
100 assert "NAME => 'f1'" in regionserver.succeed("echo \"describe 't1'\" | HADOOP_USER_NAME=hbase hbase shell -n")
101
102 rest.wait_for_open_port(8080)
103 assert "${hbase.version}" in regionserver.succeed("curl http://rest:8080/version/cluster")
104
105 thrift.wait_for_open_port(9090)
106 '';
107
108 meta.maintainers = with maintainers; [ illustris ];
109})