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 };
57
58 testScript = ''
59 start_all()
60
61 # wait for HDFS cluster
62 namenode.wait_for_unit("hdfs-namenode")
63 namenode.wait_for_unit("network.target")
64 namenode.wait_for_open_port(8020)
65 namenode.wait_for_open_port(9870)
66 datanode.wait_for_unit("hdfs-datanode")
67 datanode.wait_for_unit("network.target")
68 datanode.wait_for_open_port(9864)
69 datanode.wait_for_open_port(9866)
70 datanode.wait_for_open_port(9867)
71
72 # wait for ZK
73 zookeeper.wait_for_unit("zookeeper")
74 zookeeper.wait_for_open_port(2181)
75
76 # wait for HBase to start up
77 master.wait_for_unit("hbase-master")
78 regionserver.wait_for_unit("hbase-regionserver")
79
80 assert "1 active master, 0 backup masters, 1 servers" in master.succeed("echo status | HADOOP_USER_NAME=hbase hbase shell -n")
81 regionserver.wait_until_succeeds("echo \"create 't1','f1'\" | HADOOP_USER_NAME=hbase hbase shell -n")
82 assert "NAME => 'f1'" in regionserver.succeed("echo \"describe 't1'\" | HADOOP_USER_NAME=hbase hbase shell -n")
83 '';
84})