@ -1,149 +1,151 @@
# This test is very comprehensive. It tests whether all hadoop services work well with each other.
# Run this when updating the Hadoop package or making significant changes to the hadoop module.
# For a more basic test, see hdfs.nix and yarn.nix
import ../make-test-python.nix ( { pkgs , . . . }: {
import ../make-test-python.nix ( { package , . . . }: {
name = " h a d o o p - c o m b i n e d " ;
nodes = let
package = pkgs . hadoop ;
coreSite = {
" f s . d e f a u l t F S " = " h d f s : / / n s 1 " ;
} ;
hdfsSite = {
" d f s . n a m e n o d e . r p c - b i n d - h o s t " = " 0 . 0 . 0 . 0 " ;
" d f s . n a m e n o d e . h t t p - b i n d - h o s t " = " 0 . 0 . 0 . 0 " ;
" d f s . n a m e n o d e . s e r v i c e r p c - b i n d - h o s t " = " 0 . 0 . 0 . 0 " ;
# HA Quorum Journal Manager configuration
" d f s . n a m e s e r v i c e s " = " n s 1 " ;
" d f s . h a . n a m e n o d e s . n s 1 " = " n n 1 , n n 2 " ;
" d f s . n a m e n o d e . s h a r e d . e d i t s . d i r . n s 1 . n n 1 " = " q j o u r n a l : / / j n 1 : 8 4 8 5 ; j n 2 : 8 4 8 5 ; j n 3 : 8 4 8 5 / n s 1 " ;
" d f s . n a m e n o d e . s h a r e d . e d i t s . d i r . n s 1 . n n 2 " = " q j o u r n a l : / / j n 1 : 8 4 8 5 ; j n 2 : 8 4 8 5 ; j n 3 : 8 4 8 5 / n s 1 " ;
" d f s . n a m e n o d e . r p c - a d d r e s s . n s 1 . n n 1 " = " n n 1 : 8 0 2 0 " ;
" d f s . n a m e n o d e . r p c - a d d r e s s . n s 1 . n n 2 " = " n n 2 : 8 0 2 0 " ;
" d f s . n a m e n o d e . s e r v i c e r p c - a d d r e s s . n s 1 . n n 1 " = " n n 1 : 8 0 2 2 " ;
" d f s . n a m e n o d e . s e r v i c e r p c - a d d r e s s . n s 1 . n n 2 " = " n n 2 : 8 0 2 2 " ;
" d f s . n a m e n o d e . h t t p - a d d r e s s . n s 1 . n n 1 " = " n n 1 : 9 8 7 0 " ;
" d f s . n a m e n o d e . h t t p - a d d r e s s . n s 1 . n n 2 " = " n n 2 : 9 8 7 0 " ;
# Automatic failover configuration
" d f s . c l i e n t . f a i l o v e r . p r o x y . p r o v i d e r . n s 1 " = " o r g . a p a c h e . h a d o o p . h d f s . s e r v e r . n a m e n o d e . h a . C o n f i g u r e d F a i l o v e r P r o x y P r o v i d e r " ;
" d f s . h a . a u t o m a t i c - f a i l o v e r . e n a b l e d . n s 1 " = " t r u e " ;
" d f s . h a . f e n c i n g . m e t h o d s " = " s h e l l ( t r u e ) " ;
" h a . z o o k e e p e r . q u o r u m " = " z k 1 : 2 1 8 1 " ;
} ;
yarnSiteHA = {
" y a r n . r e s o u r c e m a n a g e r . z k - a d d r e s s " = " z k 1 : 2 1 8 1 " ;
" y a r n . r e s o u r c e m a n a g e r . h a . e n a b l e d " = " t r u e " ;
" y a r n . r e s o u r c e m a n a g e r . h a . r m - i d s " = " r m 1 , r m 2 " ;
" y a r n . r e s o u r c e m a n a g e r . h o s t n a m e . r m 1 " = " r m 1 " ;
" y a r n . r e s o u r c e m a n a g e r . h o s t n a m e . r m 2 " = " r m 2 " ;
" y a r n . r e s o u r c e m a n a g e r . h a . a u t o m a t i c - f a i l o v e r . e n a b l e d " = " t r u e " ;
" y a r n . r e s o u r c e m a n a g e r . c l u s t e r - i d " = " c l u s t e r 1 " ;
# yarn.resourcemanager.webapp.address needs to be defined even though yarn.resourcemanager.hostname is set. This shouldn't be necessary, but there's a bug in
# hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/amfilter/AmFilterInitializer.java:70
# that causes AM containers to fail otherwise.
" y a r n . r e s o u r c e m a n a g e r . w e b a p p . a d d r e s s . r m 1 " = " r m 1 : 8 0 8 8 " ;
" y a r n . r e s o u r c e m a n a g e r . w e b a p p . a d d r e s s . r m 2 " = " r m 2 : 8 0 8 8 " ;
} ;
in {
zk1 = { . . . }: {
services . zookeeper . enable = true ;
networking . firewall . allowedTCPPorts = [ 2181 ] ;
} ;
nodes =
let
coreSite = {
" f s . d e f a u l t F S " = " h d f s : / / n s 1 " ;
} ;
hdfsSite = {
" d f s . n a m e n o d e . r p c - b i n d - h o s t " = " 0 . 0 . 0 . 0 " ;
" d f s . n a m e n o d e . h t t p - b i n d - h o s t " = " 0 . 0 . 0 . 0 " ;
" d f s . n a m e n o d e . s e r v i c e r p c - b i n d - h o s t " = " 0 . 0 . 0 . 0 " ;
# HA Quorum Journal Manager configuration
" d f s . n a m e s e r v i c e s " = " n s 1 " ;
" d f s . h a . n a m e n o d e s . n s 1 " = " n n 1 , n n 2 " ;
" d f s . n a m e n o d e . s h a r e d . e d i t s . d i r . n s 1 . n n 1 " = " q j o u r n a l : / / j n 1 : 8 4 8 5 ; j n 2 : 8 4 8 5 ; j n 3 : 8 4 8 5 / n s 1 " ;
" d f s . n a m e n o d e . s h a r e d . e d i t s . d i r . n s 1 . n n 2 " = " q j o u r n a l : / / j n 1 : 8 4 8 5 ; j n 2 : 8 4 8 5 ; j n 3 : 8 4 8 5 / n s 1 " ;
" d f s . n a m e n o d e . r p c - a d d r e s s . n s 1 . n n 1 " = " n n 1 : 8 0 2 0 " ;
" d f s . n a m e n o d e . r p c - a d d r e s s . n s 1 . n n 2 " = " n n 2 : 8 0 2 0 " ;
" d f s . n a m e n o d e . s e r v i c e r p c - a d d r e s s . n s 1 . n n 1 " = " n n 1 : 8 0 2 2 " ;
" d f s . n a m e n o d e . s e r v i c e r p c - a d d r e s s . n s 1 . n n 2 " = " n n 2 : 8 0 2 2 " ;
" d f s . n a m e n o d e . h t t p - a d d r e s s . n s 1 . n n 1 " = " n n 1 : 9 8 7 0 " ;
" d f s . n a m e n o d e . h t t p - a d d r e s s . n s 1 . n n 2 " = " n n 2 : 9 8 7 0 " ;
# Automatic failover configuration
" d f s . c l i e n t . f a i l o v e r . p r o x y . p r o v i d e r . n s 1 " = " o r g . a p a c h e . h a d o o p . h d f s . s e r v e r . n a m e n o d e . h a . C o n f i g u r e d F a i l o v e r P r o x y P r o v i d e r " ;
" d f s . h a . a u t o m a t i c - f a i l o v e r . e n a b l e d . n s 1 " = " t r u e " ;
" d f s . h a . f e n c i n g . m e t h o d s " = " s h e l l ( t r u e ) " ;
" h a . z o o k e e p e r . q u o r u m " = " z k 1 : 2 1 8 1 " ;
} ;
yarnSiteHA = {
" y a r n . r e s o u r c e m a n a g e r . z k - a d d r e s s " = " z k 1 : 2 1 8 1 " ;
" y a r n . r e s o u r c e m a n a g e r . h a . e n a b l e d " = " t r u e " ;
" y a r n . r e s o u r c e m a n a g e r . h a . r m - i d s " = " r m 1 , r m 2 " ;
" y a r n . r e s o u r c e m a n a g e r . h o s t n a m e . r m 1 " = " r m 1 " ;
" y a r n . r e s o u r c e m a n a g e r . h o s t n a m e . r m 2 " = " r m 2 " ;
" y a r n . r e s o u r c e m a n a g e r . h a . a u t o m a t i c - f a i l o v e r . e n a b l e d " = " t r u e " ;
" y a r n . r e s o u r c e m a n a g e r . c l u s t e r - i d " = " c l u s t e r 1 " ;
# yarn.resourcemanager.webapp.address needs to be defined even though yarn.resourcemanager.hostname is set. This shouldn't be necessary, but there's a bug in
# hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/amfilter/AmFilterInitializer.java:70
# that causes AM containers to fail otherwise.
" y a r n . r e s o u r c e m a n a g e r . w e b a p p . a d d r e s s . r m 1 " = " r m 1 : 8 0 8 8 " ;
" y a r n . r e s o u r c e m a n a g e r . w e b a p p . a d d r e s s . r m 2 " = " r m 2 : 8 0 8 8 " ;
} ;
in
{
zk1 = { . . . }: {
services . zookeeper . enable = true ;
networking . firewall . allowedTCPPorts = [ 2181 ] ;
} ;
# HDFS cluster
nn1 = { pkgs , options , . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . namenode = {
enable = true ;
openFirewall = true ;
# HDFS cluster
nn1 = { . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . namenode = {
enable = true ;
openFirewall = true ;
} ;
hdfs . zkfc . enable = true ;
} ;
hdfs . zkfc . enable = true ;
} ;
} ;
nn2 = { pkgs , options , . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . namenode = {
enable = true ;
openFirewall = true ;
nn2 = { . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . namenode = {
enable = true ;
openFirewall = true ;
} ;
hdfs . zkfc . enable = true ;
} ;
hdfs . zkfc . enable = true ;
} ;
} ;
jn1 = { pkgs , options , . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . journalnode = {
enable = true ;
openFirewall = true ;
jn1 = { . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . journalnode = {
enable = true ;
openFirewall = true ;
} ;
} ;
} ;
} ;
jn2 = { pkgs , options , . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . journalnode = {
enable = true ;
openFirewall = true ;
jn2 = { . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . journalnode = {
enable = true ;
openFirewall = true ;
} ;
} ;
} ;
} ;
jn3 = { pkgs , options , . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . journalnode = {
enable = true ;
openFirewall = true ;
jn3 = { . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . journalnode = {
enable = true ;
openFirewall = true ;
} ;
} ;
} ;
} ;
dn1 = { pkgs , options , . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . datanode = {
enable = true ;
openFirewall = true ;
dn1 = { . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
hdfs . datanode = {
enable = true ;
openFirewall = true ;
} ;
} ;
} ;
} ;
# YARN cluster
rm1 = { pkgs , options , . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
yarnSite = options . services . hadoop . yarnSite . default // yarnSiteHA ;
yarn . resourcemanager = {
enable = true ;
openFirewall = true ;
# YARN cluster
rm1 = { options , . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
yarnSite = options . services . hadoop . yarnSite . default // yarnSiteHA ;
yarn . resourcemanager = {
enable = true ;
openFirewall = true ;
} ;
} ;
} ;
} ;
rm2 = { pkgs , options , . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
yarnSite = options . services . hadoop . yarnSite . default // yarnSiteHA ;
yarn . resourcemanager = {
enable = true ;
openFirewall = true ;
rm2 = { options , . . . }: {
services . hadoop = {
inherit package coreSite hdfsSite ;
yarnSite = options . services . hadoop . yarnSite . default // yarnSiteHA ;
yarn . resourcemanager = {
enable = true ;
openFirewall = true ;
} ;
} ;
} ;
} ;
nm1 = { pkgs , options , . . . }: {
virtualisation . memorySize = 2048 ;
services . hadoop = {
inherit package coreSite hdfsSite ;
yarnSite = options . services . hadoop . yarnSite . default // yarnSiteHA ;
yarn . nodemanager = {
enable = true ;
openFirewall = true ;
nm1 = { options , . . . }: {
virtualisation . memorySize = 2048 ;
services . hadoop = {
inherit package coreSite hdfsSite ;
yarnSite = options . services . hadoop . yarnSite . default // yarnSiteHA ;
yarn . nodemanager = {
enable = true ;
openFirewall = true ;
} ;
} ;
} ;
} ;
} ;
testScript = ''
start_all ( )