To pile on top of what Evans and Cos said -- the patch
looks like a huge improvement and I would really like
it to get to a point where we can commit the code.

I see that there's now JIRA created -- I'll move further
comments to over there. Before I do -- major kudos
to Michael! This is long overdue!

Thanks,
Roman.

On Wed, Jan 28, 2015 at 7:46 PM, Evans Ye <[email protected]> wrote:
> I took a glance on the patch and saw two huge attractive features you
> introduced
>
> * fine-grand cluster topology layout
> * journal based HA
>
> It would be a huge improvement for our puppet recipes to step ahead and get
> closer to the real world cluster deployment.
> As cos said, it would be great to create a jira and state the features, in
> that way we can help to review, test and get that awesome stuff in:)
>
> 2015-01-28 12:18 GMT+08:00 Konstantin Boudnik <[email protected]>:
>
>> Thanks for picking this up Michael! I think having a way to describe the
>> deployment topology would be very beneficial for all! We had a quick
>> discussion about this during today's meetup and I think Rich and Nate have
>> some pretty cool ideas, so I'd rather let experts to discuss the matter.
>>
>> But from pure users perspective - I would _love_ to have something like
>> this.
>>
>> Do you think you can open JIRA and put the patch there? It would also help
>> to
>> keep the further discussion in a more coherent way...
>>
>> Thanks
>>   Cos
>>
>> On Tue, Jan 27, 2015 at 02:35PM, Michael Weiser wrote:
>> > Hello Nate,
>> > Hi all,
>> >
>> > On Tue, Jan 20, 2015 at 08:34:34PM +0000, Nate DAmico (JIRA) wrote:
>> >
>> > > Nate DAmico commented on BIGTOP-1122:
>> > > We are putting some work in on puppet modules, starting with latest
>> > > 3.x branch.  Hiera work wasn't first on our list, but can look to work
>> > > with you on it during same time.  We are mostly looking at some
>> > > parameter refactoring and minimal changes to support a wider range of
>> > > topologies and setups
>> >
>> > > As Cos suggested we can take conversation to the dev list and we were
>> > > going to setup wiki page with more of param refactoring ideas if need
>> > > be
>> >
>> > I am facing the same problem: We want to employ a different topology and
>> > HA setup than what's currently hardwired into cluster.pp. Also we
>> > already have a puppet 3 infrastructure with heavy use of hiera e.g.
>> > for machine role assignment in place.
>> >
>> > When first looking at the current puppet code I was completely lost how
>> > to adapt cluster.pp for our scenario. It was really hard to get an idea
>> > what is used where and why because everything is set up in cluster.pp
>> > and handed to the modules either via resource parameters or just the
>> > global scope and from there via different variable names on to included
>> > common classes.
>> >
>> > To get a handle on things I started an ad-hoc conversion of modules and
>> > cluster/init.pp to parametrised classes instead of defined resources.
>> > This automagically cleaned up namespacing and scoping and revealed what's
>> > actually needed where. It also gets rid of 90% of the extlookup's. The
>> > remaining 10% I replaced with explicit hiera lookups. Also it revealed
>> > some things that were plain broken before.
>> >
>> > The attached patch is against latest git master HEAD and on my test box
>> > produces exactly the same results as the stock puppet code. (There is
>> > some additional HA setting code in there that's needed for our setup but
>> > doesn't do anything unless activated. I would eventually split that out
>> > into separate additional changes.)
>> >
>> > All the parameter defaulting logic is moved from cluster.pp into hiera's
>> > bigtop/cluster.yaml in concert with a variable lookup hierachy for non-HA
>> > and HA setups orchestrated in site.pp. cluster.pp now mostly contains
>> > node role assignments and inter-module/class/resource dependencies - as
>> > it should, IMO.
>> >
>> > Site specific adjustments are done in some site.yaml that's "in front"
>> > of cluster.yaml in the hiera search path (hierarchy). That way,
>> > cluster.pp would never need changing by a site admin but everything
>> > still remains fully adjustable and overrideable without any need to
>> > touch puppet code. Also, if required, cluster/site.pp can be totally
>> > canned and the modules be used on their own.
>> >
>> > I wouldn't dare say the attached patch is clean in every way but rather
>> > that it shows where that road might lead. To keep the diff small I
>> > didn't much try to preserve the extlookup key names. Rather I used the
>> > internal class variable names which get qualified in hiera using the
>> > module name anyway. So naming of keys is a bit chaotic now (mostly
>> > hadoop_ vs. no prefix).
>> >
>> > But it opens up a load of further oppurtunities:
>> > - node role assigment could be moved to an ENC or into hiera using
>> >   hiera_include() rendering cluster/init.pp virtually redundant
>> > - cluster.yaml can be seriously cleaned up and streamlined
>> > - variable and lookup key names can easily be reviewed and changed to a
>> >   common naming scheme
>> > - because all external variable lookups now are qualified with a scope,
>> >   it's clearly visible what's used where allowing for easy review and
>> >   redesign
>> >
>> > The price to pay is that the patch currently is puppet 3 and hiera only.
>> > As far as I understand it could easily be made puppet 2/3 compatible. I
>> > have no clear idea however how to continue to support non-hiera users.
>> > That's because in module hadoop common logic is pulled in via "include
>> > common_xyz" which must be used in order to allow multiple such includes
>> > from namenode/datanode/... but also makes it impossible to pass
>> > parameters other than via hiera (or the global scope).
>> >
>> > But since the README states that the code is puppet 3 only and puppet 3
>> > by default supports hiera as a drop-in add-on I wonder if that's really
>> > much of an issue?
>> >
>> > Thanks,
>> > --
>> > Michael Weiser                science + computing ag
>> > Senior Systems Engineer       Geschaeftsstelle Duesseldorf
>> >                               Faehrstrasse 1
>> > phone: +49 211 302 708 32     D-40221 Duesseldorf
>> > fax:   +49 211 302 708 50     www.science-computing.de
>> > --
>> > Vorstandsvorsitzender/Chairman of the board of management:
>> > Gerd-Lothar Leonhart
>> > Vorstand/Board of Management:
>> > Dr. Bernd Finkbeiner, Michael Heinrichs, Dr. Arno Steitz
>> > Vorsitzender des Aufsichtsrats/
>> > Chairman of the Supervisory Board:
>> > Philippe Miltin
>> > Sitz/Registered Office: Tuebingen
>> > Registergericht/Registration Court: Stuttgart
>> > Registernummer/Commercial Register No.: HRB 382196
>>
>> > From cdca9ff5988e31ab1d39f97b1b6d059f4a62b450 Mon Sep 17 00:00:00 2001
>> > From: Michael Weiser <[email protected]>
>> > Date: Tue, 27 Jan 2015 14:25:21 +0100
>> > Subject: [PATCH] [BIGTOP-????] puppet: Replace extlookup by hiera, use
>> >  parametrised classes
>> >
>> > Update the puppet code to use self-contained, parametrised classes and
>> proper
>> > scoping. Replace all extlookup calls bei either explicit or automatic
>> hiera
>> > parameter lookups. Implement HA/non-HA alternative via hiera lookup
>> hierarchy.
>> > Replace append_each from bigtop_util by suffix from stdlib.
>> > ---
>> >  bigtop-deploy/puppet/config/site.csv.example       |  28 --
>> >  bigtop-deploy/puppet/hiera.yaml                    |   7 +
>> >  bigtop-deploy/puppet/hieradata/bigtop/cluster.yaml | 123 +++++++
>> >  bigtop-deploy/puppet/hieradata/bigtop/ha.yaml      |   7 +
>> >  bigtop-deploy/puppet/hieradata/bigtop/noha.yaml    |   2 +
>> >  bigtop-deploy/puppet/hieradata/site.yaml           |  32 ++
>> >  bigtop-deploy/puppet/manifests/cluster.pp          | 352
>> ++++-----------------
>> >  bigtop-deploy/puppet/manifests/site.pp             |  24 +-
>> >  .../lib/puppet/parser/functions/append_each.rb     |  22 --
>> >  .../puppet/modules/crunch/manifests/init.pp        |   2 +-
>> >  .../puppet/modules/giraph/manifests/init.pp        |   2 +-
>> >  .../puppet/modules/hadoop-flume/manifests/init.pp  |   2 +-
>> >  .../puppet/modules/hadoop-hbase/manifests/init.pp  |  14 +-
>> >  .../puppet/modules/hadoop-hive/manifests/init.pp   |   2 +-
>> >  .../puppet/modules/hadoop-oozie/manifests/init.pp  |   4 +-
>> >  .../puppet/modules/hadoop-pig/manifests/init.pp    |   2 +-
>> >  .../puppet/modules/hadoop-sqoop/manifests/init.pp  |   4 +-
>> >  .../modules/hadoop-zookeeper/manifests/init.pp     |   4 +-
>> >  .../puppet/modules/hadoop/manifests/init.pp        | 340
>> ++++++++++++--------
>> >  .../puppet/modules/hadoop/templates/hadoop-env.sh  |   2 +-
>> >  .../puppet/modules/hadoop/templates/hdfs-site.xml  |  32 +-
>> >  .../puppet/modules/hadoop/templates/yarn-site.xml  |  71 +++++
>> >  .../puppet/modules/hcatalog/manifests/init.pp      |   4 +-
>> >  bigtop-deploy/puppet/modules/hue/manifests/init.pp |   2 +-
>> >  .../puppet/modules/kerberos/manifests/init.pp      |  23 +-
>> >  .../puppet/modules/mahout/manifests/init.pp        |   2 +-
>> >  .../puppet/modules/solr/manifests/init.pp          |   2 +-
>> >  .../puppet/modules/spark/manifests/init.pp         |   6 +-
>> >  .../puppet/modules/tachyon/manifests/init.pp       |   8 +-
>> >  29 files changed, 586 insertions(+), 539 deletions(-)
>> >  delete mode 100644 bigtop-deploy/puppet/config/site.csv.example
>> >  create mode 100644 bigtop-deploy/puppet/hiera.yaml
>> >  create mode 100644 bigtop-deploy/puppet/hieradata/bigtop/cluster.yaml
>> >  create mode 100644 bigtop-deploy/puppet/hieradata/bigtop/ha.yaml
>> >  create mode 100644 bigtop-deploy/puppet/hieradata/bigtop/noha.yaml
>> >  create mode 100644 bigtop-deploy/puppet/hieradata/site.yaml
>> >  delete mode 100644
>> bigtop-deploy/puppet/modules/bigtop_util/lib/puppet/parser/functions/append_each.rb
>> >
>> > diff --git a/bigtop-deploy/puppet/config/site.csv.example
>> b/bigtop-deploy/puppet/config/site.csv.example
>> > deleted file mode 100644
>> > index 60c88eb..0000000
>> > --- a/bigtop-deploy/puppet/config/site.csv.example
>> > +++ /dev/null
>> > @@ -1,28 +0,0 @@
>> > -### WARNING:
>> > -### actual site.csv file shouldn't contain lines starting with '#'
>> > -### It will cause the parse to choke.
>> > -### End of WARNING
>> > -### This file needs to be customized to reflect the configuration of
>> your cluster
>> > -### Store it as $BIGTOP_DEPLOY_PATH/config/site.csv
>> > -### use --confdir=$BIGTOP_DEPLOY_PATH (see README for more info)
>> > -# FQDN of Namenode
>> > -hadoop_head_node,hadoopmaster.example.com
>> > -# FQDN of standby node (for HA)
>> > -#standby_head_node,standbyNN.example.com
>> > -# FQDN of gateway node (if separate from NN)
>> > -#standby_head_node,gateway.example.com
>> > -# Storage directories (will be created if doesn't exist)
>> > -hadoop_storage_dirs,/data/1,/data/2,/data/3,/data/4
>> > -bigtop_yumrepo_uri,http://mirror.example.com/path/to/mirror/
>> > -# A list of stack' components to be deployed can be specified via
>> special
>> > -# "$components" list. If $components isn't set then everything in the
>> stack will
>> > -# be installed as usual. Otherwise only a specified list will be set
>> > -# Possible elements:
>> > -#
>> hadoop,yarn,hbase,tachyon,flume,solrcloud,spark,oozie,hcat,sqoop,httpfs,
>> > -# hue,mahout,giraph,crunch,pig,hive,zookeeper
>> > -# Example (to deploy only HDFS and YARN server and gateway parts)
>> > -#components,hadoop,yarn
>> > -# Test-only variable controls if user hdfs' sshkeys should be installed
>> to allow
>> > -# for passwordless login across the cluster. Required by some
>> integration tests
>> > -#testonly_hdfs_sshkeys=no
>> > -
>> > diff --git a/bigtop-deploy/puppet/hiera.yaml
>> b/bigtop-deploy/puppet/hiera.yaml
>> > new file mode 100644
>> > index 0000000..b276006
>> > --- /dev/null
>> > +++ b/bigtop-deploy/puppet/hiera.yaml
>> > @@ -0,0 +1,7 @@
>> > +---
>> > +:yaml:
>> > +  :datadir: /etc/puppet/hieradata
>> > +:hierarchy:
>> > +  - site
>> > +  - "bigtop/%{hadoop_hiera_ha_path}"
>> > +  - bigtop/cluster
>> > diff --git a/bigtop-deploy/puppet/hieradata/bigtop/cluster.yaml
>> b/bigtop-deploy/puppet/hieradata/bigtop/cluster.yaml
>> > new file mode 100644
>> > index 0000000..41c8e31
>> > --- /dev/null
>> > +++ b/bigtop-deploy/puppet/hieradata/bigtop/cluster.yaml
>> > @@ -0,0 +1,123 @@
>> > +---
>> > +### This file implements defaults and some dependant parameter
>> defaulting logic.
>> > +### Every parameter can be overridden using the hiera lookup hierarchy.
>> The enclosd
>> > +### hiera.yaml provides for this by adding a site.yaml to the lookup
>> where
>> > +### site-specific overrides can be placed. Therefore this file should
>> never need
>> > +### changing by site admins.
>> > +
>> > +# FQDN of Namenode
>> > +#bigtop::hadoop_head_node: "hadoopmaster.example.com"
>> > +# FQDN of standby node (enables HA if set)
>> > +#bigtop::hadoop_standby_head_node: "standbyNN.example.com"
>> > +# FQDN of gateway node (if separate from NN)
>> > +#bigtop::hadoop_gateway_node: "gateway.example.com"
>> > +
>> > +# A list of stack' components to be deployed can be specified via
>> special
>> > +# "$components" list. If $components isn't set then everything in the
>> stack will
>> > +# be installed as usual. Otherwise only a specified list will be set
>> > +# Possible elements:
>> > +#
>> hadoop,yarn,hbase,tachyon,flume,solrcloud,spark,oozie,hcat,sqoop,httpfs,
>> > +# hue,mahout,giraph,crunch,pig,hive,zookeeper
>> > +# Example (to deploy only HDFS and YARN server and gateway parts)
>> > +# This can be a comma-separated list or an array.
>> > +#hadoop_cluster_node::cluster_components:
>> > +#  - hadoop
>> > +#  - yarn
>> > +
>> > +# Storage directories (will be created if doesn't exist)
>> > +#hadoop::hadoop_storage_dirs:
>> > +#  - /data/1
>> > +#  - /data/2
>> > +#  - /data/3
>> > +#  - /data/4
>> > +
>> > +#bigtop::bigtop_yumrepo_uri: "http://mirror.example.com/path/to/mirror/
>> "
>> > +
>> > +# Test-only variable controls if user hdfs' sshkeys should be installed
>> to allow
>> > +# for passwordless login across the cluster. Required by some
>> integration tests
>> > +#hadoop::common_hdfs::testonly_hdfs_sshkeys: "no"
>> > +
>> > +# Default
>> > +#hadoop::common_hdfs::ha: "disabled"
>> > +
>> > +# Kerberos
>> > +#hadoop::hadoop_security_authentication: "kerberos"
>> > +#kerberos::site::domain: "do.main"
>> > +#kerberos::site::realm: "DO.MAIN"
>> > +#kerberos::site::kdc_server: "localhost"
>> > +#kerberos::site::kdc_port: "88"
>> > +#kerberos::site::admin_port: "749"
>> > +#kerberos::site::keytab_export_dir: "/var/lib/bigtop_keytabs"
>> > +
>> > +hadoop::common_hdfs::hadoop_namenode_host:
>> "%{hiera('bigtop::hadoop_head_node')}"
>> > +# actually default but needed for hadoop_namenode_uri here
>> > +hadoop::common_hdfs::hadoop_namenode_port: "8020"
>> > +
>> > +hadoop::common_yarn::hadoop_ps_host:
>> "%{hiera('bigtop::hadoop_head_node')}"
>> > +hadoop::common_yarn::hadoop_rm_host:
>> "%{hiera('bigtop::hadoop_head_node')}"
>> > +# actually default but needed for hue::server::rm_port here
>> > +hadoop::common_yarn::hadoop_rm_port: "8032"
>> > +hadoop::common_yarn::kerberos_realm: "%{hiera('kerberos::site::realm')}"
>> > +
>> > +hadoop::common_mapred_app::hadoop_hs_host:
>> "%{hiera('bigtop::hadoop_head_node')}"
>> > +hadoop::common_mapred_app::hadoop_jobtracker_host:
>> "%{hiera('bigtop::hadoop_head_node')}"
>> > +
>> > +# actually default but needed for hue::server::webhdfs_url here
>> > +hadoop::httpfs::hadoop_httpfs_port: "14000"
>> > +
>> > +bigtop::hadoop_zookeeper_port: "2181"
>> > +hadoop::zk:
>> "%{hiera('bigtop::hadoop_head_node')}:%{hiera('bigtop::hadoop_zookeeper_port')}"
>> > +
>> > +bigtop::hadoop_namenode_uri:
>> "hdfs://%{hiera('hadoop::common_hdfs::hadoop_namenode_host')}:%{hiera('hadoop::common_hdfs::hadoop_namenode_port')}"
>> > +hadoop-hbase::base_relative_rootdir: "/hbase"
>> > +hadoop-hbase::common_config::rootdir:
>> "%{hiera('bigtop::hadoop_namenode_uri')}%{hiera('hadoop-hbase::base_relative_rootdir')}"
>> > +hadoop-hbase::common_config::zookeeper_quorum:
>> "%{hiera('bigtop::hadoop_head_node')}"
>> > +hadoop-hbase::common_config::kerberos_realm:
>> "%{hiera('kerberos::site::realm')}"
>> > +hadoop-hbase::client::thrift: true
>> > +
>> > +solr::server::root_url: "%{hiera('bigtop::hadoop_namenode_uri')}"
>> > +solr::server::zk: "%{hiera('hadoop::zk')}"
>> > +solr::server::kerberos_realm: "%{hiera('kerberos::site::realm')}"
>> > +# Default but needed here to make sure, hue uses the same port
>> > +solr::server::port: "1978"
>> > +
>> > +hadoop-oozie::server::kerberos_realm:
>> "%{hiera('kerberos::site::realm')}"
>> > +
>> > +hcatalog::server::kerberos_realm: "%{hiera('kerberos::site::realm')}"
>> > +hcatalog::webhcat::server::kerberos_realm:
>> "%{hiera('kerberos::site::realm')}"
>> > +
>> > +spark::common::spark_master_host: "%{hiera('bigtop::hadoop_head_node')}"
>> > +
>> > +tachyon::common::master_host: "%{hiera('bigtop::hadoop_head_node')}"
>> > +
>> > +hadoop-zookeeper::server::myid: "0"
>> > +hadoop-zookeeper::server::ensemble:
>> > +  - ["%{hiera('bigtop::hadoop_head_node')}:2888:3888"]
>> > +hadoop-zookeeper::server::kerberos_realm:
>> "%{hiera('kerberos::site::realm')}"
>> > +
>> > +# those are only here because they were present as extlookup keys
>> previously
>> > +bigtop::hadoop_rm_http_port: "8088"
>> > +bigtop::hadoop_rm_proxy_port: "8088"
>> > +bigtop::hadoop_history_server_port: "19888"
>> > +bigtop::sqoop_server_port: "<never defined correctly>"
>> > +bigtop::hbase_thrift_port: "9090"
>> > +bigtop::hadoop_oozie_port: "11000"
>> > +
>> > +hue::server::rm_host: "%{hiera('hadoop::common_yarn::hadoop_rm_host')}"
>> > +hue::server::rm_port: "%{hiera('hadoop::common_yarn::hadoop_rm_port')}"
>> > +hue::server::rm_url: "http://
>> %{hiera('bigtop::hadoop_head_node')}:%{hiera('bigtop::hadoop_rm_http_port')}"
>> > +hue::server::rm_proxy_url: "http://
>> %{hiera('bigtop::hadoop_head_node')}:%{hiera('bigtop::hadoop_rm_proxy_port')}"
>> > +hue::server::history_server_url: "http://
>> %{hiera('bigtop::hadoop_head_node')}:%{hiera('bigtop::hadoop_history_server_port')}"
>> > +# those use fqdn instead of hadoop_head_node because it's only ever
>> activated
>> > +# on the gatewaynode
>> > +hue::server::webhdfs_url: "http://
>> %{fqdn}:%{hiera('hadoop::httpfs::hadoop_httpfs_port')}/webhdfs/v1"
>> > +hue::server::sqoop_url: "http://
>> %{fqdn}:%{hiera('bigtop::sqoop_server_port')}/sqoop"
>> > +hue::server::solr_url: "http://
>> %{fqdn}:%{hiera('solr::server::port')}/solr/"
>> > +hue::server::hbase_thrift_url:
>> "%{fqdn}:%{hiera('bigtop::hbase_thrift_port')}"
>> > +hue::server::oozie_url: "http://
>> %{hiera('bigtop::hadoop_head_node')}:%{hiera('bigtop::hadoop_oozie_port')}/oozie"
>> > +hue::server::default_fs: "%{hiera('bigtop::hadoop_namenode_uri')}"
>> > +hue::server::kerberos_realm: "%{hiera('kerberos::site::realm')}"
>> > +
>> > +giraph::client::zookeeper_quorum: "%{hiera('bigtop::hadoop_head_node')}"
>> > +
>> > +hadoop-hive::client::hbase_zookeeper_quorum:
>> "%{hiera('hadoop-hbase::common_config::zookeeper_quorum')}"
>> > diff --git a/bigtop-deploy/puppet/hieradata/bigtop/ha.yaml
>> b/bigtop-deploy/puppet/hieradata/bigtop/ha.yaml
>> > new file mode 100644
>> > index 0000000..3654987
>> > --- /dev/null
>> > +++ b/bigtop-deploy/puppet/hieradata/bigtop/ha.yaml
>> > @@ -0,0 +1,7 @@
>> > +---
>> > +hadoop::common_hdfs::ha: "manual"
>> > +hadoop::common_hdfs::hadoop_namenode_host:
>> > +  - "%{hiera('bigtop::hadoop_head_node')}"
>> > +  - "%{hiera('bigtop::standby_head_node')}"
>> > +hadoop::common_hdfs::hadoop_ha_nameservice_id: "ha-nn-uri"
>> > +hadoop_cluster_node::hadoop_namenode_uri:
>> "hdfs://%{hiera('hadoop_ha_nameservice_id')}:8020"
>> > diff --git a/bigtop-deploy/puppet/hieradata/bigtop/noha.yaml
>> b/bigtop-deploy/puppet/hieradata/bigtop/noha.yaml
>> > new file mode 100644
>> > index 0000000..ac81412
>> > --- /dev/null
>> > +++ b/bigtop-deploy/puppet/hieradata/bigtop/noha.yaml
>> > @@ -0,0 +1,2 @@
>> > +---
>> > +# all done via defaults
>> > diff --git a/bigtop-deploy/puppet/hieradata/site.yaml
>> b/bigtop-deploy/puppet/hieradata/site.yaml
>> > new file mode 100644
>> > index 0000000..339e2ab
>> > --- /dev/null
>> > +++ b/bigtop-deploy/puppet/hieradata/site.yaml
>> > @@ -0,0 +1,32 @@
>> > +---
>> > +bigtop::hadoop_head_node: "head.node.fqdn"
>> > +#bigtop::standby_head_node: "standby.head.node.fqdn"
>> > +
>> > +hadoop::hadoop_storage_dirs:
>> > +  - /data/1
>> > +  - /data/2
>> > +  - /data/3
>> > +  - /data/4
>> > +
>> > +#hadoop_cluster_node::cluster_components:
>> > +#  - crunch
>> > +#  - flume
>> > +#  - giraph
>> > +#  - hbase
>> > +#  - hcat
>> > +#  - hive
>> > +#  - httpfs
>> > +#  - hue
>> > +#  - mahout
>> > +#  - mapred-app
>> > +#  - oozie
>> > +#  - pig
>> > +#  - solrcloud
>> > +#  - spark
>> > +#  - sqoop
>> > +#  - tachyon
>> > +#  - yarn
>> > +#  - zookeeper
>> > +
>> > +# Debian:
>> > +#bigtop::jdk_package_name: "openjdk-7-jre-headless"
>> > diff --git a/bigtop-deploy/puppet/manifests/cluster.pp
>> b/bigtop-deploy/puppet/manifests/cluster.pp
>> > index 903f3e8..d4bae8a 100644
>> > --- a/bigtop-deploy/puppet/manifests/cluster.pp
>> > +++ b/bigtop-deploy/puppet/manifests/cluster.pp
>> > @@ -13,131 +13,37 @@
>> >  # See the License for the specific language governing permissions and
>> >  # limitations under the License.
>> >
>> > -class hadoop_cluster_node {
>> > -  require bigtop_util
>> > -
>> > -  $hadoop_head_node        = extlookup("hadoop_head_node")
>> > -  $standby_head_node = extlookup("standby_head_node", "")
>> > -  $hadoop_gateway_node     = extlookup("hadoop_gateway_node",
>> $hadoop_head_node)
>> > -
>> > -  $hadoop_ha = $standby_head_node ? {
>> > -    ""      => disabled,
>> > -    default => extlookup("hadoop_ha", "manual"),
>> > -  }
>> > -
>> > -
>> > -  $hadoop_namenode_host        = $hadoop_ha ? {
>> > -    "disabled" => $hadoop_head_node,
>> > -    default    => [ $hadoop_head_node, $standby_head_node ],
>> > -  }
>> > -  $hadoop_namenode_port        = extlookup("hadoop_namenode_port",
>> "8020")
>> > -  $hadoop_dfs_namenode_plugins =
>> extlookup("hadoop_dfs_namenode_plugins", "")
>> > -  $hadoop_dfs_datanode_plugins =
>> extlookup("hadoop_dfs_datanode_plugins", "")
>> > -  #
>> $hadoop_dfs_namenode_plugins="org.apache.hadoop.thriftfs.NamenodePlugin"
>> > -  #
>> $hadoop_dfs_datanode_plugins="org.apache.hadoop.thriftfs.DatanodePlugin"
>> > -  $hadoop_ha_nameservice_id    = extlookup("hadoop_ha_nameservice_id",
>> "ha-nn-uri")
>> > -  $hadoop_namenode_uri   = $hadoop_ha ? {
>> > -    "disabled" => "hdfs://$hadoop_namenode_host:$hadoop_namenode_port",
>> > -    default    => "hdfs://${hadoop_ha_nameservice_id}:8020",
>> > -  }
>> > -
>> > -  $hadoop_rm_host        = $hadoop_head_node
>> > -  $hadoop_rt_port        = extlookup("hadoop_rt_port", "8025")
>> > -  $hadoop_rm_port        = extlookup("hadoop_rm_port", "8032")
>> > -  $hadoop_sc_port        = extlookup("hadoop_sc_port", "8030")
>> > -
>> > -  $hadoop_hs_host        = $hadoop_head_node
>> > -  $hadoop_hs_port        = extlookup("hadoop_hs_port", "10020")
>> > -  $hadoop_hs_webapp_port = extlookup("hadoop_hs_webapp_port", "19888")
>> > -
>> > -  $hadoop_ps_host        = $hadoop_head_node
>> > -  $hadoop_ps_port        = extlookup("hadoop_ps_port", "20888")
>> > -
>> > -  $hadoop_jobtracker_host            = $hadoop_head_node
>> > -  $hadoop_jobtracker_port            =
>> extlookup("hadoop_jobtracker_port", "8021")
>> > -  $hadoop_mapred_jobtracker_plugins  =
>> extlookup("hadoop_mapred_jobtracker_plugins", "")
>> > -  $hadoop_mapred_tasktracker_plugins =
>> extlookup("hadoop_mapred_tasktracker_plugins", "")
>> > -
>> > -  $hadoop_zookeeper_port             =
>> extlookup("hadoop_zookeeper_port", "2181")
>> > -  $solrcloud_port                    = extlookup("solrcloud_port",
>> "1978")
>> > -  $solrcloud_admin_port              =
>> extlookup("solrcloud_admin_port", "1979")
>> > -  $hadoop_oozie_port                 = extlookup("hadoop_oozie_port",
>> "11000")
>> > -  $hadoop_httpfs_port                = extlookup("hadoop_httpfs_port",
>> "14000")
>> > -  $hadoop_rm_http_port               = extlookup("hadoop_rm_http_port",
>> "8088")
>> > -  $hadoop_rm_proxy_port              =
>> extlookup("hadoop_rm_proxy_port", "8088")
>> > -  $hadoop_history_server_port        =
>> extlookup("hadoop_history_server_port", "19888")
>> > -  $hbase_thrift_port                 = extlookup("hbase_thrift_port",
>> "9090")
>> > -  $spark_master_port                 = extlookup("spark_master_port",
>> "7077")
>> > -  $spark_master_ui_port              =
>> extlookup("spark_master_ui_port", "18080")
>> > -
>> > -  # Lookup comma separated components (i.e. hadoop,spark,hbase ).
>> > -  $components_tmp                        = extlookup("components",
>> split($components, ","))
>> > +class hadoop_cluster_node (
>> > +  $hadoop_security_authentication =
>> hiera("hadoop::hadoop_security_authentication", "simple"),
>> > +
>> > +  # Lookup component array or comma separated components (i.e.
>> > +  # hadoop,spark,hbase ) as a default via facter.
>> > +  $cluster_components = "$::components"
>> > +  ) {
>> >    # Ensure (even if a single value) that the type is an array.
>> > -  if is_array($components_tmp) {
>> > -    $components = $components_tmp
>> > -  }
>> > -  else {
>> > -    $components = any2array($components_tmp,",")
>> > +  if is_array($cluster_components) {
>> > +    $components = $cluster_components
>> > +  } else {
>> > +    $components = any2array($cluster_components, ",")
>> >    }
>> >
>> >    $all = ($components[0] == undef)
>> >
>> > -  $hadoop_ha_zookeeper_quorum        =
>> "${hadoop_head_node}:${hadoop_zookeeper_port}"
>> > -  $solrcloud_zk                      =
>> "${hadoop_head_node}:${hadoop_zookeeper_port}"
>> > -  $hbase_thrift_address              =
>> "${hadoop_head_node}:${hbase_thrift_port}"
>> > -  $hadoop_oozie_url                  = "http://
>> ${hadoop_head_node}:${hadoop_oozie_port}/oozie"
>> > -  $hadoop_httpfs_url                 = "http://
>> ${hadoop_head_node}:${hadoop_httpfs_port}/webhdfs/v1"
>> > -  $sqoop_server_url                  = "http://
>> ${hadoop_head_node}:${sqoop_server_port}/sqoop"
>> > -  $solrcloud_url                     = "http://
>> ${hadoop_head_node}:${solrcloud_port}/solr/"
>> > -  $hadoop_rm_url                     = "http://
>> ${hadoop_head_node}:${hadoop_rm_http_port}"
>> > -  $hadoop_rm_proxy_url               = "http://
>> ${hadoop_head_node}:${hadoop_rm_proxy_port}"
>> > -  $hadoop_history_server_url         = "http://
>> ${hadoop_head_node}:${hadoop_history_server_port}"
>> > -
>> > -  $bigtop_real_users = [ 'jenkins', 'testuser', 'hudson' ]
>> > -
>> > -  $hadoop_core_proxyusers = { oozie => { groups =>
>> 'hudson,testuser,root,hadoop,jenkins,oozie,httpfs,hue,users', hosts => "*"
>> },
>> > -                                hue => { groups =>
>> 'hudson,testuser,root,hadoop,jenkins,oozie,httpfs,hue,users', hosts => "*"
>> },
>> > -                             httpfs => { groups =>
>> 'hudson,testuser,root,hadoop,jenkins,oozie,httpfs,hue,users', hosts => "*"
>> } }
>> > -
>> > -  $hbase_relative_rootdir        = extlookup("hadoop_hbase_rootdir",
>> "/hbase")
>> > -  $hadoop_hbase_rootdir = "$hadoop_namenode_uri$hbase_relative_rootdir"
>> > -  $hadoop_hbase_zookeeper_quorum = $hadoop_head_node
>> > -  $hbase_heap_size               = extlookup("hbase_heap_size", "1024")
>> > -  $hbase_thrift_server           = $hadoop_head_node
>> > -
>> > -  $giraph_zookeeper_quorum       = $hadoop_head_node
>> > -
>> > -  $spark_master_host             = $hadoop_head_node
>> > -  $tachyon_master_host            = $hadoop_head_node
>> > -
>> > -  $hadoop_zookeeper_ensemble = ["$hadoop_head_node:2888:3888"]
>> > -
>> > -  # Set from facter if available
>> > -  $roots              = extlookup("hadoop_storage_dirs",
>>  split($hadoop_storage_dirs, ";"))
>> > -  $namenode_data_dirs = extlookup("hadoop_namenode_data_dirs",
>> append_each("/namenode", $roots))
>> > -  $hdfs_data_dirs     = extlookup("hadoop_hdfs_data_dirs",
>>  append_each("/hdfs",     $roots))
>> > -  $mapred_data_dirs   = extlookup("hadoop_mapred_data_dirs",
>>  append_each("/mapred",   $roots))
>> > -  $yarn_data_dirs     = extlookup("hadoop_yarn_data_dirs",
>>  append_each("/yarn",     $roots))
>> > -
>> > -  $hadoop_security_authentication = extlookup("hadoop_security",
>> "simple")
>> >    if ($hadoop_security_authentication == "kerberos") {
>> > -    $kerberos_domain     = extlookup("hadoop_kerberos_domain")
>> > -    $kerberos_realm      = extlookup("hadoop_kerberos_realm")
>> > -    $kerberos_kdc_server = extlookup("hadoop_kerberos_kdc_server")
>> > -
>> >      include kerberos::client
>> >    }
>> >
>> >    # Flume agent is the only component that goes on EVERY node in the
>> cluster
>> >    if ($all or "flume" in $components) {
>> > -    hadoop-flume::agent { "flume agent":
>> > -    }
>> > +    include hadoop-flume::agent
>> >    }
>> >  }
>> >
>> >
>> >
>> > -class hadoop_worker_node inherits hadoop_cluster_node {
>> > +class hadoop_worker_node (
>> > +  $bigtop_real_users = [ 'jenkins', 'testuser', 'hudson' ]
>> > +  ) inherits hadoop_cluster_node {
>> >    user { $bigtop_real_users:
>> >      ensure     => present,
>> >      system     => false,
>> > @@ -150,80 +56,42 @@ class hadoop_worker_node inherits
>> hadoop_cluster_node {
>> >      User<||> -> Kerberos::Host_keytab<||>
>> >    }
>> >
>> > -  hadoop::datanode { "datanode":
>> > -        namenode_host => $hadoop_namenode_host,
>> > -        namenode_port => $hadoop_namenode_port,
>> > -        dirs => $hdfs_data_dirs,
>> > -        auth => $hadoop_security_authentication,
>> > -        ha   => $hadoop_ha,
>> > -  }
>> > -
>> > +  include hadoop::datanode
>> >    if ($all or "yarn" in $components) {
>> > -    hadoop::nodemanager { "nodemanager":
>> > -          rm_host => $hadoop_rm_host,
>> > -          rm_port => $hadoop_rm_port,
>> > -          rt_port => $hadoop_rt_port,
>> > -          dirs => $yarn_data_dirs,
>> > -          auth => $hadoop_security_authentication,
>> > -    }
>> > +    include hadoop::nodemanager
>> >    }
>> >    if ($all or "hbase" in $components) {
>> > -    hadoop-hbase::server { "hbase region server":
>> > -          rootdir => $hadoop_hbase_rootdir,
>> > -          heap_size => $hbase_heap_size,
>> > -          zookeeper_quorum => $hadoop_hbase_zookeeper_quorum,
>> > -          kerberos_realm => $kerberos_realm,
>> > -    }
>> > +    include hadoop-hbase::server
>> >    }
>> >
>> >    ### If mapred is not installed, yarn can fail.
>> >    ### So, when we install yarn, we also need mapred for now.
>> >    ### This dependency should be cleaned up eventually.
>> >    if ($all or "mapred-app" or "yarn" in $components) {
>> > -    hadoop::mapred-app { "mapred-app":
>> > -          namenode_host => $hadoop_namenode_host,
>> > -          namenode_port => $hadoop_namenode_port,
>> > -          jobtracker_host => $hadoop_jobtracker_host,
>> > -          jobtracker_port => $hadoop_jobtracker_port,
>> > -          auth => $hadoop_security_authentication,
>> > -          dirs => $mapred_data_dirs,
>> > -    }
>> > +    include hadoop::mapred-app
>> >    }
>> >
>> >    if ($all or "solrcloud" in $components) {
>> > -    solr::server { "solrcloud server":
>> > -         port        => $solrcloud_port,
>> > -         port_admin  => $solrcloud_admin_port,
>> > -         zk          => $solrcloud_zk,
>> > -         root_url    => $hadoop_namenode_uri,
>> > -         kerberos_realm => $kerberos_realm,
>> > -    }
>> > +    include solr::server
>> >    }
>> >
>> >    if ($all or "spark" in $components) {
>> > -    spark::worker { "spark worker":
>> > -         master_host    => $spark_master_host,
>> > -         master_port    => $spark_master_port,
>> > -         master_ui_port => $spark_master_ui_port,
>> > -    }
>> > +    include spark::worker
>> >    }
>> >
>> > -  if ($components[0] == undef or "tachyon" in $components) {
>> > -    tachyon::worker { "tachyon worker":
>> > -         master_host => $tachyon_master_host
>> > -    }
>> > +  if ($all or "tachyon" in $components) {
>> > +    include tachyon::worker
>> >    }
>> >
>> >  }
>> >
>> >  class hadoop_head_node inherits hadoop_worker_node {
>> > -
>> >    exec { "init hdfs":
>> >      path    => ['/bin','/sbin','/usr/bin','/usr/sbin'],
>> >      command => 'bash -x /usr/lib/hadoop/libexec/init-hdfs.sh',
>> >      require => Package['hadoop-hdfs']
>> >    }
>> > -  Hadoop::Namenode<||> -> Hadoop::Datanode<||> -> Exec<| title == "init
>> hdfs" |>
>> > +  Class['Hadoop::Namenode'] -> Class['Hadoop::Datanode'] -> Exec<|
>> title == "init hdfs" |>
>> >
>> >  if ($hadoop_security_authentication == "kerberos") {
>> >      include kerberos::server
>> > @@ -231,196 +99,104 @@ if ($hadoop_security_authentication ==
>> "kerberos") {
>> >      include kerberos::kdc::admin_server
>> >    }
>> >
>> > -  hadoop::namenode { "namenode":
>> > -        host => $hadoop_namenode_host,
>> > -        port => $hadoop_namenode_port,
>> > -        dirs => $namenode_data_dirs,
>> > -        auth => $hadoop_security_authentication,
>> > -        ha   => $hadoop_ha,
>> > -        zk   => $hadoop_ha_zookeeper_quorum,
>> > -  }
>> > +  include hadoop::namenode
>> >
>> > -  if ($hadoop_ha == "disabled") {
>> > -    hadoop::secondarynamenode { "secondary namenode":
>> > -          namenode_host => $hadoop_namenode_host,
>> > -          namenode_port => $hadoop_namenode_port,
>> > -          auth => $hadoop_security_authentication,
>> > -    }
>> > +  if ($hadoop::common_hdfs::ha == "disabled") {
>> > +    include hadoop::secondarynamenode
>> >    }
>> >
>> >    if ($all or "yarn" in $components) {
>> > -    hadoop::resourcemanager { "resourcemanager":
>> > -          host => $hadoop_rm_host,
>> > -          port => $hadoop_rm_port,
>> > -          rt_port => $hadoop_rt_port,
>> > -          sc_port => $hadoop_sc_port,
>> > -          auth => $hadoop_security_authentication,
>> > -    }
>> > -
>> > -    hadoop::historyserver { "historyserver":
>> > -          host => $hadoop_hs_host,
>> > -          port => $hadoop_hs_port,
>> > -          webapp_port => $hadoop_hs_webapp_port,
>> > -          auth => $hadoop_security_authentication,
>> > -    }
>> > -
>> > -    hadoop::proxyserver { "proxyserver":
>> > -          host => $hadoop_ps_host,
>> > -          port => $hadoop_ps_port,
>> > -          auth => $hadoop_security_authentication,
>> > -    }
>> > -    Exec<| title == "init hdfs" |> -> Hadoop::Resourcemanager<||> ->
>> Hadoop::Nodemanager<||>
>> > -    Exec<| title == "init hdfs" |> -> Hadoop::Historyserver<||>
>> > +    include hadoop::resourcemanager
>> > +    include hadoop::historyserver
>> > +    include hadoop::proxyserver
>> > +    Exec<| title == "init hdfs" |> -> Class['Hadoop::Resourcemanager']
>> -> Class['Hadoop::Nodemanager']
>> > +    Exec<| title == "init hdfs" |> -> Class['Hadoop::Historyserver']
>> >    }
>> >
>> >    if ($all or "hbase" in $components) {
>> > -    hadoop-hbase::master { "hbase master":
>> > -          rootdir => $hadoop_hbase_rootdir,
>> > -          heap_size => $hbase_heap_size,
>> > -          zookeeper_quorum => $hadoop_hbase_zookeeper_quorum,
>> > -          kerberos_realm => $kerberos_realm,
>> > -    }
>> > -    Exec<| title == "init hdfs" |> -> Hadoop-hbase::Master<||>
>> > +    include hadoop-hbase::master
>> > +    Exec<| title == "init hdfs" |> -> Class['Hadoop-hbase::Master']
>> >    }
>> >
>> >    if ($all or "oozie" in $components) {
>> > -    hadoop-oozie::server { "oozie server":
>> > -          kerberos_realm => $kerberos_realm,
>> > +    include hadoop-oozie::server
>> > +    if ($all or "mapred-app" in $components) {
>> > +      Class['Hadoop::Mapred-app'] -> Class['Hadoop-oozie::Server']
>> >      }
>> > -    Hadoop::Mapred-app<||> -> Hadoop-oozie::Server<||>
>> > -    Exec<| title == "init hdfs" |> -> Hadoop-oozie::Server<||>
>> > +    Exec<| title == "init hdfs" |> -> Class['Hadoop-oozie::Server']
>> >    }
>> >
>> >    if ($all or "hcat" in $components) {
>> > -  hcatalog::server { "hcatalog server":
>> > -        kerberos_realm => $kerberos_realm,
>> > -  }
>> > -  hcatalog::webhcat::server { "webhcat server":
>> > -        kerberos_realm => $kerberos_realm,
>> > -  }
>> > +    include hcatalog::server
>> > +    include hcatalog::webhcat::server
>> >    }
>> >
>> >    if ($all or "spark" in $components) {
>> > -  spark::master { "spark master":
>> > -       master_host    => $spark_master_host,
>> > -       master_port    => $spark_master_port,
>> > -       master_ui_port => $spark_master_ui_port,
>> > -  }
>> > +    include spark::master
>> >    }
>> >
>> > -  if ($all == undef or "tachyon" in $components) {
>> > -   tachyon::master { "tachyon-master":
>> > -       master_host => $tachyon_master_host
>> > -   }
>> > +  if ($all or "tachyon" in $components) {
>> > +   include tachyon::master
>> >    }
>> >
>> >    if ($all or "hbase" in $components) {
>> > -    hadoop-zookeeper::server { "zookeeper":
>> > -          myid => "0",
>> > -          ensemble => $hadoop_zookeeper_ensemble,
>> > -          kerberos_realm => $kerberos_realm,
>> > -    }
>> > +    include hadoop-zookeeper::server
>> >    }
>> >
>> > -  Exec<| title == "init hdfs" |> -> Hadoop::Rsync_hdfs<||>
>> > -
>> > +  # class hadoop::rsync_hdfs isn't used anywhere
>> > +  #Exec<| title == "init hdfs" |> -> Class['Hadoop::Rsync_hdfs']
>> >  }
>> >
>> >  class standby_head_node inherits hadoop_cluster_node {
>> > -  hadoop::namenode { "namenode":
>> > -        host => $hadoop_namenode_host,
>> > -        port => $hadoop_namenode_port,
>> > -        dirs => $namenode_data_dirs,
>> > -        auth => $hadoop_security_authentication,
>> > -        ha   => $hadoop_ha,
>> > -        zk   => $hadoop_ha_zookeeper_quorum,
>> > -  }
>> > +  include hadoop::namenode
>> >  }
>> >
>> >  class hadoop_gateway_node inherits hadoop_cluster_node {
>> > -  $hbase_thrift_address              = "${fqdn}:${hbase_thrift_port}"
>> > -  $hadoop_httpfs_url                 = "http://
>> ${fqdn}:${hadoop_httpfs_port}/webhdfs/v1"
>> > -  $sqoop_server_url                  = "http://
>> ${fqdn}:${sqoop_server_port}/sqoop"
>> > -  $solrcloud_url                     = "http://
>> ${fqdn}:${solrcloud_port}/solr/"
>> > -
>> >    if ($all or "sqoop" in $components) {
>> > -    hadoop-sqoop::server { "sqoop server":
>> > -    }
>> > +    include hadoop-sqoop::server
>> >    }
>> >
>> >    if ($all or "httpfs" in $components) {
>> > -    hadoop::httpfs { "httpfs":
>> > -          namenode_host => $hadoop_namenode_host,
>> > -          namenode_port => $hadoop_namenode_port,
>> > -          auth => $hadoop_security_authentication,
>> > +    include hadoop::httpfs
>> > +    if ($all or "hue" in $components) {
>> > +      Class['Hadoop::Httpfs'] -> Class['Hue::Server']
>> >      }
>> > -    Hadoop::Httpfs<||> -> Hue::Server<||>
>> >    }
>> >
>> >    if ($all or "hue" in $components) {
>> > -    hue::server { "hue server":
>> > -          rm_url      => $hadoop_rm_url,
>> > -          rm_proxy_url => $hadoop_rm_proxy_url,
>> > -          history_server_url => $hadoop_history_server_url,
>> > -          webhdfs_url => $hadoop_httpfs_url,
>> > -          sqoop_url   => $sqoop_server_url,
>> > -          solr_url    => $solrcloud_url,
>> > -          hbase_thrift_url => $hbase_thrift_address,
>> > -          rm_host     => $hadoop_rm_host,
>> > -          rm_port     => $hadoop_rm_port,
>> > -          oozie_url   => $hadoop_oozie_url,
>> > -          default_fs  => $hadoop_namenode_uri,
>> > -          kerberos_realm => $kerberos_realm,
>> > +    include hue::server
>> > +    if ($all or "hbase" in $components) {
>> > +      Class['Hadoop-hbase::Client'] -> Class['Hue::Server']
>> >      }
>> >    }
>> > -  Hadoop-hbase::Client<||> -> Hue::Server<||>
>> >
>> > -  hadoop::client { "hadoop client":
>> > -    namenode_host => $hadoop_namenode_host,
>> > -    namenode_port => $hadoop_namenode_port,
>> > -    jobtracker_host => $hadoop_jobtracker_host,
>> > -    jobtracker_port => $hadoop_jobtracker_port,
>> > -    # auth => $hadoop_security_authentication,
>> > -  }
>> > +  include hadoop::client
>> >
>> >    if ($all or "mahout" in $components) {
>> > -    mahout::client { "mahout client":
>> > -    }
>> > +    include mahout::client
>> >    }
>> >    if ($all or "giraph" in $components) {
>> > -    giraph::client { "giraph client":
>> > -       zookeeper_quorum => $giraph_zookeeper_quorum,
>> > -    }
>> > +    include giraph::client
>> >    }
>> >    if ($all or "crunch" in $components) {
>> > -    crunch::client { "crunch client":
>> > -    }
>> > +    include crunch::client
>> >    }
>> >    if ($all or "pig" in $components) {
>> > -    hadoop-pig::client { "pig client":
>> > -    }
>> > +    include hadoop-pig::client
>> >    }
>> >    if ($all or "hive" in $components) {
>> > -    hadoop-hive::client { "hive client":
>> > -       hbase_zookeeper_quorum => $hadoop_hbase_zookeeper_quorum,
>> > -    }
>> > +    include hadoop-hive::client
>> >    }
>> >    if ($all or "sqoop" in $components) {
>> > -    hadoop-sqoop::client { "sqoop client":
>> > -    }
>> > +    include hadoop-sqoop::client
>> >    }
>> >    if ($all or "oozie" in $components) {
>> > -    hadoop-oozie::client { "oozie client":
>> > -    }
>> > +    include hadoop-oozie::client
>> >    }
>> >    if ($all or "hbase" in $components) {
>> > -    hadoop-hbase::client { "hbase thrift client":
>> > -      thrift => true,
>> > -      kerberos_realm => $kerberos_realm,
>> > -    }
>> > +    include hadoop-hbase::client
>> >    }
>> >    if ($all or "zookeeper" in $components) {
>> > -    hadoop-zookeeper::client { "zookeeper client":
>> > -    }
>> > +    include hadoop-zookeeper::client
>> >    }
>> >  }
>> > diff --git a/bigtop-deploy/puppet/manifests/site.pp
>> b/bigtop-deploy/puppet/manifests/site.pp
>> > index 8997140..dd5921c 100644
>> > --- a/bigtop-deploy/puppet/manifests/site.pp
>> > +++ b/bigtop-deploy/puppet/manifests/site.pp
>> > @@ -13,19 +13,15 @@
>> >  # See the License for the specific language governing permissions and
>> >  # limitations under the License.
>> >
>> > -require bigtop_util
>> > -$puppet_confdir = get_setting("confdir")
>> >  $default_yumrepo = "
>> http://bigtop01.cloudera.org:8080/view/Releases/job/Bigtop-0.8.0/label=centos6/6/artifact/output/
>> "
>> > -$extlookup_datadir="$puppet_confdir/config"
>> > -$extlookup_precedence = ["site", "default"]
>> > -$jdk_package_name = extlookup("jdk_package_name", "jdk")
>> > +$jdk_package_name = hiera("bigtop::jdk_package_name", "jdk")
>> >
>> >  stage {"pre": before => Stage["main"]}
>> >
>> >  case $operatingsystem {
>> >      /(OracleLinux|Amazon|CentOS|Fedora|RedHat)/: {
>> >         yumrepo { "Bigtop":
>> > -          baseurl => extlookup("bigtop_yumrepo_uri", $default_yumrepo),
>> > +          baseurl => hiera("hiera::bigtop_yumrepo_uri",
>> $default_yumrepo),
>> >            descr => "Bigtop packages",
>> >            enabled => 1,
>> >            gpgcheck => 0,
>> > @@ -44,10 +40,16 @@ package { $jdk_package_name:
>> >  import "cluster.pp"
>> >
>> >  node default {
>> > -  include stdlib
>> > -  $hadoop_head_node = extlookup("hadoop_head_node")
>> > -  $standby_head_node = extlookup("standby_head_node", "")
>> > -  $hadoop_gateway_node = extlookup("hadoop_gateway_node",
>> $hadoop_head_node)
>> > +  $hadoop_head_node = hiera("bigtop::hadoop_head_node")
>> > +  $standby_head_node = hiera("bigtop::standby_head_node", "")
>> > +  $hadoop_gateway_node = hiera("bigtop::hadoop_gateway_node",
>> $hadoop_head_node)
>> > +
>> > +  # look into alternate hiera datasources configured using this path in
>> > +  # hiera.yaml
>> > +  $hadoop_hiera_ha_path = $standby_head_node ? {
>> > +    ""      => "noha",
>> > +    default => "ha",
>> > +  }
>> >
>> >    case $::fqdn {
>> >      $hadoop_head_node: {
>> > @@ -69,7 +71,7 @@ node default {
>> >  Yumrepo<||> -> Package<||>
>> >
>> >  if versioncmp($::puppetversion,'3.6.1') >= 0 {
>> > -  $allow_virtual_packages = hiera('allow_virtual_packages',false)
>> > +  $allow_virtual_packages =
>> hiera('bigtop::allow_virtual_packages',false)
>> >    Package {
>> >      allow_virtual => $allow_virtual_packages,
>> >    }
>> > diff --git
>> a/bigtop-deploy/puppet/modules/bigtop_util/lib/puppet/parser/functions/append_each.rb
>> b/bigtop-deploy/puppet/modules/bigtop_util/lib/puppet/parser/functions/append_each.rb
>> > deleted file mode 100644
>> > index b360b1e..0000000
>> > ---
>> a/bigtop-deploy/puppet/modules/bigtop_util/lib/puppet/parser/functions/append_each.rb
>> > +++ /dev/null
>> > @@ -1,22 +0,0 @@
>> > -# Licensed to the Apache Software Foundation (ASF) under one or more
>> > -# contributor license agreements. See the NOTICE file distributed with
>> > -# this work for additional information regarding copyright ownership.
>> > -# The ASF licenses this file to You under the Apache License, Version
>> 2.0
>> > -# (the "License"); you may not use this file except in compliance with
>> > -# the License. You may obtain a copy of the License at
>> > -#
>> > -# http://www.apache.org/licenses/LICENSE-2.0
>> > -#
>> > -# Unless required by applicable law or agreed to in writing, software
>> > -# distributed under the License is distributed on an "AS IS" BASIS,
>> > -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> > -# See the License for the specific language governing permissions and
>> > -# limitations under the License.
>> > -
>> > -# Append a string to every element of an array
>> > -
>> > -Puppet::Parser::Functions::newfunction(:append_each, :type => :rvalue)
>> do |args|
>> > -  suffix = (args[0].is_a? Array) ? args[0].join("") : args[0]
>> > -  inputs = (args[1].is_a? Array) ? args[1] : [ args[1] ]
>> > -  inputs.map { |item| item + suffix }
>> > -end
>> > diff --git a/bigtop-deploy/puppet/modules/crunch/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/crunch/manifests/init.pp
>> > index d446667..b31edf6 100644
>> > --- a/bigtop-deploy/puppet/modules/crunch/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/crunch/manifests/init.pp
>> > @@ -14,7 +14,7 @@
>> >  # limitations under the License.
>> >
>> >  class crunch {
>> > -  define client {
>> > +  class client {
>> >      package { ["crunch", "crunch-doc"]:
>> >        ensure => latest,
>> >      }
>> > diff --git a/bigtop-deploy/puppet/modules/giraph/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/giraph/manifests/init.pp
>> > index 6652e40..1dc0d9b 100644
>> > --- a/bigtop-deploy/puppet/modules/giraph/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/giraph/manifests/init.pp
>> > @@ -14,7 +14,7 @@
>> >  # limitations under the License.
>> >
>> >  class giraph {
>> > -  define client($zookeeper_quorum = 'localhost') {
>> > +  class client($zookeeper_quorum = 'localhost') {
>> >      package { "giraph":
>> >        ensure => latest,
>> >      }
>> > diff --git a/bigtop-deploy/puppet/modules/hadoop-flume/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/hadoop-flume/manifests/init.pp
>> > index 8e3bf64..daf352a 100644
>> > --- a/bigtop-deploy/puppet/modules/hadoop-flume/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/hadoop-flume/manifests/init.pp
>> > @@ -14,7 +14,7 @@
>> >  # limitations under the License.
>> >
>> >  class hadoop-flume {
>> > -  define agent($sources = [], $sinks = [], $channels = []) {
>> > +  class agent($sources = [], $sinks = [], $channels = []) {
>> >      package { "flume-agent":
>> >        ensure => latest,
>> >      }
>> > diff --git a/bigtop-deploy/puppet/modules/hadoop-hbase/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/hadoop-hbase/manifests/init.pp
>> > index 3bbaa8a..5ef45b1 100644
>> > --- a/bigtop-deploy/puppet/modules/hadoop-hbase/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/hadoop-hbase/manifests/init.pp
>> > @@ -20,7 +20,7 @@ class hadoop-hbase {
>> >      }
>> >    }
>> >
>> > -  class common-config {
>> > +  class common_config ($rootdir, $zookeeper_quorum, $kerberos_realm =
>> "", $heap_size="1024") {
>> >      include client-package
>> >      if ($kerberos_realm) {
>> >        require kerberos::client
>> > @@ -45,8 +45,8 @@ class hadoop-hbase {
>> >      }
>> >    }
>> >
>> > -  define client($thrift = false, $kerberos_realm = "") {
>> > -    include common-config
>> > +  class client($thrift = false) {
>> > +    inclass common_config
>> >
>> >      if ($thrift) {
>> >        package { "hbase-thrift":
>> > @@ -64,8 +64,8 @@ class hadoop-hbase {
>> >      }
>> >    }
>> >
>> > -  define server($rootdir, $zookeeper_quorum, $kerberos_realm = "",
>> $heap_size="1024") {
>> > -    include common-config
>> > +  class server {
>> > +    include common_config
>> >
>> >      package { "hbase-regionserver":
>> >        ensure => latest,
>> > @@ -81,8 +81,8 @@ class hadoop-hbase {
>> >      Kerberos::Host_keytab <| title == "hbase" |> ->
>> Service["hbase-regionserver"]
>> >    }
>> >
>> > -  define master($rootdir, $zookeeper_quorum, $kerberos_realm = "",
>> $heap_size="1024") {
>> > -    include common-config
>> > +  class master {
>> > +    include common_config
>> >
>> >      package { "hbase-master":
>> >        ensure => latest,
>> > diff --git a/bigtop-deploy/puppet/modules/hadoop-hive/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/hadoop-hive/manifests/init.pp
>> > index 891d4be..f9dede4 100644
>> > --- a/bigtop-deploy/puppet/modules/hadoop-hive/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/hadoop-hive/manifests/init.pp
>> > @@ -14,7 +14,7 @@
>> >  # limitations under the License.
>> >
>> >  class hadoop-hive {
>> > -  define client($hbase_master = "", $hbase_zookeeper_quorum = "") {
>> > +  class client($hbase_master = "", $hbase_zookeeper_quorum = "") {
>> >      package { "hive":
>> >        ensure => latest,
>> >      }
>> > diff --git a/bigtop-deploy/puppet/modules/hadoop-oozie/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/hadoop-oozie/manifests/init.pp
>> > index 46b937b..f1177e9 100644
>> > --- a/bigtop-deploy/puppet/modules/hadoop-oozie/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/hadoop-oozie/manifests/init.pp
>> > @@ -14,13 +14,13 @@
>> >  # limitations under the License.
>> >
>> >  class hadoop-oozie {
>> > -  define client($kerberos_realm = "") {
>> > +  class client {
>> >      package { "oozie-client":
>> >        ensure => latest,
>> >      }
>> >    }
>> >
>> > -  define server($kerberos_realm = "") {
>> > +  class server($kerberos_realm = "") {
>> >      if ($kerberos_realm) {
>> >        require kerberos::client
>> >        kerberos::host_keytab { "oozie":
>> > diff --git a/bigtop-deploy/puppet/modules/hadoop-pig/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/hadoop-pig/manifests/init.pp
>> > index f26047b..37bfde0 100644
>> > --- a/bigtop-deploy/puppet/modules/hadoop-pig/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/hadoop-pig/manifests/init.pp
>> > @@ -14,7 +14,7 @@
>> >  # limitations under the License.
>> >
>> >  class hadoop-pig {
>> > -  define client {
>> > +  class client {
>> >      package { "pig":
>> >        ensure => latest,
>> >        require => Package["hadoop"],
>> > diff --git a/bigtop-deploy/puppet/modules/hadoop-sqoop/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/hadoop-sqoop/manifests/init.pp
>> > index d1d08db..e0223ba 100644
>> > --- a/bigtop-deploy/puppet/modules/hadoop-sqoop/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/hadoop-sqoop/manifests/init.pp
>> > @@ -14,13 +14,13 @@
>> >  # limitations under the License.
>> >
>> >  class hadoop-sqoop {
>> > -  define client {
>> > +  class client {
>> >      package { "sqoop-client":
>> >        ensure => latest,
>> >      }
>> >    }
>> >
>> > -  define server {
>> > +  class server {
>> >      package { "sqoop-server":
>> >        ensure => latest,
>> >      }
>> > diff --git
>> a/bigtop-deploy/puppet/modules/hadoop-zookeeper/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/hadoop-zookeeper/manifests/init.pp
>> > index 701590e..dfbb6eb 100644
>> > --- a/bigtop-deploy/puppet/modules/hadoop-zookeeper/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/hadoop-zookeeper/manifests/init.pp
>> > @@ -14,14 +14,14 @@
>> >  # limitations under the License.
>> >
>> >  class hadoop-zookeeper {
>> > -  define client {
>> > +  class client {
>> >      package { "zookeeper":
>> >        ensure => latest,
>> >        require => Package["jdk"],
>> >      }
>> >    }
>> >
>> > -  define server($myid, $ensemble = ["localhost:2888:3888"],
>> > +  class server($myid, $ensemble = ["localhost:2888:3888"],
>> >                  $kerberos_realm = "")
>> >    {
>> >      package { "zookeeper-server":
>> > diff --git a/bigtop-deploy/puppet/modules/hadoop/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/hadoop/manifests/init.pp
>> > index 32eebe2..2c631ba 100644
>> > --- a/bigtop-deploy/puppet/modules/hadoop/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/hadoop/manifests/init.pp
>> > @@ -13,7 +13,16 @@
>> >  # See the License for the specific language governing permissions and
>> >  # limitations under the License.
>> >
>> > -class hadoop {
>> > +class hadoop ($hadoop_security_authentication = "simple",
>> > +  $zk = "",
>> > +  # Set from facter if available
>> > +  $hadoop_storage_dirs = split($::hadoop_storage_dirs, ";"),
>> > +  $proxyusers = {
>> > +    oozie => { groups =>
>> 'hudson,testuser,root,hadoop,jenkins,oozie,httpfs,hue,users', hosts => "*"
>> },
>> > +                  hue => { groups =>
>> 'hudson,testuser,root,hadoop,jenkins,oozie,httpfs,hue,users', hosts => "*"
>> },
>> > +               httpfs => { groups =>
>> 'hudson,testuser,root,hadoop,jenkins,oozie,httpfs,hue,users', hosts => "*"
>> } } ) {
>> > +
>> > +  include stdlib
>> >
>> >    /**
>> >     * Common definitions for hadoop nodes.
>> > @@ -36,8 +45,28 @@ class hadoop {
>> >      }
>> >    }
>> >
>> > -  class common {
>> > -    if ($auth == "kerberos") {
>> > +  class common ($hadoop_java_home = undef,
>> > +      $hadoop_classpath = undef,
>> > +      $hadoop_heapsize = undef,
>> > +      $hadoop_opts = undef,
>> > +      $hadoop_namenode_opts = undef,
>> > +      $hadoop_secondarynamenode_opts = undef,
>> > +      $hadoop_datanode_opts = undef,
>> > +      $hadoop_balancer_opts = undef,
>> > +      $hadoop_jobtracker_opts = undef,
>> > +      $hadoop_tasktracker_opts = undef,
>> > +      $hadoop_client_opts = undef,
>> > +      $hadoop_ssh_opts = undef,
>> > +      $hadoop_log_dir = undef,
>> > +      $hadoop_slaves = undef,
>> > +      $hadoop_master = undef,
>> > +      $hadoop_slave_sleep = undef,
>> > +      $hadoop_pid_dir = undef,
>> > +      $hadoop_ident_string = undef,
>> > +      $hadoop_niceness = undef,
>> > +      $hadoop_security_authentication =
>> $hadoop::hadoop_security_authentication ) inherits hadoop {
>> > +
>> > +    if ($hadoop_security_authentication == "kerberos") {
>> >        include hadoop::kerberos
>> >      }
>> >
>> > @@ -58,7 +87,25 @@ class hadoop {
>> >      #}
>> >    }
>> >
>> > -  class common-yarn inherits common {
>> > +  class common_yarn (
>> > +      $yarn_data_dirs = suffix($hadoop::hadoop_storage_dirs, "/yarn"),
>> > +      $kerberos_realm = undef,
>> > +      $hadoop_ps_host,
>> > +      $hadoop_ps_port = "20888",
>> > +      $hadoop_rm_host,
>> > +      $hadoop_rm_port = "8032",
>> > +      $hadoop_rt_port = "8025",
>> > +      $hadoop_sc_port = "8030",
>> > +      $yarn_nodemanager_resource_memory_mb = undef,
>> > +      $yarn_scheduler_maximum_allocation_mb = undef,
>> > +      $yarn_scheduler_minimum_allocation_mb = undef,
>> > +      $yarn_resourcemanager_scheduler_class = undef,
>> > +      $yarn_resourcemanager_ha_enabled = undef,
>> > +      $yarn_resourcemanager_cluster_id = "ha-rm-uri",
>> > +      $yarn_resourcemanager_zk_address = $hadoop::zk) inherits hadoop {
>> > +
>> > +    include common
>> > +
>> >      package { "hadoop-yarn":
>> >        ensure => latest,
>> >        require => [Package["jdk"], Package["hadoop"]],
>> > @@ -76,18 +123,55 @@ class hadoop {
>> >      }
>> >    }
>> >
>> > -  class common-hdfs inherits common {
>> > +  class common_hdfs ($ha = "disabled",
>> > +      $hadoop_config_dfs_block_size = undef,
>> > +      $hadoop_config_namenode_handler_count = undef,
>> > +      $hadoop_dfs_datanode_plugins = "",
>> > +      $hadoop_dfs_namenode_plugins = "",
>> > +      $hadoop_namenode_host = $fqdn,
>> > +      $hadoop_namenode_port = "8020",
>> > +      $hadoop_namenode_http_port = "50070",
>> > +      $hadoop_namenode_https_port = "50470",
>> > +      $hdfs_data_dirs = suffix($hadoop::hadoop_storage_dirs, "/hdfs"),
>> > +      $hdfs_shortcut_reader_user = undef,
>> > +      $hdfs_support_append = undef,
>> > +      $hdfs_webhdfs_enabled = "true",
>> > +      $hdfs_replication = undef,
>> > +      $hdfs_datanode_fsdataset_volume_choosing_policy = undef,
>> > +      $namenode_data_dirs = suffix($hadoop::hadoop_storage_dirs,
>> "/namenode"),
>> > +      $nameservice_id = "ha-nn-uri",
>> > +      $journalnode_edits_dir = undef,
>> > +      $shared_edits_dir = "/hdfs_shared",
>> > +      $testonly_hdfs_sshkeys  = "no",
>> > +      $hadoop_ha_sshfence_user_home = "/var/lib/hadoop-hdfs",
>> > +      $sshfence_user = "hdfs",
>> > +      $zk = $hadoop::zk,
>> > +      $hadoop_config_fs_inmemory_size_mb = undef,
>> > +      $hadoop_security_group_mapping = undef,
>> > +      $hadoop_core_proxyusers = $hadoop::proxyusers,
>> > +      $hadoop_snappy_codec = undef,
>> > +      $hadoop_security_authentication =
>> $hadoop::hadoop_security_authentication ) inherits hadoop {
>> > +
>> > +    require bigtop_util
>> > +    $sshfence_keydir  = "$hadoop_ha_sshfence_user_home/.ssh"
>> > +    $sshfence_keypath = "$sshfence_keydir/id_sshfence"
>> > +    $puppet_confdir   = get_setting("confdir")
>> > +    $configdir        = hiera("hadoop::configdir",
>> "$puppet_confdir/config")
>> > +    $sshfence_privkey = hiera("hadoop::common_hdfs::sshfence_privkey",
>> "$configdir/hadoop/id_sshfence")
>> > +    $sshfence_pubkey  = hiera("hadoop::common_hdfs::sshfence_pubkey",
>> "$configdir/hadoop/id_sshfence.pub")
>> > +
>> > +    include common
>> > +
>> >    # Check if test mode is enforced, so we can install hdfs ssh-keys for
>> passwordless
>> > -    $testonly   = extlookup("testonly_hdfs_sshkeys", 'no')
>> > -    if ($testonly == "yes") {
>> > +    if ($testonly_hdfs_sshkeys == "yes") {
>> >        notify{"WARNING: provided hdfs ssh keys are for testing purposes
>> only.\n
>> >          They shouldn't be used in production cluster": }
>> >        $ssh_user        = "hdfs"
>> >        $ssh_user_home   = "/var/lib/hadoop-hdfs"
>> >        $ssh_user_keydir = "$ssh_user_home/.ssh"
>> >        $ssh_keypath     = "$ssh_user_keydir/id_hdfsuser"
>> > -      $ssh_privkey     = "$extlookup_datadir/hdfs/id_hdfsuser"
>> > -      $ssh_pubkey      = "$extlookup_datadir/hdfs/id_hdfsuser.pub"
>> > +      $ssh_privkey     = "$configdir/hdfs/id_hdfsuser"
>> > +      $ssh_pubkey      = "$configdir/hdfs/id_hdfsuser.pub"
>> >
>> >        file { $ssh_user_keydir:
>> >          ensure  => directory,
>> > @@ -113,14 +197,10 @@ class hadoop {
>> >          require => File[$ssh_user_keydir],
>> >        }
>> >      }
>> > -    if ($auth == "kerberos" and $ha != "disabled") {
>> > +    if ($hadoop_security_authentication == "kerberos" and $ha !=
>> "disabled") {
>> >        fail("High-availability secure clusters are not currently
>> supported")
>> >      }
>> >
>> > -    if ($ha != 'disabled') {
>> > -      $nameservice_id = extlookup("hadoop_ha_nameservice_id",
>> "ha-nn-uri")
>> > -    }
>> > -
>> >      package { "hadoop-hdfs":
>> >        ensure => latest,
>> >        require => [Package["jdk"], Package["hadoop"]],
>> > @@ -139,7 +219,32 @@ class hadoop {
>> >      }
>> >    }
>> >
>> > -  class common-mapred-app inherits common-hdfs {
>> > +  class common_mapred_app (
>> > +      $hadoop_config_io_sort_factor = undef,
>> > +      $hadoop_config_io_sort_mb = undef,
>> > +      $hadoop_config_mapred_child_ulimit = undef,
>> > +      $hadoop_config_mapred_fairscheduler_assignmultiple = undef,
>> > +      $hadoop_config_mapred_fairscheduler_sizebasedweight = undef,
>> > +      $hadoop_config_mapred_job_tracker_handler_count = undef,
>> > +      $hadoop_config_mapred_reduce_parallel_copies = undef,
>> > +      $hadoop_config_mapred_reduce_slowstart_completed_maps = undef,
>> > +      $hadoop_config_mapred_reduce_tasks_speculative_execution = undef,
>> > +      $hadoop_config_tasktracker_http_threads = undef,
>> > +      $hadoop_config_use_compression = undef,
>> > +      $hadoop_hs_host = undef,
>> > +      $hadoop_hs_port = "10020",
>> > +      $hadoop_hs_webapp_port = "19888",
>> > +      $hadoop_jobtracker_fairscheduler_weightadjuster = undef,
>> > +      $hadoop_jobtracker_host,
>> > +      $hadoop_jobtracker_port = "8021",
>> > +      $hadoop_jobtracker_taskscheduler = undef,
>> > +      $hadoop_mapred_jobtracker_plugins = "",
>> > +      $hadoop_mapred_tasktracker_plugins = "",
>> > +      $mapred_acls_enabled = undef,
>> > +      $mapred_data_dirs = suffix($hadoop::hadoop_storage_dirs,
>> "/mapred")) {
>> > +
>> > +    include common_hdfs
>> > +
>> >      package { "hadoop-mapreduce":
>> >        ensure => latest,
>> >        require => [Package["jdk"], Package["hadoop"]],
>> > @@ -157,22 +262,8 @@ class hadoop {
>> >      }
>> >    }
>> >
>> > -  define datanode ($namenode_host, $namenode_port, $port = "50075",
>> $auth = "simple", $dirs = ["/tmp/data"], $ha = 'disabled') {
>> > -
>> > -    $hadoop_namenode_host           = $namenode_host
>> > -    $hadoop_namenode_port           = $namenode_port
>> > -    $hadoop_datanode_port           = $port
>> > -    $hadoop_security_authentication = $auth
>> > -
>> > -    if ($ha != 'disabled') {
>> > -      # Needed by hdfs-site.xml
>> > -      $sshfence_keydir  = "/usr/lib/hadoop/.ssh"
>> > -      $sshfence_keypath = "$sshfence_keydir/id_sshfence"
>> > -      $sshfence_user    = extlookup("hadoop_ha_sshfence_user",
>> "hdfs")
>> > -      $shared_edits_dir = extlookup("hadoop_ha_shared_edits_dir",
>> "/hdfs_shared")
>> > -    }
>> > -
>> > -    include common-hdfs
>> > +  class datanode {
>> > +    include common_hdfs
>> >
>> >      package { "hadoop-hdfs-datanode":
>> >        ensure => latest,
>> > @@ -189,11 +280,11 @@ class hadoop {
>> >        ensure => running,
>> >        hasstatus => true,
>> >        subscribe => [Package["hadoop-hdfs-datanode"],
>> File["/etc/hadoop/conf/core-site.xml"],
>> File["/etc/hadoop/conf/hdfs-site.xml"],
>> File["/etc/hadoop/conf/hadoop-env.sh"]],
>> > -      require => [ Package["hadoop-hdfs-datanode"],
>> File["/etc/default/hadoop-hdfs-datanode"], File[$dirs] ],
>> > +      require => [ Package["hadoop-hdfs-datanode"],
>> File["/etc/default/hadoop-hdfs-datanode"],
>> File[$hadoop::common_hdfs::hdfs_data_dirs] ],
>> >      }
>> >      Kerberos::Host_keytab <| title == "hdfs" |> -> Exec <| tag ==
>> "namenode-format" |> -> Service["hadoop-hdfs-datanode"]
>> >
>> > -    file { $dirs:
>> > +    file { $hadoop::common_hdfs::hdfs_data_dirs:
>> >        ensure => directory,
>> >        owner => hdfs,
>> >        group => hdfs,
>> > @@ -202,14 +293,12 @@ class hadoop {
>> >      }
>> >    }
>> >
>> > -  define httpfs ($namenode_host, $namenode_port, $port = "14000", $auth
>> = "simple", $secret = "hadoop httpfs secret") {
>> > -
>> > -    $hadoop_namenode_host = $namenode_host
>> > -    $hadoop_namenode_port = $namenode_port
>> > -    $hadoop_httpfs_port = $port
>> > -    $hadoop_security_authentication = $auth
>> > +  class httpfs ($hadoop_httpfs_port = "14000",
>> > +      $secret = "hadoop httpfs secret",
>> > +      $hadoop_core_proxyusers = $hadoop::proxyusers,
>> > +      $hadoop_security_authentcation =
>> $hadoop::hadoop_security_authentication ) inherits hadoop {
>> >
>> > -    if ($auth == "kerberos") {
>> > +    if ($hadoop_security_authentication == "kerberos") {
>> >        kerberos::host_keytab { "httpfs":
>> >          spnego => true,
>> >          require => Package["hadoop-httpfs"],
>> > @@ -255,11 +344,12 @@ class hadoop {
>> >      }
>> >    }
>> >
>> > -  define create_hdfs_dirs($hdfs_dirs_meta, $auth="simple") {
>> > +  class create_hdfs_dirs($hdfs_dirs_meta,
>> > +      $hadoop_security_authentcation =
>> $hadoop::hadoop_security_authentication ) inherits hadoop {
>> >      $user = $hdfs_dirs_meta[$title][user]
>> >      $perm = $hdfs_dirs_meta[$title][perm]
>> >
>> > -    if ($auth == "kerberos") {
>> > +    if ($hadoop_security_authentication == "kerberos") {
>> >        require hadoop::kinit
>> >        Exec["HDFS kinit"] -> Exec["HDFS init $title"]
>> >      }
>> > @@ -272,10 +362,11 @@ class hadoop {
>> >      Exec <| title == "activate nn1" |>  -> Exec["HDFS init $title"]
>> >    }
>> >
>> > -  define rsync_hdfs($files, $auth="simple") {
>> > +  class rsync_hdfs($files,
>> > +      $hadoop_security_authentcation =
>> $hadoop::hadoop_security_authentication ) inherits hadoop {
>> >      $src = $files[$title]
>> >
>> > -    if ($auth == "kerberos") {
>> > +    if ($hadoop_security_authentication == "kerberos") {
>> >        require hadoop::kinit
>> >        Exec["HDFS kinit"] -> Exec["HDFS init $title"]
>> >      }
>> > @@ -288,25 +379,11 @@ class hadoop {
>> >      Exec <| title == "activate nn1" |>  -> Exec["HDFS rsync $title"]
>> >    }
>> >
>> > -  define namenode ($host = $fqdn , $port = "8020", $auth = "simple",
>> $dirs = ["/tmp/nn"], $ha = 'disabled', $zk = '') {
>> > -
>> > -    $first_namenode = inline_template("<%= Array(@host)[0] %>")
>> > -    $hadoop_namenode_host = $host
>> > -    $hadoop_namenode_port = $port
>> > -    $hadoop_security_authentication = $auth
>> > -
>> > -    if ($ha != 'disabled') {
>> > -      $sshfence_user      = extlookup("hadoop_ha_sshfence_user",
>> "hdfs")
>> > -      $sshfence_user_home = extlookup("hadoop_ha_sshfence_user_home",
>> "/var/lib/hadoop-hdfs")
>> > -      $sshfence_keydir    = "$sshfence_user_home/.ssh"
>> > -      $sshfence_keypath   = "$sshfence_keydir/id_sshfence"
>> > -      $sshfence_privkey   = extlookup("hadoop_ha_sshfence_privkey",
>>  "$extlookup_datadir/hadoop/id_sshfence")
>> > -      $sshfence_pubkey    = extlookup("hadoop_ha_sshfence_pubkey",
>> "$extlookup_datadir/hadoop/id_sshfence.pub")
>> > -      $shared_edits_dir   = extlookup("hadoop_ha_shared_edits_dir",
>>  "/hdfs_shared")
>> > -      $nfs_server         = extlookup("hadoop_ha_nfs_server",
>>  "")
>> > -      $nfs_path           = extlookup("hadoop_ha_nfs_path",
>>  "")
>> > -
>> > -      file { $sshfence_keydir:
>> > +  class namenode ( $nfs_server = "", $nfs_path = "" ) {
>> > +    include common_hdfs
>> > +
>> > +    if ($hadoop::common_hdfs::ha != 'disabled') {
>> > +      file { $hadoop::common_hdfs::sshfence_keydir:
>> >          ensure  => directory,
>> >          owner   => 'hdfs',
>> >          group   => 'hdfs',
>> > @@ -314,25 +391,25 @@ class hadoop {
>> >          require => Package["hadoop-hdfs"],
>> >        }
>> >
>> > -      file { $sshfence_keypath:
>> > -        source  => $sshfence_privkey,
>> > +      file { $hadoop::common_hdfs::sshfence_keypath:
>> > +        source  => $hadoop::common_hdfs::sshfence_privkey,
>> >          owner   => 'hdfs',
>> >          group   => 'hdfs',
>> >          mode    => '0600',
>> >          before  => Service["hadoop-hdfs-namenode"],
>> > -        require => File[$sshfence_keydir],
>> > +        require => File[$hadoop::common_hdfs::sshfence_keydir],
>> >        }
>> >
>> > -      file { "$sshfence_keydir/authorized_keys":
>> > +      file { "$hadoop::common_hdfs::sshfence_keydir/authorized_keys":
>> >          source  => $sshfence_pubkey,
>> >          owner   => 'hdfs',
>> >          group   => 'hdfs',
>> >          mode    => '0600',
>> >          before  => Service["hadoop-hdfs-namenode"],
>> > -        require => File[$sshfence_keydir],
>> > +        require => File[$hadoop::common_hdfs::sshfence_keydir],
>> >        }
>> >
>> > -      file { $shared_edits_dir:
>> > +      file { $hadoop::common_hdfs::shared_edits_dir:
>> >          ensure => directory,
>> >        }
>> >
>> > @@ -343,20 +420,18 @@ class hadoop {
>> >
>> >          require nfs::client
>> >
>> > -        mount { $shared_edits_dir:
>> > +        mount { $hadoop::common_hdfs::shared_edits_dir:
>> >            ensure  => "mounted",
>> >            atboot  => true,
>> >            device  => "${nfs_server}:${nfs_path}",
>> >            fstype  => "nfs",
>> >            options => "tcp,soft,timeo=10,intr,rsize=32768,wsize=32768",
>> > -          require => File[$shared_edits_dir],
>> > +          require => File[$hadoop::common::hdfs::shared_edits_dir],
>> >            before  => Service["hadoop-hdfs-namenode"],
>> >          }
>> >        }
>> >      }
>> >
>> > -    include common-hdfs
>> > -
>> >      package { "hadoop-hdfs-namenode":
>> >        ensure => latest,
>> >        require => Package["jdk"],
>> > @@ -370,7 +445,7 @@ class hadoop {
>> >      }
>> >      Kerberos::Host_keytab <| title == "hdfs" |> -> Exec <| tag ==
>> "namenode-format" |> -> Service["hadoop-hdfs-namenode"]
>> >
>> > -    if ($ha == "auto") {
>> > +    if ($hadoop::common_hdfs::ha == "auto") {
>> >        package { "hadoop-hdfs-zkfc":
>> >          ensure => latest,
>> >          require => Package["jdk"],
>> > @@ -385,17 +460,18 @@ class hadoop {
>> >        Service <| title == "hadoop-hdfs-zkfc" |> -> Service <| title ==
>> "hadoop-hdfs-namenode" |>
>> >      }
>> >
>> > +    $first_namenode =
>> any2array($hadoop::common_hdfs::hadoop_namenode_host)[0]
>> >      if ($::fqdn == $first_namenode) {
>> >        exec { "namenode format":
>> >          user => "hdfs",
>> >          command => "/bin/bash -c 'yes Y | hdfs namenode -format >>
>> /var/lib/hadoop-hdfs/nn.format.log 2>&1'",
>> > -        creates => "${dirs[0]}/current/VERSION",
>> > -        require => [ Package["hadoop-hdfs-namenode"], File[$dirs],
>> File["/etc/hadoop/conf/hdfs-site.xml"] ],
>> > +        creates =>
>> "${hadoop::common_hdfs::namenode_data_dirs[0]}/current/VERSION",
>> > +        require => [ Package["hadoop-hdfs-namenode"],
>> File[$hadoop::common_hdfs::namenode_data_dirs],
>> File["/etc/hadoop/conf/hdfs-site.xml"] ],
>> >          tag     => "namenode-format",
>> >        }
>> >
>> > -      if ($ha != "disabled") {
>> > -        if ($ha == "auto") {
>> > +      if ($hadoop::common_hdfs::ha != "disabled") {
>> > +        if ($hadoop::common_hdfs::ha == "auto") {
>> >            exec { "namenode zk format":
>> >              user => "hdfs",
>> >              command => "/bin/bash -c 'yes N | hdfs zkfc -formatZK >>
>> /var/lib/hadoop-hdfs/zk.format.log 2>&1 || :'",
>> > @@ -413,11 +489,11 @@ class hadoop {
>> >            }
>> >          }
>> >        }
>> > -    } elsif ($ha != "disabled") {
>> > -      hadoop::namedir_copy { $namenode_data_dirs:
>> > +    } elsif ($hadoop::common_hdfs::ha != "disabled") {
>> > +      hadoop::namedir_copy { $hadoop::common_hdfs::namenode_data_dirs:
>> >          source       => $first_namenode,
>> > -        ssh_identity => $sshfence_keypath,
>> > -        require      => File[$sshfence_keypath],
>> > +        ssh_identity => $hadoop::common_hdfs::sshfence_keypath,
>> > +        require      => File[$hadoop::common_hdfs::sshfence_keypath],
>> >        }
>> >      }
>> >
>> > @@ -427,7 +503,7 @@ class hadoop {
>> >          require => [Package["hadoop-hdfs-namenode"]],
>> >      }
>> >
>> > -    file { $dirs:
>> > +    file { $hadoop::common_hdfs::namenode_data_dirs:
>> >        ensure => directory,
>> >        owner => hdfs,
>> >        group => hdfs,
>> > @@ -445,12 +521,8 @@ class hadoop {
>> >      }
>> >    }
>> >
>> > -  define secondarynamenode ($namenode_host, $namenode_port, $port =
>> "50090", $auth = "simple") {
>> > -
>> > -    $hadoop_secondarynamenode_port = $port
>> > -    $hadoop_security_authentication = $auth
>> > -
>> > -    include common-hdfs
>> > +  class secondarynamenode {
>> > +    include common_hdfs
>> >
>> >      package { "hadoop-hdfs-secondarynamenode":
>> >        ensure => latest,
>> > @@ -472,15 +544,34 @@ class hadoop {
>> >      Kerberos::Host_keytab <| title == "hdfs" |> ->
>> Service["hadoop-hdfs-secondarynamenode"]
>> >    }
>> >
>> > +  class journalnode {
>> > +    include common_hdfs
>> >
>> > -  define resourcemanager ($host = $fqdn, $port = "8032", $rt_port =
>> "8025", $sc_port = "8030", $auth = "simple") {
>> > -    $hadoop_rm_host = $host
>> > -    $hadoop_rm_port = $port
>> > -    $hadoop_rt_port = $rt_port
>> > -    $hadoop_sc_port = $sc_port
>> > -    $hadoop_security_authentication = $auth
>> > +    package { "hadoop-hdfs-journalnode":
>> > +      ensure => latest,
>> > +      require => Package["jdk"],
>> > +    }
>> > +
>> > +    service { "hadoop-hdfs-journalnode":
>> > +      ensure => running,
>> > +      hasstatus => true,
>> > +      subscribe => [Package["hadoop-hdfs-journalnode"],
>> File["/etc/hadoop/conf/hadoop-env.sh"],
>> > +                    File["/etc/hadoop/conf/hdfs-site.xml"],
>> File["/etc/hadoop/conf/core-site.xml"]],
>> > +      require => [ Package["hadoop-hdfs-journalnode"],
>> File[$hadoop::common_hdfs::journalnode_edits_dir] ],
>> > +    }
>> > +
>> > +    file {
>> "${hadoop::common_hdfs::journalnode_edits_dir}/${hadoop::common_hdfs::nameservice_id}":
>> > +      ensure => directory,
>> > +      owner => 'hdfs',
>> > +      group => 'hdfs',
>> > +      mode => 755,
>> > +      require => [Package["hadoop-hdfs"]],
>> > +    }
>> > +  }
>> >
>> > -    include common-yarn
>> > +
>> > +  class resourcemanager {
>> > +    include common_yarn
>> >
>> >      package { "hadoop-yarn-resourcemanager":
>> >        ensure => latest,
>> > @@ -497,12 +588,8 @@ class hadoop {
>> >      Kerberos::Host_keytab <| tag == "mapreduce" |> ->
>> Service["hadoop-yarn-resourcemanager"]
>> >    }
>> >
>> > -  define proxyserver ($host = $fqdn, $port = "8088", $auth = "simple") {
>> > -    $hadoop_ps_host = $host
>> > -    $hadoop_ps_port = $port
>> > -    $hadoop_security_authentication = $auth
>> > -
>> > -    include common-yarn
>> > +  class proxyserver {
>> > +    include common_yarn
>> >
>> >      package { "hadoop-yarn-proxyserver":
>> >        ensure => latest,
>> > @@ -519,13 +606,8 @@ class hadoop {
>> >      Kerberos::Host_keytab <| tag == "mapreduce" |> ->
>> Service["hadoop-yarn-proxyserver"]
>> >    }
>> >
>> > -  define historyserver ($host = $fqdn, $port = "10020", $webapp_port =
>> "19888", $auth = "simple") {
>> > -    $hadoop_hs_host = $host
>> > -    $hadoop_hs_port = $port
>> > -    $hadoop_hs_webapp_port = $app_port
>> > -    $hadoop_security_authentication = $auth
>> > -
>> > -    include common-mapred-app
>> > +  class historyserver {
>> > +    include common_mapred_app
>> >
>> >      package { "hadoop-mapreduce-historyserver":
>> >        ensure => latest,
>> > @@ -543,12 +625,8 @@ class hadoop {
>> >    }
>> >
>> >
>> > -  define nodemanager ($rm_host, $rm_port, $rt_port, $auth = "simple",
>> $dirs = ["/tmp/yarn"]){
>> > -    $hadoop_rm_host = $rm_host
>> > -    $hadoop_rm_port = $rm_port
>> > -    $hadoop_rt_port = $rt_port
>> > -
>> > -    include common-yarn
>> > +  class nodemanager {
>> > +    include common_yarn
>> >
>> >      package { "hadoop-yarn-nodemanager":
>> >        ensure => latest,
>> > @@ -560,11 +638,11 @@ class hadoop {
>> >        hasstatus => true,
>> >        subscribe => [Package["hadoop-yarn-nodemanager"],
>> File["/etc/hadoop/conf/hadoop-env.sh"],
>> >                      File["/etc/hadoop/conf/yarn-site.xml"],
>> File["/etc/hadoop/conf/core-site.xml"]],
>> > -      require => [ Package["hadoop-yarn-nodemanager"], File[$dirs] ],
>> > +      require => [ Package["hadoop-yarn-nodemanager"],
>> File[$hadoop::common_yarn::yarn_data_dirs] ],
>> >      }
>> >      Kerberos::Host_keytab <| tag == "mapreduce" |> ->
>> Service["hadoop-yarn-nodemanager"]
>> >
>> > -    file { $dirs:
>> > +    file { $hadoop::common_yarn::yarn_data_dirs:
>> >        ensure => directory,
>> >        owner => yarn,
>> >        group => yarn,
>> > @@ -573,21 +651,10 @@ class hadoop {
>> >      }
>> >    }
>> >
>> > -  define mapred-app ($namenode_host, $namenode_port, $jobtracker_host,
>> $jobtracker_port, $auth = "simple", $jobhistory_host = "",
>> $jobhistory_port="10020", $dirs = ["/tmp/mr"]){
>> > -    $hadoop_namenode_host = $namenode_host
>> > -    $hadoop_namenode_port = $namenode_port
>> > -    $hadoop_jobtracker_host = $jobtracker_host
>> > -    $hadoop_jobtracker_port = $jobtracker_port
>> > -    $hadoop_security_authentication = $auth
>> > +  class mapred-app {
>> > +    include common_mapred_app
>> >
>> > -    include common-mapred-app
>> > -
>> > -    if ($jobhistory_host != "") {
>> > -      $hadoop_hs_host = $jobhistory_host
>> > -      $hadoop_hs_port = $jobhistory_port
>> > -    }
>> > -
>> > -    file { $dirs:
>> > +    file { $hadoop::common_mapred_app::mapred_data_dirs:
>> >        ensure => directory,
>> >        owner => yarn,
>> >        group => yarn,
>> > @@ -596,12 +663,9 @@ class hadoop {
>> >      }
>> >    }
>> >
>> > -  define client ($namenode_host, $namenode_port, $jobtracker_host,
>> $jobtracker_port, $auth = "simple") {
>> > -      $hadoop_namenode_host = $namenode_host
>> > -      $hadoop_namenode_port = $namenode_port
>> > -      $hadoop_jobtracker_host = $jobtracker_host
>> > -      $hadoop_jobtracker_port = $jobtracker_port
>> > -      $hadoop_security_authentication = $auth
>> > +  class client {
>> > +      include common_mapred_app
>> > +
>> >        $hadoop_client_packages = $operatingsystem ? {
>> >          /(OracleLinux|CentOS|RedHat|Fedora)/  => [ "hadoop-doc",
>> "hadoop-hdfs-fuse", "hadoop-client", "hadoop-libhdfs", "hadoop-debuginfo" ],
>> >          /(SLES|OpenSuSE)/                     => [ "hadoop-doc",
>> "hadoop-hdfs-fuse", "hadoop-client", "hadoop-libhdfs" ],
>> > @@ -609,8 +673,6 @@ class hadoop {
>> >          default                               => [ "hadoop-doc",
>> "hadoop-hdfs-fuse", "hadoop-client" ],
>> >        }
>> >
>> > -      include common-mapred-app
>> > -
>> >        package { $hadoop_client_packages:
>> >          ensure => latest,
>> >          require => [Package["jdk"], Package["hadoop"],
>> Package["hadoop-hdfs"], Package["hadoop-mapreduce"]],
>> > diff --git a/bigtop-deploy/puppet/modules/hadoop/templates/hadoop-env.sh
>> b/bigtop-deploy/puppet/modules/hadoop/templates/hadoop-env.sh
>> > index 6b28bdd..f2e355b 100644
>> > --- a/bigtop-deploy/puppet/modules/hadoop/templates/hadoop-env.sh
>> > +++ b/bigtop-deploy/puppet/modules/hadoop/templates/hadoop-env.sh
>> > @@ -15,7 +15,7 @@
>> >
>> >  <% def shell_config(shell_var, *puppet_var)
>> >       puppet_var = puppet_var[0] || shell_var.downcase
>> > -     if has_variable? puppet_var
>> > +     if @puppet_var
>> >          return "export #{shell_var}=#{scope.lookupvar(puppet_var)}"
>> >       else
>> >          return "#export #{shell_var}="
>> > diff --git a/bigtop-deploy/puppet/modules/hadoop/templates/hdfs-site.xml
>> b/bigtop-deploy/puppet/modules/hadoop/templates/hdfs-site.xml
>> > index 351508d..11c59be 100644
>> > --- a/bigtop-deploy/puppet/modules/hadoop/templates/hdfs-site.xml
>> > +++ b/bigtop-deploy/puppet/modules/hadoop/templates/hdfs-site.xml
>> > @@ -30,7 +30,7 @@
>> >  <%   end -%>
>> >
>> >    <property>
>> > -    <name>dfs.federation.nameservices</name>
>> > +    <name>dfs.nameservices</name>
>> >      <value><%= @nameservice_id %></value>
>> >    </property>
>> >
>> > @@ -47,7 +47,12 @@
>> >
>> >    <property>
>> >      <name>dfs.namenode.http-address.<%= @nameservice_id %>.nn<%= idx+1
>> %></name>
>> > -    <value><%= host %>:50070</value>
>> > +    <value><%= host %>:<%= @hadoop_namenode_http_port %></value>
>> > +  </property>
>> > +
>> > +  <property>
>> > +    <name>dfs.namenode.https-address.<%= @nameservice_id %>.nn<%= idx+1
>> %></name>
>> > +    <value><%= host %>:<%= @hadoop_namenode_https_port %></value>
>> >    </property>
>> >
>> >  <%   end -%>
>> > @@ -249,7 +254,28 @@
>> >  <% end -%>
>> >    <property>
>> >      <name>dfs.webhdfs.enabled</name>
>> > -    <value>true</value>
>> > +    <value><%= @hdfs_webhdfs_enabled %></value>
>> > +  </property>
>> > +
>> > +<% if @hdfs_datanode_fsdataset_volume_choosing_policy -%>
>> > +  <property>
>> > +    <name>dfs.datanode.fsdataset.volume.choosing.policy</name>
>> > +    <value><%= @hdfs_datanode_fsdataset_volume_choosing_policy
>> %></value>
>> > +  </property>
>> > +
>> > +<% end -%>
>> > +<% if @hdfs_replication -%>
>> > +  <property>
>> > +    <name>dfs.replication</name>
>> > +    <value><%= @hdfs_replication %></value>
>> > +  </property>
>> > +
>> > +<% end -%>
>> > +<% if @journalnode_edits_dir -%>
>> > +  <property>
>> > +    <name>dfs.journalnode.edits.dir</name>
>> > +    <value><%= @journalnode_edits_dir %></value>
>> >    </property>
>> >
>> > +<% end -%>
>> >  </configuration>
>> > diff --git a/bigtop-deploy/puppet/modules/hadoop/templates/yarn-site.xml
>> b/bigtop-deploy/puppet/modules/hadoop/templates/yarn-site.xml
>> > index 0713d97..57ce85a 100644
>> > --- a/bigtop-deploy/puppet/modules/hadoop/templates/yarn-site.xml
>> > +++ b/bigtop-deploy/puppet/modules/hadoop/templates/yarn-site.xml
>> > @@ -17,6 +17,7 @@
>> >  -->
>> >  <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
>> >
>> > +<% resourcemanager_hosts = Array(@hadoop_rm_host) -%>
>> >  <configuration>
>> >  <% if @hadoop_security_authentication == "kerberos" %>
>> >    <!-- JobTracker security configs -->
>> > @@ -61,6 +62,47 @@
>> >      <value><%= @hadoop_ps_host %>:<%= @hadoop_ps_port %></value>
>> >    </property>
>> >
>> > +<% if @yarn_resourcemanager_ha_enabled -%>
>> > +
>> > +  <property>
>> > +    <name>yarn.resourcemanager.ha.enabled</name>
>> > +    <value><%= @yarn_resourcemanager_ha_enabled %></value>
>> > +  </property>
>> > +
>> > +  <property>
>> > +    <name>yarn.resourcemanager.cluster-id</name>
>> > +    <value><%= @yarn_resourcemanager_cluster_id %></value>
>> > +  </property>
>> > +
>> > +  <property>
>> > +    <name>yarn.resourcemanager.ha.rm-ids</name>
>> > +    <value><%= (1..resourcemanager_hosts.length).map { |n| "rm#{n}"
>> }.join(",") %></value>
>> > +  </property>
>> > +
>> > +<%   resourcemanager_hosts.each_with_index do |host,idx| -%>
>> > +  <property>
>> > +    <name>yarn.resourcemanager.resource-tracker.address.rm<%= idx+1
>> %></name>
>> > +    <value><%= host %>:<%= @hadoop_rt_port %></value>
>> > +  </property>
>> > +
>> > +  <property>
>> > +    <name>yarn.resourcemanager.address.rm<%= idx+1 %></name>
>> > +    <value><%= host %>:<%= @hadoop_rm_port %></value>
>> > +  </property>
>> > +
>> > +  <property>
>> > +    <name>yarn.resourcemanager.scheduler.address.rm<%= idx+1 %></name>
>> > +    <value><%= host %>:<%= @hadoop_sc_port %></value>
>> > +  </property>
>> > +<%   end -%>
>> > +<% if @yarn_resourcemanager_zk_address -%>
>> > +
>> > +  <property>
>> > +    <name>yarn.resourcemanager.zk-address</name>
>> > +    <value><%= @yarn_resourcemanager_zk_address %></value>
>> > +  </property>
>> > +<% end -%>
>> > +<% else -%>
>> >    <property>
>> >      <name>yarn.resourcemanager.resource-tracker.address</name>
>> >      <value><%= @hadoop_rm_host %>:<%= @hadoop_rt_port %></value>
>> > @@ -75,6 +117,7 @@
>> >      <name>yarn.resourcemanager.scheduler.address</name>
>> >      <value><%= @hadoop_rm_host %>:<%= @hadoop_sc_port %></value>
>> >    </property>
>> > +<% end -%>
>> >
>> >    <property>
>> >      <name>yarn.nodemanager.aux-services</name>
>> > @@ -125,4 +168,32 @@
>> >          $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
>> >       </value>
>> >    </property>
>> > +<% if @yarn_scheduler_minimum_allocation_mb -%>
>> > +
>> > +  <property>
>> > +    <name>yarn.scheduler.minimum-allocation-mb</name>
>> > +    <value><%= @yarn_scheduler_minimum_allocation_mb %></value>
>> > +  </property>
>> > +<% end -%>
>> > +<% if @yarn_scheduler_maximum_allocation_mb -%>
>> > +
>> > +  <property>
>> > +    <name>yarn.scheduler.maximum-allocation-mb</name>
>> > +    <value><%= @yarn_scheduler_maximum_allocation_mb %></value>
>> > +  </property>
>> > +<% end -%>
>> > +<% if @yarn_nodemanager_resource_memory_mb -%>
>> > +
>> > +  <property>
>> > +    <name>yarn.nodemanager.resource.memory-mb</name>
>> > +    <value><%= @yarn_nodemanager_resource_memory_mb %></value>
>> > +  </property>
>> > +<% end -%>
>> > +<% if @yarn_resourcemanager_scheduler_class -%>
>> > +
>> > +  <property>
>> > +    <name>yarn.resourcemanager.scheduler.class</name>
>> > +    <value><%= @yarn_resourcemanager_scheduler_class %></value>
>> > +  </property>
>> > +<% end -%>
>> >  </configuration>
>> > diff --git a/bigtop-deploy/puppet/modules/hcatalog/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/hcatalog/manifests/init.pp
>> > index f9c07aa..6585dd3 100644
>> > --- a/bigtop-deploy/puppet/modules/hcatalog/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/hcatalog/manifests/init.pp
>> > @@ -14,7 +14,7 @@
>> >  # limitations under the License.
>> >
>> >  class hcatalog {
>> > -  define server($port = "9083", $kerberos_realm = "") {
>> > +  class server($port = "9083", $kerberos_realm = "") {
>> >      package { "hcatalog-server":
>> >        ensure => latest,
>> >      }
>> > @@ -33,7 +33,7 @@ class hcatalog {
>> >    }
>> >
>> >    class webhcat {
>> > -    define server($port = "50111", $kerberos_realm = "") {
>> > +    class server($port = "50111", $kerberos_realm = "") {
>> >        package { "webhcat-server":
>> >          ensure => latest,
>> >        }
>> > diff --git a/bigtop-deploy/puppet/modules/hue/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/hue/manifests/init.pp
>> > index f4c6f95..e5c7762 100644
>> > --- a/bigtop-deploy/puppet/modules/hue/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/hue/manifests/init.pp
>> > @@ -14,7 +14,7 @@
>> >  # limitations under the License.
>> >
>> >  class hue {
>> > -  define server($sqoop_url, $solr_url, $hbase_thrift_url,
>> > +  class server($sqoop_url, $solr_url, $hbase_thrift_url,
>> >                  $webhdfs_url, $rm_host, $rm_port, $oozie_url, $rm_url,
>> $rm_proxy_url, $history_server_url,
>> >                  $hue_host = "0.0.0.0", $hue_port = "8888", $default_fs
>> = "hdfs://localhost:8020",
>> >                  $kerberos_realm = "") {
>> > diff --git a/bigtop-deploy/puppet/modules/kerberos/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/kerberos/manifests/init.pp
>> > index 5476235..dd83500 100644
>> > --- a/bigtop-deploy/puppet/modules/kerberos/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/kerberos/manifests/init.pp
>> > @@ -14,23 +14,12 @@
>> >  # limitations under the License.
>> >
>> >  class kerberos {
>> > -  class site {
>> > -    # The following is our interface to the world. This is what we allow
>> > -    # users to tweak from the outside (see tests/init.pp for a complete
>> > -    # example) before instantiating target classes.
>> > -    # Once we migrate to Puppet 2.6 we can potentially start using
>> > -    # parametrized classes instead.
>> > -    $domain     = $kerberos_domain     ? { '' => inline_template('<%=
>> domain %>'),
>> > -                                           default => $kerberos_domain }
>> > -    $realm      = $kerberos_realm      ? { '' => inline_template('<%=
>> domain.upcase %>'),
>> > -                                           default => $kerberos_realm }
>> > -    $kdc_server = $kerberos_kdc_server ? { '' => 'localhost',
>> > -                                           default =>
>> $kerberos_kdc_server }
>> > -    $kdc_port   = $kerberos_kdc_port   ? { '' => '88',
>> > -                                           default =>
>> $kerberos_kdc_port }
>> > -    $admin_port = 749 /* BUG: linux daemon packaging doesn't let us
>> tweak this */
>> > -
>> > -    $keytab_export_dir = "/var/lib/bigtop_keytabs"
>> > +  class site ($domain = inline_template('<%= domain %>'),
>> > +      $realm = inline_template('<%= domain.upcase %>'),
>> > +      $kdc_server = 'localhost',
>> > +      $kdc_port = '88',
>> > +      $admin_port = 749,
>> > +      $keytab_export_dir = "/var/lib/bigtop_keytabs") {
>> >
>> >      case $operatingsystem {
>> >          'ubuntu': {
>> > diff --git a/bigtop-deploy/puppet/modules/mahout/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/mahout/manifests/init.pp
>> > index 9f10b17..0d9bd8c 100644
>> > --- a/bigtop-deploy/puppet/modules/mahout/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/mahout/manifests/init.pp
>> > @@ -14,7 +14,7 @@
>> >  # limitations under the License.
>> >
>> >  class mahout {
>> > -  define client {
>> > +  class client {
>> >      package { "mahout":
>> >        ensure => latest,
>> >        require => Package["hadoop"],
>> > diff --git a/bigtop-deploy/puppet/modules/solr/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/solr/manifests/init.pp
>> > index 22c4d9e..119fbd1 100644
>> > --- a/bigtop-deploy/puppet/modules/solr/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/solr/manifests/init.pp
>> > @@ -14,7 +14,7 @@
>> >  # limitations under the License.
>> >
>> >  class solr {
>> > -  define server($port = "1978", $port_admin = "1979", $zk =
>> "localhost:2181", $root_url = "hdfs://localhost:8020/solr", $kerberos_realm
>> = "") {
>> > +  class server($port = "1978", $port_admin = "1979", $zk =
>> "localhost:2181", $root_url = "hdfs://localhost:8020/solr", $kerberos_realm
>> = "") {
>> >      package { "solr-server":
>> >        ensure => latest,
>> >      }
>> > diff --git a/bigtop-deploy/puppet/modules/spark/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/spark/manifests/init.pp
>> > index 1281ff4..d7a9360 100644
>> > --- a/bigtop-deploy/puppet/modules/spark/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/spark/manifests/init.pp
>> > @@ -14,7 +14,7 @@
>> >  # limitations under the License.
>> >
>> >  class spark {
>> > -  class common {
>> > +  class common ($master_host = $fqdn, $master_port = "7077",
>> $master_ui_port = "18080") {
>> >      package { "spark-core":
>> >        ensure => latest,
>> >      }
>> > @@ -25,7 +25,7 @@ class spark {
>> >      }
>> >    }
>> >
>> > -  define master($master_host = $fqdn, $master_port = "7077",
>> $master_ui_port = "18080") {
>> > +  class master {
>> >      include common
>> >
>> >      package { "spark-master":
>> > @@ -43,7 +43,7 @@ class spark {
>> >      }
>> >    }
>> >
>> > -  define worker($master_host = $fqdn, $master_port = "7077",
>> $master_ui_port = "18080") {
>> > +  class worker {
>> >      include common
>> >
>> >      package { "spark-worker":
>> > diff --git a/bigtop-deploy/puppet/modules/tachyon/manifests/init.pp
>> b/bigtop-deploy/puppet/modules/tachyon/manifests/init.pp
>> > index 55fb34a..fe1a7b6 100644
>> > --- a/bigtop-deploy/puppet/modules/tachyon/manifests/init.pp
>> > +++ b/bigtop-deploy/puppet/modules/tachyon/manifests/init.pp
>> > @@ -10,7 +10,7 @@
>> >  # See the License for the specific language governing permissions and
>> >  # limitations under the License.
>> >  class tachyon {
>> > -  class common {
>> > +  class common ($master_host){
>> >      package { "tachyon":
>> >        ensure => latest,
>> >      }
>> > @@ -29,7 +29,7 @@ class tachyon {
>> >      }
>> >    }
>> >
>> > -  define master($master_host) {
>> > +  class master {
>> >      include common
>> >
>> >     exec {
>> > @@ -49,10 +49,10 @@ class tachyon {
>> >
>> >    }
>> >
>> > -  define worker($master_host) {
>> > +  class worker {
>> >      include common
>> >
>> > -   if ( $fqdn == $master_host ) {
>> > +   if ( $fqdn == $tachyon::common::master_host ) {
>> >        notice("tachyon ---> master host")
>> >        # We want master to run first in all cases
>> >        Service["tachyon-master"] ~> Service["tachyon-worker"]
>> > --
>> > 2.1.4
>> >
>>
>>

Reply via email to