aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvans Ye <evansye@apache.org>2017-07-01 12:54:29 +0000
committerEvans Ye <evansye@apache.org>2017-07-01 12:54:29 +0000
commitd80b82dab3ea335d71e9a44094b178596ac5abd8 (patch)
treec5c7dbc94c8b587364dd69611a2862c789880f28
parent5a2a1a86b17f73260229137b0b008385fd32bfae (diff)
parent58f3f5365b4e184aa3cb0287f570a91870ee1f0e (diff)
merge master into branch-1.2 for 1.2.1 release
-rw-r--r--.dockerignore1
-rw-r--r--README.md2
-rw-r--r--bigtop-bigpetstore/bigpetstore-mapreduce/build.gradle2
-rwxr-xr-xbigtop-bigpetstore/bigpetstore-mapreduce/src/test/java/org/apache/bigtop/bigpetstore/generator/TestPetStoreTransactionGeneratorJob.java4
-rwxr-xr-xbigtop-ci/build.sh54
-rwxr-xr-xbigtop-ci/entrypoint.sh4
-rw-r--r--bigtop-deploy/juju/hadoop-hbase/README.md67
-rw-r--r--bigtop-deploy/juju/hadoop-hbase/bundle-dev.yaml14
-rw-r--r--bigtop-deploy/juju/hadoop-hbase/bundle-local.yaml14
-rw-r--r--bigtop-deploy/juju/hadoop-hbase/bundle.yaml26
-rwxr-xr-xbigtop-deploy/juju/hadoop-hbase/tests/01-bundle.py2
-rw-r--r--bigtop-deploy/juju/hadoop-hbase/tests/tests.yaml2
-rw-r--r--bigtop-deploy/juju/hadoop-kafka/README.md49
-rw-r--r--bigtop-deploy/juju/hadoop-kafka/bundle-dev.yaml15
-rw-r--r--bigtop-deploy/juju/hadoop-kafka/bundle-local.yaml15
-rw-r--r--bigtop-deploy/juju/hadoop-kafka/bundle.yaml27
-rwxr-xr-xbigtop-deploy/juju/hadoop-kafka/tests/01-bundle.py2
-rw-r--r--bigtop-deploy/juju/hadoop-kafka/tests/tests.yaml2
-rw-r--r--bigtop-deploy/juju/hadoop-processing/README.md45
-rw-r--r--bigtop-deploy/juju/hadoop-processing/bundle-dev.yaml11
-rw-r--r--bigtop-deploy/juju/hadoop-processing/bundle-local.yaml11
-rw-r--r--bigtop-deploy/juju/hadoop-processing/bundle.yaml19
-rwxr-xr-xbigtop-deploy/juju/hadoop-processing/tests/01-bundle.py2
-rw-r--r--bigtop-deploy/juju/hadoop-processing/tests/tests.yaml2
-rw-r--r--bigtop-deploy/juju/hadoop-spark/README.md146
-rw-r--r--bigtop-deploy/juju/hadoop-spark/bundle-dev.yaml45
-rw-r--r--bigtop-deploy/juju/hadoop-spark/bundle-local.yaml45
-rw-r--r--bigtop-deploy/juju/hadoop-spark/bundle.yaml55
-rwxr-xr-xbigtop-deploy/juju/hadoop-spark/tests/01-bundle.py7
-rw-r--r--bigtop-deploy/juju/hadoop-spark/tests/tests.yaml10
-rw-r--r--bigtop-deploy/juju/spark-processing/README.md109
-rw-r--r--bigtop-deploy/juju/spark-processing/bundle-dev.yaml10
-rw-r--r--bigtop-deploy/juju/spark-processing/bundle-local.yaml10
-rw-r--r--bigtop-deploy/juju/spark-processing/bundle.yaml17
-rw-r--r--bigtop-deploy/juju/spark-processing/tests/tests.yaml10
-rw-r--r--bigtop-deploy/puppet/README.md1
-rw-r--r--bigtop-deploy/puppet/hieradata/bigtop/cluster.yaml5
-rw-r--r--bigtop-deploy/puppet/hieradata/site.yaml14
-rw-r--r--bigtop-deploy/puppet/manifests/bigtop_repo.pp70
-rw-r--r--bigtop-deploy/puppet/manifests/cluster.pp9
-rw-r--r--bigtop-deploy/puppet/manifests/jdk.pp72
-rw-r--r--bigtop-deploy/puppet/manifests/site.pp76
-rw-r--r--bigtop-deploy/puppet/modules/flink/manifests/init.pp14
-rw-r--r--bigtop-deploy/puppet/modules/ignite_hadoop/templates/default-config.xml27
-rw-r--r--bigtop-deploy/puppet/modules/kerberos/manifests/init.pp13
-rw-r--r--bigtop-deploy/puppet/modules/spark/manifests/init.pp12
-rw-r--r--bigtop-deploy/puppet/modules/spark/templates/spark-defaults.conf15
-rwxr-xr-xbigtop-deploy/puppet/modules/spark/templates/spark-env.sh8
-rw-r--r--bigtop-deploy/puppet/modules/zeppelin/manifests/init.pp1
-rw-r--r--bigtop-packages/src/charm/README.md23
-rw-r--r--bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/README.md39
-rw-r--r--bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/layer.yaml1
-rw-r--r--bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/metadata.yaml5
-rw-r--r--bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/metrics.yaml6
-rw-r--r--bigtop-packages/src/charm/hadoop/layer-hadoop-plugin/README.md35
-rw-r--r--bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/README.md39
-rwxr-xr-xbigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/mrbench1
-rwxr-xr-xbigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/nnbench1
-rwxr-xr-xbigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseBenchmark.py3
-rwxr-xr-xbigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/smoke-test10
-rwxr-xr-xbigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/teragen1
-rwxr-xr-xbigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/terasort1
-rwxr-xr-xbigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/testdfsio1
-rw-r--r--bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/metadata.yaml5
-rw-r--r--bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/metrics.yaml2
-rw-r--r--bigtop-packages/src/charm/hadoop/layer-hadoop-slave/README.md40
-rwxr-xr-xbigtop-packages/src/charm/hadoop/layer-hadoop-slave/actions/smoke-test10
-rw-r--r--bigtop-packages/src/charm/hadoop/layer-hadoop-slave/metadata.yaml4
-rw-r--r--bigtop-packages/src/charm/hbase/layer-hbase/README.md174
-rwxr-xr-xbigtop-packages/src/charm/hbase/layer-hbase/actions/perf-test3
-rwxr-xr-xbigtop-packages/src/charm/hbase/layer-hbase/actions/smoke-test4
-rw-r--r--bigtop-packages/src/charm/hbase/layer-hbase/config.yaml6
-rw-r--r--bigtop-packages/src/charm/hbase/layer-hbase/icon.svg293
-rw-r--r--bigtop-packages/src/charm/hbase/layer-hbase/layer.yaml17
-rwxr-xr-xbigtop-packages/src/charm/hbase/layer-hbase/lib/charms/layer/bigtop_hbase.py75
-rw-r--r--bigtop-packages/src/charm/hbase/layer-hbase/metadata.yaml6
-rw-r--r--bigtop-packages/src/charm/hbase/layer-hbase/reactive/hbase.py172
-rwxr-xr-xbigtop-packages/src/charm/hbase/layer-hbase/tests/01-basic-deployment.py2
-rwxr-xr-xbigtop-packages/src/charm/hbase/layer-hbase/tests/02-smoke-test.py10
-rw-r--r--bigtop-packages/src/charm/hive/layer-hive/README.md237
-rw-r--r--bigtop-packages/src/charm/hive/layer-hive/actions.yaml4
-rwxr-xr-xbigtop-packages/src/charm/hive/layer-hive/actions/restart36
-rwxr-xr-xbigtop-packages/src/charm/hive/layer-hive/actions/smoke-test49
-rw-r--r--bigtop-packages/src/charm/hive/layer-hive/config.yaml6
-rw-r--r--bigtop-packages/src/charm/hive/layer-hive/copyright16
-rw-r--r--bigtop-packages/src/charm/hive/layer-hive/icon.svg75
-rw-r--r--bigtop-packages/src/charm/hive/layer-hive/layer.yaml31
-rwxr-xr-xbigtop-packages/src/charm/hive/layer-hive/lib/charms/layer/bigtop_hive.py138
-rw-r--r--bigtop-packages/src/charm/hive/layer-hive/metadata.yaml19
-rw-r--r--bigtop-packages/src/charm/hive/layer-hive/reactive/hive.py184
-rwxr-xr-x[-rw-r--r--]bigtop-packages/src/charm/hive/layer-hive/tests/01-basic-deployment.py (renamed from docker/bigtop-deploy/ubuntu-14.04/Dockerfile)34
-rwxr-xr-xbigtop-packages/src/charm/hive/layer-hive/tests/02-smoke-test.py60
-rw-r--r--bigtop-packages/src/charm/hive/layer-hive/tests/tests.yaml3
-rw-r--r--bigtop-packages/src/charm/kafka/layer-kafka/README.md50
-rwxr-xr-xbigtop-packages/src/charm/kafka/layer-kafka/actions/create-topic7
-rw-r--r--bigtop-packages/src/charm/kafka/layer-kafka/actions/kafkautils.py4
-rwxr-xr-xbigtop-packages/src/charm/kafka/layer-kafka/actions/list-topics7
-rwxr-xr-xbigtop-packages/src/charm/kafka/layer-kafka/actions/list-zks9
-rwxr-xr-xbigtop-packages/src/charm/kafka/layer-kafka/actions/read-topic7
-rwxr-xr-xbigtop-packages/src/charm/kafka/layer-kafka/actions/smoke-test9
-rwxr-xr-xbigtop-packages/src/charm/kafka/layer-kafka/actions/write-topic7
-rw-r--r--bigtop-packages/src/charm/kafka/layer-kafka/icon.svg107
-rw-r--r--bigtop-packages/src/charm/kafka/layer-kafka/metadata.yaml25
-rwxr-xr-xbigtop-packages/src/charm/kafka/layer-kafka/tests/01-deploy.py4
-rwxr-xr-xbigtop-packages/src/charm/kafka/layer-kafka/tests/02-smoke-test.py4
-rwxr-xr-xbigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py12
-rw-r--r--bigtop-packages/src/charm/mahout/layer-mahout/README.md54
-rwxr-xr-xbigtop-packages/src/charm/mahout/layer-mahout/actions/smoke-test1
-rw-r--r--bigtop-packages/src/charm/mahout/layer-mahout/metadata.yaml7
-rwxr-xr-xbigtop-packages/src/charm/mahout/layer-mahout/tests/01-mahout-test.py12
-rw-r--r--bigtop-packages/src/charm/pig/layer-pig/README.md98
-rwxr-xr-xbigtop-packages/src/charm/pig/layer-pig/actions/smoke-test15
-rw-r--r--bigtop-packages/src/charm/pig/layer-pig/metadata.yaml5
-rwxr-xr-xbigtop-packages/src/charm/pig/layer-pig/tests/01-deploy.py2
-rw-r--r--bigtop-packages/src/charm/spark/layer-spark/README.md200
-rw-r--r--bigtop-packages/src/charm/spark/layer-spark/actions.yaml45
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/actions/list-jobs11
-rwxr-xr-x[l---------]bigtop-packages/src/charm/spark/layer-spark/actions/pagerank137
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/actions/restart-spark-job-history-server26
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/actions/spark-submit44
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/actions/sparkbench10
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/actions/sparkpi43
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/actions/start-spark-job-history-server26
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/actions/stop-spark-job-history-server26
l---------[-rwxr-xr-x]bigtop-packages/src/charm/spark/layer-spark/actions/submit58
-rw-r--r--bigtop-packages/src/charm/spark/layer-spark/config.yaml20
-rw-r--r--bigtop-packages/src/charm/spark/layer-spark/icon.svg850
-rw-r--r--bigtop-packages/src/charm/spark/layer-spark/layer.yaml13
-rw-r--r--[-rwxr-xr-x]bigtop-packages/src/charm/spark/layer-spark/lib/charms/layer/bigtop_spark.py192
-rw-r--r--bigtop-packages/src/charm/spark/layer-spark/metadata.yaml6
-rw-r--r--bigtop-packages/src/charm/spark/layer-spark/reactive/spark.py245
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/scripts/sparkpi.sh7
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/tests/01-basic-deployment.py2
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/tests/02-smoke-test.py2
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/tests/03-scale-standalone.py7
-rwxr-xr-xbigtop-packages/src/charm/spark/layer-spark/tests/10-test-ha.py13
-rw-r--r--bigtop-packages/src/charm/zeppelin/layer-zeppelin/README.md105
-rwxr-xr-xbigtop-packages/src/charm/zeppelin/layer-zeppelin/actions/restart7
-rwxr-xr-xbigtop-packages/src/charm/zeppelin/layer-zeppelin/actions/smoke-test16
-rw-r--r--bigtop-packages/src/charm/zeppelin/layer-zeppelin/icon.svg502
-rw-r--r--bigtop-packages/src/charm/zeppelin/layer-zeppelin/layer.yaml6
-rw-r--r--bigtop-packages/src/charm/zeppelin/layer-zeppelin/lib/charms/layer/bigtop_zeppelin.py87
-rw-r--r--bigtop-packages/src/charm/zeppelin/layer-zeppelin/metadata.yaml7
-rw-r--r--bigtop-packages/src/charm/zeppelin/layer-zeppelin/reactive/zeppelin.py116
-rwxr-xr-xbigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/01-basic-deployment.py2
-rwxr-xr-xbigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/02-zeppelin-smoke.py7
-rwxr-xr-xbigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/03-zeppelin-spark-smoke.py51
-rw-r--r--bigtop-packages/src/charm/zeppelin/layer-zeppelin/wheelhouse.txt2
-rw-r--r--bigtop-packages/src/charm/zookeeper/layer-zookeeper/README.md50
-rwxr-xr-xbigtop-packages/src/charm/zookeeper/layer-zookeeper/actions/restart11
-rwxr-xr-xbigtop-packages/src/charm/zookeeper/layer-zookeeper/actions/smoke-test10
-rw-r--r--bigtop-packages/src/charm/zookeeper/layer-zookeeper/icon.svg673
-rw-r--r--bigtop-packages/src/charm/zookeeper/layer-zookeeper/metadata.yaml7
-rwxr-xr-xbigtop-packages/src/charm/zookeeper/layer-zookeeper/tests/01-deploy-smoke.py5
-rwxr-xr-xbigtop-packages/src/charm/zookeeper/layer-zookeeper/tests/10-bind-address.py4
-rw-r--r--bigtop-packages/src/common/ambari/do-component-build2
-rw-r--r--bigtop-packages/src/common/ambari/patch0-AMBARI.diff25
-rw-r--r--bigtop-packages/src/common/ambari/patch1-AMBARI-storm.diff12
-rw-r--r--bigtop-packages/src/common/ambari/patch2-AMBARI-ConcurrentHashMap.diff19
-rw-r--r--bigtop-packages/src/common/apex/do-component-build3
-rw-r--r--bigtop-packages/src/common/apex/patch1-for-hadoop27x.diff20
-rwxr-xr-xbigtop-packages/src/common/flume/do-component-build2
-rw-r--r--bigtop-packages/src/common/hadoop/init-hcfs.json3
-rw-r--r--bigtop-packages/src/common/hama/do-component-build2
-rw-r--r--bigtop-packages/src/common/hbase/patch0-jline-jrub.diff15
-rw-r--r--bigtop-packages/src/common/hive/do-component-build2
-rw-r--r--bigtop-packages/src/common/ignite-hadoop/do-component-build2
-rw-r--r--bigtop-packages/src/common/ignite-hadoop/ignite-hadoop.default2
-rw-r--r--bigtop-packages/src/common/kafka/do-component-build2
-rwxr-xr-xbigtop-packages/src/common/oozie/do-component-build2
-rw-r--r--bigtop-packages/src/common/spark/do-component-build2
-rwxr-xr-xbigtop-packages/src/common/spark/spark-env.sh2
-rw-r--r--bigtop-packages/src/common/spark1/do-component-build2
-rw-r--r--bigtop-packages/src/common/zeppelin/do-component-build39
-rw-r--r--bigtop-packages/src/deb/flink/flink.preinst3
-rw-r--r--bigtop-packages/src/deb/flume/flume.preinst3
-rw-r--r--bigtop-packages/src/deb/hadoop/hadoop-hdfs.preinst3
-rw-r--r--bigtop-packages/src/deb/hadoop/hadoop-httpfs.preinst3
-rw-r--r--bigtop-packages/src/deb/hadoop/hadoop-mapreduce.preinst3
-rw-r--r--bigtop-packages/src/deb/hadoop/hadoop-yarn.preinst3
-rw-r--r--bigtop-packages/src/deb/hama/hama.preinst3
-rw-r--r--bigtop-packages/src/deb/hbase/hbase.preinst3
-rw-r--r--bigtop-packages/src/deb/hive/hive.preinst3
-rw-r--r--bigtop-packages/src/deb/hue/control2
-rw-r--r--bigtop-packages/src/deb/hue/hue-common.preinst3
-rw-r--r--bigtop-packages/src/deb/ignite-hadoop/ignite-hadoop.preinst3
-rw-r--r--bigtop-packages/src/deb/oozie/oozie.preinst3
-rw-r--r--bigtop-packages/src/deb/phoenix/phoenix.preinst9
-rw-r--r--bigtop-packages/src/deb/solr/solr.preinst3
-rw-r--r--bigtop-packages/src/deb/spark/control2
-rw-r--r--bigtop-packages/src/deb/spark/rules21
-rw-r--r--bigtop-packages/src/deb/spark/spark-core.preinst3
-rw-r--r--bigtop-packages/src/deb/spark1/spark-core.preinst3
-rw-r--r--bigtop-packages/src/deb/sqoop/sqoop.preinst3
-rw-r--r--bigtop-packages/src/deb/tajo/tajo.preinst3
-rw-r--r--bigtop-packages/src/deb/zeppelin/zeppelin.preinst3
-rw-r--r--bigtop-packages/src/deb/zookeeper/zookeeper.preinst3
-rw-r--r--bigtop-packages/src/rpm/ambari/SPECS/ambari.spec5
-rw-r--r--bigtop-packages/src/rpm/hbase/SPECS/hbase.spec3
-rw-r--r--bigtop-packages/src/rpm/ignite-hadoop/SPECS/ignite-hadoop.spec15
-rw-r--r--bigtop-packages/src/rpm/spark/SPECS/spark.spec21
-rw-r--r--bigtop-packages/src/rpm/ycsb/SPECS/ycsb.spec5
-rw-r--r--bigtop.bom17
-rwxr-xr-xbigtop_toolchain/bin/puppetize.sh8
-rw-r--r--bigtop_toolchain/manifests/gradle.pp2
-rw-r--r--bigtop_toolchain/manifests/jdk.pp10
-rw-r--r--bigtop_toolchain/manifests/packages.pp16
-rw-r--r--bigtop_toolchain/manifests/puppet-modules.pp7
-rw-r--r--build.gradle4
-rw-r--r--buildSrc/src/main/groovy/org/apache/bigtop/NullOutputStream.groovy27
-rw-r--r--buildSrc/src/test/groovy/org/apache/bigtop/TestNullOutputStream.groovy29
-rw-r--r--docker/bigtop-deploy/centos-6/Dockerfile28
-rwxr-xr-xdocker/bigtop-deploy/centos-6/build.sh18
-rw-r--r--docker/bigtop-deploy/centos-7/Dockerfile28
-rw-r--r--docker/bigtop-deploy/debian-8/Dockerfile34
-rw-r--r--[-rwxr-xr-x]docker/bigtop-puppet/debian-9/Dockerfile (renamed from docker/bigtop-deploy/ubuntu-14.04/build.sh)8
-rwxr-xr-xdocker/bigtop-puppet/debian-9/build.sh (renamed from docker/bigtop-deploy/debian-8/build.sh)6
-rw-r--r--[-rwxr-xr-x]docker/bigtop-slaves/debian-9/Dockerfile (renamed from docker/bigtop-deploy/centos-7/build.sh)13
-rw-r--r--docker/pseudo-cluster/config/hieradata/site.yaml1
-rw-r--r--docker/sandbox/README.md42
-rwxr-xr-xdocker/sandbox/build.sh35
-rw-r--r--docker/sandbox/sandbox-env.sh18
-rw-r--r--docker/sandbox/site.yaml.template.centos-6_hadoop3
-rw-r--r--docker/sandbox/site.yaml.template.debian-8_hadoop3
-rw-r--r--gradle/wrapper/gradle-wrapper.properties2
-rw-r--r--packages.gradle7
-rw-r--r--pom.xml3
l---------provisioner/docker/config.yaml2
-rw-r--r--provisioner/docker/config/hiera.yaml1
-rw-r--r--provisioner/docker/config/hieradata/PLACEHOLDER0
-rw-r--r--provisioner/docker/config/hosts1
-rw-r--r--provisioner/docker/config_centos-6.yaml (renamed from provisioner/docker/config_centos6.yaml)1
-rw-r--r--provisioner/docker/config_centos-7.yaml (renamed from provisioner/docker/config_centos7.yaml)1
-rw-r--r--provisioner/docker/config_debian-8.yaml (renamed from provisioner/docker/config_debian8.yaml)1
-rw-r--r--provisioner/docker/config_ubuntu-16.04.yaml (renamed from provisioner/docker/config_ubuntu_xenial.yaml)1
-rwxr-xr-xprovisioner/docker/docker-hadoop.sh21
-rwxr-xr-xprovisioner/vagrant/Vagrantfile4
-rw-r--r--provisioner/vagrant/vagrantconfig.yaml1
238 files changed, 3645 insertions, 4227 deletions
diff --git a/.dockerignore b/.dockerignore
index a7b219a4..150d143f 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -15,5 +15,4 @@
build
output
-bigtop-packages
dl
diff --git a/README.md b/README.md
index ca5671e7..40da1c7c 100644
--- a/README.md
+++ b/README.md
@@ -239,7 +239,7 @@ Example for HBase:
```
name = 'hbase'
- version { base = '1.1.3'; pkg = base; release = 1 }
+ version { base = '1.1.9'; pkg = base; release = 1 }
git { repo = "https://github.com/apache/hbase.git"
ref = "${version.base}"
dir = "${name}-${version.base}" }
diff --git a/bigtop-bigpetstore/bigpetstore-mapreduce/build.gradle b/bigtop-bigpetstore/bigpetstore-mapreduce/build.gradle
index 16cc7f83..24c9a01d 100644
--- a/bigtop-bigpetstore/bigpetstore-mapreduce/build.gradle
+++ b/bigtop-bigpetstore/bigpetstore-mapreduce/build.gradle
@@ -190,8 +190,6 @@ task integrationTest(type: Test, dependsOn: test) {
//memory requirements.
minHeapSize = "1000m"
maxHeapSize = "4000m"
- // set JVM arguments for the test JVM(s)
- jvmArgs '-XX:MaxPermSize=256m'
break
case "crunch":
patternsToInclude = "*CrunchIT*"
diff --git a/bigtop-bigpetstore/bigpetstore-mapreduce/src/test/java/org/apache/bigtop/bigpetstore/generator/TestPetStoreTransactionGeneratorJob.java b/bigtop-bigpetstore/bigpetstore-mapreduce/src/test/java/org/apache/bigtop/bigpetstore/generator/TestPetStoreTransactionGeneratorJob.java
index 76de3d06..dc235621 100755
--- a/bigtop-bigpetstore/bigpetstore-mapreduce/src/test/java/org/apache/bigtop/bigpetstore/generator/TestPetStoreTransactionGeneratorJob.java
+++ b/bigtop-bigpetstore/bigpetstore-mapreduce/src/test/java/org/apache/bigtop/bigpetstore/generator/TestPetStoreTransactionGeneratorJob.java
@@ -34,7 +34,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * run this test with vm options -XX:MaxPermSize=256m -Xms512m -Xmx1024m
+ * run this test with vm options -Xms512m -Xmx1024m
*
*/
public class TestPetStoreTransactionGeneratorJob {
@@ -101,4 +101,4 @@ public class TestPetStoreTransactionGeneratorJob {
+ fs.getFileStatus(new Path(output, "part-r-00000")).getLen()
+ " bytes.");
}
-} \ No newline at end of file
+}
diff --git a/bigtop-ci/build.sh b/bigtop-ci/build.sh
new file mode 100755
index 00000000..fc1f52f6
--- /dev/null
+++ b/bigtop-ci/build.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+while [[ $# -gt 1 ]]
+do
+key="$1"
+case $key in
+ -t|--target)
+ TARGET="$2"
+ shift
+ ;;
+ -o|--os)
+ OS="$2"
+ shift
+ ;;
+ -n|--nexus)
+ NEXUS="--net=container:nexus"
+ CONFIGURE_NEXUS="configure-nexus"
+ shift
+ ;;
+ *)
+ echo "usage build.sh --os debian-8|centos-7|... --target hadoop|tez|..."
+ exit 1 # unknown option
+ ;;
+esac
+shift
+done
+
+# prepare source image
+cat >Dockerfile <<EOF
+FROM bigtop/slaves:$OS
+# copy source to container
+COPY . /var/lib/jenkins/bigtop
+# make it belong to compile account
+RUN chown -R jenkins /var/lib/jenkins/bigtop
+# define default user jenkins
+USER jenkins
+WORKDIR /var/lib/jenkins/bigtop
+ENTRYPOINT [ "bigtop-ci/entrypoint.sh" ]
+# initialize gradle
+RUN bigtop-ci/entrypoint.sh
+# make it a volume, performancewise
+VOLUME /var/lib/jenkins
+EOF
+
+# build source image
+docker build -t image-$OS .
+
+# run build
+docker run --name container-$OS-$TARGET-$$ $NEXUS image-$OS $CONFIGURE_NEXUS $TARGET
+
+# save result
+mkdir -p output
+docker cp container-$OS-$TARGET-$$:/var/lib/jenkins/bigtop/output .
+docker rm -v container-$OS-$TARGET-$$
diff --git a/bigtop-ci/entrypoint.sh b/bigtop-ci/entrypoint.sh
new file mode 100755
index 00000000..bc580e10
--- /dev/null
+++ b/bigtop-ci/entrypoint.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+. /etc/profile.d/bigtop.sh
+exec ./gradlew "$@"
diff --git a/bigtop-deploy/juju/hadoop-hbase/README.md b/bigtop-deploy/juju/hadoop-hbase/README.md
index b45bf7bc..28253277 100644
--- a/bigtop-deploy/juju/hadoop-hbase/README.md
+++ b/bigtop-deploy/juju/hadoop-hbase/README.md
@@ -26,14 +26,20 @@ to deliver high-availability, Hadoop can detect and handle failures at the
application layer. This provides a highly-available service on top of a cluster
of machines, each of which may be prone to failure.
-HBase is the Hadoop database. Think of it as a distributed, scalable Big Data
-store.
+Apache HBase is the Hadoop database. Think of it as a distributed, scalable
+Big Data store.
-This bundle provides a complete deployment of Hadoop and HBase components from
-[Apache Bigtop][] that performs distributed data processing at scale. Ganglia
-and rsyslog applications are also provided to monitor cluster health and syslog
-activity.
+Use HBase when you need random, realtime read/write access to your Big Data.
+This project's goal is the hosting of very large tables -- billions of rows X
+millions of columns -- atop clusters of commodity hardware. Learn more at
+[hbase.apache.org][].
+This bundle provides a complete deployment of Hadoop and HBase components
+from [Apache Bigtop][] that performs distributed data processing at scale.
+Ganglia and rsyslog applications are also provided to monitor cluster health
+and syslog activity.
+
+[hbase.apache.org]: http://hbase.apache.org/
[Apache Bigtop]: http://bigtop.apache.org/
## Bundle Composition
@@ -41,14 +47,14 @@ activity.
The applications that comprise this bundle are spread across 8 units as
follows:
- * NameNode (HDFS)
- * ResourceManager (YARN)
+ * NameNode v2.7.3
+ * ResourceManager v2.7.3
* Colocated on the NameNode unit
- * Zookeeper
+ * Zookeeper v3.4.6
* 3 separate units
- * Slave (DataNode and NodeManager)
+ * Slave (DataNode and NodeManager) v2.7.3
* 3 separate units
- * HBase
+ * HBase v1.1.9
* 3 units colocated with the Hadoop Slaves
* Client (Hadoop endpoint)
* Plugin (Facilitates communication with the Hadoop cluster)
@@ -65,9 +71,8 @@ demands.
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-bundle.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this bundle.
> **Note**: This bundle requires hardware resources that may exceed limits
of Free-tier or Trial accounts on some clouds. To deploy to these
@@ -79,18 +84,10 @@ Deploy this bundle from the Juju charm store with the `juju deploy` command:
juju deploy hadoop-hbase
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-hbase`.
-
Alternatively, deploy a locally modified `bundle.yaml` with:
juju deploy /path/to/bundle.yaml
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-/path/to/bundle.yaml`.
-
The charms in this bundle can also be built from their source layers in the
[Bigtop charm repository][]. See the [Bigtop charm README][] for instructions
on building and deploying these charms locally.
@@ -102,7 +99,6 @@ mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
[bundle.yaml]: https://github.com/apache/bigtop/blob/master/bigtop-deploy/juju/hadoop-hbase/bundle.yaml
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Bigtop charm repository]: https://github.com/apache/bigtop/tree/master/bigtop-packages/src/charm
[Bigtop charm README]: https://github.com/apache/bigtop/blob/master/bigtop-packages/src/charm/README.md
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -138,25 +134,16 @@ complete. Run the smoke-test actions as follows:
juju run-action hbase/0 smoke-test
juju run-action zookeeper/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do <application>/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, all of the actions should settle to `status: completed`. If
any report `status: failed`, that application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
## Utilities
Applications in this bundle include command line and web utilities that
can be used to verify information about the cluster.
@@ -314,6 +301,18 @@ Multiple units may be added at once. For example, add four more slave units:
juju add-unit -n4 slave
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this bundle at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, bundle issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
# Contact Information
- <bigdata@lists.ubuntu.com>
@@ -324,6 +323,6 @@ Multiple units may be added at once. For example, add four more slave units:
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-deploy/juju/hadoop-hbase/bundle-dev.yaml b/bigtop-deploy/juju/hadoop-hbase/bundle-dev.yaml
index e4737e16..f7bcf561 100644
--- a/bigtop-deploy/juju/hadoop-hbase/bundle-dev.yaml
+++ b/bigtop-deploy/juju/hadoop-hbase/bundle-dev.yaml
@@ -34,7 +34,7 @@ services:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
+ charm: "cs:xenial/hadoop-client-8"
constraints: "mem=3G"
num_units: 1
annotations:
@@ -65,7 +65,7 @@ services:
- "6"
- "7"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -73,7 +73,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -115,17 +115,25 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G"
"5":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"6":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"7":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
diff --git a/bigtop-deploy/juju/hadoop-hbase/bundle-local.yaml b/bigtop-deploy/juju/hadoop-hbase/bundle-local.yaml
index 7ae57f66..26e0f3ea 100644
--- a/bigtop-deploy/juju/hadoop-hbase/bundle-local.yaml
+++ b/bigtop-deploy/juju/hadoop-hbase/bundle-local.yaml
@@ -34,7 +34,7 @@ services:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
+ charm: "cs:xenial/hadoop-client-8"
constraints: "mem=3G"
num_units: 1
annotations:
@@ -65,7 +65,7 @@ services:
- "6"
- "7"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -73,7 +73,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -115,17 +115,25 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G"
"5":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"6":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"7":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
diff --git a/bigtop-deploy/juju/hadoop-hbase/bundle.yaml b/bigtop-deploy/juju/hadoop-hbase/bundle.yaml
index 95b63d70..b51712a5 100644
--- a/bigtop-deploy/juju/hadoop-hbase/bundle.yaml
+++ b/bigtop-deploy/juju/hadoop-hbase/bundle.yaml
@@ -1,6 +1,6 @@
services:
namenode:
- charm: "cs:xenial/hadoop-namenode-12"
+ charm: "cs:xenial/hadoop-namenode-24"
constraints: "mem=7G root-disk=32G"
num_units: 1
annotations:
@@ -9,7 +9,7 @@ services:
to:
- "0"
resourcemanager:
- charm: "cs:xenial/hadoop-resourcemanager-13"
+ charm: "cs:xenial/hadoop-resourcemanager-26"
constraints: "mem=7G root-disk=32G"
num_units: 1
annotations:
@@ -18,7 +18,7 @@ services:
to:
- "0"
slave:
- charm: "cs:xenial/hadoop-slave-12"
+ charm: "cs:xenial/hadoop-slave-25"
constraints: "mem=7G root-disk=32G"
num_units: 3
annotations:
@@ -29,12 +29,12 @@ services:
- "2"
- "3"
plugin:
- charm: "cs:xenial/hadoop-plugin-12"
+ charm: "cs:xenial/hadoop-plugin-24"
annotations:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
+ charm: "cs:xenial/hadoop-client-8"
constraints: "mem=3G"
num_units: 1
annotations:
@@ -43,7 +43,7 @@ services:
to:
- "4"
hbase:
- charm: "cs:xenial/hbase-10"
+ charm: "cs:xenial/hbase-25"
constraints: "mem=7G root-disk=32G"
num_units: 3
annotations:
@@ -54,7 +54,7 @@ services:
- "2"
- "3"
zookeeper:
- charm: "cs:xenial/zookeeper-16"
+ charm: "cs:xenial/zookeeper-30"
constraints: "mem=3G root-disk=32G"
num_units: 3
annotations:
@@ -65,7 +65,7 @@ services:
- "6"
- "7"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -73,7 +73,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -115,17 +115,25 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G"
"5":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"6":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"7":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
diff --git a/bigtop-deploy/juju/hadoop-hbase/tests/01-bundle.py b/bigtop-deploy/juju/hadoop-hbase/tests/01-bundle.py
index 166ac546..bb726050 100755
--- a/bigtop-deploy/juju/hadoop-hbase/tests/01-bundle.py
+++ b/bigtop-deploy/juju/hadoop-hbase/tests/01-bundle.py
@@ -27,8 +27,6 @@ class TestBundle(unittest.TestCase):
@classmethod
def setUpClass(cls):
- # classmethod inheritance doesn't work quite right with
- # setUpClass / tearDownClass, so subclasses have to manually call this
cls.d = amulet.Deployment(series='xenial')
with open(cls.bundle_file) as f:
bun = f.read()
diff --git a/bigtop-deploy/juju/hadoop-hbase/tests/tests.yaml b/bigtop-deploy/juju/hadoop-hbase/tests/tests.yaml
index a3b7803f..b9517421 100644
--- a/bigtop-deploy/juju/hadoop-hbase/tests/tests.yaml
+++ b/bigtop-deploy/juju/hadoop-hbase/tests/tests.yaml
@@ -1,5 +1,5 @@
reset: false
-bundle_deploy: false
+deployment_timeout: 3600
sources:
- 'ppa:juju/stable'
packages:
diff --git a/bigtop-deploy/juju/hadoop-kafka/README.md b/bigtop-deploy/juju/hadoop-kafka/README.md
index 4c7a5818..4caf7744 100644
--- a/bigtop-deploy/juju/hadoop-kafka/README.md
+++ b/bigtop-deploy/juju/hadoop-kafka/README.md
@@ -44,15 +44,15 @@ activity.
The applications that comprise this bundle are spread across 9 units as
follows:
- * NameNode (HDFS)
- * ResourceManager (YARN)
+ * NameNode v2.7.3
+ * ResourceManager v2.7.3
* Colocated on the NameNode unit
- * Slave (DataNode and NodeManager)
+ * Slave (DataNode and NodeManager) v2.7.3
* 3 separate units
- * Kafka
+ * Kafka v0.10.1
* Flume-Kafka
* Colocated on the Kafka unit
- * Zookeeper
+ * Zookeeper v3.4.6
* 3 separate units
* Client (Hadoop endpoint)
* Plugin (Facilitates communication with the Hadoop cluster)
@@ -76,9 +76,8 @@ demands.
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-bundle.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this bundle.
> **Note**: This bundle requires hardware resources that may exceed limits
of Free-tier or Trial accounts on some clouds. To deploy to these
@@ -90,18 +89,10 @@ Deploy this bundle from the Juju charm store with the `juju deploy` command:
juju deploy hadoop-kafka
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-kafka`.
-
Alternatively, deploy a locally modified `bundle.yaml` with:
juju deploy /path/to/bundle.yaml
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-/path/to/bundle.yaml`.
-
The charms in this bundle can also be built from their source layers in the
[Bigtop charm repository][]. See the [Bigtop charm README][] for instructions
on building and deploying these charms locally.
@@ -113,7 +104,6 @@ mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
[bundle.yaml]: https://github.com/apache/bigtop/blob/master/bigtop-deploy/juju/hadoop-kafka/bundle.yaml
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Bigtop charm repository]: https://github.com/apache/bigtop/tree/master/bigtop-packages/src/charm
[Bigtop charm README]: https://github.com/apache/bigtop/blob/master/bigtop-packages/src/charm/README.md
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -166,25 +156,16 @@ complete. Run the smoke-test actions as follows:
juju run-action kafka/0 smoke-test
juju run-action zookeeper/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do <application>/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, all of the actions should settle to `status: completed`. If
any report `status: failed`, that application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
## Utilities
Applications in this bundle include command line and web utilities that
can be used to verify information about the cluster.
@@ -314,6 +295,18 @@ Multiple units may be added at once. For example, add four more slave units:
juju add-unit -n4 slave
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this bundle at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, bundle issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
# Contact Information
- <bigdata@lists.ubuntu.com>
@@ -324,6 +317,6 @@ Multiple units may be added at once. For example, add four more slave units:
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-deploy/juju/hadoop-kafka/bundle-dev.yaml b/bigtop-deploy/juju/hadoop-kafka/bundle-dev.yaml
index 45b821fa..f715f788 100644
--- a/bigtop-deploy/juju/hadoop-kafka/bundle-dev.yaml
+++ b/bigtop-deploy/juju/hadoop-kafka/bundle-dev.yaml
@@ -34,7 +34,7 @@ services:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
+ charm: "cs:xenial/hadoop-client-8"
constraints: "mem=3G"
num_units: 1
annotations:
@@ -81,7 +81,7 @@ services:
to:
- "8"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -89,7 +89,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -133,19 +133,28 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G"
"5":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"6":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"7":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"8":
series: "xenial"
+ constraints: "mem=3G"
diff --git a/bigtop-deploy/juju/hadoop-kafka/bundle-local.yaml b/bigtop-deploy/juju/hadoop-kafka/bundle-local.yaml
index bd898728..82bfb164 100644
--- a/bigtop-deploy/juju/hadoop-kafka/bundle-local.yaml
+++ b/bigtop-deploy/juju/hadoop-kafka/bundle-local.yaml
@@ -34,7 +34,7 @@ services:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
+ charm: "cs:xenial/hadoop-client-8"
constraints: "mem=3G"
num_units: 1
annotations:
@@ -81,7 +81,7 @@ services:
to:
- "8"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -89,7 +89,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -133,19 +133,28 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G"
"5":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"6":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"7":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"8":
series: "xenial"
+ constraints: "mem=3G"
diff --git a/bigtop-deploy/juju/hadoop-kafka/bundle.yaml b/bigtop-deploy/juju/hadoop-kafka/bundle.yaml
index 80aa8951..832d50d1 100644
--- a/bigtop-deploy/juju/hadoop-kafka/bundle.yaml
+++ b/bigtop-deploy/juju/hadoop-kafka/bundle.yaml
@@ -1,6 +1,6 @@
services:
namenode:
- charm: "cs:xenial/hadoop-namenode-12"
+ charm: "cs:xenial/hadoop-namenode-24"
constraints: "mem=7G root-disk=32G"
num_units: 1
annotations:
@@ -9,7 +9,7 @@ services:
to:
- "0"
resourcemanager:
- charm: "cs:xenial/hadoop-resourcemanager-13"
+ charm: "cs:xenial/hadoop-resourcemanager-26"
constraints: "mem=7G root-disk=32G"
num_units: 1
annotations:
@@ -18,7 +18,7 @@ services:
to:
- "0"
slave:
- charm: "cs:xenial/hadoop-slave-12"
+ charm: "cs:xenial/hadoop-slave-25"
constraints: "mem=7G root-disk=32G"
num_units: 3
annotations:
@@ -29,12 +29,12 @@ services:
- "2"
- "3"
plugin:
- charm: "cs:xenial/hadoop-plugin-12"
+ charm: "cs:xenial/hadoop-plugin-24"
annotations:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
+ charm: "cs:xenial/hadoop-client-8"
constraints: "mem=3G"
num_units: 1
annotations:
@@ -52,7 +52,7 @@ services:
to:
- "4"
zookeeper:
- charm: "cs:xenial/zookeeper-16"
+ charm: "cs:xenial/zookeeper-30"
constraints: "mem=3G root-disk=32G"
num_units: 3
annotations:
@@ -63,7 +63,7 @@ services:
- "6"
- "7"
kafka:
- charm: "cs:xenial/kafka-11"
+ charm: "cs:xenial/kafka-27"
constraints: "mem=3G"
num_units: 1
annotations:
@@ -81,7 +81,7 @@ services:
to:
- "8"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -89,7 +89,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -133,19 +133,28 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G"
"5":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"6":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"7":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"8":
series: "xenial"
+ constraints: "mem=3G"
diff --git a/bigtop-deploy/juju/hadoop-kafka/tests/01-bundle.py b/bigtop-deploy/juju/hadoop-kafka/tests/01-bundle.py
index fb113fc6..24f8bede 100755
--- a/bigtop-deploy/juju/hadoop-kafka/tests/01-bundle.py
+++ b/bigtop-deploy/juju/hadoop-kafka/tests/01-bundle.py
@@ -27,8 +27,6 @@ class TestBundle(unittest.TestCase):
@classmethod
def setUpClass(cls):
- # classmethod inheritance doesn't work quite right with
- # setUpClass / tearDownClass, so subclasses have to manually call this
cls.d = amulet.Deployment(series='xenial')
with open(cls.bundle_file) as f:
bun = f.read()
diff --git a/bigtop-deploy/juju/hadoop-kafka/tests/tests.yaml b/bigtop-deploy/juju/hadoop-kafka/tests/tests.yaml
index a3b7803f..b9517421 100644
--- a/bigtop-deploy/juju/hadoop-kafka/tests/tests.yaml
+++ b/bigtop-deploy/juju/hadoop-kafka/tests/tests.yaml
@@ -1,5 +1,5 @@
reset: false
-bundle_deploy: false
+deployment_timeout: 3600
sources:
- 'ppa:juju/stable'
packages:
diff --git a/bigtop-deploy/juju/hadoop-processing/README.md b/bigtop-deploy/juju/hadoop-processing/README.md
index 896a7936..9ad44b6a 100644
--- a/bigtop-deploy/juju/hadoop-processing/README.md
+++ b/bigtop-deploy/juju/hadoop-processing/README.md
@@ -38,10 +38,10 @@ and syslog activity.
The applications that comprise this bundle are spread across 5 machines as
follows:
- * NameNode (HDFS)
- * ResourceManager (YARN)
+ * NameNode v2.7.3
+ * ResourceManager v2.7.3
* Colocated on the NameNode unit
- * Slave (DataNode and NodeManager)
+ * Slave (DataNode and NodeManager) v2.7.3
* 3 separate units
* Client (Hadoop endpoint)
* Plugin (Facilitates communication with the Hadoop cluster)
@@ -57,9 +57,8 @@ demands.
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-bundle.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this bundle.
> **Note**: This bundle requires hardware resources that may exceed limits
of Free-tier or Trial accounts on some clouds. To deploy to these
@@ -70,18 +69,10 @@ Deploy this bundle from the Juju charm store with the `juju deploy` command:
juju deploy hadoop-processing
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-processing`.
-
Alternatively, deploy a locally modified `bundle.yaml` with:
juju deploy /path/to/bundle.yaml
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-/path/to/bundle.yaml`.
-
The charms in this bundle can also be built from their source layers in the
[Bigtop charm repository][]. See the [Bigtop charm README][] for instructions
on building and deploying these charms locally.
@@ -93,7 +84,6 @@ mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
[bundle.yaml]: https://github.com/apache/bigtop/blob/master/bigtop-deploy/juju/hadoop-processing/bundle.yaml
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Bigtop charm repository]: https://github.com/apache/bigtop/tree/master/bigtop-packages/src/charm
[Bigtop charm README]: https://github.com/apache/bigtop/blob/master/bigtop-packages/src/charm/README.md
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -127,25 +117,16 @@ Run the smoke-test actions as follows:
juju run-action resourcemanager/0 smoke-test
juju run-action slave/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do <application>/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, all of the actions should settle to `status: completed`. If
any report `status: failed`, that application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
## Utilities
Applications in this bundle include Hadoop command line and web utilities that
can be used to verify information about the cluster.
@@ -270,6 +251,18 @@ Multiple units may be added at once. For example, add four more slave units:
juju add-unit -n4 slave
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this bundle at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, bundle issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
# Contact Information
- <bigdata@lists.ubuntu.com>
@@ -280,6 +273,6 @@ Multiple units may be added at once. For example, add four more slave units:
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-deploy/juju/hadoop-processing/bundle-dev.yaml b/bigtop-deploy/juju/hadoop-processing/bundle-dev.yaml
index 20ae8afc..42b5f383 100644
--- a/bigtop-deploy/juju/hadoop-processing/bundle-dev.yaml
+++ b/bigtop-deploy/juju/hadoop-processing/bundle-dev.yaml
@@ -34,7 +34,7 @@ services:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
+ charm: "cs:xenial/hadoop-client-8"
constraints: "mem=3G"
num_units: 1
annotations:
@@ -43,7 +43,7 @@ services:
to:
- "4"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -51,7 +51,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -87,11 +87,16 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G"
diff --git a/bigtop-deploy/juju/hadoop-processing/bundle-local.yaml b/bigtop-deploy/juju/hadoop-processing/bundle-local.yaml
index b277df4d..736f73bd 100644
--- a/bigtop-deploy/juju/hadoop-processing/bundle-local.yaml
+++ b/bigtop-deploy/juju/hadoop-processing/bundle-local.yaml
@@ -34,7 +34,7 @@ services:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
+ charm: "cs:xenial/hadoop-client-8"
constraints: "mem=3G"
num_units: 1
annotations:
@@ -43,7 +43,7 @@ services:
to:
- "4"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -51,7 +51,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -87,11 +87,16 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G"
diff --git a/bigtop-deploy/juju/hadoop-processing/bundle.yaml b/bigtop-deploy/juju/hadoop-processing/bundle.yaml
index fcd1017e..fbd973d7 100644
--- a/bigtop-deploy/juju/hadoop-processing/bundle.yaml
+++ b/bigtop-deploy/juju/hadoop-processing/bundle.yaml
@@ -1,6 +1,6 @@
services:
namenode:
- charm: "cs:xenial/hadoop-namenode-12"
+ charm: "cs:xenial/hadoop-namenode-24"
constraints: "mem=7G root-disk=32G"
num_units: 1
annotations:
@@ -9,7 +9,7 @@ services:
to:
- "0"
resourcemanager:
- charm: "cs:xenial/hadoop-resourcemanager-13"
+ charm: "cs:xenial/hadoop-resourcemanager-26"
constraints: "mem=7G root-disk=32G"
num_units: 1
annotations:
@@ -18,7 +18,7 @@ services:
to:
- "0"
slave:
- charm: "cs:xenial/hadoop-slave-12"
+ charm: "cs:xenial/hadoop-slave-25"
constraints: "mem=7G root-disk=32G"
num_units: 3
annotations:
@@ -29,12 +29,12 @@ services:
- "2"
- "3"
plugin:
- charm: "cs:xenial/hadoop-plugin-12"
+ charm: "cs:xenial/hadoop-plugin-24"
annotations:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
+ charm: "cs:xenial/hadoop-client-8"
constraints: "mem=3G"
num_units: 1
annotations:
@@ -43,7 +43,7 @@ services:
to:
- "4"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -51,7 +51,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -87,11 +87,16 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G"
diff --git a/bigtop-deploy/juju/hadoop-processing/tests/01-bundle.py b/bigtop-deploy/juju/hadoop-processing/tests/01-bundle.py
index 51d1c3d1..2127cfc2 100755
--- a/bigtop-deploy/juju/hadoop-processing/tests/01-bundle.py
+++ b/bigtop-deploy/juju/hadoop-processing/tests/01-bundle.py
@@ -27,8 +27,6 @@ class TestBundle(unittest.TestCase):
@classmethod
def setUpClass(cls):
- # classmethod inheritance doesn't work quite right with
- # setUpClass / tearDownClass, so subclasses have to manually call this
cls.d = amulet.Deployment(series='xenial')
with open(cls.bundle_file) as f:
bun = f.read()
diff --git a/bigtop-deploy/juju/hadoop-processing/tests/tests.yaml b/bigtop-deploy/juju/hadoop-processing/tests/tests.yaml
index a3b7803f..b9517421 100644
--- a/bigtop-deploy/juju/hadoop-processing/tests/tests.yaml
+++ b/bigtop-deploy/juju/hadoop-processing/tests/tests.yaml
@@ -1,5 +1,5 @@
reset: false
-bundle_deploy: false
+deployment_timeout: 3600
sources:
- 'ppa:juju/stable'
packages:
diff --git a/bigtop-deploy/juju/hadoop-spark/README.md b/bigtop-deploy/juju/hadoop-spark/README.md
index cc956e9d..edd04634 100644
--- a/bigtop-deploy/juju/hadoop-spark/README.md
+++ b/bigtop-deploy/juju/hadoop-spark/README.md
@@ -23,38 +23,39 @@ using a simple programming model.
Hadoop is designed to scale from a few servers to thousands of machines,
each offering local computation and storage. Rather than rely on hardware
to deliver high-availability, Hadoop can detect and handle failures at the
-application layer. This provides a highly-available service on top of a cluster
-of machines, each of which may be prone to failure.
+application layer. This provides a highly-available service on top of a
+cluster of machines, each of which may be prone to failure.
-Spark is a fast and general engine for large-scale data processing.
+Apache Spark is a fast and general engine for large-scale data processing.
+Learn more at [spark.apache.org][].
-This bundle provides a complete deployment of Hadoop and Spark components from
-[Apache Bigtop][] that performs distributed data processing at scale. Ganglia
-and rsyslog applications are also provided to monitor cluster health and syslog
-activity.
+This bundle provides a complete deployment of Hadoop and Spark components
+from [Apache Bigtop][] that performs distributed data processing at scale.
+Ganglia and rsyslog applications are also provided to monitor cluster health
+and syslog activity.
+[spark.apache.org]: http://spark.apache.org/
[Apache Bigtop]: http://bigtop.apache.org/
## Bundle Composition
-The applications that comprise this bundle are spread across 9 units as
+The applications that comprise this bundle are spread across 5 units as
follows:
- * NameNode (HDFS)
- * ResourceManager (YARN)
+ * NameNode v2.7.3
+ * ResourceManager v2.7.3
* Colocated on the NameNode unit
- * Slave (DataNode and NodeManager)
- * 3 separate units
- * Spark (Master in yarn-client mode)
- * Zookeeper
+ * Slave (DataNode and NodeManager) v2.7.3
* 3 separate units
+ * Spark (Driver in yarn-client mode) v2.1.0
* Client (Hadoop endpoint)
+ * Colocated on the Spark unit
* Plugin (Facilitates communication with the Hadoop cluster)
- * Colocated on the Spark and Client units
+ * Colocated on the Spark/Client unit
* Ganglia (Web interface for monitoring cluster metrics)
- * Colocated on the Client unit
+ * Colocated on the Spark/Client unit
* Rsyslog (Aggregate cluster syslog events in a single location)
- * Colocated on the Client unit
+ * Colocated on the Spark/Client unit
Deploying this bundle results in a fully configured Apache Bigtop
cluster on any supported cloud, which can be scaled to meet workload
@@ -63,9 +64,8 @@ demands.
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-bundle.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this bundle.
> **Note**: This bundle requires hardware resources that may exceed limits
of Free-tier or Trial accounts on some clouds. To deploy to these
@@ -77,18 +77,10 @@ Deploy this bundle from the Juju charm store with the `juju deploy` command:
juju deploy hadoop-spark
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-spark`.
-
Alternatively, deploy a locally modified `bundle.yaml` with:
juju deploy /path/to/bundle.yaml
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-/path/to/bundle.yaml`.
-
The charms in this bundle can also be built from their source layers in the
[Bigtop charm repository][]. See the [Bigtop charm README][] for instructions
on building and deploying these charms locally.
@@ -100,7 +92,6 @@ mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
[bundle.yaml]: https://github.com/apache/bigtop/blob/master/bigtop-deploy/juju/hadoop-spark/bundle.yaml
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Bigtop charm repository]: https://github.com/apache/bigtop/tree/master/bigtop-packages/src/charm
[Bigtop charm README]: https://github.com/apache/bigtop/blob/master/bigtop-packages/src/charm/README.md
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -124,8 +115,8 @@ Once they all indicate that they are ready, perform application smoke tests
to verify that the bundle is working as expected.
## Smoke Test
-The charms for each core component (namenode, resourcemanager, slave, spark,
-and zookeeper) provide a `smoke-test` action that can be used to verify the
+The charms for each core component (namenode, resourcemanager, slave, and
+spark) provide a `smoke-test` action that can be used to verify the
application is functioning as expected. Note that the 'slave' component runs
extensive tests provided by Apache Bigtop and may take up to 30 minutes to
complete. Run the smoke-test actions as follows:
@@ -134,27 +125,17 @@ complete. Run the smoke-test actions as follows:
juju run-action resourcemanager/0 smoke-test
juju run-action slave/0 smoke-test
juju run-action spark/0 smoke-test
- juju run-action zookeeper/0 smoke-test
-
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do <application>/0 smoke-test`.
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, all of the actions should settle to `status: completed`. If
any report `status: failed`, that application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
## Utilities
Applications in this bundle include command line and web utilities that
can be used to verify information about the cluster.
@@ -165,10 +146,6 @@ of YARN NodeManager units with the following:
juju run --application namenode "su hdfs -c 'hdfs dfsadmin -report'"
juju run --application resourcemanager "su yarn -c 'yarn node -list'"
-Show the list of Zookeeper nodes with the following:
-
- juju run --unit zookeeper/0 'echo "ls /" | /usr/lib/zookeeper/bin/zkCli.sh'
-
To access the HDFS web console, find the `PUBLIC-ADDRESS` of the namenode
application and expose it:
@@ -204,7 +181,7 @@ The web interface will be available at the following URL:
# Monitoring
This bundle includes Ganglia for system-level monitoring of the namenode,
-resourcemanager, slave, spark, and zookeeper units. Metrics are sent to a
+resourcemanager, slave, and spark units. Metrics are sent to a
centralized ganglia unit for easy viewing in a browser. To view the ganglia web
interface, find the `PUBLIC-ADDRESS` of the Ganglia application and expose it:
@@ -219,7 +196,7 @@ The web interface will be available at:
# Logging
This bundle includes rsyslog to collect syslog data from the namenode,
-resourcemanager, slave, spark, and zookeeper units. These logs are sent to a
+resourcemanager, slave, and spark units. These logs are sent to a
centralized rsyslog unit for easy syslog analysis. One method of viewing this
log data is to simply cat syslog from the rsyslog unit:
@@ -278,27 +255,17 @@ run with `juju run-action`:
enqueued: 2016-02-04 14:55:14 +0000 UTC
started: 2016-02-04 14:55:27 +0000 UTC
-The `spark` charm in this bundle also provides several benchmarks to gauge
-the performance of the Spark cluster. Each benchmark is an action that can be
-run with `juju run-action`:
+The `spark` charm in this bundle provides benchmarks to gauge the performance
+of the Spark/YARN cluster. Each benchmark is an action that can be run with
+`juju run-action`:
- $ juju actions spark | grep Bench
- connectedcomponent Run the Spark Bench ConnectedComponent benchmark.
- decisiontree Run the Spark Bench DecisionTree benchmark.
- kmeans Run the Spark Bench KMeans benchmark.
- linearregression Run the Spark Bench LinearRegression benchmark.
- logisticregression Run the Spark Bench LogisticRegression benchmark.
- matrixfactorization Run the Spark Bench MatrixFactorization benchmark.
- pagerank Run the Spark Bench PageRank benchmark.
- pca Run the Spark Bench PCA benchmark.
- pregeloperation Run the Spark Bench PregelOperation benchmark.
- shortestpaths Run the Spark Bench ShortestPaths benchmark.
- sql Run the Spark Bench SQL benchmark.
- stronglyconnectedcomponent Run the Spark Bench StronglyConnectedComponent benchmark.
- svdplusplus Run the Spark Bench SVDPlusPlus benchmark.
- svm Run the Spark Bench SVM benchmark.
-
- $ juju run-action spark/0 svdplusplus
+ $ juju actions spark
+ ...
+ pagerank Calculate PageRank for a sample data set
+ sparkpi Calculate Pi
+ ...
+
+ $ juju run-action spark/0 pagerank
Action queued with id: 339cec1f-e903-4ee7-85ca-876fb0c3d28e
$ juju show-action-output 339cec1f-e903-4ee7-85ca-876fb0c3d28e
@@ -307,40 +274,41 @@ run with `juju run-action`:
composite:
direction: asc
units: secs
- value: "200.754000"
- raw: |
- SVDPlusPlus,2016-11-02-03:08:26,200.754000,85.974071,.428255,0,SVDPlusPlus-MLlibConfig,,,,,10,,,50000,4.0,1.3,
- start: 2016-11-02T03:08:26Z
- stop: 2016-11-02T03:11:47Z
- results:
- duration:
- direction: asc
- units: secs
- value: "200.754000"
- throughput:
- direction: desc
- units: MB/sec
- value: ".428255"
+ value: "83"
+ start: 2017-04-12T23:22:38Z
+ stop: 2017-04-12T23:24:01Z
+ output: '{''status'': ''completed''}'
status: completed
timing:
- completed: 2016-11-02 03:11:48 +0000 UTC
- enqueued: 2016-11-02 03:08:21 +0000 UTC
- started: 2016-11-02 03:08:26 +0000 UTC
+ completed: 2017-04-12 23:24:02 +0000 UTC
+ enqueued: 2017-04-12 23:22:36 +0000 UTC
+ started: 2017-04-12 23:22:37 +0000 UTC
# Scaling
-By default, three Hadoop slave and three zookeeper units are deployed. Scaling
-these applications is as simple as adding more units. To add one unit:
+By default, three Hadoop slave units are deployed. Scaling these is as simple
+as adding more units. To add one unit:
juju add-unit slave
- juju add-unit zookeeper
Multiple units may be added at once. For example, add four more slave units:
juju add-unit -n4 slave
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this bundle at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, bundle issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
# Contact Information
- <bigdata@lists.ubuntu.com>
@@ -351,6 +319,6 @@ Multiple units may be added at once. For example, add four more slave units:
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-deploy/juju/hadoop-spark/bundle-dev.yaml b/bigtop-deploy/juju/hadoop-spark/bundle-dev.yaml
index a42242e5..99678f13 100644
--- a/bigtop-deploy/juju/hadoop-spark/bundle-dev.yaml
+++ b/bigtop-deploy/juju/hadoop-spark/bundle-dev.yaml
@@ -1,3 +1,8 @@
+series: xenial
+description: >
+ This is a five unit big data cluster that includes Hadoop 2.7.3 and Spark 2.1
+ from Apache Bigtop. Use it to analyse batch data with MapReduce or streaming
+ data with Spark. It will run on 5 machines in your cloud.
services:
namenode:
charm: "cs:~bigdata-dev/xenial/hadoop-namenode"
@@ -34,8 +39,8 @@ services:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
- constraints: "mem=3G"
+ charm: "cs:xenial/hadoop-client-8"
+ constraints: "mem=7G root-disk=32G"
num_units: 1
annotations:
gui-x: "1250"
@@ -52,20 +57,9 @@ services:
gui-x: "1000"
gui-y: "0"
to:
- - "5"
- zookeeper:
- charm: "cs:~bigdata-dev/xenial/zookeeper"
- constraints: "mem=3G root-disk=32G"
- num_units: 3
- annotations:
- gui-x: "500"
- gui-y: "400"
- to:
- - "6"
- - "7"
- - "8"
+ - "4"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -73,7 +67,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -90,44 +84,37 @@ services:
annotations:
gui-x: "750"
gui-y: "400"
-series: xenial
relations:
- [resourcemanager, namenode]
- [namenode, slave]
- [resourcemanager, slave]
- [plugin, namenode]
- [plugin, resourcemanager]
- - [client, plugin]
- [spark, plugin]
- - [spark, zookeeper]
+ - [client, plugin]
- ["ganglia-node:juju-info", "namenode:juju-info"]
- ["ganglia-node:juju-info", "resourcemanager:juju-info"]
- ["ganglia-node:juju-info", "slave:juju-info"]
- ["ganglia-node:juju-info", "spark:juju-info"]
- - ["ganglia-node:juju-info", "zookeeper:juju-info"]
- ["ganglia:node", "ganglia-node:node"]
- ["rsyslog-forwarder-ha:juju-info", "namenode:juju-info"]
- ["rsyslog-forwarder-ha:juju-info", "resourcemanager:juju-info"]
- ["rsyslog-forwarder-ha:juju-info", "slave:juju-info"]
- ["rsyslog-forwarder-ha:juju-info", "spark:juju-info"]
- - ["rsyslog-forwarder-ha:juju-info", "zookeeper:juju-info"]
- ["rsyslog:aggregator", "rsyslog-forwarder-ha:syslog"]
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
- "5":
- series: "xenial"
- "6":
- series: "xenial"
- "7":
- series: "xenial"
- "8":
- series: "xenial"
+ constraints: "mem=7G root-disk=32G"
diff --git a/bigtop-deploy/juju/hadoop-spark/bundle-local.yaml b/bigtop-deploy/juju/hadoop-spark/bundle-local.yaml
index bffc4592..297779a5 100644
--- a/bigtop-deploy/juju/hadoop-spark/bundle-local.yaml
+++ b/bigtop-deploy/juju/hadoop-spark/bundle-local.yaml
@@ -1,3 +1,8 @@
+series: xenial
+description: >
+ This is a five unit big data cluster that includes Hadoop 2.7.3 and Spark 2.1
+ from Apache Bigtop. Use it to analyse batch data with MapReduce or streaming
+ data with Spark. It will run on 5 machines in your cloud.
services:
namenode:
charm: "/home/ubuntu/charms/xenial/hadoop-namenode"
@@ -34,8 +39,8 @@ services:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
- constraints: "mem=3G"
+ charm: "cs:xenial/hadoop-client-8"
+ constraints: "mem=7G root-disk=32G"
num_units: 1
annotations:
gui-x: "1250"
@@ -52,20 +57,9 @@ services:
gui-x: "1000"
gui-y: "0"
to:
- - "5"
- zookeeper:
- charm: "/home/ubuntu/charms/xenial/zookeeper"
- constraints: "mem=3G root-disk=32G"
- num_units: 3
- annotations:
- gui-x: "500"
- gui-y: "400"
- to:
- - "6"
- - "7"
- - "8"
+ - "4"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -73,7 +67,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -90,44 +84,37 @@ services:
annotations:
gui-x: "750"
gui-y: "400"
-series: xenial
relations:
- [resourcemanager, namenode]
- [namenode, slave]
- [resourcemanager, slave]
- [plugin, namenode]
- [plugin, resourcemanager]
- - [client, plugin]
- [spark, plugin]
- - [spark, zookeeper]
+ - [client, plugin]
- ["ganglia-node:juju-info", "namenode:juju-info"]
- ["ganglia-node:juju-info", "resourcemanager:juju-info"]
- ["ganglia-node:juju-info", "slave:juju-info"]
- ["ganglia-node:juju-info", "spark:juju-info"]
- - ["ganglia-node:juju-info", "zookeeper:juju-info"]
- ["ganglia:node", "ganglia-node:node"]
- ["rsyslog-forwarder-ha:juju-info", "namenode:juju-info"]
- ["rsyslog-forwarder-ha:juju-info", "resourcemanager:juju-info"]
- ["rsyslog-forwarder-ha:juju-info", "slave:juju-info"]
- ["rsyslog-forwarder-ha:juju-info", "spark:juju-info"]
- - ["rsyslog-forwarder-ha:juju-info", "zookeeper:juju-info"]
- ["rsyslog:aggregator", "rsyslog-forwarder-ha:syslog"]
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
- "5":
- series: "xenial"
- "6":
- series: "xenial"
- "7":
- series: "xenial"
- "8":
- series: "xenial"
+ constraints: "mem=7G root-disk=32G"
diff --git a/bigtop-deploy/juju/hadoop-spark/bundle.yaml b/bigtop-deploy/juju/hadoop-spark/bundle.yaml
index cfbdd8b6..d26b6aef 100644
--- a/bigtop-deploy/juju/hadoop-spark/bundle.yaml
+++ b/bigtop-deploy/juju/hadoop-spark/bundle.yaml
@@ -1,6 +1,11 @@
+series: xenial
+description: >
+ This is a five unit big data cluster that includes Hadoop 2.7.3 and Spark 2.1
+ from Apache Bigtop. Use it to analyse batch data with MapReduce or streaming
+ data with Spark. It will run on 5 machines in your cloud.
services:
namenode:
- charm: "cs:xenial/hadoop-namenode-12"
+ charm: "cs:xenial/hadoop-namenode-24"
constraints: "mem=7G root-disk=32G"
num_units: 1
annotations:
@@ -9,7 +14,7 @@ services:
to:
- "0"
resourcemanager:
- charm: "cs:xenial/hadoop-resourcemanager-13"
+ charm: "cs:xenial/hadoop-resourcemanager-26"
constraints: "mem=7G root-disk=32G"
num_units: 1
annotations:
@@ -18,7 +23,7 @@ services:
to:
- "0"
slave:
- charm: "cs:xenial/hadoop-slave-12"
+ charm: "cs:xenial/hadoop-slave-25"
constraints: "mem=7G root-disk=32G"
num_units: 3
annotations:
@@ -29,13 +34,13 @@ services:
- "2"
- "3"
plugin:
- charm: "cs:xenial/hadoop-plugin-12"
+ charm: "cs:xenial/hadoop-plugin-24"
annotations:
gui-x: "1000"
gui-y: "400"
client:
- charm: "cs:xenial/hadoop-client-3"
- constraints: "mem=3G"
+ charm: "cs:xenial/hadoop-client-8"
+ constraints: "mem=7G root-disk=32G"
num_units: 1
annotations:
gui-x: "1250"
@@ -43,7 +48,7 @@ services:
to:
- "4"
spark:
- charm: "cs:xenial/spark-24"
+ charm: "cs:xenial/spark-49"
constraints: "mem=7G root-disk=32G"
num_units: 1
options:
@@ -52,20 +57,9 @@ services:
gui-x: "1000"
gui-y: "0"
to:
- - "5"
- zookeeper:
- charm: "cs:xenial/zookeeper-16"
- constraints: "mem=3G root-disk=32G"
- num_units: 3
- annotations:
- gui-x: "500"
- gui-y: "400"
- to:
- - "6"
- - "7"
- - "8"
+ - "4"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -73,7 +67,7 @@ services:
to:
- "4"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -90,44 +84,37 @@ services:
annotations:
gui-x: "750"
gui-y: "400"
-series: xenial
relations:
- [resourcemanager, namenode]
- [namenode, slave]
- [resourcemanager, slave]
- [plugin, namenode]
- [plugin, resourcemanager]
- - [client, plugin]
- [spark, plugin]
- - [spark, zookeeper]
+ - [client, plugin]
- ["ganglia-node:juju-info", "namenode:juju-info"]
- ["ganglia-node:juju-info", "resourcemanager:juju-info"]
- ["ganglia-node:juju-info", "slave:juju-info"]
- ["ganglia-node:juju-info", "spark:juju-info"]
- - ["ganglia-node:juju-info", "zookeeper:juju-info"]
- ["ganglia:node", "ganglia-node:node"]
- ["rsyslog-forwarder-ha:juju-info", "namenode:juju-info"]
- ["rsyslog-forwarder-ha:juju-info", "resourcemanager:juju-info"]
- ["rsyslog-forwarder-ha:juju-info", "slave:juju-info"]
- ["rsyslog-forwarder-ha:juju-info", "spark:juju-info"]
- - ["rsyslog-forwarder-ha:juju-info", "zookeeper:juju-info"]
- ["rsyslog:aggregator", "rsyslog-forwarder-ha:syslog"]
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"4":
series: "xenial"
- "5":
- series: "xenial"
- "6":
- series: "xenial"
- "7":
- series: "xenial"
- "8":
- series: "xenial"
+ constraints: "mem=7G root-disk=32G"
diff --git a/bigtop-deploy/juju/hadoop-spark/tests/01-bundle.py b/bigtop-deploy/juju/hadoop-spark/tests/01-bundle.py
index 1dc41475..1e9794fd 100755
--- a/bigtop-deploy/juju/hadoop-spark/tests/01-bundle.py
+++ b/bigtop-deploy/juju/hadoop-spark/tests/01-bundle.py
@@ -27,8 +27,6 @@ class TestBundle(unittest.TestCase):
@classmethod
def setUpClass(cls):
- # classmethod inheritance doesn't work quite right with
- # setUpClass / tearDownClass, so subclasses have to manually call this
cls.d = amulet.Deployment(series='xenial')
with open(cls.bundle_file) as f:
bun = f.read()
@@ -55,7 +53,6 @@ class TestBundle(unittest.TestCase):
'resourcemanager': re.compile('ready'),
'slave': re.compile('ready'),
'spark': re.compile('ready'),
- 'zookeeper': re.compile('ready'),
}, timeout=3600)
cls.hdfs = cls.d.sentry['namenode'][0]
cls.yarn = cls.d.sentry['resourcemanager'][0]
@@ -88,7 +85,9 @@ class TestBundle(unittest.TestCase):
assert 'DataNode' not in yarn, "DataNode should not be running on resourcemanager"
assert 'DataNode' not in hdfs, "DataNode should not be running on namenode"
- assert 'Master' in spark, "Spark Master not started"
+ assert 'HistoryServer' in spark, "Spark HistoryServer not started"
+ assert 'Master' not in spark, "Spark Master should not be running in yarn mode"
+ assert 'Worker' not in spark, "Spark Worker should not be running in yarn mode"
def test_hdfs(self):
"""
diff --git a/bigtop-deploy/juju/hadoop-spark/tests/tests.yaml b/bigtop-deploy/juju/hadoop-spark/tests/tests.yaml
index a3b7803f..cb745df7 100644
--- a/bigtop-deploy/juju/hadoop-spark/tests/tests.yaml
+++ b/bigtop-deploy/juju/hadoop-spark/tests/tests.yaml
@@ -1,13 +1,19 @@
reset: false
-bundle_deploy: false
+deployment_timeout: 3600
sources:
- 'ppa:juju/stable'
packages:
- amulet
- python3-yaml
-# exclude tests that are unrelated to bigtop.
+# exclude tests that are unrelated to bigtop. the exclusion of spark might
+# look weird here, but for this bundle, we only care that spark is good in
+# yarn mode (covered by this bundle when we invoke the spark smoke-test). the
+# typical spark tests will test spark once in standalone and twice more in
+# various HA modes. that takes forever, so leave those heavy tests for the
+# spark-processing bundle. let's go fast on this one.
excludes:
- ganglia
- ganglia-node
- rsyslog
- rsyslog-forwarder-ha
+ - spark
diff --git a/bigtop-deploy/juju/spark-processing/README.md b/bigtop-deploy/juju/spark-processing/README.md
index c39fa2c8..a499a384 100644
--- a/bigtop-deploy/juju/spark-processing/README.md
+++ b/bigtop-deploy/juju/spark-processing/README.md
@@ -16,12 +16,14 @@
-->
# Overview
-This bundle provides a complete deployment of
-[Apache Spark][] in standalone HA mode as provided
-by [Apache Bigtop][]. Ganglia and rsyslog
+Apache Spark is a fast and general engine for large-scale data processing.
+Learn more at [spark.apache.org][].
+
+This bundle provides a complete deployment of Spark (in standalone HA mode)
+and Apache Zookeeper components from [Apache Bigtop][]. Ganglia and rsyslog
applications are included to monitor cluster health and syslog activity.
-[Apache Spark]: http://spark/apache.org/
+[spark.apache.org]: http://spark.apache.org/
[Apache Bigtop]: http://bigtop.apache.org/
## Bundle Composition
@@ -29,9 +31,9 @@ applications are included to monitor cluster health and syslog activity.
The applications that comprise this bundle are spread across 6 units as
follows:
- * Spark (Master and Worker)
+ * Spark (Master and Worker) v2.1.0
* 2 separate units
- * Zookeeper
+ * Zookeeper v3.4.6
* 3 separate units
* Ganglia (Web interface for monitoring cluster metrics)
* Rsyslog (Aggregate cluster syslog events in a single location)
@@ -44,9 +46,8 @@ demands.
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-bundle.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this bundle.
> **Note**: This bundle requires hardware resources that may exceed limits
of Free-tier or Trial accounts on some clouds. To deploy to these
@@ -58,18 +59,10 @@ Deploy this bundle from the Juju charm store with the `juju deploy` command:
juju deploy spark-processing
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-spark-processing`.
-
Alternatively, deploy a locally modified `bundle.yaml` with:
juju deploy /path/to/bundle.yaml
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-/path/to/bundle.yaml`.
-
The charms in this bundle can also be built from their source layers in the
[Bigtop charm repository][]. See the [Bigtop charm README][] for instructions
on building and deploying these charms locally.
@@ -81,7 +74,6 @@ mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
[bundle.yaml]: https://github.com/apache/bigtop/blob/master/bigtop-deploy/juju/spark-processing/bundle.yaml
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Bigtop charm repository]: https://github.com/apache/bigtop/tree/master/bigtop-packages/src/charm
[Bigtop charm README]: https://github.com/apache/bigtop/blob/master/bigtop-packages/src/charm/README.md
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -112,25 +104,16 @@ actions as follows:
juju run-action spark/0 smoke-test
juju run-action zookeeper/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do <application>/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, all of the actions should settle to `status: completed`. If
any report `status: failed`, that application is not working as expected. Get
more information about the smoke-test action
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
## Utilities
Applications in this bundle include Zookeeper command line and Spark web
utilities that can be used to verify information about the cluster.
@@ -181,27 +164,17 @@ the [rsyslog README](https://jujucharms.com/rsyslog/) for more information.
# Benchmarking
-The `spark` charm in this bundle provides several benchmarks to gauge
-the performance of the Spark cluster. Each benchmark is an action that can be
-run with `juju run-action`:
-
- $ juju actions spark | grep Bench
- connectedcomponent Run the Spark Bench ConnectedComponent benchmark.
- decisiontree Run the Spark Bench DecisionTree benchmark.
- kmeans Run the Spark Bench KMeans benchmark.
- linearregression Run the Spark Bench LinearRegression benchmark.
- logisticregression Run the Spark Bench LogisticRegression benchmark.
- matrixfactorization Run the Spark Bench MatrixFactorization benchmark.
- pagerank Run the Spark Bench PageRank benchmark.
- pca Run the Spark Bench PCA benchmark.
- pregeloperation Run the Spark Bench PregelOperation benchmark.
- shortestpaths Run the Spark Bench ShortestPaths benchmark.
- sql Run the Spark Bench SQL benchmark.
- stronglyconnectedcomponent Run the Spark Bench StronglyConnectedComponent benchmark.
- svdplusplus Run the Spark Bench SVDPlusPlus benchmark.
- svm Run the Spark Bench SVM benchmark.
-
- $ juju run-action spark/0 svdplusplus
+The `spark` charm in this bundle provides benchmarks to gauge the performance
+of the Spark cluster. Each benchmark is an action that can be run with
+`juju run-action`:
+
+ $ juju actions spark
+ ...
+ pagerank Calculate PageRank for a sample data set
+ sparkpi Calculate Pi
+ ...
+
+ $ juju run-action spark/0 pagerank
Action queued with id: 339cec1f-e903-4ee7-85ca-876fb0c3d28e
$ juju show-action-output 339cec1f-e903-4ee7-85ca-876fb0c3d28e
@@ -210,25 +183,15 @@ run with `juju run-action`:
composite:
direction: asc
units: secs
- value: "200.754000"
- raw: |
- SVDPlusPlus,2016-11-02-03:08:26,200.754000,85.974071,.428255,0,SVDPlusPlus-MLlibConfig,,,,,10,,,50000,4.0,1.3,
- start: 2016-11-02T03:08:26Z
- stop: 2016-11-02T03:11:47Z
- results:
- duration:
- direction: asc
- units: secs
- value: "200.754000"
- throughput:
- direction: desc
- units: x/sec
- value: ".428255"
+ value: "83"
+ start: 2017-04-12T23:22:38Z
+ stop: 2017-04-12T23:24:01Z
+ output: '{''status'': ''completed''}'
status: completed
timing:
- completed: 2016-11-02 03:11:48 +0000 UTC
- enqueued: 2016-11-02 03:08:21 +0000 UTC
- started: 2016-11-02 03:08:26 +0000 UTC
+ completed: 2017-04-12 23:24:02 +0000 UTC
+ enqueued: 2017-04-12 23:22:36 +0000 UTC
+ started: 2017-04-12 23:22:37 +0000 UTC
# Scaling
@@ -244,6 +207,18 @@ Multiple units may be added at once. For example, add four more spark units:
juju add-unit -n4 spark
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this bundle at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, bundle issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
# Contact Information
- <bigdata@lists.ubuntu.com>
@@ -254,6 +229,6 @@ Multiple units may be added at once. For example, add four more spark units:
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-deploy/juju/spark-processing/bundle-dev.yaml b/bigtop-deploy/juju/spark-processing/bundle-dev.yaml
index af762140..4ace0daf 100644
--- a/bigtop-deploy/juju/spark-processing/bundle-dev.yaml
+++ b/bigtop-deploy/juju/spark-processing/bundle-dev.yaml
@@ -21,7 +21,7 @@ services:
- "3"
- "4"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -29,7 +29,7 @@ services:
to:
- "5"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -58,13 +58,19 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"5":
series: "xenial"
+ constraints: "mem=3G"
diff --git a/bigtop-deploy/juju/spark-processing/bundle-local.yaml b/bigtop-deploy/juju/spark-processing/bundle-local.yaml
index 63cdc6f5..95a28f0e 100644
--- a/bigtop-deploy/juju/spark-processing/bundle-local.yaml
+++ b/bigtop-deploy/juju/spark-processing/bundle-local.yaml
@@ -21,7 +21,7 @@ services:
- "3"
- "4"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -29,7 +29,7 @@ services:
to:
- "5"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -58,13 +58,19 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"5":
series: "xenial"
+ constraints: "mem=3G"
diff --git a/bigtop-deploy/juju/spark-processing/bundle.yaml b/bigtop-deploy/juju/spark-processing/bundle.yaml
index 70ef4cf1..c2ba92ae 100644
--- a/bigtop-deploy/juju/spark-processing/bundle.yaml
+++ b/bigtop-deploy/juju/spark-processing/bundle.yaml
@@ -1,8 +1,11 @@
services:
spark:
- charm: "cs:xenial/spark-24"
+ charm: "cs:xenial/spark-49"
constraints: "mem=7G root-disk=32G"
num_units: 2
+ options:
+ driver_memory: "3g"
+ executor_memory: "3g"
annotations:
gui-x: "500"
gui-y: "0"
@@ -10,7 +13,7 @@ services:
- "0"
- "1"
zookeeper:
- charm: "cs:xenial/zookeeper-16"
+ charm: "cs:xenial/zookeeper-30"
constraints: "mem=3G root-disk=32G"
num_units: 3
annotations:
@@ -21,7 +24,7 @@ services:
- "3"
- "4"
ganglia:
- charm: "cs:~bigdata-dev/xenial/ganglia-5"
+ charm: "cs:xenial/ganglia-12"
num_units: 1
annotations:
gui-x: "0"
@@ -29,7 +32,7 @@ services:
to:
- "5"
ganglia-node:
- charm: "cs:~bigdata-dev/xenial/ganglia-node-7"
+ charm: "cs:xenial/ganglia-node-7"
annotations:
gui-x: "250"
gui-y: "400"
@@ -58,13 +61,19 @@ relations:
machines:
"0":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"1":
series: "xenial"
+ constraints: "mem=7G root-disk=32G"
"2":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"3":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"4":
series: "xenial"
+ constraints: "mem=3G root-disk=32G"
"5":
series: "xenial"
+ constraints: "mem=3G"
diff --git a/bigtop-deploy/juju/spark-processing/tests/tests.yaml b/bigtop-deploy/juju/spark-processing/tests/tests.yaml
index 8a28f2bd..b9517421 100644
--- a/bigtop-deploy/juju/spark-processing/tests/tests.yaml
+++ b/bigtop-deploy/juju/spark-processing/tests/tests.yaml
@@ -1,19 +1,13 @@
reset: false
-bundle_deploy: false
+deployment_timeout: 3600
sources:
- 'ppa:juju/stable'
packages:
- amulet
- python3-yaml
-# exclude tests that are unrelated to bigtop. the exclusion of spark might
-# look weird here, but for this bundle, we only care that spark is good in
-# HA mode (covered by this bundle when we invoke the spark smoke-test). the
-# typical spark tests will test spark once in standalone and twice more in
-# various HA modes. that takes forever, so leave those heavy tests for the
-# hadoop-spark bundle. let's go fast on this one.
+# exclude tests that are unrelated to bigtop.
excludes:
- ganglia
- ganglia-node
- rsyslog
- rsyslog-forwarder-ha
- - spark
diff --git a/bigtop-deploy/puppet/README.md b/bigtop-deploy/puppet/README.md
index a2f7fb1e..ddb79a50 100644
--- a/bigtop-deploy/puppet/README.md
+++ b/bigtop-deploy/puppet/README.md
@@ -136,7 +136,6 @@ hadoop_cluster_node::cluster_components:
- spark
- yarn
- zookeeper
-bigtop::jdk_package_name: "openjdk-7-jre-headless"
bigtop::bigtop_repo_uri: "http://bigtop-repos.s3.amazonaws.com/releases/1.2.0/ubuntu/16.04/x86_64"
```
diff --git a/bigtop-deploy/puppet/hieradata/bigtop/cluster.yaml b/bigtop-deploy/puppet/hieradata/bigtop/cluster.yaml
index d116763d..6ff39cc9 100644
--- a/bigtop-deploy/puppet/hieradata/bigtop/cluster.yaml
+++ b/bigtop-deploy/puppet/hieradata/bigtop/cluster.yaml
@@ -55,9 +55,8 @@
#bigtop::bigtop_repo_uri: "http://mirror.example.com/path/to/mirror/"
# Use a pre-installed java environment. The default value of 'false' will cause
-# the configured 'bigtop::jdk_package_name' package to be installed. Setting
-# this to 'true' will ignore the configured 'bigtop::jdk_package_name' but
-# requires a compatible java environment be avaialble prior to Bigtop
+# the default jdk by bigtop to be installed.
+# this to 'true' requires a compatible java environment be avaialble prior to Bigtop
# installation.
#bigtop::jdk_preinstalled: false
diff --git a/bigtop-deploy/puppet/hieradata/site.yaml b/bigtop-deploy/puppet/hieradata/site.yaml
index f18aa9c7..d1e74a98 100644
--- a/bigtop-deploy/puppet/hieradata/site.yaml
+++ b/bigtop-deploy/puppet/hieradata/site.yaml
@@ -13,11 +13,13 @@ hadoop::hadoop_storage_dirs:
#hadoop_cluster_node::cluster_components:
# - alluxio
+# - ambari
# - apex
# - crunch
# - flink
# - flume
# - giraph
+# - gpdb
# - ignite_hadoop
# - hbase
# - hcat
@@ -31,16 +33,18 @@ hadoop::hadoop_storage_dirs:
# - qfs
# - solrcloud
# - spark
+# - spark-standalone
# - sqoop
# - sqoop2
# - tez
# - yarn
-# - zookeeper
# - ycsb
-# - gpdb
-# - ambari
+# - zookeeper
#bigtop::roles_enabled: false
-#bigtop::jdk_package_name: "openjdk-7-jre-headless"
-#bigtop::bigtop_repo_uri: "http://mirror.example.com/path/to/mirror/"
+## You can specify one (or more) repositories. It is convenient if
+## you provide hotfix repo separately from the stable release, etc.
+#bigtop::bigtop_repo_uri:
+# - "http://mirror1.example.com/path/to/mirror/"
+# - "http://mirror2.example.com/path/to/mirror/"
diff --git a/bigtop-deploy/puppet/manifests/bigtop_repo.pp b/bigtop-deploy/puppet/manifests/bigtop_repo.pp
new file mode 100644
index 00000000..ed22f819
--- /dev/null
+++ b/bigtop-deploy/puppet/manifests/bigtop_repo.pp
@@ -0,0 +1,70 @@
+# 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.
+
+class bigtop_repo {
+ case $::operatingsystem {
+ /(OracleLinux|Amazon|CentOS|Fedora|RedHat)/: {
+ $default_repo = "http://bigtop-repos.s3.amazonaws.com/releases/1.2.0/centos/7/x86_64"
+ $baseurls_array = any2array(hiera("bigtop::bigtop_repo_uri", $default_repo))
+ each ($baseurls_array) |$count, $baseurl| {
+ yumrepo { "Bigtop_$count":
+ baseurl => $baseurl,
+ descr => "Bigtop packages",
+ enabled => 1,
+ gpgcheck => 0,
+ }
+ Yumrepo<||> -> Package<||>
+ }
+ }
+
+ /(Ubuntu|Debian)/: {
+ include stdlib
+ include apt
+
+ $lower_os = downcase($operatingsystem)
+ # We use code name such as trusty for Ubuntu instead of release version in bigtop's binary convenience repos
+ if ($operatingsystem == "Ubuntu") { $release = $lsbdistcodename } else { $release = $operatingsystemmajrelease }
+ $default_repo = "http://bigtop-repos.s3.amazonaws.com/releases/1.2.0/${lower_os}/${release}/x86_64"
+ $baseurls_array = any2array(hiera("bigtop::bigtop_repo_uri", $default_repo))
+
+ # I couldn't enforce the sequence -> anymore because of this
+ # https://twitter.com/c0sin/status/875869783979196416
+ apt::conf { "disable_keys":
+ content => "APT::Get::AllowUnauthenticated 1;",
+ ensure => present
+ }
+ each ($baseurls_array) |$count, $baseurl| {
+ notify {"Baseurl: $baseurl" :}
+ apt::source { "Bigtop_$count":
+ location => $baseurl,
+ release => "bigtop",
+ repos => "contrib",
+ # BIGTOP-2796. Give Bigtop repo higher priority to solve zookeeper package conflict probem on Ubuntu
+ pin => "900",
+ ensure => present,
+ }
+ }
+ # It seems that calling update explicitely isn't needed because as far I can see
+ # it is getting called automatically. Perhaps this was needed for older versions?
+ exec {'bigtop-apt-update':
+ command => '/usr/bin/apt-get update'
+ }
+ Apt::Source<||> -> Exec['bigtop-apt-update'] -> Package<||>
+ }
+ default: {
+ notify{"WARNING: running on a neither yum nor apt platform -- make sure Bigtop repo is setup": }
+ }
+ }
+}
diff --git a/bigtop-deploy/puppet/manifests/cluster.pp b/bigtop-deploy/puppet/manifests/cluster.pp
index 83bb7b24..7579606c 100644
--- a/bigtop-deploy/puppet/manifests/cluster.pp
+++ b/bigtop-deploy/puppet/manifests/cluster.pp
@@ -69,6 +69,11 @@ $roles_map = {
worker => ["solr-server"],
},
spark => {
+ worker => ["spark-on-yarn"],
+ client => ["spark-client"],
+ library => ["spark-yarn-slave"],
+ },
+ spark-standalone => {
master => ["spark-master"],
worker => ["spark-worker"],
},
@@ -223,7 +228,7 @@ class node_with_roles ($roles = hiera("bigtop::roles")) inherits hadoop_cluster_
"ambari",
]
- deploy_module { $modules:
+ node_with_roles::deploy_module { $modules:
roles => $roles,
}
}
@@ -278,4 +283,6 @@ class node_with_components inherits hadoop_cluster_node {
class { 'node_with_roles':
roles => $roles,
}
+
+ notice("Roles to deploy: ${roles}")
}
diff --git a/bigtop-deploy/puppet/manifests/jdk.pp b/bigtop-deploy/puppet/manifests/jdk.pp
new file mode 100644
index 00000000..152e8a41
--- /dev/null
+++ b/bigtop-deploy/puppet/manifests/jdk.pp
@@ -0,0 +1,72 @@
+# 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.
+
+class jdk {
+ case $::operatingsystem {
+ /Debian/: {
+ require apt
+ unless $operatingsystemmajrelease > "8" {
+ # we pin openjdk-8-* and ca-certificates-java to backports
+ require apt::backports
+
+ Exec['bigtop-apt-update'] ->
+ apt::pin { 'backports_jdk':
+ packages => 'openjdk-8-*',
+ priority => 500,
+ release => 'jessie-backports',
+ } ->
+ apt::pin { 'backports_ca':
+ packages => 'ca-certificates-java',
+ priority => 500,
+ release => 'jessie-backports',
+ } ->
+ exec {'own_update':
+ command => '/usr/bin/apt-get update'
+ } -> Package['jdk']
+ }
+ package { 'jdk':
+ name => 'openjdk-8-jdk',
+ ensure => present,
+ }
+
+ }
+ /Ubuntu/: {
+ include apt
+
+ package { 'jdk':
+ name => 'openjdk-8-jdk',
+ ensure => present,
+ }
+ }
+ /(CentOS|Amazon|Fedora)/: {
+ package { 'jdk':
+ name => 'java-1.8.0-openjdk-devel',
+ ensure => present
+ }
+ if ($::operatingsystem == "Fedora") {
+ file { '/usr/lib/jvm/java-1.8.0-openjdk/jre/lib/security/cacerts':
+ ensure => 'link',
+ target => '/etc/pki/java/cacerts'
+ }
+ }
+ }
+ /OpenSuSE/: {
+ package { 'jdk':
+ name => 'java-1_8_0-openjdk-devel',
+ ensure => present
+ }
+ }
+ }
+}
diff --git a/bigtop-deploy/puppet/manifests/site.pp b/bigtop-deploy/puppet/manifests/site.pp
index f35a4e0f..cd6e8d5a 100644
--- a/bigtop-deploy/puppet/manifests/site.pp
+++ b/bigtop-deploy/puppet/manifests/site.pp
@@ -13,84 +13,18 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Prepare default repo by detecting the environment automatically
-case $operatingsystem {
- # Use CentOS 7 repo for other CentOS compatible OSs
- /(OracleLinux|Amazon|RedHat)/: {
- $default_repo = "http://bigtop-repos.s3.amazonaws.com/releases/1.0.0/centos/7/x86_64"
- }
- # Detect env to pick up default repo for other Bigtop supported OSs
- default: {
- $lower_os = downcase($operatingsystem)
- # We use code name such as trusty for Ubuntu instead of release version in bigtop's binary convenience repos
- if ($operatingsystem == "Ubuntu") { $release = $lsbdistcodename } else { $release = $operatingsystemmajrelease }
- $default_repo = "http://bigtop-repos.s3.amazonaws.com/releases/1.0.0/${lower_os}/${release}/x86_64"
- }
-}
-
$jdk_preinstalled = hiera("bigtop::jdk_preinstalled", false)
-$jdk_package_name = hiera("bigtop::jdk_package_name", "jdk")
+if ( ! $jdk_preinstalled ) {
+ require jdk
+ Class['jdk'] -> Service<||>
+}
$provision_repo = hiera("bigtop::provision_repo", true)
-
-stage {"pre": before => Stage["main"]}
-
if ($provision_repo) {
- case $::operatingsystem {
- /(OracleLinux|Amazon|CentOS|Fedora|RedHat)/: {
- yumrepo { "Bigtop":
- baseurl => hiera("bigtop::bigtop_repo_uri", $default_repo),
- descr => "Bigtop packages",
- enabled => 1,
- gpgcheck => 0,
- }
- Yumrepo<||> -> Package<||>
- }
- /(Ubuntu|Debian)/: {
- include apt
- apt::conf { "disable_keys":
- content => "APT::Get::AllowUnauthenticated 1;",
- ensure => present
- }
- apt::source { "Bigtop":
- location => hiera("bigtop::bigtop_repo_uri", $default_repo),
- release => "bigtop",
- repos => "contrib",
- ensure => present,
- }
- Apt::Source<||> -> Exec['apt_update'] -> Package<||>
- }
- default: {
- notify{"WARNING: running on a neither yum nor apt platform -- make sure Bigtop repo is setup": }
- }
- }
-}
-
-case $::operatingsystem {
- /Debian/: {
- require apt
- class { 'apt::backports':
- pin => 500,
- }
- Class['apt::backports'] -> Package <||>
-
- package { "jdk":
- name => $jdk_package_name,
- ensure => present,
- }
- }
- default: {
- package { "jdk":
- name => $jdk_package_name,
- ensure => "installed",
- alias => "jdk",
- noop => $jdk_preinstalled,
- }
- }
+ require bigtop_repo
}
node default {
-
$roles_enabled = hiera("bigtop::roles_enabled", false)
if (!is_bool($roles_enabled)) {
diff --git a/bigtop-deploy/puppet/modules/flink/manifests/init.pp b/bigtop-deploy/puppet/modules/flink/manifests/init.pp
index 221d62dd..e31d1828 100644
--- a/bigtop-deploy/puppet/modules/flink/manifests/init.pp
+++ b/bigtop-deploy/puppet/modules/flink/manifests/init.pp
@@ -37,23 +37,29 @@ class flink {
class jobmanager {
include flink::common
+ package { "flink-jobmanager":
+ ensure => latest,
+ }
+
service { "flink-jobmanager":
ensure => running,
- require => Package["flink"],
+ require => Package["flink-jobmanager"],
subscribe => File["/etc/flink/conf/flink-conf.yaml"],
hasrestart => true,
hasstatus => true
-
}
-
}
class taskmanager {
include flink::common
+ package { "flink-taskmanager":
+ ensure => latest,
+ }
+
service { "flink-taskmanager":
ensure => running,
- require => Package["flink"],
+ require => Package["flink-taskmanager"],
subscribe => File["/etc/flink/conf/flink-conf.yaml"],
hasrestart => true,
hasstatus => true,
diff --git a/bigtop-deploy/puppet/modules/ignite_hadoop/templates/default-config.xml b/bigtop-deploy/puppet/modules/ignite_hadoop/templates/default-config.xml
index bfaee60e..9d8fc1e0 100644
--- a/bigtop-deploy/puppet/modules/ignite_hadoop/templates/default-config.xml
+++ b/bigtop-deploy/puppet/modules/ignite_hadoop/templates/default-config.xml
@@ -117,20 +117,23 @@
<property name="host" value="0.0.0.0" />
<property name="port" value="10500" />
</bean>
- </property>
-
- <!-- Sample secondary file system configuration.
- 'uri' - the URI of the secondary file system.
- 'cfgPath' - optional configuration path of the secondary file system,
- e.g. /opt/foo/core-site.xml. Typically left to be null.
- 'userName' - optional user name to access the secondary file system on behalf of. Use it
- if Hadoop client and the Ignite node are running on behalf of different users.
- -->
+ </property>
<property name="secondaryFileSystem">
<bean class="org.apache.ignite.hadoop.fs.IgniteHadoopIgfsSecondaryFileSystem">
- <constructor-arg name="uri" value='hdfs://<%= @hadoop_head_node %>:<%= @hadoop_namenode_port %>'/>
- <constructor-arg name="cfgPath"><null/></constructor-arg>
- <constructor-arg name="userName" value="ignite"/>
+ <property name="fileSystemFactory">
+ <bean class="org.apache.ignite.hadoop.fs.CachingHadoopFileSystemFactory">
+ <!-- ATTN: The trailing slash in the url is very important work around for a bug
+ in the Ignite's URL parsing logic. It might get fixed in Ignite 2.1, though
+ See https://is.gd/8c2LQY for more info -->
+ <property name="uri" value='hdfs://<%= @hadoop_head_node %>:<%= @hadoop_namenode_port %>/'/>
+ <property name="configPaths">
+ <list>
+ <value>/etc/hadoop/conf/core-site.xml</value>
+ </list>
+ </property>
+ </bean>
+ </property>
+ <property name="defaultUserName" value="ignite"/>
</bean>
</property>
</bean>
diff --git a/bigtop-deploy/puppet/modules/kerberos/manifests/init.pp b/bigtop-deploy/puppet/modules/kerberos/manifests/init.pp
index 946f4258..c6480f81 100644
--- a/bigtop-deploy/puppet/modules/kerberos/manifests/init.pp
+++ b/bigtop-deploy/puppet/modules/kerberos/manifests/init.pp
@@ -121,20 +121,23 @@ class kerberos {
class admin_server inherits kerberos::kdc {
- $se_hack = "setsebool -P kadmind_disable_trans 1 ; setsebool -P krb5kdc_disable_trans 1"
package { "$package_name_admin":
ensure => installed,
require => Package["$package_name_kdc"],
- }
-
+ }
+
+ exec { '/usr/bin/setsebool -P kadmind_disable_trans 1':
+ onlyif => '/usr/bin/test -f /usr/bin/setsebook'
+ } ->
+ exec { '/usr/bin/setsebool -P krb5kdc_disable_trans 1':
+ onlyif => '/usr/bin/test -f /usr/bin/setsebook'
+ } ->
service { "$service_name_admin":
ensure => running,
require => [Package["$package_name_admin"], Service["$service_name_kdc"]],
subscribe => [File["${kdc_etc_path}/kadm5.acl"], File["${kdc_etc_path}/kdc.conf"]],
hasrestart => true,
- restart => "${se_hack} ; service ${service_name_admin} restart",
- start => "${se_hack} ; service ${service_name_admin} start",
}
}
}
diff --git a/bigtop-deploy/puppet/modules/spark/manifests/init.pp b/bigtop-deploy/puppet/modules/spark/manifests/init.pp
index 1b2ff6bc..6fe23dc1 100644
--- a/bigtop-deploy/puppet/modules/spark/manifests/init.pp
+++ b/bigtop-deploy/puppet/modules/spark/manifests/init.pp
@@ -135,7 +135,7 @@ class spark {
}
class common(
- $master_url = 'yarn',
+ $master_url = undef,
$master_host = $fqdn,
$zookeeper_connection_string = undef,
$master_port = 7077,
@@ -146,16 +146,18 @@ class spark {
$use_yarn_shuffle_service = false,
$event_log_dir = "hdfs:///var/log/spark/apps",
$history_log_dir = "hdfs:///var/log/spark/apps",
+ $extra_lib_dirs = "/usr/lib/hadoop/lib/native",
+ $driver_mem = "1g",
+ $executor_mem = "1g",
) {
- package { 'spark-core':
- ensure => latest,
- }
### This is an ungodly hack to deal with the consequence of adding
### unconditional hive-support into Spark
### The addition is tracked by BIGTOP-2154
### The real fix will come in BIGTOP-2268
- package { 'spark-datanucleus':
+ include spark::datanucleus
+
+ package { 'spark-core':
ensure => latest,
}
diff --git a/bigtop-deploy/puppet/modules/spark/templates/spark-defaults.conf b/bigtop-deploy/puppet/modules/spark/templates/spark-defaults.conf
index 5978becc..2ef4a041 100644
--- a/bigtop-deploy/puppet/modules/spark/templates/spark-defaults.conf
+++ b/bigtop-deploy/puppet/modules/spark/templates/spark-defaults.conf
@@ -13,7 +13,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+<% if @master_url -%>
spark.master <%= @master_url %>
+<% else -%>
+<% if (scope['deploy::roles'] & ['spark-master', 'spark-worker']) != [] -%>
+spark.master spark://<%= @master_host %>:<%= @master_port %>
+<% else -%>
+spark.master yarn
+<% end -%>
+<% end -%>
spark.eventLog.enabled true
spark.eventLog.dir <%= @event_log_dir %>
spark.history.fs.logDirectory <%= @history_log_dir %>
@@ -22,4 +30,9 @@ spark.yarn.historyServer.address <%= @master_host %>:<%= @history_ui_port %>
<% end -%>
spark.history.ui.port <%= @history_ui_port %>
spark.shuffle.service.enabled <%= @use_yarn_shuffle_service %>
-spark.driver.extraJavaOptions -Djava.library.path=/usr/lib/hadoop/lib/native
+<% if @extra_lib_dirs -%>
+spark.driver.extraLibraryPath <%= @extra_lib_dirs %>
+spark.executor.extraLibraryPath <%= @extra_lib_dirs %>
+<% end -%>
+spark.driver.memory <%= @driver_mem %>
+spark.executor.memory <%= @executor_mem %>
diff --git a/bigtop-deploy/puppet/modules/spark/templates/spark-env.sh b/bigtop-deploy/puppet/modules/spark/templates/spark-env.sh
index 0aabc658..2f3e406e 100755
--- a/bigtop-deploy/puppet/modules/spark/templates/spark-env.sh
+++ b/bigtop-deploy/puppet/modules/spark/templates/spark-env.sh
@@ -24,7 +24,15 @@ export HIVE_CONF_DIR=${HIVE_CONF_DIR:-/etc/hive/conf}
export STANDALONE_SPARK_MASTER_HOST=<%= @master_host %>
export SPARK_MASTER_PORT=<%= @master_port %>
export SPARK_MASTER_IP=$STANDALONE_SPARK_MASTER_HOST
+<% if @master_url -%>
export SPARK_MASTER_URL=<%= @master_url %>
+<% else -%>
+<% if (scope['deploy::roles'] & ['spark-master', 'spark-worker']) != [] -%>
+export SPARK_MASTER_URL=spark://<%= @master_host %>:<%= @master_port %>
+<% else -%>
+export SPARK_MASTER_URL=yarn
+<% end -%>
+<% end -%>
export SPARK_MASTER_WEBUI_PORT=<%= @master_ui_port %>
export SPARK_WORKER_DIR=${SPARK_WORKER_DIR:-/var/run/spark/work}
diff --git a/bigtop-deploy/puppet/modules/zeppelin/manifests/init.pp b/bigtop-deploy/puppet/modules/zeppelin/manifests/init.pp
index 9c231bc8..979ec82e 100644
--- a/bigtop-deploy/puppet/modules/zeppelin/manifests/init.pp
+++ b/bigtop-deploy/puppet/modules/zeppelin/manifests/init.pp
@@ -30,6 +30,7 @@ class zeppelin {
$hiveserver2_password = '') {
package { 'zeppelin':
ensure => latest,
+ require => Package["jdk"],
}
file { '/etc/zeppelin/conf/zeppelin-env.sh':
diff --git a/bigtop-packages/src/charm/README.md b/bigtop-packages/src/charm/README.md
index 04213ad8..cdc50e44 100644
--- a/bigtop-packages/src/charm/README.md
+++ b/bigtop-packages/src/charm/README.md
@@ -28,9 +28,10 @@ Bigtop components. Built charms are published to the [Juju charm store][]
and can be deployed directly from there, either individually or with
[bundles][]. They can also be built from these layers and deployed locally.
-For the remainder of this guide, a working Juju installation is assumed to be
-present. If Juju is not yet set up, please follow the [getting-started][]
-instructions prior to deploying locally built charms and bundles.
+For the remainder of this guide, a working Juju 2.0 or greater installation is
+assumed to be present. If Juju is not yet set up, please follow the
+[getting-started][] instructions prior to deploying locally built charms and
+bundles.
[Juju charm store]: https://jujucharms.com/
[bundles]: https://jujucharms.com/hadoop-processing
@@ -48,11 +49,12 @@ For example:
mkdir $JUJU_REPOSITORY
cd bigtop-packages/src/charms/hadoop/layer-hadoop-namenode
- charm build
+ charm build --series xenial --report
-This will build the NameNode charm, pulling in the appropriate base and
-interface layers from [interfaces.juju.solutions][]. You can get local copies
-of those layers as well by using `charm pull-source`:
+This will build the NameNode charm in the
+$JUJU_REPOSITORY/xenial/hadoop-namenode directory, pulling in the appropriate
+base and interface layers from [interfaces.juju.solutions][]. You can get
+local copies of those layers as well by using `charm pull-source`:
export LAYER_PATH=$HOME/layers
export INTERFACE_PATH=$HOME/interfaces
@@ -65,17 +67,10 @@ You can deploy the locally built charms individually, for example:
juju deploy $JUJU_REPOSITORY/xenial/hadoop-namenode
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is: `juju deploy local:xenial/hadoop-namenode`.
-
You can also deploy the local version of a bundle:
juju deploy ./bigtop-deploy/juju/hadoop-processing/bundle-local.yaml
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-./bigtop-deploy/juju/hadoop-processing/bundle-local.yaml`.
-
[charm-tools]: https://jujucharms.com/docs/stable/tools-charm-tools
[Getting Started]: https://jujucharms.com/docs/stable/developer-getting-started
[interfaces.juju.solutions]: http://interfaces.juju.solutions/
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/README.md b/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/README.md
index e5cbf635..b92ab41c 100644
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/README.md
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/README.md
@@ -20,27 +20,22 @@ The Apache Hadoop software library is a framework that allows for the
distributed processing of large data sets across clusters of computers
using a simple programming model.
-This charm deploys the NameNode component of the [Apache Bigtop][] platform
-to provide HDFS master resources.
+This charm deploys version 2.7.3 of the NameNode component from
+[Apache Bigtop][].
[Apache Bigtop]: http://bigtop.apache.org/
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-charm.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
This charm is intended to be deployed via one of the [apache bigtop bundles][].
For example:
juju deploy hadoop-processing
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-processing`.
-
This will deploy an Apache Bigtop cluster with this charm acting as the
NameNode. More information about this deployment can be found in the
[bundle readme](https://jujucharms.com/hadoop-processing/).
@@ -52,7 +47,6 @@ mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
[apache bigtop bundles]: https://jujucharms.com/u/bigdata-charmers/#bundles
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -79,25 +73,16 @@ application is functioning as expected. Run the action as follows:
juju run-action namenode/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do namenode/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, the action should settle to `status: completed`. If it
reports `status: failed`, the application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
## Utilities
This charm includes Hadoop command line and web utilities that can be used
to verify information about the cluster.
@@ -117,6 +102,18 @@ The web interface will be available at the following URL:
http://NAMENODE_PUBLIC_IP:50070
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
# Contact Information
- <bigdata@lists.ubuntu.com>
@@ -127,6 +124,6 @@ The web interface will be available at the following URL:
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/layer.yaml b/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/layer.yaml
index 2709e8d4..16b5e431 100644
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/layer.yaml
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/layer.yaml
@@ -22,7 +22,6 @@ options:
ports:
namenode:
port: 8020
- exposed_on: 'namenode'
nn_webapp_http:
port: 50070
exposed_on: 'namenode'
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/metadata.yaml b/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/metadata.yaml
index a358a6d7..2a1806fc 100644
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/metadata.yaml
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/metadata.yaml
@@ -1,11 +1,12 @@
name: hadoop-namenode
-summary: HDFS master (NameNode) from Apache Bigtop
+summary: HDFS NameNode from Apache Bigtop
maintainer: Juju Big Data <bigdata@lists.ubuntu.com>
description: >
Hadoop is a software platform that lets one easily write and
run applications that process vast amounts of data.
- This charm provides the HDFS master node (NameNode).
+ This charm provides version 2.7.3 of the HDFS NameNode application from
+ Apache Bigtop.
tags: []
provides:
namenode:
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/metrics.yaml b/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/metrics.yaml
index f091b674..cb7d2462 100644
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/metrics.yaml
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-namenode/metrics.yaml
@@ -2,12 +2,12 @@ metrics:
namenodes:
type: gauge
description: number of namenodes in the cluster
- command: hdfs getconf -namenodes 2>/dev/null | wc -l
+ command: "charms.reactive is_state apache-bigtop-namenode.ready && hdfs getconf -namenodes 2>/dev/null | wc -l"
offlinedatanodes:
type: gauge
description: number of dead datanodes in the cluster (must be run as hdfs)
- command: su hdfs -c 'hdfs dfsadmin -report -dead 2>/dev/null | grep -i datanodes | grep -o [0-9] || echo 0'
+ command: "charms.reactive is_state apache-bigtop-namenode.ready && su hdfs -c 'hdfs dfsadmin -report -dead 2>/dev/null | grep -i datanodes | grep -o [0-9] || echo 0'"
onlinedatanodes:
type: gauge
description: number of live datanodes in the cluster (must be run as hdfs)
- command: su hdfs -c 'hdfs dfsadmin -report -live 2>/dev/null | grep -i datanodes | grep -o [0-9] || echo 0'
+ command: "charms.reactive is_state apache-bigtop-namenode.ready && su hdfs -c 'hdfs dfsadmin -report -live 2>/dev/null | grep -i datanodes | grep -o [0-9] || echo 0'"
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-plugin/README.md b/bigtop-packages/src/charm/hadoop/layer-hadoop-plugin/README.md
index f9e44838..8c9c0322 100644
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-plugin/README.md
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-plugin/README.md
@@ -28,19 +28,14 @@ This charm facilitates communication between Hadoop components of an
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-charm.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
This charm is intended to be deployed via one of the [apache bigtop bundles][].
For example:
juju deploy hadoop-processing
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-processing`.
-
This will deploy an Apache Bigtop cluster with a client unit preconfigured to
work with the cluster. More information about this deployment can be found in the
[bundle readme](https://jujucharms.com/hadoop-processing/).
@@ -52,7 +47,6 @@ mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
[apache bigtop bundles]: https://jujucharms.com/u/bigdata-charmers/#bundles
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -79,25 +73,16 @@ application is functioning as expected. Run the action as follows:
juju run-action plugin/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do plugin/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, the action should settle to `status: completed`. If it
reports `status: failed`, the application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
## Utilities
This charm includes Hadoop command line utilities that can be used
to verify information about the cluster.
@@ -107,6 +92,18 @@ Show the dfsadmin report on the command line with the following:
juju run --application plugin "su hdfs -c 'hdfs dfsadmin -report'"
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
# Contact Information
- <bigdata@lists.ubuntu.com>
@@ -117,6 +114,6 @@ Show the dfsadmin report on the command line with the following:
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/README.md b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/README.md
index 829ea3a7..bd82d008 100644
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/README.md
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/README.md
@@ -20,27 +20,22 @@ The Apache Hadoop software library is a framework that allows for the
distributed processing of large data sets across clusters of computers
using a simple programming model.
-This charm deploys the ResourceManager component of the [Apache Bigtop][]
-platform to provide YARN master resources.
+This charm deploys version 2.7.3 of the ResourceManager component from
+[Apache Bigtop][].
[Apache Bigtop]: http://bigtop.apache.org/
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-charm.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
This charm is intended to be deployed via one of the [apache bigtop bundles][].
For example:
juju deploy hadoop-processing
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-processing`.
-
This will deploy an Apache Bigtop cluster with this charm acting as the
ResourceManager. More information about this deployment can be found in the
[bundle readme](https://jujucharms.com/hadoop-processing/).
@@ -52,7 +47,6 @@ mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
[apache bigtop bundles]: https://jujucharms.com/u/bigdata-charmers/#bundles
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -81,25 +75,16 @@ smoke tests provided by Apache Bigtop and may take up to
juju run-action resourcemanager/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do resourcemanager/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, the action should settle to `status: completed`. If it
reports `status: failed`, the application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
## Utilities
This charm includes Hadoop command line and web utilities that can be used
to verify information about the cluster.
@@ -168,6 +153,18 @@ cluster. Each benchmark is an action that can be run with `juju run-action`:
started: 2016-02-04 14:55:27 +0000 UTC
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
# Contact Information
- <bigdata@lists.ubuntu.com>
@@ -178,6 +175,6 @@ cluster. Each benchmark is an action that can be run with `juju run-action`:
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/mrbench b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/mrbench
index d177a2d8..2b97413e 100755
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/mrbench
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/mrbench
@@ -71,6 +71,7 @@ benchmark-finish
cat ${RESULT_LOG} | $CHARM_DIR/actions/parseBenchmark.py
DURATION=`expr $STOP - $START`
benchmark-composite "${DURATION}" 'secs' 'asc'
+action-set outcome="success"
# clean out benchmark dir
benchmark_cleanup
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/nnbench b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/nnbench
index 13d76189..64bb2301 100755
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/nnbench
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/nnbench
@@ -75,6 +75,7 @@ benchmark-finish
cat ${RESULT_LOG} | $CHARM_DIR/actions/parseBenchmark.py
DURATION=`expr $STOP - $START`
benchmark-composite "${DURATION}" 'secs' 'asc'
+action-set outcome="success"
# clean out benchmark dir
benchmark_cleanup
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseBenchmark.py b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseBenchmark.py
index 4abdea00..2232aa56 100755
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseBenchmark.py
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/parseBenchmark.py
@@ -37,7 +37,8 @@ def parse_benchmark_output():
m = regex.match(line)
if m:
results[m.group(1)] = m.group(2)
- hookenv.action_set({"results.raw": json.dumps(results)})
+ hookenv.action_set({"meta.raw": json.dumps(results)})
+
if __name__ == "__main__":
parse_benchmark_output()
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/smoke-test b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/smoke-test
index 4218f7e3..34f160ba 100755
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/smoke-test
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/smoke-test
@@ -23,12 +23,12 @@ from charms.layer.apache_bigtop_base import Bigtop # noqa: E402
from charms.reactive import is_state # noqa: E402
-def fail(msg, output=None):
- if output:
- hookenv.action_set({'output': output})
+def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
hookenv.action_fail(msg)
sys.exit()
+
if not is_state('apache-bigtop-resourcemanager.ready'):
fail('Charm is not yet ready to run the Bigtop smoke test(s)')
@@ -43,6 +43,6 @@ smoke_env = {
bigtop = Bigtop()
result = bigtop.run_smoke_tests(smoke_components, smoke_env)
if result == 'success':
- hookenv.action_set({'outcome': result})
+ hookenv.action_set({'outcome': 'success'})
else:
- fail('{} smoke tests failed'.format(smoke_components), result)
+ fail('{} smoke tests failed with: {}'.format(smoke_components, result))
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/teragen b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/teragen
index d08468c3..95a65e29 100755
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/teragen
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/teragen
@@ -57,6 +57,7 @@ benchmark-finish
cat ${RESULT_LOG} | $CHARM_DIR/actions/parseBenchmark.py
DURATION=`expr $STOP - $START`
benchmark-composite "${DURATION}" 'secs' 'asc'
+action-set outcome="success"
# clean out benchmark dir
benchmark_cleanup
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/terasort b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/terasort
index 5e3e5921..2611318a 100755
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/terasort
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/terasort
@@ -78,6 +78,7 @@ benchmark-finish
cat ${RESULT_LOG} | $CHARM_DIR/actions/parseBenchmark.py
DURATION=`expr $STOP - $START`
benchmark-composite "${DURATION}" 'secs' 'asc'
+action-set outcome="success"
# clean out benchmark dir
benchmark_cleanup
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/testdfsio b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/testdfsio
index 558c9f43..a53ccac7 100755
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/testdfsio
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/actions/testdfsio
@@ -76,6 +76,7 @@ benchmark-finish
cat ${RESULT_LOG} | $CHARM_DIR/actions/parseBenchmark.py
DURATION=`expr $STOP - $START`
benchmark-composite "${DURATION}" 'secs' 'asc'
+action-set outcome="success"
# clean out benchmark dir
benchmark_cleanup
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/metadata.yaml b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/metadata.yaml
index 695d5bfa..84e42555 100644
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/metadata.yaml
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/metadata.yaml
@@ -1,11 +1,12 @@
name: hadoop-resourcemanager
-summary: YARN master (ResourceManager) from Apache Bigtop
+summary: YARN ResourceManager from Apache Bigtop
maintainer: Juju Big Data <bigdata@lists.ubuntu.com>
description: >
Hadoop is a software platform that lets one easily write and
run applications that process vast amounts of data.
- This charm provides the YARN master node (ResourceManager).
+ This charm provides version 2.7.3 of the YARN ResourceManager application from
+ Apache Bigtop.
tags: []
provides:
resourcemanager:
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/metrics.yaml b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/metrics.yaml
index 137e07e1..08fbea05 100644
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/metrics.yaml
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-resourcemanager/metrics.yaml
@@ -2,4 +2,4 @@ metrics:
nodemanagers:
type: gauge
description: number of running node managers in the cluster
- command: yarn node -list -all 2>/dev/null | grep RUNNING | wc -l
+ command: "charms.reactive is_state apache-bigtop-resourcemanager.ready && yarn node -list -all 2>/dev/null | grep RUNNING | wc -l"
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/README.md b/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/README.md
index ee93239c..41635dc5 100644
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/README.md
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/README.md
@@ -20,28 +20,22 @@ The Apache Hadoop software library is a framework that allows for the
distributed processing of large data sets across clusters of computers
using a simple programming model.
-This charm deploys a combined slave node running the NodeManager
-and DataNode components of the [Apache Bigtop][] platform
-to provide YARN compute and HDFS storage resources.
+This charm deploys a combined slave node running version 2.7.3 of both the
+NodeManager and DataNode components from [Apache Bigtop][].
[Apache Bigtop]: http://bigtop.apache.org/
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-charm.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
This charm is intended to be deployed via one of the [apache bigtop bundles][].
For example:
juju deploy hadoop-processing
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-processing`.
-
This will deploy an Apache Bigtop cluster with 3 units of this charm acting as
the combined DataNode/NodeManager application. More information about this
deployment can be found in the [bundle readme](https://jujucharms.com/hadoop-processing/).
@@ -53,7 +47,6 @@ mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
[apache bigtop bundles]: https://jujucharms.com/u/bigdata-charmers/#bundles
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -82,25 +75,16 @@ and 'mapreduce' smoke tests provided by Apache Bigtop and may take up to
juju run-action slave/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do slave/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, the action should settle to `status: completed`. If it
reports `status: failed`, the application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
# Scaling
@@ -114,6 +98,18 @@ Multiple units may be added at once. For example, add four more slave units:
juju add-unit -n4 slave
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
# Contact Information
- <bigdata@lists.ubuntu.com>
@@ -124,6 +120,6 @@ Multiple units may be added at once. For example, add four more slave units:
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/actions/smoke-test b/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/actions/smoke-test
index 68e646d4..f1bb34d4 100755
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/actions/smoke-test
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/actions/smoke-test
@@ -23,12 +23,12 @@ from charms.layer.apache_bigtop_base import Bigtop # noqa: E402
from charms.reactive import is_state # noqa: E402
-def fail(msg, output=None):
- if output:
- hookenv.action_set({'output': output})
+def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
hookenv.action_fail(msg)
sys.exit()
+
if not is_state('apache-bigtop-datanode.started'):
fail('Charm is not yet ready to run the Bigtop smoke test(s)')
@@ -44,6 +44,6 @@ smoke_env = {
bigtop = Bigtop()
result = bigtop.run_smoke_tests(smoke_components, smoke_env)
if result == 'success':
- hookenv.action_set({'outcome': result})
+ hookenv.action_set({'outcome': 'success'})
else:
- fail('{} smoke tests failed'.format(smoke_components), result)
+ fail('{} smoke tests failed with: {}'.format(smoke_components, result))
diff --git a/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/metadata.yaml b/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/metadata.yaml
index 9e4601e1..0b56f32a 100644
--- a/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/metadata.yaml
+++ b/bigtop-packages/src/charm/hadoop/layer-hadoop-slave/metadata.yaml
@@ -5,5 +5,5 @@ description: >
Hadoop is a software platform that lets one easily write and
run applications that process vast amounts of data.
- This charm provides both the storage node (DataNode) for HDFS and the
- compute node (NodeManager) for Yarn.
+ This charm provides version 2.7.3 of both the HDFS DataNode and the
+ YARN NodeManager from Apache Bigtop.
diff --git a/bigtop-packages/src/charm/hbase/layer-hbase/README.md b/bigtop-packages/src/charm/hbase/layer-hbase/README.md
index d5b714a4..fab19b33 100644
--- a/bigtop-packages/src/charm/hbase/layer-hbase/README.md
+++ b/bigtop-packages/src/charm/hbase/layer-hbase/README.md
@@ -21,61 +21,34 @@ store.
Use HBase when you need random, realtime read/write access to your Big Data.
This project's goal is the hosting of very large tables -- billions of rows X
-millions of columns -- atop clusters of commodity hardware.
-
-HBase is an open-source, distributed, versioned, column-oriented store modeled
-after Google's Bigtable: A Distributed Storage System for Structured Data by
-Chang et al. Just as Bigtable leverages the distributed data storage provided
-by the Google File System, HBase provides Bigtable-like capabilities on top of
-Hadoop and HDFS.
-
-HBase provides:
-
-- Linear and modular scalability.
-- Strictly consistent reads and writes.
-- Automatic and configurable sharding of tables
-- Automatic failover support between RegionServers.
-- Convenient base classes for backing Hadoop MapReduce jobs with HBase tables.
-- Easy to use Java API for client access.
-- Block cache and Bloom Filters for real-time queries.
-- Query predicate push down via server side Filters
-- Thrift gateway and a REST-ful Web service that supports XML, Protobuf,
- and binary data encoding options
-- Extensible jruby-based (JIRB) shell
-- Support for exporting metrics via the Hadoop metrics subsystem to files
- or Ganglia; or via JMX.
-
-See [the homepage](http://hbase.apache.org) for more information.
-
-This charm deploys the hbase master and regionserver components of the
-[Apache Bigtop][] platform.
+millions of columns -- atop clusters of commodity hardware. Learn more at
+[hbase.apache.org][].
+This charm deploys version 1.1.9 of the HBase master, regionserver, and thrift
+components from [Apache Bigtop][].
+
+[hbase.apache.org]: http://hbase.apache.org/
[Apache Bigtop]: http://bigtop.apache.org/
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-charm.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
-An HBase deployment consists of HBase masters and HBase RegionServers.
+An HBase deployment consists of HBase Masters and HBase RegionServers.
In a distributed HBase environment, one master and one regionserver are
-deployed on each unit. HBase makes sure that only one master is active and
-the rest are in standby mode in case the active one fails.
+deployed on each unit. HBase ensures that only one master is active with
+the rest in standby mode in case the active master fails.
Because HBase requires HDFS, this charm is recommended to be deployed as part
of the `hadoop-hbase` bundle:
juju deploy hadoop-hbase
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-processing`.
-
-This will deploy an Apache Bigtop Hadoop cluster with 3 HBase units. More
-information about this deployment can be found in the
-[bundle readme](https://jujucharms.com/hadoop-hbase/).
+This will deploy an Apache Bigtop Hadoop cluster with 3 HBase units colocated
+on 3 Hadoop DataNodes. More information about this deployment can be found in
+the [bundle readme](https://jujucharms.com/hadoop-hbase/).
This charm also supports the Thrift client API for HBase. Thrift is both
cross-platform and more lightweight than REST for many operations.
@@ -86,7 +59,6 @@ in this environment, configure a Juju model with appropriate proxy and/or
mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -113,52 +85,46 @@ application is functioning as expected. Run the action as follows:
juju run-action hbase/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do hbase/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, the action should settle to `status: completed`. If it
reports `status: failed`, the application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
-## HBase web UI
-HBase provides a web console that can be used to verify information about
-the cluster. To access it, find the `PUBLIC-ADDRESS` of any hbase unit and
-expose the application:
+## HBase web interfaces
+The HBase Master service provides a web console that can be used to verify
+information about the cluster. To access it, find the `PUBLIC-ADDRESS` of any
+hbase unit and expose the application:
juju status hbase
juju expose hbase
-The web interface will be available at the following URL:
+The HBase Master web interface will be available at the following URL:
+
+ http://HBASE_PUBLIC_IP:16010
+
+The HBase RegionServer and Thrift services also provide web interfaces that
+are accessible at the following URLs:
- http://HBASE_PUBLIC_IP:60010
+ http://HBASE_PUBLIC_IP:16030
+ http://HBASE_PUBLIC_IP:9095
# Using
-Once the deployment has been verified, there are a number of actions available
-in this charm.
-> **Note**: Actions described below assume Juju 2.0 or greater. If using an
-earlier version of Juju, the action syntax is:
-`juju action do hbase/0 <action_name> <action_args>; juju action fetch <id>`.
+## Actions
+Once HBase is ready, there are a number of actions available in this charm.
-Run a performance test:
+Run a performance test (as described in the **Benchmarking** section):
juju run-action hbase/0 perf-test
juju show-action-output <id> # <-- id from above command
-Run a smoke test (as described in the above **Verifying** section):
+Run a smoke test (as described in the **Verifying** section):
juju run-action hbase/0 smoke-test
juju show-action-output <id> # <-- id from above command
@@ -179,14 +145,78 @@ Start/Stop the HBase RegionServer and Thrift services on a unit:
juju run-action hbase/0 [start|stop]-hbase-regionserver
juju show-action-output <id> # <-- id from above command
+## HBase Shell
+
+HBase includes a shell that can be used to interact with the cluster. Access it
+from any hbase unit (e.g. `hbase/0`) as follows:
+
+ $ juju ssh hbase/0
+ $ hbase shell
+ HBase Shell; enter 'help<RETURN>' for list of supported commands.
+ Type "exit<RETURN>" to leave the HBase Shell
+ Version 1.1.3, rUnknown, Wed Mar 29 07:39:44 UTC 2017
+
+ hbase(main):002:0> exit
+
+# Configuring
+
+Charm configuration can be changed at runtime with `juju config`. This charm
+supports the following config parameters.
+
+## Heap
+The default heap size for the the HBase master JVM is 1024MB. Set a different
+value (in MB) with the following:
+
+ juju config hbase heap=4096
+
+
+# Benchmarking
+
+This charm provides a `perf-test` action to gauge the performance of the HBase
+cluster:
+
+ $ juju run-action hbase/0 perf-test
+ Action queued with id: 339cec1f-e903-4ee7-85ca-876fb0c3d28e
+
+ $ juju show-action-output 339cec1f-e903-4ee7-85ca-876fb0c3d28e
+ results:
+ meta:
+ composite:
+ direction: asc
+ units: secs
+ value: "90"
+ raw: /opt/hbase-perf-results/1495562300.log
+ start: 2017-05-23T17:58:20Z
+ stop: 2017-05-23T17:59:50Z
+ outcome: success
+ status: completed
+ timing:
+ completed: 2017-05-23 17:59:51 +0000 UTC
+ enqueued: 2017-05-23 17:58:16 +0000 UTC
+ started: 2017-05-23 17:58:20 +0000 UTC
+
# Limitations
-Restarting an HBase deployment is potentially disruptive. Be aware that the
-following events will cause a restart:
+Restarting an HBase cluster is potentially disruptive. Be aware that the
+following events will cause a restart of all HBase services:
+
+- Adding or removing HBase units
+- Adding or removing Zookeeper units
+- Changing charm configuration with `juju config`
+- Upgrading this charm
+
+
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
-- Zookeeper units joining or departing the quorum.
-- Upgrading the hbase charm.
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
# Contact Information
@@ -196,10 +226,10 @@ following events will cause a restart:
# Resources
-- [Apache HBase home page](https://hbase.apache.org/)
-- [Apache HBase issue tracker](https://issues.apache.org/jira/browse/HBASE)
+- [Apache HBase home page](http://hbase.apache.org/)
- [Apache Bigtop home page](http://bigtop.apache.org/)
+- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-packages/src/charm/hbase/layer-hbase/actions/perf-test b/bigtop-packages/src/charm/hbase/layer-hbase/actions/perf-test
index 2209d37e..215e0dcc 100755
--- a/bigtop-packages/src/charm/hbase/layer-hbase/actions/perf-test
+++ b/bigtop-packages/src/charm/hbase/layer-hbase/actions/perf-test
@@ -42,4 +42,5 @@ benchmark-finish
DURATION=`expr $STOP - $START`
benchmark-composite "${DURATION}" 'secs' 'asc'
-benchmark-raw ${RESULT_LOG}
+action-set meta.raw=${RESULT_LOG}
+action-set outcome="success"
diff --git a/bigtop-packages/src/charm/hbase/layer-hbase/actions/smoke-test b/bigtop-packages/src/charm/hbase/layer-hbase/actions/smoke-test
index bc6f45b6..652b7063 100755
--- a/bigtop-packages/src/charm/hbase/layer-hbase/actions/smoke-test
+++ b/bigtop-packages/src/charm/hbase/layer-hbase/actions/smoke-test
@@ -44,6 +44,6 @@ echo "HBase shell return code was: " $status
if [ $status -eq 0 ]; then
action-set outcome="success"
else
- action-set outcome="failed with return code ${status}"
- action-fail "smoke-test failed"
+ action-set outcome="failure"
+ action-fail "smoke-test failed with return code ${status}"
fi
diff --git a/bigtop-packages/src/charm/hbase/layer-hbase/config.yaml b/bigtop-packages/src/charm/hbase/layer-hbase/config.yaml
new file mode 100644
index 00000000..f04d9fd0
--- /dev/null
+++ b/bigtop-packages/src/charm/hbase/layer-hbase/config.yaml
@@ -0,0 +1,6 @@
+options:
+ heap:
+ type: int
+ default: 1024
+ description: |
+ The maximum heap size (in MB) used by the HBase master JVM.
diff --git a/bigtop-packages/src/charm/hbase/layer-hbase/icon.svg b/bigtop-packages/src/charm/hbase/layer-hbase/icon.svg
index 4da73521..c86bd67e 100644
--- a/bigtop-packages/src/charm/hbase/layer-hbase/icon.svg
+++ b/bigtop-packages/src/charm/hbase/layer-hbase/icon.svg
@@ -1,278 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="96"
- height="96"
- id="svg6517"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="icon.svg">
- <defs
- id="defs6519">
- <linearGradient
- id="Background">
- <stop
- id="stop4178"
- offset="0"
- style="stop-color:#b8b8b8;stop-opacity:1" />
- <stop
- id="stop4180"
- offset="1"
- style="stop-color:#c9c9c9;stop-opacity:1" />
- </linearGradient>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Inner Shadow"
- id="filter1121">
- <feFlood
- flood-opacity="0.59999999999999998"
- flood-color="rgb(0,0,0)"
- result="flood"
- id="feFlood1123" />
- <feComposite
- in="flood"
- in2="SourceGraphic"
- operator="out"
- result="composite1"
- id="feComposite1125" />
- <feGaussianBlur
- in="composite1"
- stdDeviation="1"
- result="blur"
- id="feGaussianBlur1127" />
- <feOffset
- dx="0"
- dy="2"
- result="offset"
- id="feOffset1129" />
- <feComposite
- in="offset"
- in2="SourceGraphic"
- operator="atop"
- result="composite2"
- id="feComposite1131" />
- </filter>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Drop Shadow"
- id="filter950">
- <feFlood
- flood-opacity="0.25"
- flood-color="rgb(0,0,0)"
- result="flood"
- id="feFlood952" />
- <feComposite
- in="flood"
- in2="SourceGraphic"
- operator="in"
- result="composite1"
- id="feComposite954" />
- <feGaussianBlur
- in="composite1"
- stdDeviation="1"
- result="blur"
- id="feGaussianBlur956" />
- <feOffset
- dx="0"
- dy="1"
- result="offset"
- id="feOffset958" />
- <feComposite
- in="SourceGraphic"
- in2="offset"
- operator="over"
- result="composite2"
- id="feComposite960" />
- </filter>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath873">
- <g
- transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
- id="g875"
- inkscape:label="Layer 1"
- style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline">
- <path
- style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
- d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
- id="path877"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssssss" />
- </g>
- </clipPath>
- <filter
- inkscape:collect="always"
- id="filter891"
- inkscape:label="Badge Shadow">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.71999962"
- id="feGaussianBlur893" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="4.0745362"
- inkscape:cx="-19.035615"
- inkscape:cy="49.018169"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1056"
- inkscape:window-x="0"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- showborder="true"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:showpageshadow="false"
- inkscape:snap-global="false">
- <inkscape:grid
- type="xygrid"
- id="grid821" />
- <sodipodi:guide
- orientation="1,0"
- position="16,48"
- id="guide823" />
- <sodipodi:guide
- orientation="0,1"
- position="64,80"
- id="guide825" />
- <sodipodi:guide
- orientation="1,0"
- position="80,40"
- id="guide827" />
- <sodipodi:guide
- orientation="0,1"
- position="64,16"
- id="guide829" />
- </sodipodi:namedview>
- <metadata
- id="metadata6522">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="BACKGROUND"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(268,-635.29076)"
- style="display:inline">
- <path
- style="fill:#e6e3e2;fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)"
- d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z"
- id="path6455"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssssss" />
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer3"
- inkscape:label="PLACE YOUR PICTOGRAM HERE"
- style="display:inline">
- <image
- y="43.003983"
- x="16.397383"
- id="image3795"
- xlink:href="data:image/png;base64,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 "
- height="15.675"
- width="63.412498" />
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="BADGE"
- style="display:none"
- sodipodi:insensitive="true">
- <g
- style="display:inline"
- transform="translate(-340.00001,-581)"
- id="g4394"
- clip-path="none">
- <g
- id="g855">
- <g
- inkscape:groupmode="maskhelper"
- id="g870"
- clip-path="url(#clipPath873)"
- style="opacity:0.6;filter:url(#filter891)">
- <path
- transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
- d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
- sodipodi:ry="12"
- sodipodi:rx="12"
- sodipodi:cy="552.36218"
- sodipodi:cx="252"
- id="path844"
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- </g>
- <g
- id="g862">
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path4398"
- sodipodi:cx="252"
- sodipodi:cy="552.36218"
- sodipodi:rx="12"
- sodipodi:ry="12"
- d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
- transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" />
- <path
- transform="matrix(1.25,0,0,1.25,33,-100.45273)"
- d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
- sodipodi:ry="12"
- sodipodi:rx="12"
- sodipodi:cy="552.36218"
- sodipodi:cx="252"
- id="path4400"
- style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="star"
- style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path4459"
- sodipodi:sides="5"
- sodipodi:cx="666.19574"
- sodipodi:cy="589.50385"
- sodipodi:r1="7.2431178"
- sodipodi:r2="4.3458705"
- sodipodi:arg1="1.0471976"
- sodipodi:arg2="1.6755161"
- inkscape:flatsided="false"
- inkscape:rounded="0.1"
- inkscape:randomized="0"
- d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z"
- transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
- </g>
- </g>
+<svg xmlns="http://www.w3.org/2000/svg" height="100px" width="100px" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100"><!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
+ <title>hbase</title>
+ <desc>Created with Sketch.</desc>
+ <defs>
+ <circle id="path-1" cy="50" cx="50" r="50"/>
+ </defs>
+ <g id="Page-1" fill-rule="evenodd" fill="none">
+ <g id="hbase">
+ <g id="orca">
+ <mask id="mask-2" fill="white">
+ <use xlink:href="#path-1"/>
+ </mask>
+ <use id="Oval-Copy" xlink:href="#path-1" transform="translate(50 50) rotate(180) translate(-50 -50)" fill="#FFFFFF"/>
+ <g id="Orca" fill="#000" mask="url(#mask-2)" fill-rule="nonzero">
+ <g id="Shape" transform="translate(15 23)">
+ <path d="m40.531 32.873c1.61 0-0.49 5.624-7.367 8.355s-11.9 0.975-12.973 0.732c-1.072-0.243-0.519-1.35 0.878-2.049 3.123-1.555 3.853-6.829 8.291-6.973 4.438-0.143 9.562-0.065 11.171-0.065m21.895-4.475c0.211 0.32 7.469 0.968 7.43 9.392 0 0.908-0.505 1.678-0.967 0.459s-1.536-1.096-2.268-1.683c-0.732-0.586-0.732-0.706-3.463-0.561-2.731 0.146-2.557-1.683-2.829-1.951-0.218 0.585-0.097 2.415-1.73 2.078-1.634-0.338-1.293 1.072-1.829 0.536-0.535-0.535-0.585 0.609-1.072 0.464s-1.146 0.487-1.119 1.024-0.463 1.22-0.877 0.553c-3.283-5.274 3.706-6.941 3.219-9.624 1.118 0.846 2.876 2.672 3.73 3.765 0.479 0.624 0.844 0.175 0.593-0.159-3.953-5.198-9.056-7.582-13.697-7.561-5.812 0.025-10.642 5.135-12.967 6.976-0.689 0.545-2.859 0.121-5.525 0.339-4.937 0.402-5.225 5.245-8.68 7.204-1.804 1.023-1.697 2.373-0.845 2.731s2.819 0.755 3.645 0.867c-4.341 4.975-10.548 6.982-12.327 8.206-2.1939 1.512-4.1916 3.503-6.9245 3.516-1.6589 0-1.8539-1.072-1.8539-1.072-0.4794-0.104-1.5198-1.26-1.3568-2.3s-0.98289-3.65-0.39796-7.42c0.78306-5.041 3.7877-11.331 6.129-15.232 2.3573-3.929 7.8312-10.889 8.3392-11.558 1.582-2.091-2.877-14.338 2.958-17.087 0.83-0.3895 1.186-0.01553 1.186 0.52146 0 0.53694 0.655 11.165 5.413 10.779 2.194-0.179 12.453-2.4057 21.428 1.235 7.386 2.997 13.392 10.548 16.663 15.574m-44.889 7.277c-3.764 0.132-6.118 3.495-6.145 6.047-0.032 3.056 2.21 0.716 4.551-0.748s1.886-3.869 2.113-4.032 1.012-1.322-0.519-1.267m-5.81 8.583c-0.452 0.368-0.673 0.844-0.495 1.065 0.177 0.22 0.69 0.102 1.142-0.264 0.453-0.366 0.675-0.844 0.496-1.064-0.179-0.221-0.691-0.103-1.143 0.263m9.672-0.289c-1.438-0.129-2.627-0.673-3.602-1.234s-1.648 1.838-3.676 3.804c-2.178 2.113-5.1618 2.853-6.5666 4.902-1.1699 1.706-2.7521 2.114-3.6247 2.478-0.3772 0.16-0.2205 0.299-0.0575 0.32 1.1427 0.171 3.1148-0.742 5.3906-2.535 2.6022-2.049 9.4392-4.618 12.138-7.74m24.931-20.709c-1.328 0-0.754-0.844-0.226-1.008 2.654-0.825 6.371 0.032 8.858 1.56-1.17-2-5.705-5.115-12.24-3.609-6.535 1.505-7.315 8.291-10.436 11.412h1.652c1.825-1.903 4.847-4.685 7.555-6.007 2.237-1.093 5.979-2.137 11.826-0.138-1.633-2.096-4.863-2.216-6.998-2.21m21.459 12.72c0.358 0.553 0.703 0.16 0.439-0.593-0.305-0.869-1.199-4.13-5.479-5.462-3.675-1.146-3.055-0.472-2.373 0.569 0.357 0.541 1.664 1.724 1.758 2.529 0.088 0.739-0.769 0.977-1.355 0.654-0.841-0.463-2.004-2.284-3.308-3.294-0.274 1.426-3.9 4.315-3.719 5.792 0.121 1.001 0.84 0.537 1.011 0.134 0.16-0.369 0.571-0.812 1.062-0.799 1.535 0.024 3.407-0.222 3.835-1.293 0.46-1.134 0.98-0.402 1.146 0 0.48 1.146 1.862 0.774 3.983 0.735 2.284-0.041 2.64 0.491 2.992 1.033m-65.206-0.561c0.6185-1.691 2.5363-5.626 4.1936-7.868-1.106 0.098-1.6222-2.889-2.5843-2.015-2.5107 2.276-3.0237 7.006-1.6093 9.885"/>
+ </g>
</g>
+ </g>
</g>
+ </g>
</svg>
diff --git a/bigtop-packages/src/charm/hbase/layer-hbase/layer.yaml b/bigtop-packages/src/charm/hbase/layer-hbase/layer.yaml
index a35e252a..26c63e12 100644
--- a/bigtop-packages/src/charm/hbase/layer-hbase/layer.yaml
+++ b/bigtop-packages/src/charm/hbase/layer-hbase/layer.yaml
@@ -2,10 +2,11 @@ repo: https://github.com/apache/bigtop/tree/master/bigtop-packages/src/charm/hba
includes:
- 'layer:apache-bigtop-base'
- 'layer:hadoop-client'
- - 'interface:zookeeper'
+ - 'layer:leadership'
- 'interface:benchmark'
- 'interface:hbase'
- 'interface:hbase-quorum'
+ - 'interface:zookeeper'
options:
apache-bigtop-base:
ports:
@@ -14,21 +15,21 @@ options:
# resourcemanager). Communication among units within the cluster does
# not need ports to be explicitly opened.
hbase-master:
- port: 60000
- exposed_on: 'hbase'
+ port: 16000
hbase-master-web:
- port: 60010
+ port: 16010
exposed_on: 'hbase'
hbase-region:
- port: 60020
- exposed_on: 'hbase'
+ port: 16020
hbase-region-web:
- port: 60030
+ port: 16030
exposed_on: 'hbase'
hbase-thrift:
port: 9090
+ hbase-thrift-web:
+ port: 9095
exposed_on: 'hbase'
# Not yet on bigtop
#hbase-rest:
- # port: 8080
+ # port: 8085
# exposed_on: 'hbase'
diff --git a/bigtop-packages/src/charm/hbase/layer-hbase/lib/charms/layer/bigtop_hbase.py b/bigtop-packages/src/charm/hbase/layer-hbase/lib/charms/layer/bigtop_hbase.py
index cd7c14cb..40fe78a4 100755
--- a/bigtop-packages/src/charm/hbase/layer-hbase/lib/charms/layer/bigtop_hbase.py
+++ b/bigtop-packages/src/charm/hbase/layer-hbase/lib/charms/layer/bigtop_hbase.py
@@ -13,52 +13,93 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from charmhelpers.core import hookenv, host
-from jujubigdata import utils
-from charms.layer.apache_bigtop_base import Bigtop
+from charmhelpers.core import hookenv, host, unitdata
from charms import layer
+from charms.layer.apache_bigtop_base import Bigtop
+from jujubigdata import utils
+from path import Path
class HBase(object):
- """
- This class manages HBase.
- """
+ '''This class manages HBase.'''
def __init__(self):
self.dist_config = utils.DistConfig(
data=layer.options('apache-bigtop-base'))
def configure(self, hosts, zk_units):
- zks = []
- for unit in zk_units:
- ip = utils.resolve_private_address(unit['host'])
- zks.append(ip)
- zks.sort()
- zk_connect = ",".join(zks)
-
+ zk_connect = self.get_zk_connect(zk_units)
roles = ['hbase-server', 'hbase-master', 'hbase-client']
-
override = {
+ 'bigtop::hbase_thrift_port': self.dist_config.port('hbase-thrift'),
+ 'hadoop_hbase::client::thrift': True,
+ 'hadoop_hbase::common_config::heap_size': hookenv.config()['heap'],
'hadoop_hbase::common_config::zookeeper_quorum': zk_connect,
- 'hadoop_hbase::deploy::auxiliary': False
+ 'hadoop_hbase::deploy::auxiliary': False,
}
bigtop = Bigtop()
bigtop.render_site_yaml(hosts, roles, override)
bigtop.trigger_puppet()
+ def get_zk_connect(self, zk_units):
+ zks = []
+ for unit in zk_units:
+ ip = utils.resolve_private_address(unit['host'])
+ zks.append(ip)
+ zks.sort()
+ return ",".join(zks)
+
+ def update_regionservers(self, addrs, remove=False):
+ '''
+ Each HBase unit in the cluster runs a RegionServer process. Ensure
+ all unit IP addresses are listed in the regionservers file.
+
+ @param: addrs List of IP addresses
+ @param: remove Bool to add (False) or remove (True) unit IPs
+ '''
+ unit_kv = unitdata.kv()
+ kv_ips = unit_kv.get('regionservers', default=[])
+
+ # add/remove IPs from our list
+ if remove:
+ kv_ips = [ip for ip in kv_ips if ip not in addrs]
+ else:
+ kv_ips.extend(addrs)
+
+ # write regionservers file using a sorted, unique set of addrs
+ new_kv = sorted(set(kv_ips))
+ rs_file = Path('/etc/hbase/conf/regionservers')
+ rs_file.write_lines(
+ [
+ '# DO NOT EDIT',
+ '# This file is automatically managed by Juju',
+ ] + [ip for ip in new_kv],
+ append=False
+ )
+
+ # save the new kv IPs
+ unit_kv.set('regionservers', new_kv)
+ unit_kv.flush(True)
+
def restart(self):
self.stop()
self.start()
def start(self):
+ # order is important; master must start first.
+ hookenv.log('Starting HBase services')
host.service_start('hbase-master')
host.service_start('hbase-regionserver')
host.service_start('hbase-thrift')
+ hookenv.log('HBase services have been started')
def stop(self):
- host.service_stop('hbase-master')
- host.service_stop('hbase-regionserver')
+ # order is important; master must stop last.
+ hookenv.log('Stopping HBase services')
host.service_stop('hbase-thrift')
+ host.service_stop('hbase-regionserver')
+ host.service_stop('hbase-master')
+ hookenv.log('HBase services have been stopped')
def open_ports(self):
for port in self.dist_config.exposed_ports('hbase'):
diff --git a/bigtop-packages/src/charm/hbase/layer-hbase/metadata.yaml b/bigtop-packages/src/charm/hbase/layer-hbase/metadata.yaml
index 821f3fa8..49fef470 100644
--- a/bigtop-packages/src/charm/hbase/layer-hbase/metadata.yaml
+++ b/bigtop-packages/src/charm/hbase/layer-hbase/metadata.yaml
@@ -1,9 +1,9 @@
name: hbase
-summary: Apache Bitop HBase
+summary: HBase from Apache Bigtop
maintainer: Juju Big Data <bigdata@lists.ubuntu.com>
description: >
- HBase is the Hadoop database. This charm provides HBase from the
- Apache Bigtop project.
+ HBase is the Hadoop database. This charm provides version 1.1.9 of the
+ HBase application from Apache Bigtop.
tags: []
requires:
zookeeper:
diff --git a/bigtop-packages/src/charm/hbase/layer-hbase/reactive/hbase.py b/bigtop-packages/src/charm/hbase/layer-hbase/reactive/hbase.py
index 26751b59..212a16be 100644
--- a/bigtop-packages/src/charm/hbase/layer-hbase/reactive/hbase.py
+++ b/bigtop-packages/src/charm/hbase/layer-hbase/reactive/hbase.py
@@ -13,11 +13,20 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from charms.reactive import when, when_not_all, is_state, set_state, remove_state
-from charms.layer.bigtop_hbase import HBase
from charmhelpers.core import hookenv
-from charms.reactive.helpers import data_changed
from charms.layer.apache_bigtop_base import get_layer_opts, get_package_version
+from charms.layer.bigtop_hbase import HBase
+from charms.reactive import (
+ RelationBase,
+ is_state,
+ remove_state,
+ set_state,
+ when,
+ when_any,
+ when_not,
+ when_not_all
+)
+from charms.reactive.helpers import any_file_changed, data_changed
@when('bigtop.available')
@@ -39,37 +48,78 @@ def report_status():
elif not zk_ready:
hookenv.status_set('waiting',
'waiting for zookeeper to become ready')
- elif hbase_installed:
+ elif not hbase_installed:
+ hookenv.status_set('waiting',
+ 'waiting to install hbase')
+ else:
hookenv.status_set('active',
'ready')
-@when('bigtop.available', 'zookeeper.ready', 'hadoop.hdfs.ready')
-def install_hbase(zk, hdfs):
+@when('bigtop.available', 'hadoop.hdfs.ready', 'zookeeper.ready')
+def install_hbase(hdfs, zk):
+ '''
+ Anytime our dependencies are available, check to see if we have a valid
+ reason to (re)install. These include:
+ - initial install
+ - config change
+ - Zookeeper unit has joined/departed
+ '''
zks = zk.zookeepers()
- if (is_state('hbase.installed') and
- (not data_changed('zks', zks))):
- return
+ deployment_matrix = {
+ 'zookeepers': zks,
+ }
+
+ # Handle nuances when installing versus re-installing
+ if not is_state('hbase.installed'):
+ prefix = "installing"
- msg = "configuring hbase" if is_state('hbase.installed') else "installing hbase"
- hookenv.status_set('maintenance', msg)
+ # On initial install, prime our kv with the current deployment matrix.
+ # Subsequent calls will use this to determine if a reinstall is needed.
+ data_changed('deployment_matrix', deployment_matrix)
+ else:
+ prefix = "configuring"
+ # We do not need to reinstall when peers come and go; that is covered
+ # by other handlers below.
+ if is_state('hbpeer.departed') or is_state('hbpeer.joined'):
+ return
+
+ # Return if neither config nor our matrix has changed
+ if not (is_state('config.changed') or
+ data_changed('deployment_matrix', deployment_matrix)):
+ return
+
+ hookenv.status_set('maintenance', '{} hbase'.format(prefix))
+ hookenv.log("{} hbase with: {}".format(prefix, deployment_matrix))
hbase = HBase()
hosts = {}
- nns = hdfs.namenodes()
- hosts['namenode'] = nns[0]
+ hosts['namenode'] = hdfs.namenodes()[0]
hbase.configure(hosts, zks)
- hbase.open_ports()
- set_state('hbase.installed')
- report_status()
+
+ # Ensure our IP is in the regionservers list; restart if the rs conf
+ # file has changed.
+ hbase.update_regionservers([hookenv.unit_private_ip()])
+ if any_file_changed(['/etc/hbase/conf/regionservers']):
+ hbase.restart()
+
# set app version string for juju status output
hbase_version = get_package_version('hbase-master') or 'unknown'
hookenv.application_version_set(hbase_version)
+ hbase.open_ports()
+ report_status()
+ set_state('hbase.installed')
+
@when('hbase.installed')
@when_not_all('hadoop.hdfs.ready', 'zookeeper.ready')
def stop_hbase():
+ '''
+ HBase depends on HDFS and Zookeeper. If we are installed and either of
+ these dependencies go away, shut down HBase services and remove our
+ installed state.
+ '''
hbase = HBase()
hbase.close_ports()
hbase.stop()
@@ -77,10 +127,94 @@ def stop_hbase():
report_status()
-@when('hbase.installed', 'hbclient.joined')
-def serve_client(client):
+@when('hbase.installed')
+@when_any('hbpeer.departed', 'hbpeer.joined')
+def handle_peers():
+ '''
+ We use HBase peers to keep track of the RegionServer IP addresses in a
+ cluster. Use get_nodes() from the appropriate peer relation to retrieve
+ a list of peer tuples, e.g.:
+ [('hbase/0', '172.31.5.161'), ('hbase/2', '172.31.5.11')]
+
+ Depending on the state, this handler will add or remove peer IP addresses
+ from the regionservers config file.
+ '''
+ if is_state('hbpeer.departed'):
+ hbpeer = RelationBase.from_state('hbpeer.departed')
+ is_departing = True
+ message = 'removing hbase peer(s)'
+ else:
+ hbpeer = RelationBase.from_state('hbpeer.joined')
+ is_departing = False
+ message = 'adding hbase peer(s)'
+
+ # Make sure we have a valid relation object
+ if hbpeer:
+ nodes = hbpeer.get_nodes()
+ else:
+ hookenv.log('Ignoring unknown HBase peer state')
+ return
+
+ hookenv.status_set('maintenance', message)
+ hbase = HBase()
+ ip_addrs = [node[1] for node in nodes]
+ hookenv.log('{}: {}'.format(message, ip_addrs))
+ hbase.update_regionservers(ip_addrs, remove=is_departing)
+
+ # NB: the rs conf file will always change when handling peer updates, but
+ # we still include this condition to keep the files_changed kv current.
+ if any_file_changed(['/etc/hbase/conf/regionservers']):
+ hbase.restart()
+
+ # Dismiss appropriate state now that we've handled the peer
+ if is_departing:
+ hbpeer.dismiss_departed()
+ else:
+ hbpeer.dismiss_joined()
+ report_status()
+
+
+@when('hbase.installed', 'leadership.is_leader')
+@when('zookeeper.ready', 'hbclient.joined')
+def serve_client(zk, client):
+ '''
+ We may have multiple HBase peers, but we only need to send 1 set of
+ connection data. Leverage Juju leadership to only send the leader
+ info (even if it's not the actual HBase master).
+
+ Zookeeper will ensure that any HBase peer routes requests to the
+ appropriate master.
+ '''
+ hbase = HBase()
+
+ # Get hbase config and zk info
config = get_layer_opts()
+ host = hookenv.unit_private_ip()
master_port = config.port('hbase-master')
regionserver_port = config.port('hbase-region')
thrift_port = config.port('hbase-thrift')
- client.send_port(master_port, regionserver_port, thrift_port)
+ zk_connect = hbase.get_zk_connect(zk.zookeepers())
+
+ # Send data to our connected client
+ client.send_connection(master_port=master_port,
+ regionserver_port=regionserver_port,
+ thrift_port=thrift_port,
+ host=host,
+ zk_connect=zk_connect)
+
+ hookenv.log('Serving HBase client with master {}:{}, regionserver '
+ 'port {}, thrift port {}, and zk connect {}'.format(
+ host, master_port,
+ regionserver_port,
+ thrift_port,
+ zk_connect))
+
+
+@when('leadership.is_leader', 'hbclient.joined')
+@when_not('hbase.installed')
+def stop_serving_client(client):
+ '''
+ If HDFS or ZK goes away, the 'installed' state will be removed. If we have
+ connected clients, inform them that hbase is no longer ready.
+ '''
+ client.clear_hbase_started()
diff --git a/bigtop-packages/src/charm/hbase/layer-hbase/tests/01-basic-deployment.py b/bigtop-packages/src/charm/hbase/layer-hbase/tests/01-basic-deployment.py
index 3bfc5f28..4873d10c 100755
--- a/bigtop-packages/src/charm/hbase/layer-hbase/tests/01-basic-deployment.py
+++ b/bigtop-packages/src/charm/hbase/layer-hbase/tests/01-basic-deployment.py
@@ -27,7 +27,7 @@ class TestDeploy(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('hbase', 'cs:xenial/hbase')
+ cls.d.add('hbase')
cls.d.setup(timeout=1800)
cls.d.sentry.wait_for_messages({'hbase': re.compile('ready')}, timeout=1800)
diff --git a/bigtop-packages/src/charm/hbase/layer-hbase/tests/02-smoke-test.py b/bigtop-packages/src/charm/hbase/layer-hbase/tests/02-smoke-test.py
index 5382542f..b1683154 100755
--- a/bigtop-packages/src/charm/hbase/layer-hbase/tests/02-smoke-test.py
+++ b/bigtop-packages/src/charm/hbase/layer-hbase/tests/02-smoke-test.py
@@ -27,11 +27,11 @@ class TestDeploy(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('hbase', 'cs:xenial/hbase')
- cls.d.add('namenode', 'cs:xenial/hadoop-namenode')
- cls.d.add('plugin', 'cs:xenial/hadoop-plugin')
- cls.d.add('slave', 'cs:xenial/hadoop-slave')
- cls.d.add('zookeeper', 'cs:xenial/zookeeper')
+ cls.d.add('hbase')
+ cls.d.add('namenode', charm='hadoop-namenode')
+ cls.d.add('plugin', charm='hadoop-plugin')
+ cls.d.add('slave', charm='hadoop-slave')
+ cls.d.add('zookeeper')
cls.d.relate('hbase:hadoop', 'plugin:hadoop-plugin')
cls.d.relate('hbase:zookeeper', 'zookeeper:zookeeper')
diff --git a/bigtop-packages/src/charm/hive/layer-hive/README.md b/bigtop-packages/src/charm/hive/layer-hive/README.md
new file mode 100644
index 00000000..ae2ddd8e
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/README.md
@@ -0,0 +1,237 @@
+<!--
+ 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.
+-->
+# Overview
+
+Apache Hive is a data warehouse infrastructure built on top of Hadoop that
+supports data summarization, query, and analysis. Hive provides an SQL-like
+language called HiveQL that transparently converts queries to MapReduce for
+execution on large datasets stored in Hadoop's HDFS. Learn more at
+[hive.apache.org][].
+
+This charm deploys version 1.2.1 of the Hive component from [Apache Bigtop][].
+
+[hive.apache.org]: http://hive.apache.org/
+[Apache Bigtop]: http://bigtop.apache.org/
+
+
+# Deploying
+
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
+
+This charm is intended to be deployed via one of the [bigtop hadoop bundles][].
+For example:
+
+ juju deploy hadoop-processing
+
+This will deploy an Apache Bigtop Hadoop cluster. More information about this
+deployment can be found in the [bundle readme](https://jujucharms.com/hadoop-processing/).
+
+Now add Hive and relate it to the cluster via the hadoop-plugin:
+
+ juju deploy hive
+ juju add-relation hive plugin
+
+## Metastore
+This charm will start the Hive Metastore service using a local Apache Derby
+metastore database by default. This is suitable for unit or smoke testing Hive,
+but this configuration should not be used in production. Deploying an external
+database for the Hive metastore is recommended:
+
+ juju deploy mariadb
+ juju add-relation hive mariadb
+
+## HBase Integration
+This charm supports interacting with HBase using Hive. Enable this by relating
+Hive to a deployment that includes HBase. For example:
+
+ juju deploy hadoop-hbase
+ juju add-relation hive hbase
+
+See the [hadoop-hbase][] bundle for more information about this HBase
+deployment.
+
+> **Note:** Applications that are duplicated in multiple bundles will be
+reused. This means when deploying both `hadoop-processing` and `hadoop-hbase`,
+Juju will reuse (and not duplicate) common applications like the NameNode,
+ResourceManager, Slaves, etc.
+
+## Network-Restricted Environments
+Charms can be deployed in environments with limited network access. To deploy
+in this environment, configure a Juju model with appropriate proxy and/or
+mirror options. See [Configuring Models][] for more information.
+
+[getting-started]: https://jujucharms.com/docs/stable/getting-started
+[bigtop hadoop bundles]: https://jujucharms.com/u/bigdata-charmers/#bundles
+[Configuring Models]: https://jujucharms.com/docs/stable/models-config
+[hadoop-hbase]: https://jujucharms.com/hadoop-hbase/
+
+
+# Verifying
+
+## Status
+Apache Bigtop charms provide extended status reporting to indicate when they
+are ready:
+
+ juju status
+
+This is particularly useful when combined with `watch` to track the on-going
+progress of the deployment:
+
+ watch -n 2 juju status
+
+The message column will provide information about a given unit's state.
+This charm is ready for use once the status message indicates that it is
+ready.
+
+## Smoke Test
+This charm provides a `smoke-test` action that can be used to verify the
+application is functioning as expected. Run the action as follows:
+
+ juju run-action hive/0 smoke-test
+
+Watch the progress of the smoke test actions with:
+
+ watch -n 2 juju show-action-status
+
+Eventually, the action should settle to `status: completed`. If it
+reports `status: failed`, the application is not working as expected. Get
+more information about a specific smoke test with:
+
+ juju show-action-output <action-id>
+
+
+# Using
+
+This charm provides a variety of actions and interfaces that can be used
+to interact with Hive.
+
+## Actions
+Run a smoke test (as described in the **Verifying** section):
+
+ juju run-action hive/0 smoke-test
+ juju show-action-output <id> # <-- id from above command
+
+Restart all Hive services on a unit:
+
+ juju run-action hive/0 restart
+ juju show-action-output <id> # <-- id from above command
+
+## Command Line Interface
+
+ $ juju ssh hive/0
+ $ hive
+ ...
+ hive> create table foo(col1 int, col2 string);
+ OK
+ Time taken: 0.381 seconds
+ hive> show tables;
+ OK
+ foo
+ hivesmoke
+ Time taken: 0.202 seconds, Fetched: 2 row(s)
+ hive> exit;
+
+### HBase
+As mentioned in the **Deploying** section, this charm supports integration
+with HBase. When HBase is deployed and related to Hive, use the Hive CLI to
+interact with HBase:
+
+ $ juju ssh hive/0
+ $ hive
+ ...
+ hive> CREATE TABLE myhivetable(key STRING, mycol STRING)
+ STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
+ WITH SERDEPROPERTIES ('hbase.columns.mapping' = ':key,cf:mycol')
+ TBLPROPERTIES ('hbase.table.name' = 'myhbasetable');
+ OK
+ Time taken: 2.497 seconds
+ hive> DESCRIBE myhivetable;
+ OK
+ key string from deserializer
+ mycol string from deserializer
+ Time taken: 0.174 seconds, Fetched: 2 row(s)
+
+## Thrift Interface
+The HiveServer2 service provides a thrift server that can be used by Hive
+clients. To access this interface from external clients (i.e. applications
+that are not part of the Juju deployment), find the `Public address` of the
+hive unit and expose the application:
+
+ juju status hive
+ juju expose hive
+
+External clients will be able to access Hive using:
+
+ thrift://HIVE_PUBLIC_IP:10000
+
+
+# Configuring
+
+Charm configuration can be changed at runtime with `juju config`. This charm
+supports the following config parameters.
+
+## Heap
+The default heap size for the the Hive shell JVM is 1024MB. Set a different
+value (in MB) with the following:
+
+ juju config hbase heap=4096
+
+
+# Limitations
+
+## Restarting Hive
+Restarting Hive is potentially disruptive when queries are running. Be aware
+that the following events will cause a restart of all Hive services:
+
+- Adding or removing an HBase relation
+- Changing charm configuration with `juju config`
+- Upgrading this charm
+
+## Hive Web Interface
+The Hive Web Interface (HWI) has been removed upstream ([HIVE-15622][]). This
+charm does not provide HWI. Use the command line or thrift interfaces for
+interacting with Hive.
+
+[HIVE-15622]: https://issues.apache.org/jira/browse/HIVE-15622
+
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
+# Contact Information
+
+- <bigdata@lists.ubuntu.com>
+
+
+# Resources
+
+- [Apache Hive home page](http://hive.apache.org/)
+- [Apache Bigtop home page](http://bigtop.apache.org/)
+- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
+- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
+- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
diff --git a/bigtop-packages/src/charm/hive/layer-hive/actions.yaml b/bigtop-packages/src/charm/hive/layer-hive/actions.yaml
new file mode 100644
index 00000000..7870f30b
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/actions.yaml
@@ -0,0 +1,4 @@
+restart:
+ description: Retart Hive Metastore and HiveServer2.
+smoke-test:
+ description: Verify that Hive is working.
diff --git a/bigtop-packages/src/charm/hive/layer-hive/actions/restart b/bigtop-packages/src/charm/hive/layer-hive/actions/restart
new file mode 100755
index 00000000..904614fe
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/actions/restart
@@ -0,0 +1,36 @@
+#!/usr/bin/env python3
+
+# 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.
+
+import sys
+sys.path.append('lib')
+
+from charmhelpers.core import hookenv # noqa: E402
+from charms.layer.bigtop_hive import Hive # noqa: E402
+from charms.reactive import is_state # noqa: E402
+
+
+def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
+ hookenv.action_fail(msg)
+ sys.exit()
+
+
+if not is_state('hive.installed'):
+ fail('Hive is not yet ready')
+
+hive = Hive()
+hive.restart()
diff --git a/bigtop-packages/src/charm/hive/layer-hive/actions/smoke-test b/bigtop-packages/src/charm/hive/layer-hive/actions/smoke-test
new file mode 100755
index 00000000..d6ac2444
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/actions/smoke-test
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+
+# 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.
+
+import sys
+sys.path.append('lib')
+
+from charmhelpers.core import hookenv # noqa: E402
+from charms.layer.apache_bigtop_base import Bigtop # noqa: E402
+from charms.reactive import is_state # noqa: E402
+
+
+def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
+ hookenv.action_fail(msg)
+ sys.exit()
+
+
+if not is_state('hive.installed'):
+ fail('Charm is not yet ready to run the Bigtop smoke test(s)')
+
+# Bigtop smoke test components
+smoke_components = ['hive']
+
+# Env required by test components
+smoke_env = {
+ 'HIVE_HOME': '/usr/lib/hive',
+ 'HIVE_CONF_DIR': '/etc/hive/conf',
+}
+
+bigtop = Bigtop()
+result = bigtop.run_smoke_tests(smoke_components, smoke_env)
+if result == 'success':
+ hookenv.action_set({'outcome': 'success'})
+else:
+ fail('{} smoke tests failed with: {}'.format(smoke_components, result))
diff --git a/bigtop-packages/src/charm/hive/layer-hive/config.yaml b/bigtop-packages/src/charm/hive/layer-hive/config.yaml
new file mode 100644
index 00000000..90ce3375
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/config.yaml
@@ -0,0 +1,6 @@
+options:
+ heap:
+ type: int
+ default: 1024
+ description: |
+ The maximum heap size (in MB) used by the Hive shell JVM.
diff --git a/bigtop-packages/src/charm/hive/layer-hive/copyright b/bigtop-packages/src/charm/hive/layer-hive/copyright
new file mode 100644
index 00000000..e900b97c
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/copyright
@@ -0,0 +1,16 @@
+Format: http://dep.debian.net/deps/dep5/
+
+Files: *
+Copyright: Copyright 2015, Canonical Ltd., All Rights Reserved.
+License: Apache License 2.0
+ Licensed 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.
diff --git a/bigtop-packages/src/charm/hive/layer-hive/icon.svg b/bigtop-packages/src/charm/hive/layer-hive/icon.svg
new file mode 100644
index 00000000..12771d3d
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/icon.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
+<svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" xml:space="preserve" height="100%" width="100%" version="1.1" clip-rule="evenodd" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100">
+ <g transform="translate(-2059.4 -1166.5)">
+ <g transform="translate(2109.4 1216.5)">
+ <g transform="translate(-50 -50)">
+ <clipPath id="_clip1">
+ <rect y="0" x="0" height="100" width="100"/>
+ </clipPath>
+ <g clip-path="url(#_clip1)">
+ <g id="hive">
+ <g id="Oval.-Copy" transform="matrix(-1 -7.6571e-16 7.6571e-16 -1 100 100)">
+ <circle cy="50" cx="50" r="50" fill="#e5e2e1"/>
+ </g>
+ <g transform="matrix(.066971 0 0 .066971 46.514 47.563)">
+ <g transform="translate(-500 -450)">
+ <clipPath id="_clip2">
+ <rect y="0" x="0" height="900" width="1e3"/>
+ </clipPath>
+ <g clip-path="url(#_clip2)">
+ <g stroke="#fdee21" stroke-width="5.13px" transform="translate(-.53268 66.8)">
+ <path d="m597.33 637.79v192.85h47.35v-88.63l9.76 0.18v88.45h47.88v-192.85h-47.88v71.55h-9.76v-71.55h-47.35z"/>
+ <path d="m761.25 637.79h-46.12v192.85h46.12v-192.85z"/>
+ <path d="m768.8 637.79l36.43 192.85h54.98l36.43-192.85h-48.95l-12.07 82.52c-1 3.16-4.4 3.16-5 0l-12.06-82.52h-49.76z"/>
+ <path d="m997.97 637.79h-91.54v192.85h91.54v-50.57l-50.9-0.43v-21.68h24.25v-50.21h-24.25v-19.39h50.9v-50.57z"/>
+ </g>
+ <g transform="translate(-.53268 66.8)">
+ <path d="m503.66 52.952c-7.71-21.115-272.92-124.22-276.31-112.9-48.7 12.695-68.52 68.826-102.02 104.38l-74.393-4.261c-32.771 42.142-49.967 85.199-38.258 129.95 42.002 56.91 90.761 105.33 121.15 176.81 2.4 33.69 145.82 3.53 176.56-3.13-41.99 30.05-78.56 76.65-62.85 210.84 14.35 63.01 24.16 133.36 151.4 204.64 16.75 9.38 51.41 20.2 72.84 28.09 20.5 9.4 44.46 13.27 112.07-7.41 39.13-16.86 81.37-27.02 119.65-43.84l-46.02 2.16c-63.36 1.37-112.29 6.1-127.38-11.6l-58.32-100.68 34-66.04c47.06 4.82 62.68 42.98 104.15 57.51l48.89-36.21c141.99 83.82 198.48-53.12 214.67-159.77-1.73-43.39-93.95 13.61-88.36-6.68 2.16-46.64-35.86-107.67-60.42-155.22l28.43-110.01c12.9-11.49-59.72-133.86-119.02-149.12-52.03-13.391-130.46 52.492-130.46 52.492z" fill="#fdee21"/>
+ </g>
+ <g transform="translate(-.53268 66.8)" fill="#c8c037">
+ <path d="m736.92 286.75c0.51 11.82 0.45 26.19 1.59 35.15-0.19 6.84-5.32 7.09-9.56 8.52l27.63 10.12c5.49 9.23 9.9 18.46 14.35 27.69 5.16 22.71 1.31 23.36-2.13 25.03-10.02 0.11-20.02 0.13-29.36-1.86 4.18 2.21 5.1 3.82 5.55 6.64 0.81 5.22-2.54 12.33-8.07 19.19 8.17 4.53 23.07 8.97 34.14 13.18l12.62-28.09c-5.72-41.27-23.04-79.31-46.76-115.57z"/>
+ <path d="m788.49 425.18c15.32 6.39 36.49 4.52 65.85-10.61 4.36-3.11 8.43-1.25 0.62 3.85-38.5 34.55-56.93 17.27-66.47 6.76z"/>
+ <path d="m857.28 410.04c4.55 8.72 1.79 15.8 0.27 23.17-4.76 37.45-16.43 67.05-39.33 97.99-74.47 119.74-149.66 44.82-209.62-3.94l-24.79 62.13c-1.32 5.45-6.79 9.69 31.93 26.74l39.46-27.87c150.46 114.48 257.08-160.24 202.08-178.22z"/>
+ <path d="m626.75 517.04c-10.15 0.72-40.36 11-41.71 16.95l13.91-20.72 27.8 3.77z"/>
+ <path d="m607.01 390.07c1.86 0 10.79 2.4 9.83 1.86-1.37-0.76-0.15 12.52 2.66 19.44l-10.9 23.7c20.87-24.06 53.86-22.46 84.49-25.56l-14.61-9.05c2.54-8.47-0.45-15.17-1.86-22.37l-69.61 11.98z"/>
+ <path d="m658.28 318.71c-22.39 6.86-43.82 18.07-58.2 41.98 10.97-39.4 13.21-37.9 16.75-39.85 15.35-6.86 27.93-2.59 41.45-2.13z"/>
+ </g>
+ <g transform="translate(-.53268 66.8)" fill="#fcf6a0">
+ <path d="m538.73 780.45c-27.07 29.87-87.47-2.26-137.63-18.64-127.46-81.05-152.36-157.35-154.09-232.2-6.55-107.22 26.37-169.52 68.01-184.27-27.56 53.13-40.41 148.5-27.63 219.42 10.32 39.46 10.53 106 76.55 141.62 32.32 18.2 23.57 32.37 45.43 49.41 23.95 18.68 90.75 36.44 129.36 24.66z"/>
+ <path d="m579.17 284.94c-45.83-64.99-110.29-89.39-182.98-92.05 14.57-4.75 29.14-7.23 43.7-14.25 3.57-3.75 2.41-10.34 1.07-17.04-69.97-18.27-114.13-40.85-170.03-61.782l150.91 36.212c101.91 3.87 93.16 29.03 157.34 148.91h-0.01z"/>
+ <path d="m628.24 253.6c-33.87-48.35-66.72-107.03-111.31-144.35-107.64-48.584-214.12-84.666-338.91-117.5l39.83-51.216c132.42 30.227 256.8 80.808 368.21 164.19 18.85 47.66 31.42 95.39 42.17 148.87l0.01 0.01z"/>
+ <path d="m696.52 168.16s-18.99-42.6-28.23-58.87c-21.45-23.762-32.29-68.05-76.22-88.918 13.9 3.752 23.4-0.718 51.76 24.992l44.67 84.736 8.02 38.06z"/>
+ <path d="m720.14 241.96c4.38-36.91 12.7-96.11 3.15-119.5-26.55-35.624-53.29-72.446-80.04-106.63-4.43-4.123-7.62-9.719-11.11-14.084 37.61 9.744 76.86 35.894 129.79 139.13l-41.79 101.08z"/>
+ </g>
+ <g transform="translate(-.53268 66.8)">
+ <path d="m562.02 246.32c-14.98-11.79-28.33-53.49-51.03-62.16-21.01-1.76-28.71-8.37-56.34-2.74 10.02-5.02 19.48-11.44 30.13-14.88 7.22-1.71 13.98 0.18 20.87 1.13 1.7-0.8 2.81-1.8 2.39-3.31-27.81-17.19-84.86-17.44-123.38-27.25 44.7 1.5 94.16-0.98 127.76 9.79 27.01 23.98 35.78 69.12 49.6 99.42z"/>
+ <path d="m643.93 45.227c6.2 0.563 39.57 53.353 41.14 62.133 2.78 19.21 9.62 40.73 11.46 60.82-5.49-19.27-11.48-38.53-18.97-57.8-2.19-5.31-7.73-17.305-23.11-34.272-7.16-11.959-8.71-21.359-10.52-30.88v-0.001z"/>
+ <path d="m757.02 332.75h-14.28l15.78 4.14-1.5-4.14z"/>
+ <path d="m659.6 318.49c-14.36-1.77-29.09-2-43.45 1.16-5.85 7.86-6.25 15.85-8.81 23.24 17.45-19.23 24.38-20.41 52.26-24.4z"/>
+ <path d="m855.42 417.77c-7.99 6.38-8.79 12.38-32.41 19.57-17.23 4.08-26.96-2.83-35.07-12.11 12.29 3.52 14.26 12.81 47.22 2.39l20.26-9.85z"/>
+ <path d="m783.82 421.76c-5.75 15.81-11.95 31.79-18.2 46.6-14.88 17.45-8.54 7.51-30.82 34.62 7.13-11 16.4-21.57 21.26-33.02 3.4-7.54 7.65-15.55 9.53-22.25-5.91-2.95-18-3.18-19.64-2.12-19.81 11.68-23.38 24.05-35.06 36.08 8.46-13.53 15.69-28.29 25.51-40.47 1.11-1.58 8.38-1.89 12.84-2.82-6.94-1.19-19.78-3.68-20.82-3.57-12.92 3.1-20.16 14.36-29.75 21.83 6.99-10.1 13.43-20.61 22.31-29.29 0.88-1.02 24.89 1.08 37.33 6.05l0.25 4.95 7.06 2.85 5.31-13.32 12.89-6.12z"/>
+ <path d="m627.07 517.09c-3.19-1.09-31.35-4.71-31.35-3.86-10.81 7.69-12.45 15.06-12.22 21.43 17.99-17.69 17.32-17.74 43.57-17.57z"/>
+ <path d="m605.68 389.81s20.32-2.96 19.93-1.07c-1.48 7.06 2.48 24.24 2.92 21.84l-11.43 9.32c23.93-12.03 49.12-9.61 74.66-11.45 0 0-21.51-5.94-20.19-6.12 4.8-0.68-1.28-22.43-2.92-22.91 4.09-1.38 8.08-2.42 12.22-3.46-30.76-8.04-48.54-3.3-75.19 13.85z"/>
+ <path d="m781.56 404.98l-4.52 2.26c-0.64-13.23-14.85-12.26-26.83-12.38l-9.83-2.4c2.99 2.77 12.23 2.55 8.5 8.53-3.14 1.67-4.58 8.87-6.38 14.91l-5.31 0.26c9.39 3.67 18.1 6.89 28.43 11.19l6.11 0.93 14.61-7.86-4.78-15.44z"/>
+ </g>
+ <g transform="translate(-.53268 66.8)" fill="#fff">
+ <path d="m646.86 396.06c-2.29-4.52-13.79-3.88-16.28-0.96-2.01 2.38-0.12 17.65 2.46 15.07 3.74-3.28 8.62-4.66 14.48-4.39 0.74-2.82 0.48-5.86-0.66-9.72z"/>
+ <path d="m757.21 418.8c1.08-0.79 3.37-8.44 2.63-10.73-1.51-5.41-12.21-4.27-12.21-4.27-2.61 1.54-4.9 9.96-3.95 12.74 0.46 2.35 11.81 3.1 13.53 2.26z"/>
+ </g>
+ <g transform="translate(-.53268 66.8)">
+ <path d="m299.64 682.84l6.76 0.66c40.07 19.68 106.05 48.85 201.57 33.17l14.99 23.59c-42.07 20.44-87.31 15.73-129.71 17.17l-93.61-74.59z"/>
+ <path d="m242.11 527.3l20.07 84.27c53.74 33.59 145.54 72.07 222.06 68.96l-16.91-38.8c-159.73-33.92-173.24-76.8-225.22-114.44v0.01z"/>
+ <path d="m292.06 354.69c9.81 65.3 22.91 114.81 79.69 156.28 34.8 25.03 69.35 49.95 111.37 70.52 0 0-3.68 19.17-6.76 18.83-125.05-13.89-216.6-117.58-227.69-164.94 10.74-36.33 26.15-59.02 43.39-80.69z"/>
+ <path d="m352.17 317.69c16.66 72.38 56.4 145.68 95.89 212.18 14.48 18.37 18.26 26.47 40.58 37.66 30.16 9.55 51.48 7.11 73.38 5.67-6-11.1-11.33-22.7-18.22-33.14-49.02-38.76-26.37-74.06-13.35-96.4-27.25-6.89-63.37-21.53-68.34-40.78-8-62.27-3.94-82.02 4.07-114.01-36.91 7.78-74.31 15.49-114.01 28.82z"/>
+ <path stroke-width=".11px" d="m216.77-66.742c-12.13 7.925-23.82 19.256-36.39 32.135-20.84 21.575-34.7 42.621-55.92 58.224-4.24 3.659-16.15 9.551-31.117 10.425-7.052 0.352-11.646 1.519-24.604-0.108-11.428-6.188-22.285-2.164-32.881 10.51-11.619 16.709-26.334 48.437-32.453 68.406-12.611 50.94 19.541 92.91 50.374 125.25 27.429 26.8 43.243 43.55 54.501 68.11 8.53 15.93 14.85 37.8 21.69 53.13 2.46 4.86 1.95 4.84 8.59 6.3 14.33 3.06 34.21 3.08 51.91 4.6 7.66 0.11 18.18-0.17 28.14-1.21 13.73-2.59 29.87-5.13 43.39-9.81 13.21-3.26 24.98-7.76 35.59-11.91-1.36 4.65-11.47 9.12-15.26 15-35.97 51.49-45.83 97.31-39.57 169.6 3.55 32.05 10.9 58.61 22 89 5.08 13.91 15.88 35.93 26.23 50.57 30.79 43.5 99.67 99.37 195.56 120.88 16.73 2.28 35.72 1.06 53.57-3.69 47.33-14.35 143.78-48.28 143.78-48.28s-85.62 7.09-124.83 3.21c-9.07-1.42-19.08-1.9-25.4-8.09-1.06-1.37-4.91-9.13-2.43-9.2 3.4-0.1 13.15-4.14 28.2-5.48-32.13-3.46-31.68-3.42-34.02-9.27-3.65-9.09-9.23-21.5-14.98-32.37 14.12 1.19 45.38 2.95 55.99-8 0 0-18.5 2.13-34.85 0.22-5.5-0.65-14.89-4-17.71-5.03-7.34-2.86-13.38-3.75-14.79-5.61-2.54-6.49-4.27-8.67-7.35-17.36-4.16-11.5-4.49-24.34-5.29-36.08 10.7 13.18 24.32 24.27 42.36 29.94 0.23-0.49 23.4 10.07 40.23 4.64l3.49-1.13c0 0.32-11.15 0.98-15.24-1.04-34.22-14.55-39.37-27.28-44.9-33.6l-14.77-22.13c4.49-8.97 7.03-9.31 12.99-9.39 18.01 2 25.84 3.54 36.8 0.9 7.41 15.24 9.41 30.57 26.27 41.66 56.16 16.67 68.37-4.95 81.97-24.06 40.41 29.66 106.2 38.81 151.89 0.52 58.09-67.22 76.48-173.17 71.33-179.22-7.26-12.31-16.78-25-24.95-23.25-29.13 7.95-39.87 22.73-68.73 19.36 3.43-0.19 9.21-0.29 9.26-0.61 2.22-24.44-0.18-36.27-1.25-38.3-8.76-19.32-20.27-39.65-28.28-54.88-2.07-3.16-8.14-27.17-18.31-36.65-4.36-3.72-15.04-13.55-15.04-13.55l-0.9 10.44s4.17 0.63 5.76 7.1c6.02 24.52 36.69 82.49 38.94 85.26 10.86 17.55 1.1 39.4 9.36 51.67 0.8 1.55 16.86-0.14 29.31 0.63 20.47-4.41 19.61-13.43 37.29-14.79 11.92-0.91 13.11 21.46 12.96 23.2-2.22 24.7-9.74 53.43-21.24 79.66-23.91 46.07-50.69 87.44-88.67 93.21-46.33 8.1-70.4-12.16-95.51-25.05l-9.61 8.19c-32.64 32.5-71.39 29.62-87.24-12.85-7.89-16.47-18.17-26.57-26.97-40.7l-46.69 33.63c-3.89 7.97-8.67 20.54-14.47 34.58-4.04 9.76-7.42 26.52-7.2 40.45-5.99 10.2 20.73 51.55 37.61 76.7 4.98 7.42 14.28 20.38 14.59 21.19 3.34 8.68 10.68 16.35 11.12 17.28 31.34 40.88-39.53 31.46-54.16 28.99-28.88-4.6-57.13-16.66-83.68-32.79-1.54-0.93-3.07-1.88-4.6-2.85-31.55-19.86-60.58-45.28-85.26-70.42-14.72-16.67-28.74-50.83-39.09-75.04-15.51-58.23-37.77-159.15 22.53-235.63 3.83-4.38 7.95-11.65 11.46-13.09 17.92-12.12 37.38-20.38 58.3-24.97l-2.11-13.56c-10.45 2.37-45.63 15.24-55.58 20.63-22.62 6.55-41.39 13.4-70.22 20.62-9.37 1.15-18.59 1.17-27.58-0.05-20.74-2.82-56.09-0.3-58.35-2.4-14.04-19.58-17.89-54.68-30.7-73.46l-0.15-0.18-0.17-0.18c-7.46-10.04-16.172-18.23-24.747-26.75-30.708-30.51-56.991-60.01-64.348-91.27-1.85-9.23-6.614-18.79-4.082-46.1l0.047-0.13 0.044-0.14c7.388-25.51 19.407-46.307 39.806-67.15 21.228 0.342 42.24 0.809 58.61 3.935 7.51 1.256 23.12 3.296 39.25 9.304 40.82 15.207 94.76 40.211 94.76 40.211-40.49-22.238-85.76-51.117-114.35-56.945-4.25-0.602-6.87-2.543-8.13-5.93 43-25.264 50.86-55.009 79.14-81.686 12.93-5.626 17.97-8.498 28.95-9.692 101.57 16.06 165.51 56.515 216.09 83.566 20.53 11.164 39.19 19.606 57.02 29.773 15.62 5.139 62.77 40.734 76.57 59.924 14.01 29.6 24.25 61.56 33.58 92.41 6.69 31.38 12.57 44.1 12.57 44.1s-5.69-26.24-4.74-30.95c5.89 2.2 19.84 6.55 25.62 5.88 0 0-25.82-13.35-29.2-25.14-10.86-37.85-21.75-96.77-24.68-99.84-8.28-10.412-42.78-36.817-63.95-49.031-8-4.62-12.33-7.486-12.67-9.518 6.76-6.83 15.11-15.865 22.6-21.606 7.18-5.503 13.71-11.709 23.71-15.423 43.97-19.8 69.11 7.618 75.07 2.066 0 0-9.46-10.841-5.26-9.056 4.3 2.33 18.33 5.078 19.86 6.509 16.03 12.534 57.92 58.344 83.17 106.68 6.06 11.84 8.53 19.64 5.71 33.89-2.82 14.27-5 22.12-8.08 31.65-2.77 6.37-18.49 49.99-18.43 55.85-3.17 23.93 10.26 53.89 10.26 53.89 0.13-8.13-0.5-12.46 0.24-18.28l0.9-10.39s-0.57-2.77-0.47-3.86c0.68-7.19 2.45-13.23 2.97-17.35 5.04-31.25 13.82-53.75 23.77-81.18 2.96-6.92 6.83-10.77 6.63-16.04 0.16-9.35-8.2-21.9-14.25-34.16-6.1-12.39-13.39-26.206-22.96-40.764-21.82-31.376-40.42-55.925-74.48-71.289-9.53-4.182-47.03-8.271-59.98-5.841-15.71 3.273-29.22 6.5-39.99 13.398-16.95 10.854-30.27 27.659-45.89 37.561-34.56-17.282-51.24-30.216-54.35-31.999-20.54-11.006-45.2-23.778-71.73-35.89-12.72-11.862-91.71-40.233-164.04-45.892l-0.01-0.006zm442.08 644.59c-21.3-16.65-39.23-33.79-51.05-51.44-3.86 20.76-17.86 35.54-28.69 50.08-2.15 3.41-3.71 8.06 6.9 22.88 2.86 3.95 13.21 4.62 20.2 4.26-7.11-5.37-17.92-11.05-19.66-15.98 12.5 8.51 24.07 10.96 34.53 9.59 2.4-0.27 5.36-2.8 7.66-6.71 4.66-10.02 8.32-12.43 12-15.13l8.51 10.66 9.6-8.21z" stroke="#000"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/bigtop-packages/src/charm/hive/layer-hive/layer.yaml b/bigtop-packages/src/charm/hive/layer-hive/layer.yaml
new file mode 100644
index 00000000..5be7ac9f
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/layer.yaml
@@ -0,0 +1,31 @@
+repo: https://github.com/apache/bigtop/tree/master/bigtop-packages/src/charm/hive/layer-hive
+includes:
+ - 'layer:apache-bigtop-base'
+ - 'layer:hadoop-client'
+ - 'interface:hbase'
+ - 'interface:hive'
+ - 'interface:mysql'
+options:
+ basic:
+ packages:
+ - 'libmysql-java'
+ - 'mysql-client'
+ apache-bigtop-base:
+ groups:
+ - 'hadoop'
+ - 'hive'
+ users:
+ ubuntu:
+ groups: ['hadoop', 'hive']
+ dirs:
+ hive:
+ path: '/usr/lib/hive'
+ hive_conf:
+ path: '/etc/hive/conf'
+ ports:
+ hive-thrift:
+ port: 10000
+ exposed_on: 'hive'
+ hive-thrift-web:
+ port: 10001
+ exposed_on: 'hive'
diff --git a/bigtop-packages/src/charm/hive/layer-hive/lib/charms/layer/bigtop_hive.py b/bigtop-packages/src/charm/hive/layer-hive/lib/charms/layer/bigtop_hive.py
new file mode 100755
index 00000000..c7d9cc6f
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/lib/charms/layer/bigtop_hive.py
@@ -0,0 +1,138 @@
+# 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.
+
+from charmhelpers.core import hookenv, host, unitdata
+from charms import layer
+from charms.layer.apache_bigtop_base import Bigtop
+from jujubigdata import utils
+
+
+class Hive(object):
+ '''This class manages Hive.'''
+ def __init__(self):
+ self.dist_config = utils.DistConfig(
+ data=layer.options('apache-bigtop-base'))
+
+ def install(self, hbase=None):
+ '''
+ Trigger the Bigtop puppet recipe that handles the Hive service.
+ '''
+ # Dirs are handled by the bigtop deb. No need to call out to
+ # dist_config to do that. We do want 'ubuntu' in the hive group though.
+ self.dist_config.add_users()
+
+ # Prep config
+ roles = ['hive-client', 'hive-metastore', 'hive-server2']
+ metastore = "thrift://{}:9083".format(hookenv.unit_private_ip())
+ if hbase:
+ roles.append('hive-hbase')
+ hb_connect = "{}:{}".format(hbase['host'], hbase['master_port'])
+ zk_connect = hbase['zk_connect']
+ else:
+ hb_connect = ""
+ zk_connect = ""
+
+ override = {
+ 'hadoop_hive::common_config::hbase_master': hb_connect,
+ 'hadoop_hive::common_config::hbase_zookeeper_quorum': zk_connect,
+ 'hadoop_hive::common_config::metastore_uris': metastore,
+ 'hadoop_hive::common_config::server2_thrift_port':
+ self.dist_config.port('hive-thrift'),
+ 'hadoop_hive::common_config::server2_thrift_http_port':
+ self.dist_config.port('hive-thrift-web'),
+ }
+ bigtop = Bigtop()
+ bigtop.render_site_yaml(roles=roles, overrides=override)
+ bigtop.trigger_puppet()
+
+ # Bigtop doesn't create a hive-env.sh, but we need it for heap config
+ hive_env = self.dist_config.path('hive_conf') / 'hive-env.sh'
+ if not hive_env.exists():
+ (self.dist_config.path('hive_conf') / 'hive-env.sh.template').copy(hive_env)
+
+ def configure_hive(self):
+ '''
+ Called during config-changed events
+ '''
+ config = hookenv.config()
+ hive_env = self.dist_config.path('hive_conf') / 'hive-env.sh'
+ utils.re_edit_in_place(hive_env, {
+ r'.*export HADOOP_HEAPSIZE *=.*': 'export HADOOP_HEAPSIZE=%s' % config['heap'],
+ })
+
+ def configure_remote_db(self, mysql):
+ hive_site = self.dist_config.path('hive_conf') / 'hive-site.xml'
+ jdbc_url = "jdbc:mysql://{}:{}/{}?createDatabaseIfNotExist=true".format(
+ mysql.host(), mysql.port(), mysql.database()
+ )
+ with utils.xmlpropmap_edit_in_place(hive_site) as props:
+ props['javax.jdo.option.ConnectionURL'] = jdbc_url
+ props['javax.jdo.option.ConnectionUserName'] = mysql.user()
+ props['javax.jdo.option.ConnectionPassword'] = mysql.password()
+ props['javax.jdo.option.ConnectionDriverName'] = "com.mysql.jdbc.Driver"
+
+ hive_env = self.dist_config.path('hive_conf') / 'hive-env.sh'
+ utils.re_edit_in_place(hive_env, {
+ r'.*export HIVE_AUX_JARS_PATH *=.*': 'export HIVE_AUX_JARS_PATH=/usr/share/java/mysql-connector-java.jar',
+ })
+
+ # Now that we have db connection info, init our schema (only once)
+ remote_db = hookenv.remote_service_name()
+ if not unitdata.kv().get('hive.schema.initialized.%s' % remote_db):
+ tool_path = "{}/bin/schematool".format(self.dist_config.path('hive'))
+ utils.run_as('ubuntu', tool_path, '-initSchema', '-dbType', 'mysql')
+ unitdata.kv().set('hive.schema.initialized.%s' % remote_db, True)
+ unitdata.kv().flush(True)
+
+ def configure_local_db(self):
+ local_url = 'jdbc:derby:;databaseName=/var/lib/hive/metastore/metastore_db;create=true'
+ local_driver = 'org.apache.derby.jdbc.EmbeddedDriver'
+ hive_site = self.dist_config.path('hive_conf') / 'hive-site.xml'
+ with utils.xmlpropmap_edit_in_place(hive_site) as props:
+ props['javax.jdo.option.ConnectionURL'] = local_url
+ props['javax.jdo.option.ConnectionUserName'] = 'APP'
+ props['javax.jdo.option.ConnectionPassword'] = 'mine'
+ props['javax.jdo.option.ConnectionDriverName'] = local_driver
+
+ hive_env = self.dist_config.path('hive_conf') / 'hive-env.sh'
+ utils.re_edit_in_place(hive_env, {
+ r'.*export HIVE_AUX_JARS_PATH *=.*': '# export HIVE_AUX_JARS_PATH=',
+ })
+
+ def restart(self):
+ self.stop()
+ self.start()
+
+ def start(self):
+ # order is important; metastore must start first.
+ hookenv.log('Starting Hive services')
+ host.service_start('hive-metastore')
+ host.service_start('hive-server2')
+ hookenv.log('Hive services have been started')
+
+ def stop(self):
+ # order is important; metastore must stop last.
+ hookenv.log('Stopping Hive services')
+ host.service_stop('hive-server2')
+ host.service_stop('hive-metastore')
+ hookenv.log('Hive services have been stopped')
+
+ def open_ports(self):
+ for port in self.dist_config.exposed_ports('hive'):
+ hookenv.open_port(port)
+
+ def close_ports(self):
+ for port in self.dist_config.exposed_ports('hive'):
+ hookenv.close_port(port)
diff --git a/bigtop-packages/src/charm/hive/layer-hive/metadata.yaml b/bigtop-packages/src/charm/hive/layer-hive/metadata.yaml
new file mode 100644
index 00000000..998dd72c
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/metadata.yaml
@@ -0,0 +1,19 @@
+name: hive
+summary: Hive from Apache Bigtop
+maintainer: Juju Big Data <bigdata@lists.ubuntu.com>
+description: >
+ Apache Hive is a data warehouse infrastructure built on top of Hadoop that
+ supports data summarization, query, and analysis. Hive provides an SQL-like
+ language called HiveQL that transparently converts queries to MapReduce for
+ execution on large datasets stored in Hadoop's HDFS.
+
+ This charm provides version 1.2.1 of the Hive application from Apache Bigtop.
+tags: []
+provides:
+ client:
+ interface: hive
+requires:
+ database:
+ interface: mysql
+ hbase:
+ interface: hbase
diff --git a/bigtop-packages/src/charm/hive/layer-hive/reactive/hive.py b/bigtop-packages/src/charm/hive/layer-hive/reactive/hive.py
new file mode 100644
index 00000000..0deebd47
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/reactive/hive.py
@@ -0,0 +1,184 @@
+# 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.
+
+from charmhelpers.core import hookenv
+from charms.layer.apache_bigtop_base import get_layer_opts, get_package_version
+from charms.layer.bigtop_hive import Hive
+from charms.reactive import (
+ RelationBase,
+ is_state,
+ remove_state,
+ set_state,
+ when,
+ when_not,
+)
+from charms.reactive.helpers import data_changed
+
+
+@when('bigtop.available')
+def report_status():
+ hadoop_joined = is_state('hadoop.joined')
+ hadoop_ready = is_state('hadoop.ready')
+ hbase_joined = is_state('hbase.joined')
+ hbase_ready = is_state('hbase.ready')
+ database_joined = is_state('database.connected')
+ database_ready = is_state('database.available')
+ hive_installed = is_state('hive.installed')
+ if not hadoop_joined:
+ hookenv.status_set('blocked',
+ 'waiting for relation to hadoop plugin')
+ elif not hadoop_ready:
+ hookenv.status_set('waiting',
+ 'waiting for hadoop to become ready')
+ elif database_joined and not database_ready:
+ hookenv.status_set('waiting',
+ 'waiting for database to become ready')
+ elif hbase_joined and not hbase_ready:
+ hookenv.status_set('waiting',
+ 'waiting for hbase to become ready')
+ elif hive_installed and not database_ready:
+ hookenv.status_set('active',
+ 'ready (local metastore)')
+ elif hive_installed and database_ready:
+ hookenv.status_set('active',
+ 'ready (remote metastore)')
+
+
+@when('bigtop.available', 'hadoop.ready')
+def install_hive(hadoop):
+ '''
+ Anytime our dependencies are available, check to see if we have a valid
+ reason to (re)install. These include:
+ - initial install
+ - HBase has joined/departed
+ '''
+ # Hive cannot handle - in the metastore db name and
+ # mysql uses the service name to name the db
+ if "-" in hookenv.service_name():
+ hookenv.status_set('blocked', "application name may not contain '-'; "
+ "redeploy with a different name")
+ return
+
+ # Get hbase connection dict if it's available
+ if is_state('hbase.ready'):
+ hbase = RelationBase.from_state('hbase.ready')
+ hbserver = hbase.hbase_servers()[0]
+ else:
+ hbserver = None
+
+ # Use this to determine if we need to reinstall
+ deployment_matrix = {
+ 'hbase': hbserver,
+ }
+
+ # Handle nuances when installing versus re-installing
+ if not is_state('hive.installed'):
+ prefix = "installing"
+
+ # On initial install, prime our kv with the current deployment matrix.
+ # Subsequent calls will use this to determine if a reinstall is needed.
+ data_changed('deployment_matrix', deployment_matrix)
+ else:
+ prefix = "configuring"
+
+ # Return if our matrix has not changed
+ if not data_changed('deployment_matrix', deployment_matrix):
+ return
+
+ hookenv.status_set('maintenance', '{} hive'.format(prefix))
+ hookenv.log("{} hive with: {}".format(prefix, deployment_matrix))
+ hive = Hive()
+ hive.install(hbase=hbserver)
+ hive.restart()
+ hive.open_ports()
+ set_state('hive.installed')
+ report_status()
+
+ # set app version string for juju status output
+ hive_version = get_package_version('hive') or 'unknown'
+ hookenv.application_version_set(hive_version)
+
+
+@when('hive.installed', 'config.changed.heap')
+def config_changed():
+ hookenv.status_set('maintenance', 'configuring with new options')
+ hive = Hive()
+ hive.configure_hive()
+ hive.restart()
+ report_status()
+
+
+@when('hive.installed', 'database.available')
+@when_not('hive.db.configured')
+def configure_with_remote_db(db):
+ hookenv.status_set('maintenance', 'configuring external database')
+ hive = Hive()
+ hive.configure_remote_db(db)
+ hive.restart()
+ set_state('hive.db.configured')
+ report_status()
+
+
+@when('hive.installed', 'hive.db.configured')
+@when_not('database.available')
+def configure_with_local_db():
+ '''
+ Reconfigure Hive using a local metastore db.
+
+ The initial installation will configure Hive with a local metastore_db.
+ Once an external db becomes available, we reconfigure Hive to use it. If
+ that external db goes away, we'll use this method to set Hive back into
+ local mode.
+ '''
+ hookenv.status_set('maintenance', 'configuring local database')
+ hive = Hive()
+ hive.configure_local_db()
+ hive.restart()
+ remove_state('hive.db.configured')
+ report_status()
+
+
+@when('hive.installed')
+@when_not('hadoop.ready')
+def stop_hive():
+ '''
+ Hive depends on Hadoop. If we are installed and hadoop goes away, shut down
+ services and remove our installed state.
+ '''
+ hive = Hive()
+ hive.close_ports()
+ hive.stop()
+ remove_state('hive.installed')
+ report_status()
+
+
+@when('hive.installed', 'client.joined')
+def serve_client(client):
+ '''
+ Inform clients when hive is ready to serve.
+ '''
+ port = get_layer_opts().port('hive-thrift')
+ client.send_port(port)
+ client.set_ready()
+
+
+@when('client.joined')
+@when_not('hive.installed')
+def stop_serving_client(client):
+ '''
+ Inform connected clients that Hive is no longer ready. This can happen
+ if Hadoop goes away (the 'installed' state will be removed).
+ '''
+ client.clear_ready()
diff --git a/docker/bigtop-deploy/ubuntu-14.04/Dockerfile b/bigtop-packages/src/charm/hive/layer-hive/tests/01-basic-deployment.py
index 0b04e95b..04a614db 100644..100755
--- a/docker/bigtop-deploy/ubuntu-14.04/Dockerfile
+++ b/bigtop-packages/src/charm/hive/layer-hive/tests/01-basic-deployment.py
@@ -1,3 +1,5 @@
+#!/usr/bin/env python3
+
# 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.
@@ -13,19 +15,25 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-FROM bigtop/puppet:ubuntu-14.04
+import amulet
+import re
+import unittest
+
+
+class TestDeploy(unittest.TestCase):
+ """
+ Trivial deployment test for Apache Bigtop Hive.
+ """
+ @classmethod
+ def setUpClass(cls):
+ cls.d = amulet.Deployment(series='xenial')
+ cls.d.add('hive')
-# enable ssh
-RUN apt-get update && \
- apt-get install -y openssh-server vim && \
- mkdir -p /var/run/sshd && \
- # requiretty off
- sed -i.bak 's/requiretty/!requiretty/' /etc/sudoers && \
- # setup vagrant account
- mkdir -p /root/.ssh && \
- chmod 0700 /root/.ssh && \
- wget http://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub --no-check-certificate -O /root/.ssh/authorized_keys && \
- chmod 0600 /root/.ssh/authorized_keys
+ cls.d.setup(timeout=1800)
+ cls.d.sentry.wait_for_messages({'hive': re.compile('ready|waiting')},
+ timeout=1800)
+ cls.unit = cls.d.sentry['hive'][0]
-CMD /sbin/init
+if __name__ == '__main__':
+ unittest.main()
diff --git a/bigtop-packages/src/charm/hive/layer-hive/tests/02-smoke-test.py b/bigtop-packages/src/charm/hive/layer-hive/tests/02-smoke-test.py
new file mode 100755
index 00000000..86930328
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/tests/02-smoke-test.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3
+
+# 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.
+
+import amulet
+import re
+import unittest
+
+
+class TestDeploy(unittest.TestCase):
+ """
+ Hadoop/Hive deployment and smoke test for the Apache Bigtop Hive service.
+ """
+ @classmethod
+ def setUpClass(cls):
+ cls.d = amulet.Deployment(series='xenial')
+ cls.d.add('hive')
+ cls.d.add('namenode', 'hadoop-namenode')
+ cls.d.add('plugin', 'hadoop-plugin')
+ cls.d.add('resourcemanager', 'hadoop-resourcemanager')
+ cls.d.add('slave', 'hadoop-slave')
+
+ cls.d.relate('hive:hadoop', 'plugin:hadoop-plugin')
+ cls.d.relate('plugin:namenode', 'namenode:namenode')
+ cls.d.relate('plugin:resourcemanager', 'resourcemanager:resourcemanager')
+ cls.d.relate('resourcemanager:namenode', 'namenode:namenode')
+ cls.d.relate('slave:namenode', 'namenode:datanode')
+ cls.d.relate('slave:resourcemanager', 'resourcemanager:nodemanager')
+
+ cls.d.setup(timeout=3600)
+ cls.d.sentry.wait_for_messages({'hive': re.compile('ready')},
+ timeout=3600)
+ cls.hive = cls.d.sentry['hive'][0]
+
+ def test_hive(self):
+ """
+ Validate Hive by running the smoke-test action.
+ """
+ uuid = self.hive.run_action('smoke-test')
+ result = self.d.action_fetch(uuid, full_output=True)
+ # action status=completed on success
+ if (result['status'] != "completed"):
+ self.fail('Hive smoke-test failed: %s' % result)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/bigtop-packages/src/charm/hive/layer-hive/tests/tests.yaml b/bigtop-packages/src/charm/hive/layer-hive/tests/tests.yaml
new file mode 100644
index 00000000..3b6ce3e5
--- /dev/null
+++ b/bigtop-packages/src/charm/hive/layer-hive/tests/tests.yaml
@@ -0,0 +1,3 @@
+reset: false
+packages:
+ - amulet
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/README.md b/bigtop-packages/src/charm/kafka/layer-kafka/README.md
index 93fca06c..9d7f6059 100644
--- a/bigtop-packages/src/charm/kafka/layer-kafka/README.md
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/README.md
@@ -21,7 +21,8 @@ Software Foundation written in Scala. The project aims to provide a unified,
high-throughput, low-latency platform for handling real-time data feeds. Learn
more at [kafka.apache.org][].
-This charm deploys the Kafka component of the [Apache Bigtop][] platform.
+This charm deploys version 0.10.1 of the Kafka component from
+[Apache Bigtop][].
[kafka.apache.org]: http://kafka.apache.org/
[Apache Bigtop]: http://bigtop.apache.org/
@@ -29,9 +30,8 @@ This charm deploys the Kafka component of the [Apache Bigtop][] platform.
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-charm.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
Kafka requires the Zookeeper distributed coordination service. Deploy and
relate them as follows:
@@ -52,9 +52,6 @@ mirror options. See [Configuring Models][] for more information.
# Using
Once deployed, there are a number of actions available in this charm.
-> **Note**: Actions described below assume Juju 2.0 or greater. If using an
-earlier version of Juju, the action syntax is:
-`juju action do kafka/0 <action_name> <action_args>; juju action fetch <id>`.
List the zookeeper servers that our kafka brokers
are connected to. The following will list `<ip>:<port>` information for each
@@ -110,25 +107,16 @@ topics. Run the action as follows:
juju run-action slave/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do kafka/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, the action should settle to `status: completed`. If it
reports `status: failed`, the application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
# Scaling
@@ -143,9 +131,6 @@ ready units, create a replicated topic as follows:
juju run-action kafka/0 create-topic topic=my-replicated-topic \
partitions=1 replication=2
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do kafka/0 create-topic <args>`.
-
Query the description of the recently created topic:
juju run --unit kafka/0 'kafka-topics.sh --describe \
@@ -191,9 +176,6 @@ network interface name or a CIDR range specifying a subnet. For example:
juju config kafka network_interface=eth0
juju config kafka network_interface=10.0.2.0/24
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju set-config kafka network_interface=eth0`.
-
Each kafka machine in the cluster will lookup the IP address of that
network interface, or find the first network interface with an IP
address in the specified subnet, and bind kafka to that address.
@@ -205,16 +187,24 @@ run "juju resolved" on each unit:
juju config kafka network_interface=eth0
juju resolved kafka/0
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju set-config kafka network_interface=eth0;
-juju resolved -r kafka/0`.
-
To go back to listening on any network interface on the
machine, simply pass ``0.0.0.0`` to ``network_interface``.
juju config kafka network_interface=0.0.0.0
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
# Contact Information
- <bigdata@lists.ubuntu.com>
@@ -222,10 +212,10 @@ machine, simply pass ``0.0.0.0`` to ``network_interface``.
# Resources
+- [Apache Kafka home page](http://kafka.apache.org/)
- [Apache Bigtop home page](http://bigtop.apache.org/)
+- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Apache Kafka home page](http://kafka.apache.org/)
-- [Apache Kafka issue tracker](https://issues.apache.org/jira/browse/KAFKA)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/actions/create-topic b/bigtop-packages/src/charm/kafka/layer-kafka/actions/create-topic
index b402fe89..159eac71 100755
--- a/bigtop-packages/src/charm/kafka/layer-kafka/actions/create-topic
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/actions/create-topic
@@ -43,8 +43,9 @@ if host.service_available('kafka-server') and host.service_running('kafka-server
'--replication-factor', topic_replication,
capture_output=True)
except subprocess.CalledProcessError as e:
- kafkautils.fail('Kafka command failed', e.output)
+ kafkautils.fail('Kafka command failed: {}'.format(e.output))
else:
- hookenv.action_set({'output': output})
+ hookenv.action_set({'raw': output})
+ hookenv.action_set({'outcome': 'success'})
else:
- kafkautils.fail('Kafka service is not running', 'Please start kafka-server')
+ kafkautils.fail('kafka-server service is not running')
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/actions/kafkautils.py b/bigtop-packages/src/charm/kafka/layer-kafka/actions/kafkautils.py
index 52e52990..89250272 100644
--- a/bigtop-packages/src/charm/kafka/layer-kafka/actions/kafkautils.py
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/actions/kafkautils.py
@@ -19,8 +19,8 @@ import sys
from charmhelpers.core import hookenv
-def fail(msg, output='<No output>'):
- hookenv.action_set({'output': output})
+def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
hookenv.action_fail(msg)
sys.exit()
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/actions/list-topics b/bigtop-packages/src/charm/kafka/layer-kafka/actions/list-topics
index 0ef3a3f0..0241586f 100755
--- a/bigtop-packages/src/charm/kafka/layer-kafka/actions/list-topics
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/actions/list-topics
@@ -35,8 +35,9 @@ if host.service_available('kafka-server') and host.service_running('kafka-server
'--zookeeper', zookeepers, '--list',
capture_output=True)
except subprocess.CalledProcessError as e:
- kafkautils.fail('Kafka command failed', e.output)
+ kafkautils.fail('Kafka command failed: {}'.format(e.output))
else:
- hookenv.action_set({'output': output})
+ hookenv.action_set({'raw': output})
+ hookenv.action_set({'outcome': 'success'})
else:
- kafkautils.fail('Kafka service is not running')
+ kafkautils.fail('kafka-server service is not running')
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/actions/list-zks b/bigtop-packages/src/charm/kafka/layer-kafka/actions/list-zks
index 517d60c0..be9541a9 100755
--- a/bigtop-packages/src/charm/kafka/layer-kafka/actions/list-zks
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/actions/list-zks
@@ -22,15 +22,16 @@ from charms.reactive import is_state
if not is_state('kafka.started'):
- kafkautils.fail('Kafka service not yet ready', 'Please deploy kafka and required relations')
+ kafkautils.fail('Kafka service not yet ready')
# List zookeepers if kafka is running
if host.service_available('kafka-server') and host.service_running('kafka-server'):
zookeepers = kafkautils.get_zookeepers()
if zookeepers:
- hookenv.action_set({'output': zookeepers})
+ hookenv.action_set({'raw': zookeepers})
+ hookenv.action_set({'outcome': 'success'})
else:
- kafkautils.fail('No zookeeper.connect string found', 'Please relate kafka to zookeeper')
+ kafkautils.fail('No zookeeper.connect string found')
else:
- kafkautils.fail('Kafka service is not running', 'Please start kafka-server')
+ kafkautils.fail('kafka-server service is not running')
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/actions/read-topic b/bigtop-packages/src/charm/kafka/layer-kafka/actions/read-topic
index 8b7a27d6..a1053e7c 100755
--- a/bigtop-packages/src/charm/kafka/layer-kafka/actions/read-topic
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/actions/read-topic
@@ -47,8 +47,9 @@ if host.service_available('kafka-server') and host.service_running('kafka-server
'--no-wait-at-logend',
capture_output=True)
except subprocess.CalledProcessError as e:
- kafkautils.fail('Kafka command failed', e.output)
+ kafkautils.fail('Kafka command failed: {}'.format(e.output))
else:
- hookenv.action_set({'output': output})
+ hookenv.action_set({'raw': output})
+ hookenv.action_set({'outcome': 'success'})
else:
- kafkautils.fail('Kafka service is not running')
+ kafkautils.fail('kafka-server service is not running')
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/actions/smoke-test b/bigtop-packages/src/charm/kafka/layer-kafka/actions/smoke-test
index 5c1435a1..a6cd3b6f 100755
--- a/bigtop-packages/src/charm/kafka/layer-kafka/actions/smoke-test
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/actions/smoke-test
@@ -21,6 +21,7 @@ import subprocess
from charmhelpers.core import hookenv, host
from charms.reactive import is_state
from jujubigdata.utils import run_as
+from time import time
if not is_state('kafka.started'):
@@ -28,7 +29,7 @@ if not is_state('kafka.started'):
# Define smoke test params
-topic_name = "smoketest"
+topic_name = "smoketest_{}".format(int(time()))
topic_partitions = 1
topic_replication = 1
@@ -48,7 +49,7 @@ if host.service_available('kafka-server') and host.service_running('kafka-server
'--replication-factor', topic_replication,
capture_output=True)
except subprocess.CalledProcessError as e:
- kafkautils.fail('Kafka command failed', e.output)
+ kafkautils.fail('Kafka command failed: {}'.format(e.output))
# List topics
try:
@@ -56,9 +57,9 @@ if host.service_available('kafka-server') and host.service_running('kafka-server
'--zookeeper', zookeepers, '--list',
capture_output=True)
except subprocess.CalledProcessError as e:
- kafkautils.fail('Kafka command failed', e.output)
+ kafkautils.fail('Kafka command failed: {}'.format(e.output))
# If we haven't failed yet, we passed
hookenv.action_set({'outcome': 'success'})
else:
- kafkautils.fail('Kafka service is not running')
+ kafkautils.fail('kafka-server service is not running')
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/actions/write-topic b/bigtop-packages/src/charm/kafka/layer-kafka/actions/write-topic
index 6a56265d..813c541d 100755
--- a/bigtop-packages/src/charm/kafka/layer-kafka/actions/write-topic
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/actions/write-topic
@@ -46,8 +46,9 @@ if host.service_available('kafka-server') and host.service_running('kafka-server
capture_output=True,
input=bytes(data, 'UTF-8'))
except subprocess.CalledProcessError as e:
- kafkautils.fail('Kafka command failed', e.output)
+ kafkautils.fail('Kafka command failed: {}'.format(e.output))
else:
- hookenv.action_set({'output': output})
+ hookenv.action_set({'raw': output})
+ hookenv.action_set({'outcome': 'success'})
else:
- kafkautils.fail('Kafka service is not running')
+ kafkautils.fail('kafka-server service is not running')
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/icon.svg b/bigtop-packages/src/charm/kafka/layer-kafka/icon.svg
index 1564f994..de5ab1be 100644
--- a/bigtop-packages/src/charm/kafka/layer-kafka/icon.svg
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/icon.svg
@@ -1,90 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="75pt"
- height="117pt"
- viewBox="0 0 75 117"
- version="1.1"
- id="svg3201"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="icon.svg">
- <metadata
- id="metadata3221">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs3219" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="1236"
- inkscape:window-height="847"
- id="namedview3217"
- showgrid="false"
- inkscape:zoom="4.5641627"
- inkscape:cx="35.369926"
- inkscape:cy="80.60281"
- inkscape:window-x="397"
- inkscape:window-y="78"
- inkscape:window-maximized="0"
- inkscape:current-layer="layer1" />
- <path
- d="m 0,0.04322 76.8,0 0,76.8 -76.8,0 0,-76.8 z"
- id="path3203"
- style="opacity:0;fill:#fffffe;fill-opacity:0.94977172"
- inkscape:connector-curvature="0" />
- <path
- d="M 13.76256,3.6403482 C 20.992,-0.05524154 33.024,1.9665021 36.42368,7.4934765 40.37632,12.889169 34.816,19.735528 25.77408,20.917066 c 0,1.732924 0.01024,3.459282 0,5.185642 4.6592,0.708923 8.87808,2.258051 12.05248,4.56205 2.21184,-0.892717 4.526079,-1.700102 6.72768,-2.605948 -0.59392,-3.209847 -0.59392,-6.833231 3.10272,-9.340718 5.77536,-4.719589 18.51392,-4.476718 23.72608,0.531692 4.751359,4.076308 3.266559,10.450051 -3.21536,13.403898 -6.03136,3.012923 -15.28832,2.271179 -20.41856,-1.266872 -2.16064,0.833641 -4.43392,1.549128 -6.52288,2.454975 -0.307201,1.122461 0.45056,2.251486 0.6144,3.373948 0.70656,1.956103 -0.78848,3.859693 -0.68608,5.809231 2.11968,0.951795 4.47488,1.68041 6.79936,2.415589 6.36928,-4.653948 19.445759,-3.918768 24.10496,1.575386 5.12,5.087179 0.62464,12.668717 -8.52992,14.211281 -6.85056,1.273436 -14.7968,-0.794256 -17.84832,-4.988717 -1.81248,-2.23836 -1.69984,-4.857437 -0.8704,-7.259898 -2.29376,-0.951795 -4.67968,-1.805128 -6.97344,-2.756923 -3.16416,2.284307 -7.34208,3.885949 -12.01152,4.516102 -0.06144,1.746051 -0.04096,3.498667 -0.0512,5.251283 4.78208,0.728615 8.98048,2.921025 10.81344,5.868307 2.75456,4.299487 0.07168,9.872411 -6.51264,12.025436 -6.2464,2.422154 -15.06304,1.234052 -19.33312,-2.546872 -4.89472,-3.846564 -3.84,-10.095589 2.17088,-13.213539 1.91488,-1.102768 4.41344,-1.634461 6.78912,-2.19241 0.03072,-1.68041 0.04096,-3.367384 0.07168,-5.047794 C 14.98112,50.009169 10.21952,48.597887 7.26016,45.919734 1.44384,41.180451 2.2528,33.671118 9.20576,29.581682 c 2.78528,-1.93641 6.77888,-2.776616 10.567679,-3.577436 -0.03072,-1.68041 -0.04096,-3.360821 -0.07168,-5.034667 C 15.59552,20.181887 11.60192,18.678708 9.5641599,16.164655 5.82656,12.081784 7.69024,6.3644508 13.76256,3.6403482 z"
- id="path3205"
- inkscape:connector-curvature="0"
- style="fill:#201f1f" />
- <path
- d="M 18.95424,7.4869124 C 23.58272,5.3338867 30.53568,8.2614765 29.85984,11.799528 29.48096,14.924041 23.5008,17.182092 19.2,15.462297 14.42816,13.926297 14.27456,9.1410662 18.95424,7.4869124 z"
- id="path3207"
- inkscape:connector-curvature="0"
- style="fill:#fffffe" />
- <path
- d="m 55.76704,20.844861 c 4.51584,-1.673846 10.91584,0.761436 10.56768,4.135384 0.235519,3.649642 -7.33184,5.96677 -11.64288,3.557744 -4.106241,-1.897025 -3.38944,-6.255589 1.0752,-7.693128 z"
- id="path3209"
- inkscape:connector-curvature="0"
- style="fill:#fffffe" />
- <path
- d="m 18.78016,32.305784 c 7.311359,-2.303999 16.35328,2.829129 13.8752,7.75877 -1.44384,4.555487 -11.17184,6.721641 -16.5376,3.472409 -6.05184,-2.894768 -4.352,-9.570461 2.6624,-11.231179 z"
- id="path3211"
- inkscape:connector-curvature="0"
- style="fill:#fffffe" />
- <path
- d="m 54.69184,48.348451 c 4.66944,-2.619077 12.759039,0.347897 11.601919,4.253538 -0.409599,3.629949 -8.345599,5.218462 -12.103679,2.651898 -3.2256,-1.772308 -2.8672,-5.303795 0.50176,-6.905436 z"
- id="path3213"
- inkscape:connector-curvature="0"
- style="fill:#fffffe" />
- <path
- d="m 20.67456,61.030297 c 5.10976,-1.13559 10.78272,2.566565 8.82688,5.809231 -1.269761,3.190153 -8.48896,4.483282 -11.84768,1.857641 -4.06528,-2.19241 -2.03776,-6.872615 3.0208,-7.666872 z"
- id="path3215"
- inkscape:connector-curvature="0"
- style="fill:#fffffe" />
- <g
- inkscape:groupmode="layer"
- id="layer1"
- inkscape:label="Alpha"
- style="opacity:1" />
+<svg xmlns="http://www.w3.org/2000/svg" height="100px" width="100px" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100"><!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
+ <title>kafka</title>
+ <desc>Created with Sketch.</desc>
+ <g id="Page-1" fill-rule="evenodd" fill="none">
+ <g id="kafka">
+ <path id="path4784" fill-rule="nonzero" fill="#fff" d="m50 1.1369e-13c-27.614-1.69e-15 -50 22.386-50 50-3.3818e-15 27.614 22.386 50 50 50 13.261 0 25.979-5.268 35.355-14.645 9.377-9.376 14.645-22.094 14.645-35.355 0-27.614-22.386-50-50-50z"/>
+ <g id="kafta" fill="#000" transform="translate(27 13)">
+ <path id="Combined-Shape" d="m13.333 20c-5.5225 0-9.9997-4.477-9.9997-10 0-5.5228 4.4772-10 9.9997-10 5.523 0 10 4.4772 10 10 0 5.523-4.477 10-10 10zm0.278-5c2.608 0 4.722-2.114 4.722-4.722 0-2.6082-2.114-4.7224-4.722-4.7224s-4.7221 2.1142-4.7221 4.7224c0 2.608 2.1141 4.722 4.7221 4.722z"/>
+ <rect id="Rectangle" y="18.889" x="11.111" height="6.6667" width="4.4444"/>
+ <rect id="Rectangle-Copy" y="49.444" x="11.111" height="6.6667" width="4.4444"/>
+ <rect id="Rectangle-Copy-2" transform="translate(26.776 29.702) rotate(60) translate(-26.776 -29.702)" height="6.6667" width="4.4444" y="26.369" x="24.553"/>
+ <rect id="Rectangle-Copy-3" transform="translate(26.22 45.258) scale(1 -1) rotate(60) translate(-26.22 -45.258)" height="6.6667" width="4.4444" y="41.925" x="23.998"/>
+ <path id="Combined-Shape-Copy-4" d="m12.778 50c-7.0572 0-12.778-5.721-12.778-12.778s5.7208-12.778 12.778-12.778c7.057 0 12.778 5.721 12.778 12.778s-5.721 12.778-12.778 12.778zm0.355-6.389c3.332 0 6.034-2.701 6.034-6.034 0-3.332-2.702-6.034-6.034-6.034-3.3327 0-6.0342 2.702-6.0342 6.034 0 3.333 2.7015 6.034 6.0342 6.034z"/>
+ <path id="Combined-Shape-Copy" d="m13.333 75c-5.5225 0-9.9997-4.477-9.9997-10s4.4772-10 9.9997-10c5.523 0 10 4.477 10 10s-4.477 10-10 10zm0.278-5c2.608 0 4.722-2.114 4.722-4.722s-2.114-4.722-4.722-4.722-4.7221 2.114-4.7221 4.722 2.1141 4.722 4.7221 4.722z"/>
+ <path id="Combined-Shape-Copy-2" d="m36.667 33.889c-5.523 0-10-4.477-10-10s4.477-10 10-10 10 4.477 10 10-4.477 10-10 10zm0.277-5c2.608 0 4.723-2.114 4.723-4.722s-2.115-4.723-4.723-4.723-4.722 2.115-4.722 4.723 2.114 4.722 4.722 4.722z"/>
+ <path id="Combined-Shape-Copy-3" d="m36.667 61.111c-5.523 0-10-4.477-10-10s4.477-10 10-10 10 4.477 10 10-4.477 10-10 10zm0.277-5c2.608 0 4.723-2.114 4.723-4.722s-2.115-4.722-4.723-4.722-4.722 2.114-4.722 4.722 2.114 4.722 4.722 4.722z"/>
+ </g>
+ </g>
+ </g>
</svg>
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/metadata.yaml b/bigtop-packages/src/charm/kafka/layer-kafka/metadata.yaml
index 5a113948..ffd64f43 100644
--- a/bigtop-packages/src/charm/kafka/layer-kafka/metadata.yaml
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/metadata.yaml
@@ -1,26 +1,11 @@
name: kafka
-summary: High-performance distributed messaging system from Apache Bigtop
+summary: Kafka from Apache Bigtop
maintainer: Juju Big Data <bigdata@lists.ubuntu.com>
-description: |
- Fast
- A single Kafka broker can handle hundreds of megabytes of reads and writes per
- second from thousands of clients.
+description: >
+ Kafka is a high-performance, scalable, distributed messaging system.
- Scalable
- Kafka is designed to allow a single cluster to serve as the central data
- backbone for a large organization. It can be elastically and transparently
- expanded without downtime. Data streams are partitioned and spread over a
- cluster of machines to allow data streams larger than the capability of any
- single machine and to allow clusters of co-ordinated consumers.
-
- Durable
- Messages are persisted on disk and replicated within the cluster to prevent
- data loss. Each broker can handle terabytes of messages without performance
- impact.
-
- Distributed by Design
- Kafka has a modern cluster-centric design that offers strong durability and
- fault-tolerance guarantees.
+ This charm provides version 0.10.1 of the Kafka application from Apache
+ Bigtop.
tags: []
provides:
client:
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/tests/01-deploy.py b/bigtop-packages/src/charm/kafka/layer-kafka/tests/01-deploy.py
index f8f06791..f6d5487b 100755
--- a/bigtop-packages/src/charm/kafka/layer-kafka/tests/01-deploy.py
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/tests/01-deploy.py
@@ -26,8 +26,8 @@ class TestDeploy(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('kafka', charm='cs:xenial/kafka')
- cls.d.add('zookeeper', charm='cs:xenial/zookeeper')
+ cls.d.add('kafka')
+ cls.d.add('zookeeper')
cls.d.relate('kafka:zookeeper', 'zookeeper:zookeeper')
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/tests/02-smoke-test.py b/bigtop-packages/src/charm/kafka/layer-kafka/tests/02-smoke-test.py
index c688c699..65c86edd 100755
--- a/bigtop-packages/src/charm/kafka/layer-kafka/tests/02-smoke-test.py
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/tests/02-smoke-test.py
@@ -26,8 +26,8 @@ class TestDeploy(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('kafka', charm='cs:xenial/kafka')
- cls.d.add('zookeeper', charm='cs:xenial/zookeeper')
+ cls.d.add('kafka')
+ cls.d.add('zookeeper')
cls.d.relate('kafka:zookeeper', 'zookeeper:zookeeper')
diff --git a/bigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py b/bigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py
index a27f7833..d5f3723c 100755
--- a/bigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py
+++ b/bigtop-packages/src/charm/kafka/layer-kafka/tests/10-config-changed.py
@@ -29,10 +29,10 @@ class TestConfigChanged(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('kafka-test', charm='cs:xenial/kafka')
- cls.d.add('zk-test', charm='cs:xenial/zookeeper')
+ cls.d.add('kafka-test', charm='kafka')
+ cls.d.add('kafka-test-zk', charm='zookeeper')
- cls.d.relate('kafka-test:zookeeper', 'zk-test:zookeeper')
+ cls.d.relate('kafka-test:zookeeper', 'kafka-test-zk:zookeeper')
cls.d.setup(timeout=1800)
cls.d.sentry.wait_for_messages({'kafka-test': 'ready'}, timeout=1800)
@@ -42,10 +42,10 @@ class TestConfigChanged(unittest.TestCase):
def tearDownClass(cls):
# NB: seems to be a remove_service issue with amulet. However, the
# unit does still get removed. Pass OSError for now:
- # OSError: juju command failed ['remove-application', 'zk-test']:
- # ERROR allocation for service ...zk-test... owned by ... not found
+ # OSError: juju command failed ['remove-application', ...]:
+ # ERROR allocation for service ... owned by ... not found
try:
- cls.d.remove_service('zk-test', 'kafka-test')
+ cls.d.remove_service('kafka-test', 'kafka-test-zk')
except OSError as e:
print("IGNORE: Amulet remove_service failed: {}".format(e))
pass
diff --git a/bigtop-packages/src/charm/mahout/layer-mahout/README.md b/bigtop-packages/src/charm/mahout/layer-mahout/README.md
index 2ecbf5ab..2b64b207 100644
--- a/bigtop-packages/src/charm/mahout/layer-mahout/README.md
+++ b/bigtop-packages/src/charm/mahout/layer-mahout/README.md
@@ -16,33 +16,27 @@
-->
# Overview
-The Apache Mahout project's goal is to build an environment for quickly creating
-scalable performant machine learning applications.
+The Apache Mahout project's goal is to build an environment for quickly
+creating scalable, performant machine learning applications. Learn more at
+[mahout.apache.org][].
-Apache Mahout software provides three major features:
- * A simple and extensible programming environment and framework for building
- scalable algorithms
- * A wide variety of premade algorithms for Scala + Apache Spark, H2O, Apache
- Flink
- * Samsara, a vector math experimentation environment with R-like syntax which
- works at scale
+This charm deploys version 0.12.2 of the Mahout component from
+[Apache Bigtop][].
+
+[mahout.apache.org]: http://mahout.apache.org/
+[Apache Bigtop]: http://bigtop.apache.org/
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-charm.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
This charm is intended to be used with one of the [apache bigtop bundles][].
For example:
juju deploy hadoop-processing
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-processing`.
-
This will deploy an Apache Bigtop Hadoop cluster. More information about this
deployment can be found in the [bundle readme](https://jujucharms.com/hadoop-processing/).
@@ -58,7 +52,6 @@ mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
[apache bigtop bundles]: https://jujucharms.com/u/bigdata-charmers/#bundles
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -85,24 +78,27 @@ application is functioning as expected. Run the action as follows:
juju run-action mahout/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do mahout/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, the action should settle to `status: completed`. If it
reports `status: failed`, the application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
+
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
# Contact Information
@@ -112,10 +108,10 @@ of Juju, the syntax is `juju action fetch <action-id>`.
# Resources
+- [Apache Mahout home page](http://mahout.apache.org/)
- [Apache Bigtop home page](http://bigtop.apache.org/)
+- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Apache Mahout home page](https://mahout.apache.org/)
-- [Apache Mahout issue tracker](https://issues.apache.org/jira/browse/MAHOUT)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-packages/src/charm/mahout/layer-mahout/actions/smoke-test b/bigtop-packages/src/charm/mahout/layer-mahout/actions/smoke-test
index cc98b461..f903da4a 100755
--- a/bigtop-packages/src/charm/mahout/layer-mahout/actions/smoke-test
+++ b/bigtop-packages/src/charm/mahout/layer-mahout/actions/smoke-test
@@ -62,3 +62,4 @@ hadoop jar /usr/lib/mahout/mahout-mr-*-job.jar \
-s SIMILARITY_LOGLIKELIHOOD 2>&1 | tee -a ${RESULT_LOG}
EOF
echo 'mahout smoke-test complete'
+action-set outcome="success"
diff --git a/bigtop-packages/src/charm/mahout/layer-mahout/metadata.yaml b/bigtop-packages/src/charm/mahout/layer-mahout/metadata.yaml
index 7a71d70f..bf8ee0b2 100644
--- a/bigtop-packages/src/charm/mahout/layer-mahout/metadata.yaml
+++ b/bigtop-packages/src/charm/mahout/layer-mahout/metadata.yaml
@@ -1,9 +1,12 @@
name: mahout
-summary: Create scalable and performant machine learning applications
+summary: Mahout from Apache Bigtop
maintainer: Juju Big Data <bigdata@lists.ubuntu.com>
description: >
The Apache Mahout project's goal is to build an environment for quickly
- creating scalable and performant machine learning applications.
+ creating scalable, performant machine learning applications.
+
+ This charm provides version 0.12.2 of the Mahout application from Apache
+ Bigtop.
tags: []
subordinate: true
requires:
diff --git a/bigtop-packages/src/charm/mahout/layer-mahout/tests/01-mahout-test.py b/bigtop-packages/src/charm/mahout/layer-mahout/tests/01-mahout-test.py
index 4e315d30..3dd679ed 100755
--- a/bigtop-packages/src/charm/mahout/layer-mahout/tests/01-mahout-test.py
+++ b/bigtop-packages/src/charm/mahout/layer-mahout/tests/01-mahout-test.py
@@ -26,12 +26,12 @@ class TestDeploy(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('mahout', 'cs:xenial/mahout')
- cls.d.add('client', 'cs:xenial/hadoop-client')
- cls.d.add('resourcemanager', 'cs:xenial/hadoop-resourcemanager')
- cls.d.add('namenode', 'cs:xenial/hadoop-namenode')
- cls.d.add('slave', 'cs:xenial/hadoop-slave')
- cls.d.add('plugin', 'cs:xenial/hadoop-plugin')
+ cls.d.add('mahout')
+ cls.d.add('client', charm='hadoop-client')
+ cls.d.add('namenode', charm='hadoop-namenode')
+ cls.d.add('resourcemanager', charm='hadoop-resourcemanager')
+ cls.d.add('slave', charm='hadoop-slave')
+ cls.d.add('plugin', charm='hadoop-plugin')
cls.d.relate('plugin:hadoop-plugin', 'client:hadoop')
cls.d.relate('plugin:namenode', 'namenode:namenode')
diff --git a/bigtop-packages/src/charm/pig/layer-pig/README.md b/bigtop-packages/src/charm/pig/layer-pig/README.md
index 23348766..f38763dc 100644
--- a/bigtop-packages/src/charm/pig/layer-pig/README.md
+++ b/bigtop-packages/src/charm/pig/layer-pig/README.md
@@ -19,35 +19,24 @@
Apache Pig is a platform for creating MapReduce programs used with Hadoop.
It consists of a high-level language (Pig Latin) for expressing data analysis
programs, coupled with infrastructure for evaluating these programs. Learn more
-at [pig.apache.org](http://pig.apache.org).
+at [pig.apache.org][].
-This charm deploys the Pig component of the Apache Bigtop platform and
-supports running Pig in two execution modes:
+This charm deploys version 0.15.0 of the Pig component from [Apache Bigtop][].
- * Local Mode: Pig runs using your local host and file system. Specify local
- mode using the -x flag: `pig -x local`
- * Mapreduce Mode: Pig runs using a Hadoop cluster and HDFS. This is the default
- mode; you can, optionally, specify it using the -x flag:
- `pig` or `pig -x mapreduce`
+[pig.apache.org]: http://pig.apache.org/
+[Apache Bigtop]: http://bigtop.apache.org/
-# Deploying / Using
+# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the
-[getting-started](https://jujucharms.com/docs/2.0/getting-started)
-instructions prior to deploying this charm.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
-This charm is intended to be used with one of the
-[apache bigtop bundles](https://jujucharms.com/u/bigdata-charmers/#bundles).
+This charm is intended to be deployed via one of the [apache bigtop bundles][].
For example:
juju deploy hadoop-processing
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart](https://launchpad.net/juju-quickstart) with the
-following syntax: `juju quickstart hadoop-processing`.
-
This will deploy an Apache Bigtop Hadoop cluster. More information about this
deployment can be found in the [bundle readme](https://jujucharms.com/hadoop-processing/).
@@ -56,21 +45,14 @@ Now add Pig and relate it to the cluster via the hadoop-plugin:
juju deploy pig
juju add-relation pig plugin
-Once deployment is complete, Apache Pig will be available to execute Pig Latin
-jobs on your data. You can run Pig in a variety of modes:
-
-## Local Mode
-Run Pig in local mode on the Pig unit with the following:
-
- juju ssh pig/0
- pig -x local
-
-## MapReduce Mode
-MapReduce mode is the default for Pig. To run in this mode, ssh to the Pig unit
-and run pig as follows:
+## Network-Restricted Environments
+Charms can be deployed in environments with limited network access. To deploy
+in this environment, configure a Juju model with appropriate proxy and/or
+mirror options. See [Configuring Models][] for more information.
- juju ssh pig/0
- pig
+[getting-started]: https://jujucharms.com/docs/stable/getting-started
+[apache bigtop bundles]: https://jujucharms.com/u/bigdata-charmers/#bundles
+[Configuring Models]: https://jujucharms.com/docs/stable/models-config
# Verifying
@@ -84,7 +66,7 @@ are ready:
This is particularly useful when combined with `watch` to track the on-going
progress of the deployment:
- watch -n 0.5 juju status
+ watch -n 2 juju status
The message column will provide information about a given unit's state.
This charm is ready for use once the status message indicates that it is
@@ -96,15 +78,9 @@ application is functioning as expected. Run the action as follows:
juju run-action pig/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do pig/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
- watch -n 0.5 juju show-action-status
-
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
+ watch -n 2 juju show-action-status
Eventually, the action should settle to `status: completed`. If it
reports `status: failed`, the application is not working as expected. Get
@@ -112,17 +88,36 @@ more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
+# Using
-# Network-Restricted Environments
+Once the deployment has been verified, Apache Pig will be available to execute
+Pig Latin jobs on your data. You can run Pig in a variety of modes:
-Charms can be deployed in environments with limited network access. To deploy
-in this environment, configure a Juju model with appropriate
-proxy and/or mirror options. See
-[Configuring Models](https://jujucharms.com/docs/2.0/models-config) for more
-information.
+## Local Mode
+Run Pig in local mode on the Pig unit with the following:
+
+ juju ssh pig/0
+ pig -x local
+
+## MapReduce Mode
+MapReduce mode is the default for Pig. To run in this mode, ssh to the Pig unit
+and run pig as follows:
+
+ juju ssh pig/0
+ pig
+
+
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
# Contact Information
@@ -132,9 +127,10 @@ information.
# Resources
+- [Apache Pig home page](http://pig.apache.org/)
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-packages/src/charm/pig/layer-pig/actions/smoke-test b/bigtop-packages/src/charm/pig/layer-pig/actions/smoke-test
index 378d3da4..87f128d5 100755
--- a/bigtop-packages/src/charm/pig/layer-pig/actions/smoke-test
+++ b/bigtop-packages/src/charm/pig/layer-pig/actions/smoke-test
@@ -18,16 +18,15 @@
import sys
sys.path.append('lib')
-from charmhelpers.core import hookenv
-from charms.layer.apache_bigtop_base import Bigtop
-from charms.reactive import is_state
-
-from jujubigdata.utils import run_as
-
-from path import Path
+from charmhelpers.core import hookenv # noqa: E402
+from charms.layer.apache_bigtop_base import Bigtop # noqa: E402
+from charms.reactive import is_state # noqa: E402
+from jujubigdata.utils import run_as # noqa: E402
+from path import Path # noqa: E402
def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
hookenv.action_fail(msg)
sys.exit()
@@ -63,8 +62,8 @@ else:
# The smoke tests analyze /etc/passwd. Successful runs will have an 'ubuntu'
# passwd entry in the output.
+hookenv.action_set({'raw': output})
if 'ubuntu' not in output:
- hookenv.action_set({'output': output})
fail('Unable to analyze passwd file with Pig')
else:
hookenv.action_set({'outcome': 'success'})
diff --git a/bigtop-packages/src/charm/pig/layer-pig/metadata.yaml b/bigtop-packages/src/charm/pig/layer-pig/metadata.yaml
index 2898c6a0..4aa1f661 100644
--- a/bigtop-packages/src/charm/pig/layer-pig/metadata.yaml
+++ b/bigtop-packages/src/charm/pig/layer-pig/metadata.yaml
@@ -1,9 +1,10 @@
name: pig
-summary: Create Pig Latin programs for data warehouse analysis
+summary: Pig from Apache Bigtop
maintainer: Juju Big Data <bigdata@lists.ubuntu.com>
description: |
Apache Pig is a platform for creating MapReduce programs used with Hadoop.
It consists of a high-level language (Pig Latin) for expressing data analysis
programs, coupled with infrastructure for evaluating these programs.
- Learn more at http://pig.apache.org.
+
+ This charm provides version 0.15.0 of the Pig application from Apache Bigtop.
tags: []
diff --git a/bigtop-packages/src/charm/pig/layer-pig/tests/01-deploy.py b/bigtop-packages/src/charm/pig/layer-pig/tests/01-deploy.py
index 53364c18..b7e8620f 100755
--- a/bigtop-packages/src/charm/pig/layer-pig/tests/01-deploy.py
+++ b/bigtop-packages/src/charm/pig/layer-pig/tests/01-deploy.py
@@ -27,7 +27,7 @@ class TestDeploy(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('pig', 'cs:xenial/pig')
+ cls.d.add('pig')
cls.d.setup(timeout=1800)
cls.d.sentry.wait_for_messages({'pig': re.compile('ready')}, timeout=1800)
diff --git a/bigtop-packages/src/charm/spark/layer-spark/README.md b/bigtop-packages/src/charm/spark/layer-spark/README.md
index 6a55c820..f7feaab7 100644
--- a/bigtop-packages/src/charm/spark/layer-spark/README.md
+++ b/bigtop-packages/src/charm/spark/layer-spark/README.md
@@ -17,36 +17,18 @@
# Overview
Apache Spark is a fast and general purpose engine for large-scale data
-processing. This charm deploys the Spark component of the [Apache Bigtop][]
-platform. Key features:
+processing. Learn more at [spark.apache.org][].
- * **Speed**
-
- Run programs up to 100x faster than Hadoop MapReduce in memory, or 10x faster
- on disk. Spark has an advanced DAG execution engine that supports cyclic data
- flow and in-memory computing.
-
- * **Ease of Use**
-
- Write applications quickly in Java, Scala or Python. Spark offers over 80
- high-level operators that make it easy to build parallel apps for use
- interactively from the Scala and Python shells.
-
- * **General Purpose Engine**
-
- Combine SQL, streaming, and complex analytics. Spark powers a stack of
- high-level tools including Shark for SQL, MLlib for machine learning, GraphX,
- and Spark Streaming. Combine these frameworks seamlessly in the same
- application.
+This charm deploys version 2.1.0 of the Spark component from [Apache Bigtop][].
+[spark.apache.org]: http://spark.apache.org/
[Apache Bigtop]: http://bigtop.apache.org/
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-charm.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
This charm supports running Spark in a variety of modes:
@@ -80,28 +62,19 @@ the unit acting as master, query Zookeeper as follows:
juju run --unit zookeeper/0 'echo "get /spark/master_status" | /usr/lib/zookeeper/bin/zkCli.sh'
-### YARN-client and YARN-cluster
+### YARN
This charm leverages our pluggable Hadoop model with the `hadoop-plugin`
-interface. This means that this charm can be related to a base Apache Hadoop
+interface. This means that this charm can be related to an Apache Hadoop
cluster to run Spark jobs there. The suggested deployment method is to use the
-[hadoop-processing][] bundle and add a relation between spark and the plugin.
+[hadoop-spark][] bundle:
-
- juju deploy hadoop-processing
- juju add-relation plugin spark
-
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-processing`.
+ juju deploy hadoop-spark
To switch among the above execution modes, set the `spark_execution_mode`
config variable:
juju config spark spark_execution_mode=<new_mode>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju set spark spark_execution_mode=<new_mode>`.
-
See the **Configuring** section below for supported mode options.
## Network-Restricted Environments
@@ -110,8 +83,7 @@ in this environment, configure a Juju model with appropriate proxy and/or
mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
-[hadoop-processing]: https://jujucharms.com/hadoop-processing/
-[juju-quickstart]: https://launchpad.net/juju-quickstart
+[hadoop-spark]: https://jujucharms.com/hadoop-spark/
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -138,28 +110,19 @@ application is functioning as expected. Run the action as follows:
juju run-action spark/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do spark/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, the action should settle to `status: completed`. If it
reports `status: failed`, the application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
## Spark Master web UI
Spark provides a web console that can be used to verify information about
-the cluster. To access it, find the `PUBLIC-ADDRESS` of the spark application
+the cluster. To access it, find the `Public address` of the spark application
and expose it:
juju status spark
@@ -179,10 +142,33 @@ address. The job history web interface will be available at the following URL:
# Using
-Once deployment is verified, Spark batch or streaming jobs can be run in a
-variety of ways:
+## Actions
+Once Spark is ready, there are a number of actions available in this charm.
+
+Run a benchmark (as described in the **Benchmarking** section):
+
+ juju run-action spark/0 pagerank
+ juju show-action-output <id> # <-- id from above command
+
+Run a smoke test (as described in the **Verifying** section):
+
+ juju run-action spark/0 smoke-test
+ juju show-action-output <id> # <-- id from above command
+
+Start/Stop/Restart the Spark Job History service:
+
+ juju run-action spark/0 [start|stop|restart]-spark-job-history-server
+ juju show-action-output <id> # <-- id from above command
+
+Submit a Spark job:
-### Spark shell
+ juju run-action spark/0 spark-submit \
+ options='--class org.apache.spark.examples.SparkPi' \
+ job='/usr/lib/spark/examples/jars/spark-examples.jar' \
+ job-args='10'
+ juju show-action-output <id> # <-- id from above command
+
+## Spark shell
Spark shell provides a simple way to learn the API, as well as a powerful
tool to analyze data interactively. It is available in either Scala or Python
and can be run from the Spark unit as follows:
@@ -191,14 +177,14 @@ and can be run from the Spark unit as follows:
spark-shell # for interaction using scala
pyspark # for interaction using python
-### Command line
+## Command line
SSH to the Spark unit and manually run a spark-submit job, for example:
juju ssh spark/0
spark-submit --class org.apache.spark.examples.SparkPi \
- --master yarn-client /usr/lib/spark/lib/spark-examples*.jar 10
+ /usr/lib/spark/examples/jars/spark-examples.jar 10
-### Apache Zeppelin
+## Apache Zeppelin
Apache Zeppelin is a web-based notebook that enables interactive data
analytics. Make beautiful data-driven, interactive, and collaborative documents
with SQL, Scala and more. Deploy Zeppelin and relate it to Spark:
@@ -206,7 +192,7 @@ with SQL, Scala and more. Deploy Zeppelin and relate it to Spark:
juju deploy zeppelin
juju add-relation spark zeppelin
-To access the web console, find the `PUBLIC-ADDRESS` of the zeppelin
+To access the web console, find the `Public address` of the zeppelin
application and expose it:
juju status zeppelin
@@ -219,17 +205,47 @@ The web interface will be available at the following URL:
# Configuring
-## spark_bench_enabled
+Charm configuration can be changed at runtime with `juju config`. This charm
+supports the following config parameters.
+
+## driver_memory
+Amount of memory available for the Spark driver process (1g by default).
+Set a different value with:
+
+ juju config spark driver_memory=4096m
+
+## executor_memory
+Amount of memory available for each Spark executor process (1g by default).
+Set a different value with:
+
+ juju config spark executor_memory=2g
+
+> **Note**: When Spark is in YARN mode, ensure the configured executor memory
+does not exceed the NodeManager maximum (defined on each nodemanager as
+`yarn.nodemanager.resource.memory-mb` in `yarn-default.xml`).
+
+## install-cuda
+Provided by `layer-nvidia-cuda`, this option controls the installation
+of NVIDIA CUDA packages if capable GPU hardware is present. When `false` (the
+default), CUDA will not be installed or configured regardless of hardware
+support. Set this to `true` to fetch and install CUDA-related packages from
+the NVIDIA developer repository.
+
+ juju config spark install-cuda=true
+
+> **Note**: This option requires external network access to
+http://developer.download.nvidia.com/. Ensure appropriate proxies are
+configured if needed.
+## spark_bench_enabled
Install the SparkBench benchmarking suite. If `true` (the default), this charm
will download spark bench from the URL specified by `spark_bench_ppc64le`
or `spark_bench_x86_64`, depending on the unit's architecture.
## spark_execution_mode
-
Spark has four modes of execution: local, standalone, yarn-client, and
yarn-cluster. The default mode is `standalone` and can be changed by setting
-the `spark_execution_mode` config variable.
+the `spark_execution_mode` config option.
* **Local**
@@ -270,27 +286,16 @@ the `spark_execution_mode` config variable.
# Benchmarking
-This charm provides several benchmarks, including the [Spark Bench][]
-benchmarking suite (if enabled), to gauge the performance of the environment.
+This charm provides benchmarks to gauge the performance of the Spark cluster.
Each benchmark is an action that can be run with `juju run-action`:
- $ juju actions spark | grep Bench
- connectedcomponent Run the Spark Bench ConnectedComponent benchmark.
- decisiontree Run the Spark Bench DecisionTree benchmark.
- kmeans Run the Spark Bench KMeans benchmark.
- linearregression Run the Spark Bench LinearRegression benchmark.
- logisticregression Run the Spark Bench LogisticRegression benchmark.
- matrixfactorization Run the Spark Bench MatrixFactorization benchmark.
- pagerank Run the Spark Bench PageRank benchmark.
- pca Run the Spark Bench PCA benchmark.
- pregeloperation Run the Spark Bench PregelOperation benchmark.
- shortestpaths Run the Spark Bench ShortestPaths benchmark.
- sql Run the Spark Bench SQL benchmark.
- stronglyconnectedcomponent Run the Spark Bench StronglyConnectedComponent benchmark.
- svdplusplus Run the Spark Bench SVDPlusPlus benchmark.
- svm Run the Spark Bench SVM benchmark.
-
- $ juju run-action spark/0 svdplusplus
+ $ juju actions spark
+ ...
+ pagerank Calculate PageRank for a sample data set
+ sparkpi Calculate Pi
+ ...
+
+ $ juju run-action spark/0 pagerank
Action queued with id: 339cec1f-e903-4ee7-85ca-876fb0c3d28e
$ juju show-action-output 339cec1f-e903-4ee7-85ca-876fb0c3d28e
@@ -299,27 +304,27 @@ Each benchmark is an action that can be run with `juju run-action`:
composite:
direction: asc
units: secs
- value: "200.754000"
- raw: |
- SVDPlusPlus,2016-11-02-03:08:26,200.754000,85.974071,.428255,0,SVDPlusPlus-MLlibConfig,,,,,10,,,50000,4.0,1.3,
- start: 2016-11-02T03:08:26Z
- stop: 2016-11-02T03:11:47Z
- results:
- duration:
- direction: asc
- units: secs
- value: "200.754000"
- throughput:
- direction: desc
- units: x/sec
- value: ".428255"
+ value: "83"
+ start: 2017-04-12T23:22:38Z
+ stop: 2017-04-12T23:24:01Z
+ output: '{''status'': ''completed''}'
status: completed
timing:
- completed: 2016-11-02 03:11:48 +0000 UTC
- enqueued: 2016-11-02 03:08:21 +0000 UTC
- started: 2016-11-02 03:08:26 +0000 UTC
+ completed: 2017-04-12 23:24:02 +0000 UTC
+ enqueued: 2017-04-12 23:22:36 +0000 UTC
+ started: 2017-04-12 23:22:37 +0000 UTC
+
+
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
-[Spark Bench]: https://github.com/SparkTC/spark-bench
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
# Contact Information
@@ -329,9 +334,10 @@ Each benchmark is an action that can be run with `juju run-action`:
# Resources
+- [Apache Spark home page](http://spark.apache.org/)
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-packages/src/charm/spark/layer-spark/actions.yaml b/bigtop-packages/src/charm/spark/layer-spark/actions.yaml
index 6564b1c2..d0be216c 100644
--- a/bigtop-packages/src/charm/spark/layer-spark/actions.yaml
+++ b/bigtop-packages/src/charm/spark/layer-spark/actions.yaml
@@ -1,5 +1,12 @@
+pagerank:
+ description: Calculate PageRank for a sample data set
+ params:
+ iterations:
+ description: Number of iterations for the SparkPageRank job
+ type: string
+ default: "1"
smoke-test:
- description: Verify that Spark is working by calculating pi.
+ description: Verify that Spark is working by calculating pi
sparkpi:
description: Calculate Pi
params:
@@ -19,8 +26,6 @@ logisticregression:
description: Run the Spark Bench LogisticRegression benchmark.
matrixfactorization:
description: Run the Spark Bench MatrixFactorization benchmark.
-pagerank:
- description: Run the Spark Bench PageRank benchmark.
pca:
description: Run the Spark Bench PCA benchmark.
pregeloperation:
@@ -41,40 +46,32 @@ start-spark-job-history-server:
description: Start the Spark job history server.
stop-spark-job-history-server:
description: Stop the Spark job history server.
-submit:
- description: Submit a job to Spark.
+spark-submit:
+ description: Submit a job to run with the 'spark-submit' utility.
required: ['job']
params:
job:
description: >
URL to a JAR or Python file. This can be any URL supported by
- spark-submit, such as a remote URL, an hdfs:// path (if
- connected to HDFS), etc.
- type: string
- class:
- description: >
- If a JAR is given, this should be the name of the class within
- the JAR to run.
+ spark-submit, such as a local path, remote URL, an hdfs:// path
+ (if connected to HDFS), etc.
type: string
job-args:
- description: Arguments for the job.
- packages:
- description: Comma-separated list of packages to include.
- type: string
- py-files:
- description: Comma-separated list of Python packages to include.
- type: string
- extra-params:
+ description: Arguments required by the job.
+ options:
description: >
- Additional params to pass to spark-submit.
- For example: "--executor-memory 1000M --supervise"
+ Options to pass to spark-submit.
+ For example, "--driver-memory 1000M --class org.foo.MyApp"
type: string
cron:
description: >
Schedule the job to be run periodically, according to the
- given cron rule. For example: "*/5 * * * *" will run the
- job every 5 minutes.
+ given cron rule. For example, "'*/5 * * * *'" will run the
+ job every 5 minutes (note the use of double and single quotes
+ is required to parse this value as a string).
type: string
+submit:
+ description: DEPRECATED, use the spark-submit action instead.
list-jobs:
description: List scheduled periodic jobs.
remove-job:
diff --git a/bigtop-packages/src/charm/spark/layer-spark/actions/list-jobs b/bigtop-packages/src/charm/spark/layer-spark/actions/list-jobs
index b6fdf182..31da9db5 100755
--- a/bigtop-packages/src/charm/spark/layer-spark/actions/list-jobs
+++ b/bigtop-packages/src/charm/spark/layer-spark/actions/list-jobs
@@ -15,10 +15,15 @@
# limitations under the License.
set -e
-for line in "$(crontab -lu ubuntu | grep '# mapreduce job: ')"; do
+for line in "$(crontab -lu ubuntu | grep '# action: ')"; do
if [[ -n "$line" ]]; then
- action_id=$(echo "$line" | sed -e 's/.* # mapreduce job: //')
- job_code=$(echo "$line" | sed -e 's/ # mapreduce job: .*//')
+ # the action uuid is after the 'action:' comment
+ action_id=$(echo "$line" | sed -e 's/.* # action: //')
+
+ # the actual job is everything before the 'action:' comment
+ job_code=$(echo "$line" | sed -e 's/ # action: .*//')
+
+ # show the people what they want
action-set job.$action_id="$job_code"
fi
done
diff --git a/bigtop-packages/src/charm/spark/layer-spark/actions/pagerank b/bigtop-packages/src/charm/spark/layer-spark/actions/pagerank
index 9e15049e..2650e74a 120000..100755
--- a/bigtop-packages/src/charm/spark/layer-spark/actions/pagerank
+++ b/bigtop-packages/src/charm/spark/layer-spark/actions/pagerank
@@ -1 +1,136 @@
-sparkbench \ No newline at end of file
+#!/usr/bin/env python3
+# 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.
+
+import os
+import subprocess
+import sys
+
+from path import Path
+from time import time
+
+from charmhelpers.core import hookenv
+from charms.benchmark import Benchmark
+from charms.reactive import is_state
+from jujubigdata import utils
+
+
+def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
+ hookenv.action_fail(msg)
+ sys.exit()
+
+
+def main():
+ bench = Benchmark()
+
+ if not is_state('spark.started'):
+ msg = 'Spark is not started yet'
+ fail(msg)
+
+ # gather params and create dir to store results
+ num_iter = hookenv.action_get('iterations')
+ run = int(time())
+ result_dir = Path('/opt/sparkpagerank-results')
+ result_log = result_dir / '{}.log'.format(run)
+ if not result_dir.exists():
+ result_dir.mkdir()
+ result_dir.chown('ubuntu', 'ubuntu')
+ hookenv.log("values: {} {}".format(num_iter, result_log))
+
+ sample = "/home/ubuntu/SparkBench/PageRank/web-Google.txt"
+ if not os.path.isfile(sample):
+ msg = 'Could not find pagerank sample data'
+ fail('{}: {}'.format(msg, sample))
+
+ # Benchmark input data is packed into our sparkbench.tgz, which makes
+ # it available on all spark units. In yarn mode, however, the nodemanagers
+ # act as the spark workers and will not have access to this local data.
+ # In yarn mode, copy our input data to hdfs so nodemanagers can access it.
+ mode = hookenv.config()['spark_execution_mode']
+ if mode.startswith('yarn'):
+ if is_state('hadoop.hdfs.ready'):
+ try:
+ utils.run_as('ubuntu',
+ 'hdfs', 'dfs', '-put', '-f', sample, '/user/ubuntu',
+ capture_output=True)
+ except subprocess.CalledProcessError as e:
+ msg = 'Unable to copy pagerank sample data to hdfs'
+ fail('{}: {}'.format(msg, e))
+ else:
+ sample = "/user/ubuntu/web-Google.txt"
+ else:
+ msg = 'Spark is configured for yarn mode, but HDFS is not ready yet'
+ fail(msg)
+
+ # find jar location
+ spark_home = "/usr/lib/spark"
+ example_jar_name = "spark-examples.jar"
+ example_jar_path = None
+ for root, dirs, files in os.walk(spark_home):
+ if example_jar_name in files:
+ example_jar_path = os.path.join(root, example_jar_name)
+
+ if not example_jar_path:
+ msg = 'Could not find {}'.format(example_jar_name)
+ fail(msg)
+
+ print('Calculating PageRank')
+ bench.start()
+ start = int(time())
+
+ with open(result_log, 'w') as log_file:
+ arg_list = [
+ 'spark-submit',
+ '--class',
+ 'org.apache.spark.examples.SparkPageRank',
+ example_jar_path,
+ sample,
+ num_iter,
+ ]
+
+ try:
+ subprocess.check_call(arg_list, stdout=log_file,
+ stderr=subprocess.STDOUT)
+ except subprocess.CalledProcessError as e:
+ msg = 'SparkPageRank command failed: {}'.format(' '.join(arg_list))
+ fail('{}: {}'.format(msg, e))
+
+ stop = int(time())
+ bench.finish()
+
+ duration = stop - start
+ bench.set_composite_score(duration, units='secs', direction='asc')
+
+ # Tell the user how they can get the full result log
+ scp_log_msg = "juju scp {}:{} .".format(hookenv.local_unit(), result_log)
+ hookenv.action_set({'meta.fetchcmd': scp_log_msg})
+
+ with open(result_log) as log:
+ success = False
+ for line in log.readlines():
+ if 'rank' in line:
+ success = True
+ break
+
+ if not success:
+ msg = 'Spark-submit failed to calculate pagerank'
+ fail(msg)
+
+ hookenv.action_set({'outcome': 'success'})
+
+
+if __name__ == '__main__':
+ main()
diff --git a/bigtop-packages/src/charm/spark/layer-spark/actions/restart-spark-job-history-server b/bigtop-packages/src/charm/spark/layer-spark/actions/restart-spark-job-history-server
index 411c335b..331239af 100755
--- a/bigtop-packages/src/charm/spark/layer-spark/actions/restart-spark-job-history-server
+++ b/bigtop-packages/src/charm/spark/layer-spark/actions/restart-spark-job-history-server
@@ -15,22 +15,22 @@
# limitations under the License.
import sys
+from charmhelpers.core import hookenv, host
+from charms.reactive import is_state
-try:
- from charmhelpers.core import host, hookenv, unitdata
- from jujubigdata import utils
- charm_ready = True
-except ImportError:
- charm_ready = False
-if not charm_ready:
- from subprocess import call
- call(['action-fail', 'Spark service not yet ready'])
- sys.exit(1)
+def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
+ hookenv.action_fail(msg)
+ sys.exit()
+
+
+if not is_state('spark.started'):
+ msg = 'Spark is not started yet'
+ fail(msg)
if not host.service_available('spark-history'):
- from subprocess import call
- call(['action-fail', 'Spark history service not available'])
- sys.exit(1)
+ msg = 'Spark history service not available'
+ fail(msg)
host.service_restart('spark-history-server')
diff --git a/bigtop-packages/src/charm/spark/layer-spark/actions/spark-submit b/bigtop-packages/src/charm/spark/layer-spark/actions/spark-submit
new file mode 100755
index 00000000..90bd68ef
--- /dev/null
+++ b/bigtop-packages/src/charm/spark/layer-spark/actions/spark-submit
@@ -0,0 +1,44 @@
+#!/bin/bash
+# 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.
+set -e
+
+if ! charms.reactive is_state 'spark.started'; then
+ action-set outcome="failure"
+ action-fail 'Spark not yet ready'
+ exit 1
+fi
+
+job="$(action-get job)"
+job_args="$(action-get job-args)"
+options="$(action-get options)"
+cron="$(action-get cron)"
+
+job_code=". /etc/environment ; spark-submit ${options} ${job} ${job_args}"
+action-set job-code="$job_code"
+
+if [[ -z "$cron" ]]; then
+ su ubuntu -c "$job_code"
+else
+ juju-log "Scheduling job with ID $JUJU_ACTION_UUID"
+ action-set action-id="$JUJU_ACTION_UUID"
+ job_line="$cron $job_code # action: $JUJU_ACTION_UUID"
+
+ # if we dont have a crontab, make an empty one
+ crontab -lu ubuntu > /dev/null || echo -n | crontab -u ubuntu -
+
+ # append our job to then end of any existing crontab
+ (crontab -lu ubuntu; echo "$job_line") | crontab -u ubuntu -
+fi
diff --git a/bigtop-packages/src/charm/spark/layer-spark/actions/sparkbench b/bigtop-packages/src/charm/spark/layer-spark/actions/sparkbench
index 906a30e9..3f626e3e 100755
--- a/bigtop-packages/src/charm/spark/layer-spark/actions/sparkbench
+++ b/bigtop-packages/src/charm/spark/layer-spark/actions/sparkbench
@@ -16,8 +16,9 @@
set -ex
if ! charms.reactive is_state 'spark.started'; then
+ action-set outcome="failure"
action-fail 'Spark not yet ready'
- exit
+ exit 1
fi
# Do not call this script directly. Call it via one of the symlinks. The
@@ -138,11 +139,14 @@ if [ -f "${SB_APPS}" ]; then
# send raw data (benchmark-raw takes a file)
echo ${DATA} > ${RESULT_LOG}
benchmark-raw ${RESULT_LOG}
+ action-set outcome="success"
else
- echo "ERROR: Invalid benchmark (${BENCHMARK})"
+ action-set outcome="failure"
+ action-fail "ERROR: Invalid benchmark (${BENCHMARK})"
exit 1
fi
else
- echo "ERROR: Could not find SparkBench application list"
+ action-set outcome="failure"
+ action-fail "ERROR: Could not find SparkBench application list"
exit 1
fi
diff --git a/bigtop-packages/src/charm/spark/layer-spark/actions/sparkpi b/bigtop-packages/src/charm/spark/layer-spark/actions/sparkpi
index 9afceaf2..93a4f107 100755
--- a/bigtop-packages/src/charm/spark/layer-spark/actions/sparkpi
+++ b/bigtop-packages/src/charm/spark/layer-spark/actions/sparkpi
@@ -14,29 +14,30 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import os
import sys
-sys.path.append('lib')
from path import Path
from time import time
import subprocess
-from charmhelpers.contrib.benchmark import Benchmark
from charmhelpers.core import hookenv
+from charms.benchmark import Benchmark
from charms.reactive import is_state
-def fail(msg, output):
- hookenv.action_set({'output': output})
+def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
hookenv.action_fail(msg)
- sys.exit(1)
+ sys.exit()
def main():
bench = Benchmark()
if not is_state('spark.started'):
- fail('Spark not yet ready', 'error')
+ msg = 'Spark is not started yet'
+ fail(msg)
num_partitions = hookenv.action_get('partitions') or ''
@@ -55,12 +56,24 @@ def main():
print('calculating pi')
+ # get the examples jar
+ spark_home = "/usr/lib/spark"
+ example_jar_name = "spark-examples.jar"
+ example_jar_path = None
+ for root, dirs, files in os.walk(spark_home):
+ if example_jar_name in files:
+ example_jar_path = os.path.join(root, example_jar_name)
+
+ if not example_jar_path:
+ msg = 'Could not find {}'.format(example_jar_name)
+ fail(msg)
+
with open(result_log, 'w') as log_file:
arg_list = [
'spark-submit',
'--class',
'org.apache.spark.examples.SparkPi',
- '/usr/lib/spark/lib/spark-examples.jar'
+ example_jar_path
]
if num_partitions:
# This is always blank. TODO: figure out what it was
@@ -73,26 +86,32 @@ def main():
except subprocess.CalledProcessError as e:
print('smoke test command failed: ')
print('{}'.format(' '.join(arg_list)))
- fail('spark-submit failed: {}'.format(e), 'error')
+ fail('spark-submit failed: {}'.format(e))
stop = int(time())
bench.finish()
duration = stop - start
- bench.set_composite_score(duration, 'secs')
- subprocess.check_call(['benchmark-raw', result_log])
+ bench.set_composite_score(duration, units='secs', direction='asc')
+
+ # Tell the user how they can get the full result log
+ scp_log_msg = "juju scp {}:{} .".format(hookenv.local_unit(), result_log)
+ hookenv.action_set({'meta.fetchcmd': scp_log_msg})
with open(result_log) as log:
success = False
for line in log.readlines():
if 'Pi is roughly 3.1' in line:
success = True
+ pi_calc = line
break
if not success:
- fail('spark-submit did not calculate pi', 'error')
+ msg = 'Spark-submit failed to calculate pi'
+ fail(msg)
- hookenv.action_set({'output': {'status': 'completed'}})
+ hookenv.action_set({'meta.raw': pi_calc})
+ hookenv.action_set({'outcome': 'success'})
if __name__ == '__main__':
diff --git a/bigtop-packages/src/charm/spark/layer-spark/actions/start-spark-job-history-server b/bigtop-packages/src/charm/spark/layer-spark/actions/start-spark-job-history-server
index 9677a383..cc218dbb 100755
--- a/bigtop-packages/src/charm/spark/layer-spark/actions/start-spark-job-history-server
+++ b/bigtop-packages/src/charm/spark/layer-spark/actions/start-spark-job-history-server
@@ -15,22 +15,22 @@
# limitations under the License.
import sys
+from charmhelpers.core import hookenv, host
+from charms.reactive import is_state
-try:
- from charmhelpers.core import host, hookenv, unitdata
- from jujubigdata import utils
- charm_ready = True
-except ImportError:
- charm_ready = False
-if not charm_ready:
- from subprocess import call
- call(['action-fail', 'Spark service not yet ready'])
- sys.exit(1)
+def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
+ hookenv.action_fail(msg)
+ sys.exit()
+
+
+if not is_state('spark.started'):
+ msg = 'Spark is not started yet'
+ fail(msg)
if not host.service_available('spark-history-server'):
- from subprocess import call
- call(['action-fail', 'Spark history service not available'])
- sys.exit(1)
+ msg = 'Spark history service not available'
+ fail(msg)
host.service_start('spark-history-server')
diff --git a/bigtop-packages/src/charm/spark/layer-spark/actions/stop-spark-job-history-server b/bigtop-packages/src/charm/spark/layer-spark/actions/stop-spark-job-history-server
index fbe41cf9..368b1e91 100755
--- a/bigtop-packages/src/charm/spark/layer-spark/actions/stop-spark-job-history-server
+++ b/bigtop-packages/src/charm/spark/layer-spark/actions/stop-spark-job-history-server
@@ -15,22 +15,22 @@
# limitations under the License.
import sys
+from charmhelpers.core import hookenv, host
+from charms.reactive import is_state
-try:
- from charmhelpers.core import host, hookenv, unitdata
- from jujubigdata import utils
- charm_ready = True
-except ImportError:
- charm_ready = False
-if not charm_ready:
- from subprocess import call
- call(['action-fail', 'Spark service not yet ready'])
- sys.exit(1)
+def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
+ hookenv.action_fail(msg)
+ sys.exit()
+
+
+if not is_state('spark.started'):
+ msg = 'Spark is not started yet'
+ fail(msg)
if not host.service_available('spark-history-server'):
- from subprocess import call
- call(['action-fail', 'Spark history service not available'])
- sys.exit(1)
+ msg = 'Spark history service not available'
+ fail(msg)
host.service_stop('spark-history-server')
diff --git a/bigtop-packages/src/charm/spark/layer-spark/actions/submit b/bigtop-packages/src/charm/spark/layer-spark/actions/submit
index a25a7af1..3604288b 100755..120000
--- a/bigtop-packages/src/charm/spark/layer-spark/actions/submit
+++ b/bigtop-packages/src/charm/spark/layer-spark/actions/submit
@@ -1,57 +1 @@
-#!/bin/bash
-# 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.
-set -e
-
-if ! charms.reactive is_state 'spark.started'; then
- action-fail 'Spark not yet ready'
- exit
-fi
-
-py_files="$(action-get py-files)"
-packages="$(action-get packages)"
-extra_params="$(action-get extra-params)"
-class="$(action-get class)"
-job="$(action-get job)"
-job_args="$(action-get job-args)"
-cron="$(action-get cron)"
-
-submit_args='--deploy-mode cluster'
-if [[ -n "$packages" ]]; then
- submit_args="$submit_args --packages $packages"
-fi
-if [[ -n "$py_files" ]]; then
- submit_args="$submit_args --py-files $py_files"
-fi
-if [[ -n "$extra_params" ]]; then
- submit_args="$submit_args $extra_params"
-fi
-if [[ -n "$class" ]]; then
- submit_args="$submit_args --class $class"
-fi
-submit_args="$submit_args $job"
-
-job_code=". /etc/environment ; spark-submit ${submit_args} ${job_args}"
-action-set job-code="$job_code"
-
-if [[ -z "$cron" ]]; then
- su ubuntu -c "$job_code"
-else
- juju-log "Scheduling job with ID $JUJU_ACTION_UUID"
- action-set action-id="$JUJU_ACTION_UUID"
- job_line="$cron $job_code # $JUJU_ACTION_UUID"
- crontab -lu ubuntu > /dev/null || echo -n | crontab -u ubuntu -
- (crontab -lu ubuntu; echo "$job_line") | crontab -u ubuntu -
-fi
+spark-submit \ No newline at end of file
diff --git a/bigtop-packages/src/charm/spark/layer-spark/config.yaml b/bigtop-packages/src/charm/spark/layer-spark/config.yaml
index 2a887521..b923687e 100644
--- a/bigtop-packages/src/charm/spark/layer-spark/config.yaml
+++ b/bigtop-packages/src/charm/spark/layer-spark/config.yaml
@@ -1,10 +1,18 @@
options:
- resources_mirror:
+ driver_memory:
type: string
- default: ''
+ default: '1g'
description: |
- URL used to fetch resources (e.g., Hadoop binaries) instead of the
- location specified in resources.yaml.
+ Specify gigabytes (e.g. 1g) or megabytes (e.g. 1024m). If running
+ in 'local' or 'standalone' mode, you may also specify a percentage
+ of total system memory (e.g. 50%).
+ executor_memory:
+ type: string
+ default: '1g'
+ description: |
+ Specify gigabytes (e.g. 1g) or megabytes (e.g. 1024m). If running
+ in 'local' or 'standalone' mode, you may also specify a percentage
+ of total system memory (e.g. 50%).
spark_bench_enabled:
type: boolean
default: true
@@ -16,7 +24,7 @@ options:
preserved.
spark_bench_ppc64le:
type: string
- default: 'https://s3.amazonaws.com/jujubigdata/ibm/noarch/SparkBench-2.0-20161101.tgz#sha256=2a34150dc3ad4a1469ca09c202f4db4ee995e2932b8a633d8c006d46c1f61e9f'
+ default: 'https://s3.amazonaws.com/jujubigdata/ibm/noarch/SparkBench-2.0-20170403.tgz#sha256=709caec6667dd82e42de25eb8bcd5763ca894e99e5c83c97bdfcf62cb1aa00c8'
description: |
URL (including hash) of a ppc64le tarball of SparkBench. By
default, this points to a pre-built SparkBench binary based on
@@ -24,7 +32,7 @@ options:
'spark_bench_enabled' is 'true'.
spark_bench_x86_64:
type: string
- default: 'https://s3.amazonaws.com/jujubigdata/ibm/noarch/SparkBench-2.0-20161101.tgz#sha256=2a34150dc3ad4a1469ca09c202f4db4ee995e2932b8a633d8c006d46c1f61e9f'
+ default: 'https://s3.amazonaws.com/jujubigdata/ibm/noarch/SparkBench-2.0-20170403.tgz#sha256=709caec6667dd82e42de25eb8bcd5763ca894e99e5c83c97bdfcf62cb1aa00c8'
description: |
URL (including hash) of an x86_64 tarball of SparkBench. By
default, this points to a pre-built SparkBench binary based on
diff --git a/bigtop-packages/src/charm/spark/layer-spark/icon.svg b/bigtop-packages/src/charm/spark/layer-spark/icon.svg
index a0da80db..2c457350 100644
--- a/bigtop-packages/src/charm/spark/layer-spark/icon.svg
+++ b/bigtop-packages/src/charm/spark/layer-spark/icon.svg
@@ -1,843 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="96"
- height="96"
- id="svg6517"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="icon.svg">
- <defs
- id="defs6519">
- <linearGradient
- inkscape:collect="always"
- xlink:href="#Background"
- id="linearGradient6461"
- gradientUnits="userSpaceOnUse"
- x1="0"
- y1="970.29498"
- x2="144"
- y2="970.29498"
- gradientTransform="matrix(0,-0.66666669,0.6660448,0,-866.25992,731.29077)" />
- <linearGradient
- id="Background">
- <stop
- id="stop4178"
- offset="0"
- style="stop-color:#b8b8b8;stop-opacity:1" />
- <stop
- id="stop4180"
- offset="1"
- style="stop-color:#c9c9c9;stop-opacity:1" />
- </linearGradient>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Inner Shadow"
- id="filter1121">
- <feFlood
- flood-opacity="0.59999999999999998"
- flood-color="rgb(0,0,0)"
- result="flood"
- id="feFlood1123" />
- <feComposite
- in="flood"
- in2="SourceGraphic"
- operator="out"
- result="composite1"
- id="feComposite1125" />
- <feGaussianBlur
- in="composite1"
- stdDeviation="1"
- result="blur"
- id="feGaussianBlur1127" />
- <feOffset
- dx="0"
- dy="2"
- result="offset"
- id="feOffset1129" />
- <feComposite
- in="offset"
- in2="SourceGraphic"
- operator="atop"
- result="composite2"
- id="feComposite1131" />
- </filter>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Drop Shadow"
- id="filter950">
- <feFlood
- flood-opacity="0.25"
- flood-color="rgb(0,0,0)"
- result="flood"
- id="feFlood952" />
- <feComposite
- in="flood"
- in2="SourceGraphic"
- operator="in"
- result="composite1"
- id="feComposite954" />
- <feGaussianBlur
- in="composite1"
- stdDeviation="1"
- result="blur"
- id="feGaussianBlur956" />
- <feOffset
- dx="0"
- dy="1"
- result="offset"
- id="feOffset958" />
- <feComposite
- in="SourceGraphic"
- in2="offset"
- operator="over"
- result="composite2"
- id="feComposite960" />
- </filter>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath873">
- <g
- transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
- id="g875"
- inkscape:label="Layer 1"
- style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline">
- <path
- style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
- d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
- id="path877"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssssss" />
- </g>
- </clipPath>
- <filter
- inkscape:collect="always"
- id="filter891"
- inkscape:label="Badge Shadow">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.71999962"
- id="feGaussianBlur893" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="4.0745362"
- inkscape:cx="18.514671"
- inkscape:cy="-0.067172296"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1056"
- inkscape:window-x="2160"
- inkscape:window-y="340"
- inkscape:window-maximized="1"
- showborder="true"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:showpageshadow="false">
- <inkscape:grid
- type="xygrid"
- id="grid821" />
- <sodipodi:guide
- orientation="1,0"
- position="16,48"
- id="guide823" />
- <sodipodi:guide
- orientation="0,1"
- position="64,80"
- id="guide825" />
- <sodipodi:guide
- orientation="1,0"
- position="80,40"
- id="guide827" />
- <sodipodi:guide
- orientation="0,1"
- position="64,16"
- id="guide829" />
- </sodipodi:namedview>
- <metadata
- id="metadata6522">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="BACKGROUND"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(268,-635.29076)"
- style="display:inline">
- <path
- style="fill:url(#linearGradient6461);fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)"
- d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z"
- id="path6455"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssssss" />
- <image
- y="636.29077"
- x="-260.2941"
- id="image3115"
- xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABHNCSVQICAgIfAhkiAAAIABJREFU
-eJzs3XeYVNX5B/Dve869M7O7sCKg9Coo2JC6uxTFroklajQxGjUmUaMmFmyJGmvsMcWoMTGJmqiJ
-SUz9RaOiRulgb4g0AQUBkbZl5t5z3t8fswuIgLuzs7Pt+3mefYTdmXPfmcU57z3lPQARERERERER
-ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
-ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
-ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
-ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
-ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
-ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
-ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
-ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
-ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
-EREREREREREREREREREREREREdG2SXMHQERELcecu84assvymYeaeO3+Lo46wAAJsRvS4c5TN3bd
-c+o+F/9xTnPHSPnBBICIiLDgjmNOSS6ffQa8Hxgg7mVFk04CWDhAFc5rBNiVGVv038rOezw29Mpn
-/tvcMVPjMAEgImrHfq5a+qXLBt+SiD8+WW1RJ1EH6yN4AE4CKAQqAqNAgBhQhYesUVvyjw/O//2V
-o/rvv7y5XwPlhgkAEVE79Qf9uPSAScPuDv3Gk42xNtu5G8QSQKCwiKEQCBSAwMNCAYRw8Op9ZIqf
-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
-npYDbiNE9BSJ2QISUA0rAYQIBjCORXcAKKWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWU
-UkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJK
-KaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSiml
-lFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRS
-SimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkop
-pZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWU
-UkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJK
-KaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSiml
-lFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRS
-SimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkop
-pZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWU
-UkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJK
-KaWUUkoppZRSSimllFJKKaWUqsn/Bw1WfWPJuUdqAAAAAElFTkSuQmCC
-"
- height="89.999992"
- width="87.294098" />
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer3"
- inkscape:label="PLACE YOUR PICTOGRAM HERE"
- style="display:inline" />
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="BADGE"
- style="display:none"
- sodipodi:insensitive="true">
- <g
- style="display:inline"
- transform="translate(-340.00001,-581)"
- id="g4394"
- clip-path="none">
- <g
- id="g855">
- <g
- inkscape:groupmode="maskhelper"
- id="g870"
- clip-path="url(#clipPath873)"
- style="opacity:0.6;filter:url(#filter891)">
- <path
- transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
- d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
- sodipodi:ry="12"
- sodipodi:rx="12"
- sodipodi:cy="552.36218"
- sodipodi:cx="252"
- id="path844"
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- </g>
- <g
- id="g862">
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path4398"
- sodipodi:cx="252"
- sodipodi:cy="552.36218"
- sodipodi:rx="12"
- sodipodi:ry="12"
- d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
- transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" />
- <path
- transform="matrix(1.25,0,0,1.25,33,-100.45273)"
- d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
- sodipodi:ry="12"
- sodipodi:rx="12"
- sodipodi:cy="552.36218"
- sodipodi:cx="252"
- id="path4400"
- style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="star"
- style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path4459"
- sodipodi:sides="5"
- sodipodi:cx="666.19574"
- sodipodi:cy="589.50385"
- sodipodi:r1="7.2431178"
- sodipodi:r2="4.3458705"
- sodipodi:arg1="1.0471976"
- sodipodi:arg2="1.6755161"
- inkscape:flatsided="false"
- inkscape:rounded="0.1"
- inkscape:randomized="0"
- d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z"
- transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
- </g>
- </g>
- </g>
+<svg xmlns="http://www.w3.org/2000/svg" height="100px" width="100px" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100"><!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
+ <title>spark</title>
+ <desc>Created with Sketch.</desc>
+ <g id="Page-1" fill-rule="evenodd" fill="none">
+ <g id="spark">
+ <g id="sprak">
+ <path id="path4784" fill-rule="nonzero" fill="#E77215" d="m50 1.1369e-13c-27.614-1.69e-15 -50 22.386-50 50-3.3818e-15 27.614 22.386 50 50 50 13.261 0 25.979-5.268 35.355-14.645 9.377-9.376 14.645-22.094 14.645-35.355 0-27.614-22.386-50-50-50z"/>
+ <path id="path3254" fill="#fff" d="m55.063 59.209c3.581 0.948 7.109 1.881 10.96 2.9-2.103-4.015-3.922-7.714-5.971-11.281-0.783-1.364-0.638-2.171 0.351-3.286 3.086-3.484 6.06-7.066 9.545-11.159-4.737 1.235-8.827 2.177-12.832 3.399-2.066 0.631-3.245 0.361-4.316-1.675-1.751-3.328-3.847-6.474-6.123-10.235-0.854 4.748-1.779 8.84-2.26 12.985-0.258 2.23-1.296 3.02-3.246 3.567-4.041 1.136-8.021 2.493-12.759 3.991 4.239 1.713 7.803 3.152 11.873 4.796-2.768 1.793-5.198 3.388-7.658 4.933-0.311 0.195-0.865 0.306-1.167 0.162-3.724-1.776-7.856-2.799-11.135-5.376-3.742-2.941-3.154-7.185 1.339-8.977 4.516-1.801 9.219-3.148 13.888-4.532 1.866-0.555 2.76-1.465 3.021-3.456 0.493-3.785 1.237-7.539 1.977-11.287 0.243-1.229 0.639-2.481 1.233-3.578 2.233-4.129 6.154-4.408 8.804-0.518 2.207 3.24 4.201 6.637 6.097 10.071 0.953 1.727 1.981 2.052 3.824 1.516 4.582-1.335 9.224-2.466 13.847-3.659 2.142-0.553 4.41-0.799 5.781 1.287 1.5 2.281 0.056 4.269-1.399 6.012-3.268 3.914-6.557 7.814-9.935 11.632-1.12 1.267-1.438 2.194-0.468 3.823 2.11 3.546 3.905 7.281 5.815 10.945 1.165 2.231 1.485 4.472-0.329 6.521-1.732 1.956-3.941 2.362-6.39 1.642-1.833-0.54-3.658-1.109-5.486-1.664-6.698-2.032-6.698-2.031-6.881-9.499z"/>
+ </g>
</g>
+ </g>
</svg>
diff --git a/bigtop-packages/src/charm/spark/layer-spark/layer.yaml b/bigtop-packages/src/charm/spark/layer-spark/layer.yaml
index 11fc1355..4ee763d3 100644
--- a/bigtop-packages/src/charm/spark/layer-spark/layer.yaml
+++ b/bigtop-packages/src/charm/spark/layer-spark/layer.yaml
@@ -21,12 +21,15 @@ options:
path: '/var/log/spark/apps'
ports:
# Ports that need to be exposed, overridden, or manually specified.
- # Only expose ports serving a UI or external API (i.e., namenode and
- # resourcemanager). Communication among units within the cluster does
- # not need ports to be explicitly opened.
- spark-history:
+ # Only expose ports serving a UI or external API (e.g. spark history
+ # server). IPC among units within a deployment does not typically
+ # require a port to be exposed.
+ spark-history-ui:
port: 18080
exposed_on: 'spark'
- spark-webui:
+ spark-master-ui:
port: 8080
exposed_on: 'spark'
+ spark-worker-ui:
+ port: 8081
+ exposed_on: 'spark'
diff --git a/bigtop-packages/src/charm/spark/layer-spark/lib/charms/layer/bigtop_spark.py b/bigtop-packages/src/charm/spark/layer-spark/lib/charms/layer/bigtop_spark.py
index dc2e3730..91fcbf79 100755..100644
--- a/bigtop-packages/src/charm/spark/layer-spark/lib/charms/layer/bigtop_spark.py
+++ b/bigtop-packages/src/charm/spark/layer-spark/lib/charms/layer/bigtop_spark.py
@@ -13,11 +13,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import os
+import time
from jujubigdata import utils
from path import Path
from charms.layer.apache_bigtop_base import Bigtop
-from charms.reactive import is_state
from charms import layer
from charmhelpers.core import hookenv, host, unitdata
from charmhelpers.fetch.archiveurl import ArchiveUrlFetchHandler
@@ -36,7 +36,7 @@ class Spark(object):
mode = hookenv.config()['spark_execution_mode']
zk_units = unitdata.kv().get('zookeeper.units', [])
master = None
- if mode.startswith('local') or mode == 'yarn-cluster':
+ if mode.startswith('local') or mode.startswith('yarn'):
master = mode
elif mode == 'standalone' and not zk_units:
master = 'spark://{}:7077'.format(spark_master_host)
@@ -47,18 +47,8 @@ class Spark(object):
nodes.append('{}:7077'.format(ip))
nodes_str = ','.join(nodes)
master = 'spark://{}'.format(nodes_str)
- elif mode.startswith('yarn'):
- master = 'yarn-client'
return master
- def get_roles(self):
- roles = ['spark-worker', 'spark-client']
- zk_units = unitdata.kv().get('zookeeper.units', [])
- if is_state('leadership.is_leader') or zk_units:
- roles.append('spark-master')
- roles.append('spark-history-server')
- return roles
-
def install_benchmark(self):
"""
Install and configure SparkBench.
@@ -155,10 +145,10 @@ class Spark(object):
self.dist_config.add_users()
self.dist_config.add_dirs()
self.install_demo()
- self.open_ports()
def setup_hdfs_logs(self):
- # create hdfs storage space for history server
+ # Create hdfs storage space for history server and return the name
+ # of the created directory.
dc = self.dist_config
events_dir = dc.path('spark_events')
events_dir = 'hdfs://{}'.format(events_dir)
@@ -168,49 +158,94 @@ class Spark(object):
events_dir)
return events_dir
- def configure(self, available_hosts, zk_units, peers):
+ def configure(self, available_hosts, zk_units, peers, extra_libs):
"""
This is the core logic of setting up spark.
- Two flags are needed:
-
- * Namenode exists aka HDFS is there
- * Resource manager exists aka YARN is ready
-
- both flags are infered from the available hosts.
-
:param dict available_hosts: Hosts that Spark should know about.
+ :param list zk_units: List of Zookeeper dicts with host/port info.
+ :param list peers: List of Spark peer tuples (unit name, IP).
+ :param list extra_libs: List of extra lib paths for driver/executors.
"""
- unitdata.kv().set('zookeeper.units', zk_units)
- unitdata.kv().set('sparkpeer.units', peers)
- unitdata.kv().flush(True)
-
+ # Bootstrap spark
if not unitdata.kv().get('spark.bootstrapped', False):
self.setup()
unitdata.kv().set('spark.bootstrapped', True)
+ # Set KV based on connected applications
+ unitdata.kv().set('zookeeper.units', zk_units)
+ unitdata.kv().set('sparkpeer.units', peers)
+ unitdata.kv().flush(True)
+
+ # Get our config ready
+ dc = self.dist_config
+ events_log_dir = 'file://{}'.format(dc.path('spark_events'))
+ mode = hookenv.config()['spark_execution_mode']
master_ip = utils.resolve_private_address(available_hosts['spark-master'])
+ master_url = self.get_master_url(master_ip)
+ req_driver_mem = hookenv.config()['driver_memory']
+ req_executor_mem = hookenv.config()['executor_memory']
+
+ # handle tuning options that may be set as percentages
+ driver_mem = '1g'
+ executor_mem = '1g'
+ if req_driver_mem.endswith('%'):
+ if mode == 'standalone' or mode.startswith('local'):
+ mem_mb = host.get_total_ram() / 1024 / 1024
+ req_percentage = float(req_driver_mem.strip('%')) / 100
+ driver_mem = str(int(mem_mb * req_percentage)) + 'm'
+ else:
+ hookenv.log("driver_memory percentage in non-local mode. Using 1g default.",
+ level=None)
+ else:
+ driver_mem = req_driver_mem
+
+ if req_executor_mem.endswith('%'):
+ if mode == 'standalone' or mode.startswith('local'):
+ mem_mb = host.get_total_ram() / 1024 / 1024
+ req_percentage = float(req_executor_mem.strip('%')) / 100
+ executor_mem = str(int(mem_mb * req_percentage)) + 'm'
+ else:
+ hookenv.log("executor_memory percentage in non-local mode. Using 1g default.",
+ level=None)
+ else:
+ executor_mem = req_executor_mem
+
+ # Setup hosts dict
hosts = {
'spark': master_ip,
}
-
- dc = self.dist_config
- events_log_dir = 'file://{}'.format(dc.path('spark_events'))
if 'namenode' in available_hosts:
hosts['namenode'] = available_hosts['namenode']
events_log_dir = self.setup_hdfs_logs()
-
+ else:
+ # Bigtop includes a default hadoop_head_node if we do not specify
+ # any namenode info. To ensure spark standalone doesn't get
+ # invalid hadoop config, set our NN to an empty string.
+ hosts['namenode'] = ''
if 'resourcemanager' in available_hosts:
hosts['resourcemanager'] = available_hosts['resourcemanager']
- roles = self.get_roles()
+ # Setup roles dict. We always include the history server and client.
+ # Determine other roles based on our execution mode.
+ roles = ['spark-history-server', 'spark-client']
+ if mode == 'standalone':
+ roles.append('spark-master')
+ roles.append('spark-worker')
+ elif mode.startswith('yarn'):
+ roles.append('spark-on-yarn')
+ roles.append('spark-yarn-slave')
+ # Setup overrides dict
override = {
- 'spark::common::master_url': self.get_master_url(master_ip),
+ 'spark::common::master_url': master_url,
'spark::common::event_log_dir': events_log_dir,
'spark::common::history_log_dir': events_log_dir,
+ 'spark::common::extra_lib_dirs':
+ ':'.join(extra_libs) if extra_libs else None,
+ 'spark::common::driver_mem': driver_mem,
+ 'spark::common::executor_mem': executor_mem,
}
-
if zk_units:
zks = []
for unit in zk_units:
@@ -220,18 +255,14 @@ class Spark(object):
zk_connect = ",".join(zks)
override['spark::common::zookeeper_connection_string'] = zk_connect
else:
- override['spark::common::zookeeper_connection_string'] = ""
+ override['spark::common::zookeeper_connection_string'] = None
+ # Create our site.yaml and trigger puppet
bigtop = Bigtop()
bigtop.render_site_yaml(hosts, roles, override)
bigtop.trigger_puppet()
- # There is a race condition here.
- # The work role will not start the first time we trigger puppet apply.
- # The exception in /var/logs/spark:
- # Exception in thread "main" org.apache.spark.SparkException: Invalid master URL: spark://:7077
- # The master url is not set at the time the worker start the first time.
- # TODO(kjackal): ...do the needed... (investiate,debug,submit patch)
- bigtop.trigger_puppet()
+
+ # Do this after our puppet bits in case puppet overrides needed perms
if 'namenode' not in available_hosts:
# Local event dir (not in HDFS) needs to be 777 so non-spark
# users can write job history there. It needs to be g+s so
@@ -239,22 +270,21 @@ class Spark(object):
# It needs to be +t so users cannot remove files they don't own.
dc.path('spark_events').chmod(0o3777)
- self.patch_worker_master_url(master_ip)
+ self.patch_worker_master_url(master_ip, master_url)
+ # Install SB (subsequent calls will reconfigure existing install)
# SparkBench looks for the spark master in /etc/environment
with utils.environment_edit_in_place('/etc/environment') as env:
- env['MASTER'] = self.get_master_url(master_ip)
- # Install SB (subsequent calls will reconfigure existing install)
+ env['MASTER'] = master_url
self.install_benchmark()
- def patch_worker_master_url(self, master_ip):
+ def patch_worker_master_url(self, master_ip, master_url):
'''
Patch the worker startup script to use the full master url istead of contracting it.
The master url is placed in the spark-env.sh so that the startup script will use it.
In HA mode the master_ip is set to be the local_ip instead of the one the leader
elects. This requires a restart of the master service.
'''
- master_url = self.get_master_url(master_ip)
zk_units = unitdata.kv().get('zookeeper.units', [])
if master_url.startswith('spark://'):
if zk_units:
@@ -268,8 +298,6 @@ class Spark(object):
self.inplace_change('/etc/init.d/spark-worker',
'spark://$SPARK_MASTER_IP:$SPARK_MASTER_PORT',
'$SPARK_MASTER_URL')
- host.service_restart('spark-master')
- host.service_restart('spark-worker')
def inplace_change(self, filename, old_string, new_string):
# Safely read the input filename using 'with'
@@ -294,32 +322,50 @@ class Spark(object):
Path(demo_target).chown('ubuntu', 'hadoop')
def start(self):
- if unitdata.kv().get('spark.uprading', False):
- return
-
- # stop services (if they're running) to pick up any config change
- self.stop()
- # always start the history server, start master/worker if we're standalone
+ '''
+ Always start the Spark History Server. Start other services as
+ required by our execution mode. Open related ports as appropriate.
+ '''
host.service_start('spark-history-server')
+ hookenv.open_port(self.dist_config.port('spark-history-ui'))
+
+ # Spark master/worker is only started in standalone mode
if hookenv.config()['spark_execution_mode'] == 'standalone':
- host.service_start('spark-master')
- host.service_start('spark-worker')
+ if host.service_start('spark-master'):
+ hookenv.log("Spark Master started")
+ hookenv.open_port(self.dist_config.port('spark-master-ui'))
+ # If the master started and we have peers, wait 2m for recovery
+ # before starting the worker. This ensures the worker binds
+ # to the correct master.
+ if unitdata.kv().get('sparkpeer.units'):
+ hookenv.status_set('maintenance',
+ 'waiting for spark master recovery')
+ hookenv.log("Waiting 2m to ensure spark master is ALIVE")
+ time.sleep(120)
+ else:
+ hookenv.log("Spark Master did not start; this is normal "
+ "for non-leader units in standalone mode")
+
+ # NB: Start the worker even if the master process on this unit
+ # fails to start. In non-HA mode, spark master only runs on the
+ # leader. On non-leader units, we still want a worker bound to
+ # the leader.
+ if host.service_start('spark-worker'):
+ hookenv.log("Spark Worker started")
+ hookenv.open_port(self.dist_config.port('spark-worker-ui'))
+ else:
+ hookenv.log("Spark Worker did not start")
def stop(self):
- if not unitdata.kv().get('spark.installed', False):
- return
- # Only stop services if they're running
- if utils.jps("HistoryServer"):
- host.service_stop('spark-history-server')
- if utils.jps("Master"):
- host.service_stop('spark-master')
- if utils.jps("Worker"):
- host.service_stop('spark-worker')
-
- def open_ports(self):
- for port in self.dist_config.exposed_ports('spark'):
- hookenv.open_port(port)
-
- def close_ports(self):
- for port in self.dist_config.exposed_ports('spark'):
- hookenv.close_port(port)
+ '''
+ Stop all services (and close associated ports). Stopping a service
+ that is not currently running does no harm.
+ '''
+ host.service_stop('spark-history-server')
+ hookenv.close_port(self.dist_config.port('spark-history-ui'))
+
+ # Stop the worker before the master
+ host.service_stop('spark-worker')
+ hookenv.close_port(self.dist_config.port('spark-worker-ui'))
+ host.service_stop('spark-master')
+ hookenv.close_port(self.dist_config.port('spark-master-ui'))
diff --git a/bigtop-packages/src/charm/spark/layer-spark/metadata.yaml b/bigtop-packages/src/charm/spark/layer-spark/metadata.yaml
index efec6f0e..06664290 100644
--- a/bigtop-packages/src/charm/spark/layer-spark/metadata.yaml
+++ b/bigtop-packages/src/charm/spark/layer-spark/metadata.yaml
@@ -1,11 +1,11 @@
name: spark
-summary: Apache Spark from Apache Bigtop platform
+summary: Spark from Apache Bigtop
maintainer: Juju Big Data <bigdata@lists.ubuntu.com>
description: >
Apache Spark is a fast and general engine for large-scale data processing.
- Learn more at http://spark.apache.org.
-tags: ["applications"]
+ This charm provides version 2.1.0 of the Spark application from Apache Bigtop.
+tags: ["analytics"]
provides:
benchmark:
interface: benchmark
diff --git a/bigtop-packages/src/charm/spark/layer-spark/reactive/spark.py b/bigtop-packages/src/charm/spark/layer-spark/reactive/spark.py
index 99b21015..fc74fa10 100644
--- a/bigtop-packages/src/charm/spark/layer-spark/reactive/spark.py
+++ b/bigtop-packages/src/charm/spark/layer-spark/reactive/spark.py
@@ -12,6 +12,8 @@
# 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.
+import time
+
from charms.reactive import RelationBase, when, when_not, is_state, set_state, remove_state, when_any
from charms.layer.apache_bigtop_base import get_fqdn, get_package_version
from charms.layer.bigtop_spark import Spark
@@ -21,18 +23,9 @@ from charms.reactive.helpers import data_changed
from jujubigdata import utils
-def set_deployment_mode_state(state):
- if is_state('spark.yarn.installed'):
- remove_state('spark.yarn.installed')
- if is_state('spark.standalone.installed'):
- remove_state('spark.standalone.installed')
- set_state('spark.started')
- set_state(state)
- # set app version string for juju status output
- spark_version = get_package_version('spark-core') or 'unknown'
- hookenv.application_version_set(spark_version)
-
-
+###############################################################################
+# Status methods
+###############################################################################
def report_status():
mode = hookenv.config()['spark_execution_mode']
if (not is_state('spark.yarn.installed')) and mode.startswith('yarn'):
@@ -45,71 +38,130 @@ def report_status():
elif mode == 'standalone' and is_state('leadership.is_leader'):
mode = mode + " - master"
- hookenv.status_set('active', 'ready ({})'.format(mode))
+ if is_state('spark.cuda.configured'):
+ mode = mode + " with CUDA"
+ if is_state('spark.started'):
+ hookenv.status_set('active', 'ready ({})'.format(mode))
+ else:
+ hookenv.status_set('blocked', 'unable to start spark ({})'.format(mode))
+
+
+###############################################################################
+# Utility methods
+###############################################################################
+def get_spark_peers():
+ nodes = [(hookenv.local_unit(), hookenv.unit_private_ip())]
+ sparkpeer = RelationBase.from_state('sparkpeers.joined')
+ if sparkpeer:
+ nodes.extend(sorted(sparkpeer.get_nodes()))
+ return nodes
-def install_spark(hadoop=None, zks=None):
- spark_master_host = leadership.leader_get('master-fqdn')
- if not spark_master_host:
- hookenv.status_set('waiting', 'master not elected yet')
- return False
+def install_spark_standalone(zks, peers):
+ """
+ Called in local/standalone mode after Juju has elected a leader.
+ """
hosts = {
- 'spark-master': spark_master_host,
+ 'spark-master': leadership.leader_get('master-fqdn'),
}
- if is_state('hadoop.yarn.ready'):
- rms = hadoop.resourcemanagers()
- hosts['resourcemanager'] = rms[0]
-
- if is_state('hadoop.hdfs.ready'):
- nns = hadoop.namenodes()
- hosts['namenode'] = nns[0]
+ # If zks have changed and we are not handling a departed spark peer,
+ # give the ensemble time to settle. Otherwise we might try to start
+ # spark master with data from the wrong zk leader. Doing so will cause
+ # spark-master to shutdown:
+ # https://issues.apache.org/jira/browse/SPARK-15544
+ if (zks and data_changed('zks', zks) and not is_state('sparkpeers.departed')):
+ hookenv.status_set('maintenance',
+ 'waiting for zookeeper ensemble to settle')
+ hookenv.log("Waiting 2m to ensure zk ensemble has settled: {}".format(zks))
+ time.sleep(120)
+
+ # Let spark know if we have cuda libs installed.
+ # NB: spark packages prereq hadoop (boo), so even in standalone mode, we'll
+ # have hadoop libs installed. May as well include them in our lib path.
+ extra_libs = ["/usr/lib/hadoop/lib/native"]
+ if is_state('cuda.installed'):
+ extra_libs.append("/usr/local/cuda/lib64")
spark = Spark()
- spark.configure(hosts, zks, get_spark_peers())
- return True
+ spark.configure(hosts, zk_units=zks, peers=peers, extra_libs=extra_libs)
+ set_deployment_mode_state('spark.standalone.installed')
-@when('config.changed', 'spark.started')
-def reconfigure_spark():
- config = hookenv.config()
- mode = config['spark_execution_mode']
- hookenv.status_set('maintenance',
- 'changing default execution mode to {}'.format(mode))
-
+def install_spark_yarn():
+ """
+ Called in 'yarn-*' mode after Juju has elected a leader. The
+ 'hadoop.yarn.ready' state must be set.
+ """
+ hosts = {
+ 'spark-master': leadership.leader_get('master-fqdn'),
+ }
hadoop = (RelationBase.from_state('hadoop.yarn.ready') or
RelationBase.from_state('hadoop.hdfs.ready'))
+ rms = hadoop.resourcemanagers()
+ hosts['resourcemanager'] = rms[0]
- zks = None
- if is_state('zookeeper.ready'):
- zk = RelationBase.from_state('zookeeper.ready')
- zks = zk.zookeepers()
+ # Probably don't need to check this since yarn.ready implies hdfs.ready
+ # for us, but it doesn't hurt.
+ if is_state('hadoop.hdfs.ready'):
+ nns = hadoop.namenodes()
+ hosts['namenode'] = nns[0]
- if install_spark(hadoop, zks):
- report_status()
+ # Always include native hadoop libs in yarn mode; add cuda libs if present.
+ extra_libs = ["/usr/lib/hadoop/lib/native"]
+ if is_state('cuda.installed'):
+ extra_libs.append("/usr/local/cuda/lib64")
+
+ spark = Spark()
+ spark.configure(hosts, zk_units=None, peers=None, extra_libs=extra_libs)
+ set_deployment_mode_state('spark.yarn.installed')
+
+
+def set_deployment_mode_state(state):
+ if is_state('spark.yarn.installed'):
+ remove_state('spark.standalone.installed')
+ if is_state('spark.standalone.installed'):
+ remove_state('spark.yarn.installed')
+ set_state(state)
+ # set app version string for juju status output
+ spark_version = get_package_version('spark-core') or 'unknown'
+ hookenv.application_version_set(spark_version)
-# This is a triky call. We want to fire when the leader changes, yarn and hdfs become ready or
-# depart. In the future this should fire when Cassandra or any other storage
-# becomes ready or departs. Since hdfs and yarn do not have a departed state we make sure
-# we fire this method always ('spark.started'). We then build a deployment-matrix
-# and if anything has changed we re-install.
-# 'hadoop.yarn.ready', 'hadoop.hdfs.ready' can be ommited but I like them here for clarity
-@when_any('hadoop.yarn.ready',
- 'hadoop.hdfs.ready', 'master.elected', 'sparkpeers.joined', 'zookeeper.ready')
+###############################################################################
+# Reactive methods
+###############################################################################
+@when_any('config.changed', 'master.elected',
+ 'hadoop.hdfs.ready', 'hadoop.yarn.ready',
+ 'sparkpeers.joined', 'sparkpeers.departed',
+ 'zookeeper.ready')
@when('bigtop.available', 'master.elected')
def reinstall_spark():
+ """
+ This is tricky. We want to fire on config or leadership changes, or when
+ hadoop, sparkpeers, or zookeepers come and go. In the future this should
+ fire when Cassandra or any other storage comes or goes. We always fire
+ this method (or rather, when bigtop is ready and juju has elected a
+ master). We then build a deployment-matrix and (re)install as things
+ change.
+ """
spark_master_host = leadership.leader_get('master-fqdn')
- peers = []
- zks = []
- if is_state('zookeeper.ready'):
- # if ZK is availuable we are in HA. We do not want reconfigurations if a leader fails
- # HA takes care of this
+ if not spark_master_host:
+ hookenv.status_set('maintenance', 'juju leader not elected yet')
+ return
+
+ mode = hookenv.config()['spark_execution_mode']
+ peers = None
+ zks = None
+
+ # If mode is standalone and ZK is ready, we are in HA. Do not consider
+ # the master_host from juju leadership in our matrix. ZK handles this.
+ if (mode == 'standalone' and is_state('zookeeper.ready')):
spark_master_host = ''
zk = RelationBase.from_state('zookeeper.ready')
zks = zk.zookeepers()
- # We need reconfigure Spark when in HA and peers change ignore otherwise
+ # peers are only used to set our MASTER_URL in standalone HA mode
peers = get_spark_peers()
deployment_matrix = {
@@ -120,34 +172,40 @@ def reinstall_spark():
'peers': peers,
}
- if not data_changed('deployment_matrix', deployment_matrix):
+ # If neither config nor our matrix is changing, there is nothing to do.
+ if not (is_state('config.changed') or
+ data_changed('deployment_matrix', deployment_matrix)):
+ report_status()
return
- hookenv.status_set('maintenance', 'configuring spark')
- hadoop = (RelationBase.from_state('hadoop.yarn.ready') or
- RelationBase.from_state('hadoop.hdfs.ready'))
- if install_spark(hadoop, zks):
- if is_state('hadoop.yarn.ready'):
- set_deployment_mode_state('spark.yarn.installed')
- else:
- set_deployment_mode_state('spark.standalone.installed')
-
+ # (Re)install based on our execution mode
+ hookenv.status_set('maintenance', 'configuring spark in {} mode'.format(mode))
+ hookenv.log("Configuring spark with deployment matrix: {}".format(deployment_matrix))
+
+ if mode.startswith('yarn') and is_state('hadoop.yarn.ready'):
+ install_spark_yarn()
+ elif mode.startswith('local') or mode == 'standalone':
+ install_spark_standalone(zks, peers)
+ else:
+ # Something's wrong (probably requested yarn without yarn.ready).
+ remove_state('spark.started')
report_status()
+ return
+ # restart services to pick up possible config changes
+ spark = Spark()
+ spark.stop()
+ spark.start()
-def get_spark_peers():
- nodes = [(hookenv.local_unit(), hookenv.unit_private_ip())]
- sparkpeer = RelationBase.from_state('sparkpeers.joined')
- if sparkpeer:
- nodes.extend(sorted(sparkpeer.get_nodes()))
- return nodes
+ set_state('spark.started')
+ report_status()
-@when('leadership.is_leader', 'bigtop.available')
+@when('bigtop.available', 'leadership.is_leader')
def send_fqdn():
spark_master_host = get_fqdn()
leadership.leader_set({'master-fqdn': spark_master_host})
- hookenv.log("Setting leader to {}".format(spark_master_host))
+ hookenv.log("Setting juju leader to {}".format(spark_master_host))
@when('leadership.changed.master-fqdn')
@@ -155,6 +213,47 @@ def leader_elected():
set_state("master.elected")
+@when('spark.started', 'cuda.installed')
+@when_not('spark.cuda.configured')
+def configure_cuda():
+ """
+ Ensure cuda bits are configured.
+
+ We can't be sure that the config.changed handler in the nvidia-cuda
+ layer will fire before the handler in this layer. We might call
+ reinstall_spark on config-changed before the cuda.installed state is set,
+ thereby missing the cuda lib path configuration. Deal with this by
+ excplicitly calling reinstall_spark after we *know* cuda.installed is set.
+ This may result in 2 calls to reinstall_spark when cuda-related config
+ changes, but it ensures our spark lib config is accurate.
+ """
+ hookenv.log("Configuring spark with CUDA library paths")
+ reinstall_spark()
+ set_state('spark.cuda.configured')
+ report_status()
+
+
+@when('spark.started', 'spark.cuda.configured')
+@when_not('cuda.installed')
+def unconfigure_cuda():
+ """
+ Ensure cuda bits are unconfigured.
+
+ Similar to the configure_cuda method, we can't be sure that the
+ config.changed handler in the nvidia-cuda layer will fire before the
+ handler in this layer. We might call reinstall_spark on config-changed
+ before the cuda.installed state is removed, thereby configuring spark with
+ a cuda lib path when the user wanted cuda config removed. Deal with this by
+ excplicitly calling reinstall_spark after we *know* cuda.installed is gone.
+ This may result in 2 calls to reinstall_spark when cuda-related config
+ changes, but it ensures our spark lib config is accurate.
+ """
+ hookenv.log("Removing CUDA library paths from spark configuration")
+ reinstall_spark()
+ remove_state('spark.cuda.configured')
+ report_status()
+
+
@when('spark.started', 'client.joined')
def client_present(client):
if is_state('leadership.is_leader'):
diff --git a/bigtop-packages/src/charm/spark/layer-spark/scripts/sparkpi.sh b/bigtop-packages/src/charm/spark/layer-spark/scripts/sparkpi.sh
index 3a345496..d003bbe8 100755
--- a/bigtop-packages/src/charm/spark/layer-spark/scripts/sparkpi.sh
+++ b/bigtop-packages/src/charm/spark/layer-spark/scripts/sparkpi.sh
@@ -15,6 +15,9 @@
# limitations under the License.
set -eu
+JAR_PATH=`find /usr/lib/spark -name spark-examples.jar`
+CMD="spark-submit --class org.apache.spark.examples.SparkPi ${JAR_PATH} 10"
+
echo "Running SparkPi"
-spark-submit --class org.apache.spark.examples.SparkPi /usr/lib/spark/lib/spark-examples-*.jar 10
-echo ""
+echo "Command: ${CMD}"
+${CMD} 2>&1 | grep "Pi is"
diff --git a/bigtop-packages/src/charm/spark/layer-spark/tests/01-basic-deployment.py b/bigtop-packages/src/charm/spark/layer-spark/tests/01-basic-deployment.py
index f387c7bd..d6bcde00 100755
--- a/bigtop-packages/src/charm/spark/layer-spark/tests/01-basic-deployment.py
+++ b/bigtop-packages/src/charm/spark/layer-spark/tests/01-basic-deployment.py
@@ -26,7 +26,7 @@ class TestDeploy(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('spark', 'cs:xenial/spark')
+ cls.d.add('spark')
cls.d.setup(timeout=1800)
cls.d.sentry.wait(timeout=1800)
cls.unit = cls.d.sentry['spark'][0]
diff --git a/bigtop-packages/src/charm/spark/layer-spark/tests/02-smoke-test.py b/bigtop-packages/src/charm/spark/layer-spark/tests/02-smoke-test.py
index 4f81cc7e..8f49e5fd 100755
--- a/bigtop-packages/src/charm/spark/layer-spark/tests/02-smoke-test.py
+++ b/bigtop-packages/src/charm/spark/layer-spark/tests/02-smoke-test.py
@@ -27,7 +27,7 @@ class TestDeploy(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('spark', 'cs:xenial/spark')
+ cls.d.add('spark')
cls.d.setup(timeout=1800)
cls.d.sentry.wait_for_messages({'spark': re.compile('ready')}, timeout=1800)
cls.spark = cls.d.sentry['spark'][0]
diff --git a/bigtop-packages/src/charm/spark/layer-spark/tests/03-scale-standalone.py b/bigtop-packages/src/charm/spark/layer-spark/tests/03-scale-standalone.py
index 33479f3d..6b118c2e 100755
--- a/bigtop-packages/src/charm/spark/layer-spark/tests/03-scale-standalone.py
+++ b/bigtop-packages/src/charm/spark/layer-spark/tests/03-scale-standalone.py
@@ -27,7 +27,8 @@ class TestScaleStandalone(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('spark-test-scale', 'cs:xenial/spark', units=3)
+ cls.d.add('spark-test-scale', charm='spark',
+ units=3, constraints={'mem': '7G'})
cls.d.setup(timeout=3600)
cls.d.sentry.wait(timeout=3600)
@@ -35,8 +36,8 @@ class TestScaleStandalone(unittest.TestCase):
def tearDownClass(cls):
# NB: seems to be a remove_service issue with amulet. However, the
# unit does still get removed. Pass OSError for now:
- # OSError: juju command failed ['remove-application', 'zk-test']:
- # ERROR allocation for service ...zk-test... owned by ... not found
+ # OSError: juju command failed ['remove-application', ...]:
+ # ERROR allocation for service ... owned by ... not found
try:
cls.d.remove_service('spark-test-scale')
except OSError as e:
diff --git a/bigtop-packages/src/charm/spark/layer-spark/tests/10-test-ha.py b/bigtop-packages/src/charm/spark/layer-spark/tests/10-test-ha.py
index 99c604f9..998eaf28 100755
--- a/bigtop-packages/src/charm/spark/layer-spark/tests/10-test-ha.py
+++ b/bigtop-packages/src/charm/spark/layer-spark/tests/10-test-ha.py
@@ -28,10 +28,11 @@ class TestDeployment(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('spark-test-ha', 'cs:xenial/spark', units=3)
- cls.d.add('zk-test', 'cs:xenial/zookeeper')
+ cls.d.add('spark-test-ha', charm='spark',
+ units=3, constraints={'mem': '7G'})
+ cls.d.add('spark-test-zk', charm='zookeeper')
- cls.d.relate('zk-test:zookeeper', 'spark-test-ha:zookeeper')
+ cls.d.relate('spark-test-zk:zookeeper', 'spark-test-ha:zookeeper')
cls.d.expose('spark-test-ha')
cls.d.setup(timeout=3600)
@@ -41,10 +42,10 @@ class TestDeployment(unittest.TestCase):
def tearDownClass(cls):
# NB: seems to be a remove_service issue with amulet. However, the
# unit does still get removed. Pass OSError for now:
- # OSError: juju command failed ['remove-application', 'zk-test']:
- # ERROR allocation for service ...zk-test... owned by ... not found
+ # OSError: juju command failed ['remove-application', ...]:
+ # ERROR allocation for service ... owned by ... not found
try:
- cls.d.remove_service('spark-test-ha', 'zk-test')
+ cls.d.remove_service('spark-test-ha', 'spark-test-zk')
except OSError as e:
print("IGNORE: Amulet remove_service failed: {}".format(e))
pass
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/README.md b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/README.md
index c76ad1e5..1003bfe4 100644
--- a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/README.md
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/README.md
@@ -18,52 +18,73 @@
Apache Zeppelin is a web-based notebook that enables interactive data analytics.
It allows for beautiful data-driven, interactive, and collaborative documents
-with SQL, Scala and more.
+with SQL, Scala and more. Learn more at [zeppelin.apache.org][].
-As a Multi-purpose Notebook, Apache Zeppelin is the place for interactive:
-
- * Data Ingestion
- * Data Discovery
- * Data Analytics
- * Data Visualization & Collaboration
-
-This charm deploys the Zeppelin component of the [Apache Bigtop][] platform.
+This charm deploys version 0.7.0 of the Zeppelin component from
+[Apache Bigtop][].
+[zeppelin.apache.org]: http://zeppelin.apache.org/
[Apache Bigtop]: http://bigtop.apache.org/
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-charm.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
+
+Zeppelin can be deployed by itself as a stand-alone web notebook. Deployment
+is simple:
+
+ juju deploy zeppelin
+
+To access the web interface, find the `Public address` of the `zeppelin`
+application and expose it:
-This charm is intended to be deployed via one of the [apache bigtop bundles][].
+ juju status zeppelin
+ juju expose zeppelin
+
+The web interface will be available at the following URL:
+
+ http://ZEPPELIN_PUBLIC_IP:9080
+
+This charm also supports more complex integration scenarios as described below.
+
+## Hadoop Integration
+This charm may be deployed alongside any of the [Apache Bigtop bundles][].
For example:
juju deploy hadoop-processing
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, use [juju-quickstart][] with the following syntax: `juju quickstart
-hadoop-processing`.
-
-This will deploy an Apache Bigtop Hadoop cluster. More information about this
+This will deploy a basic Bigtop Hadoop cluster. More information about this
deployment can be found in the [bundle readme](https://jujucharms.com/hadoop-processing/).
-Now add Zeppelin and relate it to the cluster via the hadoop-plugin:
+Now relate the previously deployed `zeppelin` charm to the Hadoop plugin. This
+enables communication between Zeppelin and Hadoop:
- juju deploy zeppelin
juju add-relation zeppelin plugin
-To access the web console, find the `PUBLIC-ADDRESS` of the
-zeppelin application and expose it:
+Once deployment is complete, Zeppelin notebooks will have access to the
+Hadoop Distributed File System (HDFS). Additionally, the local Spark driver
+will be reconfigured in YARN mode. Any notebooks that submit Spark jobs will
+leverage the Hadoop compute resources deployed by the `hadoop-processing`
+bundle.
- juju status zeppelin
- juju expose zeppelin
+## Spark Integration
+Zeppelin includes a local Spark driver by default. This allows notebooks to
+use a SparkContext without needing external Spark resources. This driver can
+process jobs using local machine resources or compute resources from a Hadoop
+cluster as mentioned above.
-The web interface will be available at the following URL:
+Zeppelin's Spark driver can also use external Spark cluster resources. For
+example, the following will deploy a 3-unit Spark cluster that Zeppelin will
+use when submitting jobs:
- http://ZEPPELIN_PUBLIC_IP:9080
+ juju deploy spark -n 3
+ juju relate zeppelin spark
+
+Once deployment is complete, the local Spark driver will be reconfigured to
+use the external cluster as the Spark Master. Any notebooks that submit Spark
+jobs will leverage the newly deployed `spark` units.
## Network-Restricted Environments
Charms can be deployed in environments with limited network access. To deploy
@@ -72,7 +93,6 @@ mirror options. See [Configuring Models][] for more information.
[getting-started]: https://jujucharms.com/docs/stable/getting-started
[apache bigtop bundles]: https://jujucharms.com/u/bigdata-charmers/#bundles
-[juju-quickstart]: https://launchpad.net/juju-quickstart
[Configuring Models]: https://jujucharms.com/docs/stable/models-config
@@ -99,24 +119,34 @@ application is functioning as expected. Run the action as follows:
juju run-action zeppelin/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do zeppelin/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, the action should settle to `status: completed`. If it
reports `status: failed`, the application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
+
+# Limitations
+
+When related to Spark, Zeppelin requires a `spark://xxx.xxx.xxx.xxx:7077`
+URL for the Spark Master. This is only available when the `spark` charm is
+in `standalone` mode -- `local` and `yarn` modes are not supported.
+
+
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
# Contact Information
@@ -126,9 +156,10 @@ of Juju, the syntax is `juju action fetch <action-id>`.
# Resources
+- [Apache Zeppelin home page](http://zeppelin.apache.org/)
- [Apache Bigtop home page](http://bigtop.apache.org/)
- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/actions/restart b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/actions/restart
index bb37376f..6e822b44 100755
--- a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/actions/restart
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/actions/restart
@@ -18,12 +18,13 @@
import sys
sys.path.append('lib')
-from charmhelpers.core import hookenv
-from charms.reactive import is_state
-from charms.layer.bigtop_zeppelin import Zeppelin
+from charmhelpers.core import hookenv # noqa: E402
+from charms.reactive import is_state # noqa: E402
+from charms.layer.bigtop_zeppelin import Zeppelin # noqa: E402
def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
hookenv.action_fail(msg)
sys.exit()
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/actions/smoke-test b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/actions/smoke-test
index 0339d465..e2e59598 100755
--- a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/actions/smoke-test
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/actions/smoke-test
@@ -16,7 +16,6 @@
# limitations under the License.
import sys
-import json
from time import sleep
from urllib.parse import urljoin
from operator import itemgetter
@@ -28,6 +27,7 @@ from charms.reactive import is_state
def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
hookenv.action_fail(msg)
sys.exit()
@@ -35,23 +35,13 @@ def fail(msg):
if not is_state('zeppelin.installed'):
fail('Zeppelin not yet ready')
-
notebook_id = '2A94M5J1Z'
zep_addr = 'localhost'
base_url = 'http://{}:9080/api/notebook/'.format(zep_addr)
-interp_url = urljoin(base_url, 'interpreter/bind/%s' % notebook_id)
job_url = urljoin(base_url, 'job/%s' % notebook_id)
para_url = urljoin(base_url, '%s/paragraph/' % notebook_id)
try:
- # bind interpreters
- resp = requests.get(interp_url, timeout=60)
- resp.raise_for_status()
- interpreters = resp.json()
- interp_ids = list(map(itemgetter('id'), interpreters['body']))
- resp = requests.put(interp_url, data=json.dumps(interp_ids), timeout=60)
- resp.raise_for_status()
-
# run notebook
resp = requests.post(job_url, timeout=60)
resp.raise_for_status()
@@ -87,7 +77,9 @@ try:
errmsg = para['result']['msg'].splitlines()[0]
else:
errmsg = 'Unable to find error message'
- hookenv.action_set('paragraph', resp.text)
+ hookenv.action_set({'paragraph': resp.text})
fail('Notebook failed: {}'.format(errmsg))
except requests.exceptions.RequestException as e:
fail('Request failed: {}: {}'.format(e.request.url, e))
+
+hookenv.action_set({'outcome': 'success'})
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/icon.svg b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/icon.svg
index 88e23c97..4334f863 100644
--- a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/icon.svg
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/icon.svg
@@ -1,486 +1,20 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="96"
- height="96"
- id="svg6517"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="icon.svg">
- <defs
- id="defs6519">
- <linearGradient
- inkscape:collect="always"
- xlink:href="#Background"
- id="linearGradient6461"
- gradientUnits="userSpaceOnUse"
- x1="0"
- y1="970.29498"
- x2="144"
- y2="970.29498"
- gradientTransform="matrix(0,-0.66666669,0.6660448,0,-832.14561,847.86846)" />
- <linearGradient
- id="Background">
- <stop
- id="stop4178"
- offset="0"
- style="stop-color:#10b1ef;stop-opacity:1;" />
- <stop
- id="stop4180"
- offset="1"
- style="stop-color:#c9c9c9;stop-opacity:1" />
- </linearGradient>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Inner Shadow"
- id="filter1121">
- <feFlood
- flood-opacity="0.59999999999999998"
- flood-color="rgb(0,0,0)"
- result="flood"
- id="feFlood1123" />
- <feComposite
- in="flood"
- in2="SourceGraphic"
- operator="out"
- result="composite1"
- id="feComposite1125" />
- <feGaussianBlur
- in="composite1"
- stdDeviation="1"
- result="blur"
- id="feGaussianBlur1127" />
- <feOffset
- dx="0"
- dy="2"
- result="offset"
- id="feOffset1129" />
- <feComposite
- in="offset"
- in2="SourceGraphic"
- operator="atop"
- result="composite2"
- id="feComposite1131" />
- </filter>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Drop Shadow"
- id="filter950">
- <feFlood
- flood-opacity="0.25"
- flood-color="rgb(0,0,0)"
- result="flood"
- id="feFlood952" />
- <feComposite
- in="flood"
- in2="SourceGraphic"
- operator="in"
- result="composite1"
- id="feComposite954" />
- <feGaussianBlur
- in="composite1"
- stdDeviation="1"
- result="blur"
- id="feGaussianBlur956" />
- <feOffset
- dx="0"
- dy="1"
- result="offset"
- id="feOffset958" />
- <feComposite
- in="SourceGraphic"
- in2="offset"
- operator="over"
- result="composite2"
- id="feComposite960" />
- </filter>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath873">
- <g
- transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
- id="g875"
- inkscape:label="Layer 1"
- style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline">
- <path
- style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
- d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
- id="path877"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssssss" />
- </g>
- </clipPath>
- <filter
- inkscape:collect="always"
- id="filter891"
- inkscape:label="Badge Shadow">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.71999962"
- id="feGaussianBlur893" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#Background"
- id="linearGradient3134"
- x1="5.0652875"
- y1="50.451253"
- x2="90"
- y2="51"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-255.97409,684.13067)" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="4.0745362"
- inkscape:cx="18.514671"
- inkscape:cy="49.018169"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1031"
- inkscape:window-height="1896"
- inkscape:window-x="49"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- showborder="true"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:showpageshadow="false">
- <inkscape:grid
- type="xygrid"
- id="grid821" />
- <sodipodi:guide
- orientation="1,0"
- position="16,48"
- id="guide823" />
- <sodipodi:guide
- orientation="0,1"
- position="64,80"
- id="guide825" />
- <sodipodi:guide
- orientation="1,0"
- position="80,40"
- id="guide827" />
- <sodipodi:guide
- orientation="0,1"
- position="64,16"
- id="guide829" />
- </sodipodi:namedview>
- <metadata
- id="metadata6522">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="BACKGROUND"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(268,-635.29076)"
- style="display:inline">
- <path
- style="color:#000000;fill:#a0a0a0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d=""
- id="path3140"
- inkscape:connector-curvature="0"
- transform="translate(-268,635.29076)" />
- <path
- style="color:#000000;fill:#a1b4bb;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.2454267;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -248.93557,732.01702 c -5.28927,-0.46936 -9.72782,-1.8431 -12.54221,-3.88183 -2.15434,-1.5606 -4.10069,-4.54273 -4.99322,-7.65046 -0.52933,-1.84308 -1.05542,-5.60148 -1.36264,-9.7347 -0.31315,-4.21296 -0.30401,-43.3237 0.0114,-48.89694 0.38986,-6.88808 1.24042,-11.37707 2.71107,-14.30818 2.79041,-5.56148 7.0575,-7.75361 17.14746,-8.80914 4.40117,-0.46042 51.55611,-0.46042 55.95729,0 11.55122,1.20839 16.00758,4.11773 18.27096,11.92817 0.63745,2.1997 1.36317,6.78141 1.36317,8.60612 0,0.59482 0.0847,1.13383 0.18816,1.19779 0.31305,0.19347 0.374,45.16411 0.0672,49.61159 -0.66327,9.61657 -1.91214,13.63748 -5.2599,16.93499 -2.86188,2.81893 -5.73688,3.93245 -12.36882,4.7906 -3.55249,0.45969 -5.16533,0.48373 -30.3102,0.45177 -14.60693,-0.0186 -27.60284,-0.12646 -28.87979,-0.23978 l 0,0 z"
- id="path3172"
- inkscape:connector-curvature="0" />
- <image
- y="656.29077"
- x="-263"
- id="image3188"
- xlink:href="data:image/png;base64,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
-RK5CYII=
-"
- height="55.000042"
- width="83.820099" />
- <path
- style="fill:#a1b4bb;fill-opacity:1"
- d="m 5.0652875,74.182812 c 0,-1.644894 0.059004,-1.933067 0.3712655,-1.813242 0.2041961,0.07836 0.5079117,0.03407 0.6749235,-0.09841 0.1670118,-0.132486 0.7454259,-0.319654 1.2853647,-0.415927 0.5399388,-0.09627 1.3130329,-0.325824 1.7179869,-0.510112 0.7800115,-0.354976 4.1759739,-1.096834 5.0209009,-1.096834 0.27566,0 0.5012,-0.110442 0.5012,-0.245427 0,-0.134985 0.165663,-0.245427 0.36814,-0.245427 0.459824,0 0.477938,0.09776 -0.246454,-1.330085 -0.336896,-0.664053 -0.612539,-1.354316 -0.612539,-1.533917 0,-0.1796 -0.15015,-0.326545 -0.333667,-0.326545 -0.40361,0 -3.339856,1.471741 -3.794761,1.902057 -0.1783727,0.168731 -0.4651897,0.306784 -0.637371,0.306784 -0.1721813,0 -0.5677382,0.220884 -0.8790156,0.490853 -0.3112774,0.269969 -0.7147231,0.490853 -0.8965462,0.490853 -0.1818229,0 -0.5253754,0.193274 -0.7634499,0.429497 -0.2380744,0.236223 -0.7350635,0.565181 -1.1044202,0.731018 l -0.6715576,0.301522 0,-25.028262 0,-25.028263 28.6535675,0.03677 c 15.759463,0.02022 28.322242,0.07368 27.917288,0.118796 -2.510585,0.279686 -4.943318,0.664366 -5.153961,0.81498 -0.134984,0.09652 -0.908078,0.316283 -1.717986,0.488369 -0.809909,0.172085 -1.941942,0.52442 -2.515632,0.782966 -0.573687,0.258546 -1.374392,0.536349 -1.779343,0.617339 -0.404949,0.08099 -0.736273,0.243891 -0.736273,0.362003 0,0.118112 -0.156491,0.214748 -0.347757,0.214748 -0.432162,0 -3.519027,1.622883 -3.998097,2.101953 -0.193772,0.193773 -0.513555,0.352314 -0.710626,0.352314 -0.197072,0 -0.420271,0.161459 -0.495997,0.358798 -0.07572,0.197338 -0.328894,0.419486 -0.562599,0.49366 -0.233703,0.07418 -0.637658,0.326873 -0.897675,0.561553 -0.26002,0.234679 -0.950842,0.751454 -1.535159,1.148389 -0.584317,0.396934 -1.509114,1.142418 -2.055105,1.65663 -0.545989,0.514212 -1.071244,0.934931 -1.167233,0.934931 -0.09599,0 -0.463093,0.303716 -0.815786,0.674924 -0.352695,0.371208 -1.036856,1.006249 -1.520362,1.411203 -2.714291,2.27333 -5.42323,4.745103 -9.988905,9.11438 -4.044712,3.870725 -8.055597,8.556004 -8.055597,9.410075 0,0.137878 -0.09367,0.250688 -0.208153,0.250688 -0.114484,0 -0.402637,0.469379 -0.640339,1.043064 -0.237702,0.573685 -0.6287,1.484831 -0.868884,2.02477 -1.194238,2.684674 -1.505876,7.84213 -0.630268,10.430635 0.251135,0.742416 0.535356,1.405068 0.631601,1.47256 0.09625,0.06749 0.348306,0.46116 0.560133,0.874817 0.556959,1.087625 3.658447,4.032763 4.247547,4.033418 0.148077,1.65e-4 0.523912,0.221184 0.83519,0.491153 0.311277,0.269969 0.687112,0.491533 0.835189,0.492365 0.148077,7.36e-4 0.56227,0.154406 0.920429,0.341276 0.358159,0.186873 1.076032,0.469992 1.595274,0.629156 0.519241,0.159164 1.164959,0.394445 1.434929,0.522845 0.269969,0.1284 0.987842,0.32949 1.595273,0.446863 0.695999,0.134489 -3.320148,0.223353 -10.860132,0.240297 l -11.9645515,0.02689 0,-1.955712 z M 23.618175,44.198096 c 0.797164,-0.694149 1.712944,-1.522464 2.035067,-1.8407 0.322122,-0.318236 0.669243,-0.578611 0.771378,-0.578611 0.102136,0 0.252788,-0.174823 0.334782,-0.388496 0.181106,-0.471955 -1.37429,-2.069686 -2.003086,-2.057606 -1.159466,0.02227 -2.689852,2.471904 -2.920011,4.673949 -0.09356,0.895154 -0.05888,1.453553 0.09028,1.453553 0.133212,0 0.894428,-0.56794 1.691593,-1.262089 l 0,0 z"
- id="path3191"
- inkscape:connector-curvature="0"
- transform="translate(-268,635.29076)" />
- <path
- style="fill:#a1b4bb;fill-opacity:1"
- d="m 40.161307,75.75772 c 4.119556,-0.456634 4.092711,-0.445791 4.069198,-1.643454 l -0.01966,-1.001272 1.595274,-0.356919 c 0.8774,-0.196305 1.650747,-0.444181 1.718549,-0.550836 0.0678,-0.106655 0.5426,-0.272583 1.055106,-0.368729 0.512507,-0.09615 1.064464,-0.301541 1.226571,-0.456432 0.162108,-0.154889 0.929783,-0.478553 1.705945,-0.719248 0.776162,-0.240697 1.411203,-0.533653 1.411203,-0.651014 0,-0.117363 0.338789,-0.287797 0.752864,-0.378742 0.414075,-0.09095 0.809145,-0.312023 0.877933,-0.491283 0.141606,-0.369019 1.820455,-1.100349 2.525972,-1.100349 0.255989,0 0.50985,-0.133248 0.564136,-0.296106 0.07158,-0.214742 1.217678,-0.299041 4.170932,-0.306784 3.978475,-0.01043 4.086855,0.003 4.707569,0.584315 0.349438,0.327245 0.635343,0.741403 0.635343,0.920349 0,0.178948 0.220884,0.32536 0.490854,0.32536 0.269969,0 0.490853,-0.09027 0.490853,-0.200607 0,-0.110334 0.607431,-0.392082 1.349847,-0.626108 0.742416,-0.234025 1.349847,-0.516494 1.349847,-0.627708 0,-0.111214 0.318014,-0.26581 0.706696,-0.343547 0.388685,-0.07774 0.858064,-0.285082 1.043064,-0.460767 0.185002,-0.175685 0.771008,-0.540045 1.302236,-0.809689 0.531229,-0.269644 1.152288,-0.655924 1.380135,-0.858401 0.227847,-0.202477 0.786475,-0.644245 1.241396,-0.981707 1.085222,-0.805019 3.652688,-3.360902 3.652688,-3.63621 0,-0.118426 0.358936,-0.602475 0.797636,-1.075664 1.125913,-1.214429 1.620433,-1.893239 2.199412,-3.019067 0.277675,-0.539939 0.585634,-1.036928 0.684352,-1.104421 0.09872,-0.06749 0.430044,-0.619702 0.73628,-1.227133 0.306236,-0.607431 0.63165,-1.159641 0.72314,-1.227134 0.09149,-0.06749 0.424834,-0.785365 0.740757,-1.595273 0.315923,-0.809908 0.827,-2.04109 1.135724,-2.735959 0.308725,-0.694869 0.700519,-1.937341 0.870654,-2.76105 0.170132,-0.823709 0.39768,-1.497652 0.505658,-1.497652 0.107975,0 0.196321,7.12351 0.196321,15.830022 l 0,15.830023 -25.708447,-0.03398 C 40.77683,76.075113 37.716333,76.028732 40.161307,75.75772 z m 20.689674,-0.510714 c 1.91667,-0.08859 3.709853,-0.243895 3.984852,-0.345129 0.399176,-0.146946 0.563379,-0.561281 0.814338,-2.054827 0.172891,-1.028922 0.47181,-2.172621 0.664269,-2.541551 0.483106,-0.926078 0.450064,-1.110006 -0.321973,-1.792301 -0.644294,-0.569401 -0.821654,-0.595747 -3.90828,-0.580556 -1.910105,0.0094 -3.366499,0.123596 -3.558688,0.279034 -0.178931,0.144717 -0.794129,0.340439 -1.367107,0.434939 -0.572978,0.0945 -1.10507,0.274228 -1.182429,0.399396 -0.07736,0.12517 -0.595613,0.459684 -1.151677,0.743366 -0.556065,0.283683 -1.163725,0.668485 -1.350357,0.855118 -0.186632,0.186632 -0.607713,0.406691 -0.935736,0.48902 -0.328022,0.08233 -0.596405,0.234593 -0.596405,0.33837 0,0.103773 -0.773094,0.389195 -1.717987,0.634268 -0.944892,0.245076 -1.717986,0.519652 -1.717986,0.61017 0,0.09052 -0.690263,0.310644 -1.533917,0.489165 -1.732683,0.366641 -2.252917,0.74165 -2.02501,1.459722 0.132449,0.417311 0.385353,0.496125 1.673408,0.521507 0.834558,0.01644 3.450114,0.106552 5.812346,0.200241 2.362232,0.09369 4.438633,0.136767 4.614225,0.09573 0.175591,-0.04103 1.887443,-0.147091 3.804114,-0.235681 z"
- id="path3193"
- inkscape:connector-curvature="0"
- transform="translate(-268,635.29076)" />
- <path
- style="fill:#a1b4bb;fill-opacity:1"
- d="m 88.428559,34.988646 c -0.08999,-0.08999 -0.163618,-0.386447 -0.163618,-0.658793 0,-0.635276 -0.969876,-2.676072 -1.393673,-2.932542 -0.178373,-0.107946 -0.324314,-0.344751 -0.324314,-0.526234 0,-0.337656 -3.14023,-3.631128 -4.653855,-4.880962 -1.118614,-0.923664 -5.006105,-2.973691 -6.390347,-3.36988 -0.607431,-0.173855 -1.214862,-0.394911 -1.349847,-0.491236 -0.230232,-0.164293 -2.185515,-0.609134 -3.558687,-0.809627 -0.337462,-0.04927 3.610841,-0.104625 8.774005,-0.123008 l 9.387571,-0.03342 0,6.994662 c 0,3.847063 -0.03681,6.994661 -0.08181,6.994661 -0.045,0 -0.155438,-0.07363 -0.245427,-0.163618 z"
- id="path3195"
- inkscape:connector-curvature="0"
- transform="translate(-268,635.29076)" />
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer3"
- inkscape:label="PLACE YOUR PICTOGRAM HERE"
- style="display:inline" />
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="BADGE"
- style="display:none"
- sodipodi:insensitive="true">
- <g
- style="display:inline"
- transform="translate(-340.00001,-581)"
- id="g4394"
- clip-path="none">
- <g
- id="g855">
- <g
- inkscape:groupmode="maskhelper"
- id="g870"
- clip-path="url(#clipPath873)"
- style="opacity:0.6;filter:url(#filter891)">
- <path
- transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
- d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
- sodipodi:ry="12"
- sodipodi:rx="12"
- sodipodi:cy="552.36218"
- sodipodi:cx="252"
- id="path844"
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="100px" height="100px" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
+ <title>zeppelin</title>
+ <desc>Created with Sketch.</desc>
+ <defs>
+ <circle id="path-1" cx="50" cy="50" r="50"></circle>
+ </defs>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="zeppelin">
+ <g id="Group">
+ <mask id="mask-2" fill="white">
+ <use xlink:href="#path-1"></use>
+ </mask>
+ <use id="Oval-Copy" fill="#A1B4BB" transform="translate(50.000000, 50.000000) rotate(-180.000000) translate(-50.000000, -50.000000) " xlink:href="#path-1"></use>
+ </g>
+ <path d="M66.2781964,29.0002328 C59.7530292,28.9749411 52.5197424,31.0139972 48.6216035,33.418427 C47.1645139,34.3171811 45.6693771,35.323441 44.1710415,36.3854683 C44.1710415,36.3854683 30.6506397,46.7960363 26.4497132,52.0352624 C25.8870637,52.7369756 25.374783,53.4934016 24.9284295,54.2902138 C24.8983473,54.347414 24.8662524,54.4051787 24.8367209,54.4628416 C24.7949778,54.5395609 24.7531,54.6174023 24.7126447,54.6948103 C24.7030638,54.7142137 24.6951868,54.7346994 24.6856716,54.7541511 C24.0219192,56.1110337 23.5160919,57.5804092 23.2668864,59.0644529 C23.2647976,59.0769339 23.2635546,59.0897239 23.2615004,59.1022153 C23.2540428,59.1543472 23.2467925,59.2063064 23.2399219,59.2586593 C23.014097,60.9795294 23.1071003,62.8157201 23.8117517,64.3727595 C24.6683501,66.2655515 26.0941809,67.6782964 28.1598165,68.8395053 C30.1518315,69.9593267 33.7971949,70.9110396 33.7971949,70.9110396 L33.7378541,70.9380127 C36.7760043,71.4768843 39.9232448,71.295922 42.9950229,70.9973535 C44.5012476,70.850953 46.008085,70.685175 47.5157149,70.4956538 C47.5167507,70.495678 47.5200824,70.4956296 47.5211009,70.4956538 C47.5313895,70.4958264 47.5640921,70.4954812 47.5750471,70.4956538 C47.4756894,69.9897143 47.3152076,69.0208923 47.5103116,68.9689762 C49.5753551,68.4194827 50.8047606,68.087963 52.4140217,67.5286125 C53.9527832,66.9937665 55.0788986,66.5064415 56.3251216,65.8185178 C56.6365215,65.6466236 56.8830375,65.3601356 57.2098393,65.2197149 C58.2416585,64.77636 59.3904969,64.6724725 60.5005578,64.5022304 C61.3874559,64.3662135 62.2845891,64.2770736 63.1816842,64.2594725 C63.7635661,64.2480618 64.3527364,64.2352942 64.9241467,64.3457864 C65.3618101,64.4304155 65.80449,64.5529934 66.1864879,64.7827507 C66.4419978,64.9364309 66.6789123,65.1444716 66.8446316,65.3923428 C66.9330447,65.5807385 67.0061612,65.779062 67.0766003,65.9749618 C70.3390751,64.7525235 73.6528757,63.2785682 76.1719304,60.8878347 C79.8980717,57.3515047 82.8585945,52.7297702 84.323202,47.8058799 C85.1188404,45.1310113 85.256991,42.1252306 84.5012245,39.4388235 C84.0339848,37.7779968 83.3136657,36.7091144 81.7068111,35.0799701 C78.4197747,31.7473376 73.6311453,29.6863353 68.9809013,29.1512822 C68.1199941,29.0522266 67.2103627,29.0038459 66.2781964,29.0002328 Z M44.1710415,36.3854683 C43.5035,36.8586257 42.8338282,37.343161 42.1696373,37.8366212 L44.1710415,36.3854683 Z M58.2456065,39.530532 C60.3595761,39.5242829 61.5309304,39.8488146 61.5309304,39.8488146 C61.5309304,39.8488146 58.0529935,40.1733878 56.120126,40.5177476 C54.5891551,40.7905048 52.1265618,41.2646617 50.2076219,41.9149543 C46.4659079,43.1829491 42.9064562,44.9558078 39.3914078,46.7593235 C36.6896662,48.1455442 34.1008611,49.7469697 31.5152618,51.3393563 C29.7480877,52.4277008 26.2986638,54.7379673 26.2986638,54.7379673 C26.2986638,54.7379673 29.2382555,50.9393862 37.0555371,46.5489333 C39.2907226,45.2935767 41.5718754,44.1159819 43.9120998,43.0694031 C45.7407829,42.2515924 47.5949459,41.4721207 49.5117159,40.8899764 C50.9679941,40.4476883 52.4707869,40.1413274 53.973067,39.8973662 C55.0676036,39.71962 56.2311533,39.6076829 57.2799694,39.5575051 C57.619632,39.5412609 57.9436113,39.5314245 58.2456065,39.530532 Z M31.4289479,43.155717 C30.7365755,43.159791 30.1428514,43.9724574 29.778194,44.5852915 C29.3109042,45.370598 29.103264,46.7182674 29.0067633,47.7950907 C30.5070651,46.5119116 32.0042475,45.3182452 33.0419394,44.5097668 C32.6410147,43.8362109 32.1387712,43.2538957 31.569208,43.1665063 C31.522217,43.1592904 31.4751069,43.1554408 31.4289479,43.155717 Z M61.6550066,46.5866957 C61.6550066,46.5866957 55.1279146,49.0635498 51.8853489,50.3575354 C48.1499876,51.8481787 44.4264099,53.3760716 40.7292737,54.9591467 C38.1430978,56.0665199 35.5717523,57.2110909 33.0149663,58.3847307 C30.6643567,59.4637291 26.0019596,61.707817 26.0019596,61.707817 C26.0019596,61.707817 29.9721984,58.4529567 37.3360574,55.2342724 C41.6334449,53.355919 44.5312037,51.7102577 49.1556709,50.2010914 C51.3150123,49.4964038 53.4461378,48.7029129 55.6292155,48.0756109 C57.6172963,47.5043405 61.6550066,46.5866957 61.6550066,46.5866957 Z M63.9207473,53.2112897 C63.9207473,53.2112897 63.0045819,54.3022477 60.9591006,55.6550528 C59.9363548,56.331457 59.0396307,57.0406175 58.0352163,57.6618516 C56.7351887,58.4659228 55.400746,59.2140177 54.0270132,59.8844352 C52.3242121,60.7154468 50.5561662,61.4100978 48.7942313,62.1070189 C47.0671017,62.7901712 45.3299562,63.4545986 43.5614494,64.0221092 C41.3794523,64.7223068 39.1762824,65.3701135 36.9368554,65.8562802 C35.3119215,66.2090435 32.0115669,66.6385001 32.0115669,66.6385001 C32.0115669,66.6385001 36.0839961,65.258898 38.1128827,64.5453874 C40.255039,63.7920429 42.2863821,63.0811424 44.5216919,62.2364898 C46.8323641,61.3633605 48.4845732,60.7271889 50.4503798,59.9329868 C52.0577471,59.2835971 53.6761661,58.6558721 55.2461975,57.9207934 C56.4469968,57.3585876 57.6124023,56.7208813 58.7796739,56.092017 C60.5093636,55.1601529 63.9207473,53.2112897 63.9207473,53.2112897 Z M68.6626187,57.4892237 C68.6626187,57.4892237 68.6079923,58.1659163 66.8877885,59.9275922 C66.1932601,60.6388639 64.9695979,61.5567503 64.1904783,62.0368888 C61.1709253,63.8977084 59.5618939,64.3727595 59.5618939,64.3727595 C59.5618939,64.3727595 62.5428835,62.4229866 63.9854827,61.3787451 C64.8349827,60.763824 65.6724504,60.1245761 66.4777974,59.4528656 C67.2298627,58.8255981 68.6626187,57.4892237 68.6626187,57.4892237 Z M22.3498009,63.9357953 C21.3355639,64.3920369 20.1134726,64.9580318 19.3126295,65.3869482 C17.827733,66.1822292 14.9059272,67.5733956 15.0023277,68.0249176 C15.1496829,68.7151062 18.4575364,67.3801405 20.1811634,67.037702 C21.2777974,66.8198302 22.3682738,66.5912001 23.4610927,66.3579799 C23.0201735,65.5869203 22.6368879,64.7750653 22.3498009,63.9357953 Z M62.7824823,65.0416925 C62.3434103,65.0445063 61.8741059,65.0702313 61.3043563,65.133401 C59.5589523,65.3269168 59.0864819,65.482969 57.6899606,65.9371995 C57.1924246,66.099026 56.8988157,66.3592297 56.5085387,66.5737647 C55.8072138,66.9592824 55.1466378,67.4245076 54.4154259,67.749792 C53.3647161,68.2172078 52.2468765,68.5168776 51.1462859,68.8502945 C50.2387726,69.1252217 50.1132411,69.1789711 48.400424,69.5893576 C48.1031157,69.6605924 48.3827297,70.1462809 48.6485766,70.5172323 C52.7121224,70.5995792 65.0028788,70.7960798 65.1669046,70.1126357 L66.0732008,66.3471906 C66.1539562,66.3183341 66.2351948,66.29022 66.3159588,66.2608767 C66.2819165,66.1314662 66.2378809,66.0019539 66.1864879,65.915621 C66.0366676,65.6639416 65.8180258,65.435536 65.5553173,65.3060289 C65.1138405,65.0883952 64.5898943,65.1228379 64.0987697,65.090244 C63.6347202,65.0594472 63.2215544,65.0388873 62.7824823,65.0416925 Z M65.005066,66.0558811 C65.4921217,66.0639774 65.8869716,66.1381193 65.8843891,66.3795583 C65.8788305,66.8992994 64.762018,66.873766 64.2498191,66.924415 C60.9462295,67.2510873 59.7876911,67.1955202 57.555095,67.2049353 C57.1261666,67.2067479 56.2711754,67.1617783 56.2711754,67.1617783 C56.2711754,67.1617783 58.4164442,66.6526107 60.3225354,66.4227153 C61.4308217,66.2890444 62.5117397,66.1508644 63.5754915,66.1152219 C63.9403906,66.1029999 64.5180103,66.0477918 65.005066,66.0558811 Z M62.474989,68.1274154 C62.8721055,68.1198198 63.2695898,68.1322317 63.6618055,68.1867562 C63.9719746,68.2298804 64.3219327,68.245467 64.5627071,68.445698 C64.6701904,68.5350795 64.7949088,68.7264997 64.7515188,68.8179268 C64.6633629,69.0036778 64.3313581,69.0125285 63.6240431,69.0606847 C62.7759535,69.1184253 61.9488918,69.1867152 61.11015,69.2117341 C59.0305453,69.2737662 54.868574,69.2009449 54.868574,69.2009449 C54.868574,69.2009449 56.1665853,68.8561898 56.8268213,68.7370075 C58.2996286,68.4711433 59.7889513,68.2780073 61.2827778,68.1867562 C61.67803,68.1626125 62.0778724,68.1350127 62.474989,68.1274154 Z" id="path3051" fill="#3071A9" fill-rule="nonzero"></path>
</g>
- <g
- id="g862">
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path4398"
- sodipodi:cx="252"
- sodipodi:cy="552.36218"
- sodipodi:rx="12"
- sodipodi:ry="12"
- d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
- transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" />
- <path
- transform="matrix(1.25,0,0,1.25,33,-100.45273)"
- d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
- sodipodi:ry="12"
- sodipodi:rx="12"
- sodipodi:cy="552.36218"
- sodipodi:cx="252"
- id="path4400"
- style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="star"
- style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path4459"
- sodipodi:sides="5"
- sodipodi:cx="666.19574"
- sodipodi:cy="589.50385"
- sodipodi:r1="7.2431178"
- sodipodi:r2="4.3458705"
- sodipodi:arg1="1.0471976"
- sodipodi:arg2="1.6755161"
- inkscape:flatsided="false"
- inkscape:rounded="0.1"
- inkscape:randomized="0"
- d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z"
- transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
- </g>
- </g>
</g>
- </g>
-</svg>
+</svg> \ No newline at end of file
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/layer.yaml b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/layer.yaml
index 19626b4b..39a7ba32 100644
--- a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/layer.yaml
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/layer.yaml
@@ -26,13 +26,9 @@ options:
zeppelin_notebooks:
path: '/var/lib/zeppelin/notebook'
ports:
- # Ports that need to be exposed, overridden, or manually specified.
- # Only expose ports serving a UI or external API (i.e., namenode and
- # resourcemanager). Communication among units within the cluster does
- # not need ports to be explicitly opened.
zeppelin:
port: 9080
exposed_on: 'zeppelin'
- zeppelin_web:
+ zeppelin_websocket:
port: 9081
exposed_on: 'zeppelin'
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/lib/charms/layer/bigtop_zeppelin.py b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/lib/charms/layer/bigtop_zeppelin.py
index b600f4b7..44512d29 100644
--- a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/lib/charms/layer/bigtop_zeppelin.py
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/lib/charms/layer/bigtop_zeppelin.py
@@ -16,16 +16,17 @@
import os
import json
import time
+import requests
import socket
-from urllib.parse import urljoin
-import requests
from path import Path
+from urllib.parse import urljoin
-from jujubigdata import utils
from charmhelpers.core import hookenv, host, unitdata
from charms import layer
from charms.layer.apache_bigtop_base import Bigtop
+from charms.reactive import is_state
+from jujubigdata import utils
class Zeppelin(object):
@@ -43,43 +44,89 @@ class Zeppelin(object):
def install(self):
'''
- Trigger the Bigtop puppet recipe that handles the Zepplin service.
+ Perform initial one-time setup, workaround upstream bugs, and
+ trigger puppet.
'''
# Dirs are handled by the bigtop deb, so no need to call out to
# dist_config to do that work. However, we want to adjust the
# groups for the `ubuntu` user for better interaction with Juju.
self.dist_config.add_users()
+
+ # Set ports based on layer.yaml options
self._add_override('zeppelin::server::server_port',
self.dist_config.port('zeppelin'))
self._add_override('zeppelin::server::web_socket_port',
- self.dist_config.port('zeppelin_web'))
+ self.dist_config.port('zeppelin_websocket'))
+
+ # Default spark to local mode on initial install. This will be
+ # reconfigured if/when hadoop or spark relations are made.
+ local_master = 'local[*]'
+ self._add_override('zeppelin::server::spark_master_url', local_master)
+
+ # The spark-client role expects hdfs by default. Since we want to
+ # keep Hadoop optional, ensure we remove hadoopy bits from our
+ # local spark config. This has no effect if/when a remote spark joins,
+ # and since there is no spark history server running, the event dirs
+ # are not important -- they just need not be 'hdfs:///blah'.
+ events_log_dir = 'file:///tmp'
+ self._add_override('spark::common::master_url', local_master)
+ self._add_override('spark::common::event_log_dir', events_log_dir)
+ self._add_override('spark::common::history_log_dir', events_log_dir)
+
+ ##########
+ # BUG: BIGTOP-2742
+ # Default zeppelin init script looks for the literal '$(hostname)'
+ # string. Symlink it so it exists before the apt install from puppet
+ # tries to start the service.
+ import subprocess
+ host = subprocess.check_output(['hostname']).decode('utf8').strip()
+ zepp_pid = '/var/run/zeppelin/zeppelin-zeppelin-{}.pid'.format(host)
+ utils.run_as('root', 'mkdir', '-p', '/var/run/zeppelin')
+ utils.run_as('root', 'ln', '-sf',
+ zepp_pid,
+ '/var/run/zeppelin/zeppelin-zeppelin-$(hostname).pid')
+ ##########
+
self.trigger_bigtop()
+ ##########
+ # BUG: BIGTOP-2742
+ # Puppet apply will call systemctl daemon-reload, which removes the
+ # symlink we just created. Now that the bits are on disk, update the
+ # init script $(hostname) that caused this mess to begin with.
+ zepp_init_script = '/etc/init.d/zeppelin'
+ utils.re_edit_in_place(zepp_init_script, {
+ r'^# pidfile.*': '# pidfile: {}'.format(zepp_pid),
+ })
+ utils.run_as('root', 'systemctl', 'daemon-reload')
+ self.restart()
+ self.wait_for_api(30)
+ ##########
+
def trigger_bigtop(self):
+ '''
+ Trigger the Bigtop puppet recipe that handles the Zeppelin service.
+ '''
bigtop = Bigtop()
overrides = unitdata.kv().getrange('zeppelin.bigtop.overrides.',
strip=True)
+
+ # The zep deb depends on spark-core, spark-python, and unfortunately,
+ # most of hadoop. Include appropriate roles here to ensure these
+ # packages are configured in the same way as our other Bigtop
+ # software deployed with puppet.
bigtop.render_site_yaml(
roles=[
+ 'spark-client',
+ 'spark-yarn-slave',
'zeppelin-server',
],
overrides=overrides,
)
+
bigtop.trigger_puppet()
self.wait_for_api(30)
- def setup_etc_env(self):
- '''
- Write some niceties to /etc/environment
- '''
- # Configure system-wide bits
- zeppelin_bin = self.dist_config.path('zeppelin') / 'bin'
- zeppelin_conf = self.dist_config.path('zeppelin_conf')
- with utils.environment_edit_in_place('/etc/environment') as env:
- if zeppelin_bin not in env['PATH']:
- env['PATH'] = ':'.join([env['PATH'], zeppelin_bin])
- env['ZEPPELIN_CONF_DIR'] = zeppelin_conf
-
def reconfigure_zeppelin(self):
'''
Configure zeppelin based on current environment
@@ -109,6 +156,12 @@ class Zeppelin(object):
utils.run_as('hdfs', 'hdfs', 'dfs', '-mkdir', '-p', '/user/zeppelin')
utils.run_as('hdfs', 'hdfs', 'dfs', '-chown', 'zeppelin', '/user/zeppelin')
+ # If spark is ready, let it handle the spark_master_url. Otherwise,
+ # zepp is in local mode; set it to yarn-client since hadoop is here.
+ if not is_state('spark.ready'):
+ self._add_override('zeppelin::server::spark_master_url', 'yarn-client')
+ self.trigger_bigtop()
+
def configure_spark(self, master_url):
'''
Configure the zeppelin spark interpreter
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/metadata.yaml b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/metadata.yaml
index f6f4be6b..f07614d5 100644
--- a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/metadata.yaml
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/metadata.yaml
@@ -1,10 +1,13 @@
name: zeppelin
-summary: A web-based notebook that enables interactive data analytics.
+summary: Zeppelin from Apache Bigtop
maintainer: Juju Big Data <bigdata@lists.ubuntu.com>
-description: |
+description: >
Apache Zeppelin is a web-based notebook that enables interactive data
analytics. You can make beautiful data-driven, interactive, and collaborative
documents with SQL, Scala and more.
+
+ This charm provides version 0.7.0 of the Zeppelin application from Apache
+ Bigtop.
tags: ["analytics"]
provides:
client:
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/reactive/zeppelin.py b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/reactive/zeppelin.py
index 6d37fdcc..7c9ca06e 100644
--- a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/reactive/zeppelin.py
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/reactive/zeppelin.py
@@ -27,40 +27,46 @@ from charms.reactive.helpers import data_changed
def update_status():
hadoop_joined = is_state('hadoop.joined')
hadoop_ready = is_state('hadoop.ready')
- hive_joined = is_state('hive.connected')
- hive_ready = is_state('hive.available')
+ hive_joined = is_state('hive.joined')
+ hive_ready = is_state('hive.ready')
spark_joined = is_state('spark.joined')
spark_ready = is_state('spark.ready')
+ spark_blocked = is_state('spark.master.unusable')
- waiting_apps = []
- ready_apps = []
- # Check status of the hadoop plugin
- if hadoop_joined and not hadoop_ready:
- waiting_apps.append('hadoop')
- elif hadoop_ready:
- ready_apps.append('hadoop')
-
- # Check status of Hive
- if hive_joined and not hive_ready:
- waiting_apps.append('hive')
- elif hive_ready:
- ready_apps.append('hive')
-
- # Check status of Spark
- if spark_joined and not spark_ready:
- waiting_apps.append('spark')
- elif spark_ready:
- ready_apps.append('spark')
-
- # Set appropriate status based on the apps we checked above
- if waiting_apps:
- hookenv.status_set('waiting',
- 'waiting for: {}'.format(' & '.join(waiting_apps)))
- elif ready_apps:
- hookenv.status_set('active',
- 'ready with: {}'.format(' & '.join(ready_apps)))
+ # handle blockers first; then report what's ready/waiting
+ if spark_blocked:
+ hookenv.status_set('blocked',
+ 'remote spark must be in standalone mode')
else:
- hookenv.status_set('active', 'ready')
+ waiting_apps = []
+ ready_apps = []
+ # Check status of the hadoop plugin
+ if hadoop_joined and not hadoop_ready:
+ waiting_apps.append('hadoop')
+ elif hadoop_ready:
+ ready_apps.append('hadoop')
+
+ # Check status of Hive
+ if hive_joined and not hive_ready:
+ waiting_apps.append('hive')
+ elif hive_ready:
+ ready_apps.append('hive')
+
+ # Check status of Spark
+ if spark_joined and not spark_ready:
+ waiting_apps.append('spark')
+ elif spark_ready:
+ ready_apps.append('spark')
+
+ # Set appropriate status based on the apps we checked above
+ if waiting_apps:
+ hookenv.status_set('waiting',
+ 'waiting for: {}'.format(' & '.join(waiting_apps)))
+ elif ready_apps:
+ hookenv.status_set('active',
+ 'ready with: {}'.format(' & '.join(ready_apps)))
+ else:
+ hookenv.status_set('active', 'ready')
@when('bigtop.available')
@@ -69,7 +75,6 @@ def initial_setup():
hookenv.status_set('maintenance', 'installing zeppelin')
zeppelin = Zeppelin()
zeppelin.install()
- zeppelin.setup_etc_env()
zeppelin.open_ports()
set_state('zeppelin.installed')
update_status()
@@ -78,8 +83,7 @@ def initial_setup():
hookenv.application_version_set(zeppelin_version)
-@when('zeppelin.installed')
-@when('hadoop.ready')
+@when('zeppelin.installed', 'hadoop.ready')
@when_not('zeppelin.hadoop.configured')
def configure_hadoop(hadoop):
zeppelin = Zeppelin()
@@ -88,9 +92,8 @@ def configure_hadoop(hadoop):
set_state('zeppelin.hadoop.configured')
-@when('zeppelin.installed')
+@when('zeppelin.installed', 'zeppelin.hadoop.configured')
@when_not('hadoop.ready')
-@when('zeppelin.hadoop.configured')
def unconfigure_hadoop():
zeppelin = Zeppelin()
zeppelin.remove_hadoop_notebooks()
@@ -122,24 +125,47 @@ def unconfigure_hive():
@when('zeppelin.installed', 'spark.ready')
def configure_spark(spark):
+ '''
+ Configure Zeppelin to use remote Spark resources.
+ '''
+ # NB: Use the master_url string if it already starts with spark://.
+ # Otherwise, it means the remote spark is in local or yarn mode -- that's
+ # bad because using 'local' or 'yarn' here would cause zepp's spark-submit
+ # to use the builtin spark, hence ignoring the remote spark. In this case,
+ # set a state so we can inform the user that the remote spark is unusable.
master_url = spark.get_master_url()
- if data_changed('spark.master', master_url):
- hookenv.status_set('maintenance', 'configuring spark')
- zeppelin = Zeppelin()
- zeppelin.configure_spark(master_url)
- set_state('zeppelin.spark.configured')
- update_status()
+
+ if master_url.startswith('spark'):
+ remove_state('spark.master.unusable')
+ # Only (re)configure if our master url has changed.
+ if data_changed('spark.master', master_url):
+ hookenv.status_set('maintenance', 'configuring spark')
+ zeppelin = Zeppelin()
+ zeppelin.configure_spark(master_url)
+ set_state('zeppelin.spark.configured')
+ else:
+ remove_state('zeppelin.spark.configured')
+ set_state('spark.master.unusable')
+ update_status()
@when('zeppelin.installed', 'zeppelin.spark.configured')
@when_not('spark.ready')
def unconfigure_spark():
+ '''
+ Remove remote Spark; reconfigure Zeppelin to use embedded Spark.
+ '''
hookenv.status_set('maintenance', 'removing spark relation')
zeppelin = Zeppelin()
- # Yarn / Hadoop may not actually be available, but that is the default
- # value and nothing else would reasonably work here either without Spark.
- zeppelin.configure_spark('yarn-client')
- data_changed('spark.master', 'yarn-client') # ensure updated if re-added
+
+ # Zepp includes the spark-client role, so reconfigure our built-in spark
+ # if our related spark has gone away.
+ if is_state('zeppelin.hadoop.configured'):
+ local_master = 'yarn-client'
+ else:
+ local_master = 'local[*]'
+ zeppelin.configure_spark(local_master)
+ data_changed('spark.master', local_master) # ensure updated if re-added
remove_state('zeppelin.spark.configured')
update_status()
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/01-basic-deployment.py b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/01-basic-deployment.py
index f3314972..f8dcd009 100755
--- a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/01-basic-deployment.py
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/01-basic-deployment.py
@@ -27,7 +27,7 @@ class TestDeploy(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('zeppelin', 'cs:xenial/zeppelin')
+ cls.d.add('zeppelin')
cls.d.setup(timeout=1800)
cls.d.sentry.wait_for_messages({'zeppelin': re.compile('ready')}, timeout=1800)
cls.zeppelin = cls.d.sentry['zeppelin'][0]
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/02-zeppelin-smoke.py b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/02-zeppelin-smoke.py
index 8623cd12..0887cbef 100755
--- a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/02-zeppelin-smoke.py
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/02-zeppelin-smoke.py
@@ -27,13 +27,10 @@ class TestDeploy(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
- cls.d.add('zeppelin', 'cs:xenial/zeppelin')
- cls.d.add('spark', 'cs:xenial/spark')
-
- cls.d.relate('zeppelin:spark', 'spark:client')
+ cls.d.add('zeppelin')
cls.d.setup(timeout=1800)
- cls.d.sentry.wait_for_messages({'zeppelin': re.compile('ready with')}, timeout=1800)
+ cls.d.sentry.wait_for_messages({'zeppelin': re.compile('ready')}, timeout=1800)
cls.zeppelin = cls.d.sentry['zeppelin'][0]
def test_zeppelin(self):
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/03-zeppelin-spark-smoke.py b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/03-zeppelin-spark-smoke.py
new file mode 100755
index 00000000..daddc51b
--- /dev/null
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/tests/03-zeppelin-spark-smoke.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python3
+
+# 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.
+
+import amulet
+import re
+import unittest
+
+
+class TestDeploy(unittest.TestCase):
+ """
+ Smoke test for Apache Bigtop Zeppelin using remote Spark resources.
+ """
+ @classmethod
+ def setUpClass(cls):
+ cls.d = amulet.Deployment(series='xenial')
+ cls.d.add('zeppelin')
+ cls.d.add('spark')
+
+ cls.d.relate('zeppelin:spark', 'spark:client')
+
+ cls.d.setup(timeout=1800)
+ cls.d.sentry.wait_for_messages({'zeppelin': re.compile('ready with')}, timeout=1800)
+ cls.zeppelin = cls.d.sentry['zeppelin'][0]
+
+ def test_zeppelin(self):
+ """
+ Validate Zeppelin by running the smoke-test action.
+ """
+ uuid = self.zeppelin.run_action('smoke-test')
+ result = self.d.action_fetch(uuid, full_output=True)
+ # action status=completed on success
+ if (result['status'] != "completed"):
+ self.fail('Zeppelin smoke-test failed: %s' % result)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/wheelhouse.txt b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/wheelhouse.txt
index d555101f..7369cb8e 100644
--- a/bigtop-packages/src/charm/zeppelin/layer-zeppelin/wheelhouse.txt
+++ b/bigtop-packages/src/charm/zeppelin/layer-zeppelin/wheelhouse.txt
@@ -1 +1 @@
-requests>=2.0.0,<3.0.0
+requests==2.14.2
diff --git a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/README.md b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/README.md
index 9c92d736..a3d12f18 100644
--- a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/README.md
+++ b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/README.md
@@ -20,18 +20,19 @@ Apache ZooKeeper is a high-performance coordination service for distributed
applications. It exposes common services such as naming, configuration
management, synchronization, and group services in a simple interface. Use it
off-the-shelf to implement consensus, group management, leader election, and
-presence protocols.
+presence protocols. Learn more at [zookeeper.apache.org][].
-This charm provides the Zookeeper component of the [Apache Bigtop][] platform.
+This charm provides version 3.4.6 of the Zookeeper component from
+[Apache Bigtop][].
+[zookeeper.apache.org]: http://zookeeper.apache.org/
[Apache Bigtop]: http://bigtop.apache.org/
# Deploying
-A working Juju installation is assumed to be present. If Juju is not yet set
-up, please follow the [getting-started][] instructions prior to deploying this
-charm.
+This charm requires Juju 2.0 or greater. If Juju is not yet set up, please
+follow the [getting-started][] instructions prior to deploying this charm.
Deploy a Zookeeper unit. With only one unit, the application will be running in
`standalone` mode:
@@ -55,9 +56,6 @@ network interface name or a CIDR range specifying a subnet. For example:
juju config zookeeper network_interface=eth0
juju config zookeeper network_interface=10.0.2.0/24
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju set-config zookeeper network_interface=eth0`.
-
Each zookeeper unit in the cluster will lookup the IP address of that
network interface, or find the first network interface with an IP
address in the specified subnet, and bind Zookeeper to that address.
@@ -69,18 +67,11 @@ run "juju resolved" on any failed units:
juju config zookeeper network_interface=eth0
juju resolved zookeeper/0
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju set-config zookeeper network_interface=eth0;
-juju resolved -r zookeeper/0`.
-
To go back to listening on all interfaces, configure zookeeper with
`network_interface=0.0.0.0`:
juju config zookeeper network_interface=0.0.0.0
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju set-config zookeeper network_interface=0.0.0.0`.
-
# Verifying
@@ -105,25 +96,16 @@ application is functioning as expected. Run the action as follows:
juju run-action zookeeper/0 smoke-test
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action do zookeeper/0 smoke-test`.
-
Watch the progress of the smoke test actions with:
watch -n 2 juju show-action-status
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action status`.
-
Eventually, the action should settle to `status: completed`. If it
reports `status: failed`, the application is not working as expected. Get
more information about a specific smoke test with:
juju show-action-output <action-id>
-> **Note**: The above assumes Juju 2.0 or greater. If using an earlier version
-of Juju, the syntax is `juju action fetch <action-id>`.
-
## Utilities
This charm includes Zookeeper command line utilities that can also be used to
verify that the application is running as expected. Check the status of the
@@ -176,6 +158,18 @@ that require Zookeeper as follows:
ZK_port = relation_get('port')
+# Issues
+
+Apache Bigtop tracks issues using JIRA (Apache account required). File an
+issue for this charm at:
+
+https://issues.apache.org/jira/secure/CreateIssue!default.jspa
+
+Ensure `Bigtop` is selected as the project. Typically, charm issues are filed
+in the `deployment` component with the latest stable release selected as the
+affected version. Any uncertain fields may be left blank.
+
+
# Contact Information
- <bigdata@lists.ubuntu.com>
@@ -183,10 +177,10 @@ that require Zookeeper as follows:
# Resources
+- [Apache Zookeeper home page](http://zookeeper.apache.org/)
- [Apache Bigtop home page](http://bigtop.apache.org/)
+- [Apache Bigtop issue tracking](http://bigtop.apache.org/issue-tracking.html)
- [Apache Bigtop mailing lists](http://bigtop.apache.org/mail-lists.html)
-- [Apache Zookeeper home page](https://zookeeper.apache.org/)
-- [Apache Zookeeper issue tracker](https://issues.apache.org/jira/browse/ZOOKEEPER)
-- [Juju Bigtop charms](https://jujucharms.com/q/apache/bigtop)
+- [Juju Big Data](https://jujucharms.com/big-data)
+- [Juju Bigtop charms](https://jujucharms.com/q/bigtop)
- [Juju mailing list](https://lists.ubuntu.com/mailman/listinfo/juju)
-- [Juju community](https://jujucharms.com/community)
diff --git a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/actions/restart b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/actions/restart
index 7bb51364..acbd448b 100755
--- a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/actions/restart
+++ b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/actions/restart
@@ -22,18 +22,15 @@ from charmhelpers.core import hookenv # noqa: E402
from charms.layer.bigtop_zookeeper import Zookeeper # noqa: E402
from charms.reactive import is_state # noqa: E402
-LOG = hookenv.log
-
-LOG("starting restart handler.")
-
def main():
if not is_state('zookeeper.started'):
+ hookenv.action_set({'outcome': 'failure'})
hookenv.action_fail('Cannot restart: Zookeeper has not yet started!')
- return
+ sys.exit()
- LOG("starting restart handler main.")
- hookenv.status_set('maintenance', 'restarting ...')
+ hookenv.log("starting restart handler main.")
+ hookenv.status_set('maintenance', 'restarting zookeeper')
zookeeper = Zookeeper()
zookeeper.install()
hookenv.status_set('active', 'ready {}'.format(zookeeper.quorum_check()))
diff --git a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/actions/smoke-test b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/actions/smoke-test
index 64814629..0f72ca0a 100755
--- a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/actions/smoke-test
+++ b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/actions/smoke-test
@@ -23,12 +23,12 @@ from charms.layer.apache_bigtop_base import Bigtop # noqa: E402
from charms.reactive import is_state # noqa: E402
-def fail(msg, output=None):
- if output:
- hookenv.action_set({'output': output})
+def fail(msg):
+ hookenv.action_set({'outcome': 'failure'})
hookenv.action_fail(msg)
sys.exit()
+
if not is_state('zookeeper.started'):
fail('Charm is not yet ready to run the Bigtop smoke test(s)')
@@ -38,6 +38,6 @@ smoke_components = ['zookeeper']
bigtop = Bigtop()
result = bigtop.run_smoke_tests(smoke_components)
if result == 'success':
- hookenv.action_set({'outcome': result})
+ hookenv.action_set({'outcome': 'success'})
else:
- fail('{} smoke tests failed'.format(smoke_components), result)
+ fail('{} smoke tests failed with: {}'.format(smoke_components, result))
diff --git a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/icon.svg b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/icon.svg
index 4fd8c0ca..0185a7e1 100644
--- a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/icon.svg
+++ b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/icon.svg
@@ -1,639 +1,38 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="96"
- height="96"
- id="svg6517"
- version="1.1"
- inkscape:version="0.91+devel r"
- sodipodi:docname="hw_zoo-keeper.svg">
- <defs
- id="defs6519">
- <linearGradient
- id="linearGradient4265"
- inkscape:collect="always">
- <stop
- id="stop4267"
- offset="0"
- style="stop-color:#ab784f;stop-opacity:1" />
- <stop
- id="stop4269"
- offset="1"
- style="stop-color:#ab784f;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- id="linearGradient4259"
- inkscape:collect="always">
- <stop
- id="stop4261"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1" />
- <stop
- id="stop4263"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0" />
- </linearGradient>
- <inkscape:path-effect
- effect="envelope"
- id="path-effect4253"
- is_visible="true"
- yy="true"
- xx="true"
- bendpath1="m -215.76126,697.1481 139.143385,0"
- bendpath2="m -76.617875,697.1481 0,90.93889"
- bendpath3="m -215.76126,788.08699 139.143385,0"
- bendpath4="m -215.76126,697.1481 0,90.93889" />
- <inkscape:path-effect
- effect="bend_path"
- id="path-effect4251"
- is_visible="true"
- bendpath="m -215.76126,742.61754 139.143385,0"
- prop_scale="1.12"
- scale_y_rel="false"
- vertical="false" />
- <linearGradient
- id="Background">
- <stop
- id="stop4178"
- offset="0"
- style="stop-color:#22779e;stop-opacity:1" />
- <stop
- id="stop4180"
- offset="1"
- style="stop-color:#2991c0;stop-opacity:1" />
- </linearGradient>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Inner Shadow"
- id="filter1121">
- <feFlood
- flood-opacity="0.59999999999999998"
- flood-color="rgb(0,0,0)"
- result="flood"
- id="feFlood1123" />
- <feComposite
- in="flood"
- in2="SourceGraphic"
- operator="out"
- result="composite1"
- id="feComposite1125" />
- <feGaussianBlur
- in="composite1"
- stdDeviation="1"
- result="blur"
- id="feGaussianBlur1127" />
- <feOffset
- dx="0"
- dy="2"
- result="offset"
- id="feOffset1129" />
- <feComposite
- in="offset"
- in2="SourceGraphic"
- operator="atop"
- result="composite2"
- id="feComposite1131" />
- </filter>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Drop Shadow"
- id="filter950">
- <feFlood
- flood-opacity="0.25"
- flood-color="rgb(0,0,0)"
- result="flood"
- id="feFlood952" />
- <feComposite
- in="flood"
- in2="SourceGraphic"
- operator="in"
- result="composite1"
- id="feComposite954" />
- <feGaussianBlur
- in="composite1"
- stdDeviation="1"
- result="blur"
- id="feGaussianBlur956" />
- <feOffset
- dx="0"
- dy="1"
- result="offset"
- id="feOffset958" />
- <feComposite
- in="SourceGraphic"
- in2="offset"
- operator="over"
- result="composite2"
- id="feComposite960" />
- </filter>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath873">
- <g
- transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
- id="g875"
- inkscape:label="Layer 1"
- style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline">
- <path
- style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
- d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
- id="path877"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssssss" />
- </g>
- </clipPath>
- <filter
- inkscape:collect="always"
- id="filter891"
- inkscape:label="Badge Shadow">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.71999962"
- id="feGaussianBlur893" />
- </filter>
- <style
- id="style867"
- type="text/css"><![CDATA[
- .fil0 {fill:#1F1A17}
- ]]></style>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4439"
- id="linearGradient908"
- x1="-220"
- y1="731.29077"
- x2="-220"
- y2="635.29077"
- gradientUnits="userSpaceOnUse" />
- <clipPath
- id="clipPath16">
- <path
- id="path18"
- d="m -9,-9 614,0 0,231 -614,0 0,-231 z" />
- </clipPath>
- <clipPath
- id="clipPath116">
- <path
- id="path118"
- d="m 91.7368,146.3253 -9.7039,-1.577 -8.8548,-3.8814 -7.5206,-4.7308 -7.1566,-8.7335 -4.0431,-4.282 -3.9093,-1.4409 -1.034,2.5271 1.8079,2.6096 0.4062,3.6802 1.211,-0.0488 1.3232,-1.2069 -0.3569,3.7488 -1.4667,0.9839 0.0445,1.4286 -3.4744,-1.9655 -3.1462,-3.712 -0.6559,-3.3176 1.3453,-2.6567 1.2549,-4.5133 2.5521,-1.2084 2.6847,0.1318 2.5455,1.4791 -1.698,-8.6122 1.698,-9.5825 -1.8692,-4.4246 -6.1223,-6.5965 1.0885,-3.941 2.9002,-4.5669 5.4688,-3.8486 2.9007,-0.3969 3.225,-0.1094 -2.012,-8.2601 7.3993,-3.0326 9.2188,-1.2129 3.1535,2.0619 0.2427,5.5797 3.5178,5.8224 0.2426,4.6094 8.4909,-0.6066 7.8843,0.7279 -7.8843,-4.7307 1.3343,-5.701 4.9731,-7.763 4.8521,-2.0622 3.8814,1.5769 1.577,3.1538 8.1269,6.1861 1.5769,-1.3343 12.7363,-0.485 2.5473,2.0619 0.2426,3.6391 -0.849,1.5767 -0.6066,9.8251 -4.2454,8.4909 0.7276,3.7605 2.5475,-1.3343 7.1566,-6.6716 3.5175,-0.2424 3.8815,1.5769 3.8818,2.9109 1.9406,6.3077 11.4021,-0.7277 6.914,2.6686 5.5797,5.2157 4.0028,7.5206 0.9706,8.8546 -0.8493,10.3105 -2.1832,9.2185 -2.1836,2.9112 -3.0322,0.9706 -5.3373,-5.8224 -4.8518,-1.6982 -4.2455,7.0353 -4.2454,3.8815 -2.3049,1.4556 -9.2185,7.6419 -7.3993,4.0028 -7.3993,0.6066 -8.6119,-1.4556 -7.5206,-2.7899 -5.2158,-4.2454 -4.1241,-4.9734 -4.2454,-1.2129" />
- </clipPath>
- <clipPath
- id="clipPath128">
- <path
- id="path130"
- d="m 91.7368,146.3253 -9.7039,-1.577 -8.8548,-3.8814 -7.5206,-4.7308 -7.1566,-8.7335 -4.0431,-4.282 -3.9093,-1.4409 -1.034,2.5271 1.8079,2.6096 0.4062,3.6802 1.211,-0.0488 1.3232,-1.2069 -0.3569,3.7488 -1.4667,0.9839 0.0445,1.4286 -3.4744,-1.9655 -3.1462,-3.712 -0.6559,-3.3176 1.3453,-2.6567 1.2549,-4.5133 2.5521,-1.2084 2.6847,0.1318 2.5455,1.4791 -1.698,-8.6122 1.698,-9.5825 -1.8692,-4.4246 -6.1223,-6.5965 1.0885,-3.941 2.9002,-4.5669 5.4688,-3.8486 2.9007,-0.3969 3.225,-0.1094 -2.012,-8.2601 7.3993,-3.0326 9.2188,-1.2129 3.1535,2.0619 0.2427,5.5797 3.5178,5.8224 0.2426,4.6094 8.4909,-0.6066 7.8843,0.7279 -7.8843,-4.7307 1.3343,-5.701 4.9731,-7.763 4.8521,-2.0622 3.8814,1.5769 1.577,3.1538 8.1269,6.1861 1.5769,-1.3343 12.7363,-0.485 2.5473,2.0619 0.2426,3.6391 -0.849,1.5767 -0.6066,9.8251 -4.2454,8.4909 0.7276,3.7605 2.5475,-1.3343 7.1566,-6.6716 3.5175,-0.2424 3.8815,1.5769 3.8818,2.9109 1.9406,6.3077 11.4021,-0.7277 6.914,2.6686 5.5797,5.2157 4.0028,7.5206 0.9706,8.8546 -0.8493,10.3105 -2.1832,9.2185 -2.1836,2.9112 -3.0322,0.9706 -5.3373,-5.8224 -4.8518,-1.6982 -4.2455,7.0353 -4.2454,3.8815 -2.3049,1.4556 -9.2185,7.6419 -7.3993,4.0028 -7.3993,0.6066 -8.6119,-1.4556 -7.5206,-2.7899 -5.2158,-4.2454 -4.1241,-4.9734 -4.2454,-1.2129" />
- </clipPath>
- <linearGradient
- id="linearGradient3850"
- inkscape:collect="always">
- <stop
- id="stop3852"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop3854"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath3095">
- <path
- d="m 976.648,389.551 -842.402,0 0,839.999 842.402,0 0,-839.999"
- id="path3097"
- inkscape:connector-curvature="0" />
- </clipPath>
- <linearGradient
- id="linearGradient4439"
- inkscape:collect="always">
- <stop
- id="stop4441"
- offset="0"
- style="stop-color:#ddc1ab;stop-opacity:1" />
- <stop
- id="stop4443"
- offset="1"
- style="stop-color:#edddd1;stop-opacity:1" />
- </linearGradient>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath3195">
- <path
- d="m 611.836,756.738 -106.34,105.207 c -8.473,8.289 -13.617,20.102 -13.598,33.379 L 598.301,790.207 c -0.031,-13.418 5.094,-25.031 13.535,-33.469"
- id="path3197"
- inkscape:connector-curvature="0" />
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath3235">
- <path
- d="m 1095.64,1501.81 c 35.46,-35.07 70.89,-70.11 106.35,-105.17 4.4,-4.38 7.11,-10.53 7.11,-17.55 l -106.37,105.21 c 0,7 -2.71,13.11 -7.09,17.51"
- id="path3237"
- inkscape:connector-curvature="0" />
- </clipPath>
- <clipPath
- id="clipPath4591"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- d="m 1106.6009,730.43734 -0.036,21.648 c -0.01,3.50825 -2.8675,6.61375 -6.4037,6.92525 l -83.6503,7.33162 c -3.5205,0.30763 -6.3812,-2.29987 -6.3671,-5.8145 l 0.036,-21.6475 20.1171,-1.76662 -0.011,4.63775 c 0,1.83937 1.4844,3.19925 3.3262,3.0395 l 49.5274,-4.33975 c 1.8425,-0.166 3.3425,-1.78125 3.3538,-3.626 l 0.01,-4.63025 20.1,-1.7575"
- style="fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path4593" />
- </clipPath>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1.4333926,-2.2742838,1.1731823,-0.73941125,-174.08025,98.374394)"
- r="20.40658"
- fy="93.399292"
- fx="-26.508606"
- cy="93.399292"
- cx="-26.508606"
- id="radialGradient3856"
- xlink:href="#linearGradient3850"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="translate(-318.48033,212.32022)"
- gradientUnits="userSpaceOnUse"
- y2="993.19702"
- x2="-51.879555"
- y1="593.11615"
- x1="348.20132"
- id="linearGradient3895"
- xlink:href="#linearGradient3850"
- inkscape:collect="always" />
- <clipPath
- id="clipPath3906"
- clipPathUnits="userSpaceOnUse">
- <rect
- transform="scale(1,-1)"
- style="opacity:0.8;color:#000000;fill:#ff00ff;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect3908"
- width="1019.1371"
- height="1019.1371"
- x="357.9816"
- y="-1725.8152" />
- </clipPath>
- <filter
- style="color-interpolation-filters:sRGB"
- inkscape:label="Inner Shadow"
- id="filter1121-7">
- <feFlood
- flood-opacity="0.59999999999999998"
- flood-color="rgb(0,0,0)"
- result="flood"
- id="feFlood1123-8" />
- <feComposite
- in="flood"
- in2="SourceGraphic"
- operator="out"
- result="composite1"
- id="feComposite1125-4" />
- <feGaussianBlur
- in="composite1"
- stdDeviation="1"
- result="blur"
- id="feGaussianBlur1127-8" />
- <feOffset
- dx="0"
- dy="2"
- result="offset"
- id="feOffset1129-7" />
- <feComposite
- in="offset"
- in2="SourceGraphic"
- operator="atop"
- result="composite2"
- id="feComposite1131-8" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4259"
- id="linearGradient4293"
- x1="61.724815"
- y1="60.486755"
- x2="105.60001"
- y2="48.000011"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4265"
- id="linearGradient4301"
- x1="57.529388"
- y1="52.851879"
- x2="-5.595726"
- y2="70.892845"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4265"
- id="linearGradient4307"
- gradientUnits="userSpaceOnUse"
- x1="57.529388"
- y1="52.851879"
- x2="-5.595726"
- y2="70.892845"
- gradientTransform="matrix(-0.12987249,0.9915307,-0.9915307,-0.12987249,112.98532,15.539208)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4259"
- id="linearGradient4309"
- gradientUnits="userSpaceOnUse"
- x1="61.724815"
- y1="60.486755"
- x2="105.60001"
- y2="48.000011"
- gradientTransform="matrix(-0.12987249,0.9915307,-0.9915307,-0.12987249,112.98532,15.539208)" />
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4336">
- <path
- style="display:inline;opacity:0.06300001;fill:#df382c;fill-opacity:1;stroke:none"
- d="m -1.8530274e-8,64.86487 0,-33.72973 C -1.8530274e-8,3.8919 3.8878496,1.038147e-5 31.10302,1.038147e-5 l 33.79408,0 C 92.11217,1.038147e-5 96,3.8919 96,31.13514 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C 3.8878496,96.00001 -1.8530274e-8,92.10812 -1.8530274e-8,64.86487 Z"
- id="path4338"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssssss" />
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4455">
- <path
- sodipodi:nodetypes="sssssssss"
- inkscape:connector-curvature="0"
- id="path4457"
- d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 c -27.21517,0 -31.10302,-3.89189 -31.10302,-31.13514 z"
- style="display:inline;fill:#df382c;fill-opacity:1;stroke:none" />
- </clipPath>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="6.3664627"
- inkscape:cx="27.87084"
- inkscape:cy="45.622606"
- inkscape:document-units="px"
- inkscape:current-layer="layer3"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1029"
- inkscape:window-x="0"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- showborder="true"
- showguides="false"
- inkscape:guide-bbox="true"
- inkscape:showpageshadow="false"
- inkscape:snap-global="false"
- inkscape:snap-bbox="true"
- inkscape:bbox-paths="true"
- inkscape:bbox-nodes="true"
- inkscape:snap-bbox-edge-midpoints="true"
- inkscape:snap-bbox-midpoints="true"
- inkscape:object-paths="true"
- inkscape:snap-intersection-paths="true"
- inkscape:object-nodes="true"
- inkscape:snap-smooth-nodes="true"
- inkscape:snap-midpoints="true"
- inkscape:snap-object-midpoints="true"
- inkscape:snap-center="true">
- <inkscape:grid
- type="xygrid"
- id="grid821" />
- <sodipodi:guide
- orientation="1,0"
- position="16,48"
- id="guide823" />
- <sodipodi:guide
- orientation="0,1"
- position="64,80"
- id="guide825" />
- <sodipodi:guide
- orientation="1,0"
- position="80,40"
- id="guide827" />
- <sodipodi:guide
- orientation="0,1"
- position="64,16"
- id="guide829" />
- </sodipodi:namedview>
- <metadata
- id="metadata6522">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="BACKGROUND"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(268,-635.29076)"
- style="display:inline"
- sodipodi:insensitive="true">
- <g
- id="g4464"
- style="filter:url(#filter1121)">
- <path
- sodipodi:nodetypes="sssssssss"
- inkscape:connector-curvature="0"
- id="path6455"
- d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 c -27.21517,0 -31.10302,-3.89189 -31.10302,-31.13514 z"
- style="display:inline;fill:url(#linearGradient908);fill-opacity:1;stroke:none" />
- </g>
- <path
- sodipodi:nodetypes="sssssssss"
- inkscape:connector-curvature="0"
- id="path4460"
- d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 c -27.21517,0 -31.10302,-3.89189 -31.10302,-31.13514 z"
- style="display:inline;fill:none;fill-opacity:1;stroke:none;filter:url(#filter1121)" />
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer4"
- inkscape:label="FOLDS"
- style="display:inline"
- sodipodi:insensitive="true">
- <g
- inkscape:groupmode="maskhelper"
- id="g4327"
- clip-path="url(#clipPath4336)">
- <g
- id="g4319">
- <g
- id="g4311"
- transform="matrix(-0.76919808,0.63901044,-0.63901044,-0.76919808,108.56506,55.223802)"
- style="opacity:0.10499998">
- <path
- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient4307);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="M 118.8011,58.528402 -28.812125,79.242985 5.8755118,-40.074102 l 96.0121782,20.991633 26.85965,50.05246 z"
- id="path4303"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc" />
- <path
- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient4309);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="M 118.8011,58.528402 -28.812125,79.242985 -8.4409816,141.41578 108.00471,151.91561 Z"
- id="path4305"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- </g>
- <g
- id="g4315"
- style="opacity:0.08200001"
- transform="matrix(0.24294261,-0.68963031,1.0086859,1.2528869,10.128532,28.560155)">
- <path
- sodipodi:nodetypes="cccccc"
- inkscape:connector-curvature="0"
- id="path4283"
- d="M 41.869796,-11.349643 81.579838,132.32315 -41.231687,113.4253 -32.887179,15.500039 13.253042,-17.632567 Z"
- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient4301);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
- <path
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="path4285"
- d="M 41.869796,-11.349643 81.579838,132.32315 140.58042,104.05 135.86823,-12.773118 Z"
- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient4293);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
- </g>
- </g>
- </g>
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer3"
- inkscape:label="PLACE YOUR PICTOGRAM HERE"
- style="display:inline">
- <path
- style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c39a7a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- d="M 17.371094 28.669922 C 16.599038 28.669922 15.566054 28.794985 14.679688 29.570312 C 13.766682 30.36894 13.5 31.521747 13.5 32.382812 L 13.5 34.671875 C 13.5 35.527049 13.783856 36.716545 14.75 37.482422 C 15.667283 38.209564 16.626117 38.240234 17.234375 38.240234 L 22.816406 38.240234 L 14.875 46.978516 A 0.50005 0.50005 0 0 0 14.871094 46.982422 L 14.869141 46.984375 L 14.847656 47.007812 L 14.826172 47.029297 L 14.818359 47.039062 A 0.50005 0.50005 0 0 0 14.701172 47.265625 C 13.864555 48.288569 13.5 49.604301 13.5 50.416016 L 13.5 53.255859 C 13.5 54.169576 13.90884 55.262942 14.785156 55.900391 C 15.592631 56.48776 16.397758 56.525391 16.84375 56.525391 L 19.427734 56.525391 C 19.718486 56.524847 19.997357 56.437001 20.269531 56.337891 C 20.541704 56.437001 20.820576 56.524847 21.111328 56.525391 L 33.220703 56.525391 L 33.230469 56.525391 A 0.50005 0.50005 0 0 0 33.402344 56.494141 C 34.12378 56.484341 34.962109 56.329895 35.681641 55.701172 C 36.510768 54.976682 36.785156 53.947547 36.785156 53.171875 L 36.785156 52.060547 L 39.943359 55.21875 C 40.598634 55.880878 41.817199 56.525391 43.085938 56.525391 L 51.427734 56.525391 C 51.65759 56.525312 51.884682 56.488241 52.105469 56.425781 C 52.91232 56.579227 53.75153 56.381051 54.339844 55.792969 L 57.271484 52.861328 A 0.50005 0.50005 0 0 0 57.273438 52.859375 L 58.769531 51.34375 L 60.810547 53.228516 L 62.800781 55.21875 C 63.456055 55.880877 64.674623 56.525391 65.943359 56.525391 L 74.285156 56.525391 C 74.373229 56.525336 74.457796 56.496578 74.544922 56.486328 L 74.544922 56.296875 C 74.544922 55.854004 74.900879 55.498047 75.34375 55.498047 L 77.492188 55.498047 L 81.09375 51.898438 L 81.072266 51.912109 A 0.50005 0.50005 0 0 0 81.126953 51.865234 C 81.887266 51.097737 82.5 49.757009 82.5 48.560547 L 82.5 36.882812 A 0.50005 0.50005 0 0 0 82.5 36.880859 L 82.492188 35.5625 A 0.50005 0.50005 0 0 0 82.490234 35.521484 C 82.439614 34.945574 82.188686 34.394202 81.767578 33.972656 L 77.726562 29.933594 L 77.722656 29.927734 C 77.693286 29.897724 77.663652 29.868344 77.632812 29.839844 A 0.50005 0.50005 0 0 0 77.626953 29.835938 C 76.880074 29.164479 75.644158 28.669922 74.529297 28.669922 L 66.285156 28.669922 A 0.50005 0.50005 0 0 0 66.283203 28.669922 L 65.035156 28.673828 A 0.50005 0.50005 0 0 0 65.011719 28.673828 C 64.405147 28.705828 63.818351 28.959454 63.375 29.402344 A 0.50005 0.50005 0 0 0 63.373047 29.404297 L 58.884766 33.919922 L 58.164062 33.226562 L 54.869141 29.933594 L 54.865234 29.927734 C 54.835864 29.897724 54.806231 29.868344 54.775391 29.839844 A 0.50005 0.50005 0 0 0 54.769531 29.835938 C 54.022652 29.164479 52.786736 28.669922 51.671875 28.669922 L 43.427734 28.669922 A 0.50005 0.50005 0 0 0 43.423828 28.669922 L 42.101562 28.677734 A 0.50005 0.50005 0 0 0 42.060547 28.679688 C 41.486404 28.731437 40.937815 28.982542 40.517578 29.402344 L 36.785156 33.136719 L 36.785156 32.373047 C 36.785156 31.723134 36.686396 30.638195 35.828125 29.746094 C 34.967253 28.851281 33.834956 28.669922 32.972656 28.669922 L 17.371094 28.669922 z M 44.785156 38.240234 L 50.072266 38.240234 L 50.072266 46.955078 L 44.785156 46.955078 L 44.785156 38.240234 z M 67.642578 38.240234 L 72.929688 38.240234 L 72.929688 46.955078 L 67.642578 46.955078 L 67.642578 38.240234 z M 28.535156 39.382812 L 28.810547 39.382812 L 18.5 51.277344 L 18.5 50.421875 C 18.505 50.416575 18.510665 50.4116 18.515625 50.40625 A 0.50005 0.50005 0 0 0 18.517578 50.402344 L 28.535156 39.382812 z M 35.214844 39.626953 L 35.214844 47.595703 C 34.546422 47.177561 33.820937 46.955078 33.205078 46.955078 L 28.863281 46.955078 L 35.214844 39.626953 z "
- id="path4241" />
- <rect
- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c39a7a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- id="rect4282"
- width="5.4180727"
- height="1.5211427"
- x="31.306763"
- y="47.455326" />
- <path
- inkscape:connector-curvature="0"
- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="M 17.371094,31.170159 C 16.41517,31.170159 16,31.519759 16,32.383049 l 0,2.289063 c 0,0.843413 0.397114,1.068359 1.234375,1.068359 l 17.050781,0 0,-3.367187 c 0,-0.783097 -0.249087,-1.203125 -1.3125,-1.203125 l -15.601562,0 z m 24.914062,0 -3.960937,3.960937 c -0.46567,0.428278 -0.609375,0.86035 -0.609375,1.65625 l 0,11.525391 4.570312,0 0,-17.142578 z m 1.142578,0 0,4.570312 13.714844,0 -4.044922,-4.044922 c -0.437271,-0.393115 -0.739999,-0.52539 -1.425781,-0.52539 l -8.244141,0 z m 21.714844,0 -3.960937,3.960937 c -0.46567,0.428278 -0.609375,0.86035 -0.609375,1.65625 l 0,11.525391 4.570312,0 0,-17.142578 z m 1.142578,0 0,4.570312 13.714844,0 -4.044922,-4.044922 c -0.437271,-0.393115 -0.739999,-0.52539 -1.425781,-0.52539 l -8.244141,0 z M 27.427734,36.883049 16.667969,48.72094 C 16.008587,49.402426 16,49.71964 16,50.416252 l 0,2.839844 c 0,0.632516 0.402503,0.769531 0.84375,0.769531 l 2.583984,0 14.857422,-17.142578 -6.857422,0 z m 25.144532,0 0,17.142578 3.919922,-3.919922 c 0.519261,-0.524371 0.65039,-0.777677 0.65039,-1.544921 l 0,-11.677735 -4.570312,0 z m 22.857422,0 0,17.142578 3.919921,-3.919922 C 79.86887,49.581334 80,49.328028 80,48.560784 l 0,-11.677735 -4.570312,0 z m -50.28711,12.572266 -4.03125,4.570312 12.119141,0 c 0.745441,0.03464 1.054687,-0.303646 1.054687,-0.853515 l 0,-2.6875 c 0,-0.653569 -0.291585,-1.029297 -1.080078,-1.029297 l -8.0625,0 z m 12.572266,0 4.003906,4.003906 c 0.359189,0.363486 0.690415,0.566406 1.367188,0.566406 l 8.341796,0 0,-4.570312 -13.71289,0 z m 22.857422,0 4.003906,4.003906 c 0.359189,0.363486 0.690414,0.566406 1.367187,0.566406 l 8.341797,0 0,-4.570312 -13.71289,0 z"
- id="path4268" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#c39a7a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 13.5,53.994141 0,12.99414 2.841797,0 0,-3.998047 1.222656,-1.367187 3.111328,5.365234 3.351563,0 -4.613282,-7.417969 4.429688,-5.576171 -3.302734,0 -4.199219,5.769531 0,-5.769531 z m 11.837891,0 0,12.99414 9.71875,0 0,-2.197265 -6.876953,0 0,-3.283204 5.894531,0 0,-2.197265 -5.894531,0 0,-3.121094 6.480468,0 0,-2.195312 z m 11.828125,0 0,12.99414 9.716796,0 0,-2.197265 -6.876953,0 0,-3.283204 5.894532,0 0,-2.197265 -5.894532,0 0,-3.121094 6.482422,0 0,-2.195312 z m 11.816406,0 0,12.99414 2.841797,0 0,-4.585937 1.898437,0 c 0.854016,0 1.591991,-0.111197 2.214844,-0.335938 0.622854,-0.231162 1.136482,-0.543855 1.541016,-0.935547 0.404534,-0.39169 0.703849,-0.847072 0.896484,-1.367187 0.199057,-0.526536 0.298828,-1.081689 0.298828,-1.666016 0,-0.635696 -0.103116,-1.207571 -0.308594,-1.714844 -0.199056,-0.507272 -0.508405,-0.937851 -0.925781,-1.291015 -0.417376,-0.353165 -0.942429,-0.622381 -1.578125,-0.808594 -0.635696,-0.192635 -1.387048,-0.289062 -2.253906,-0.289062 z m 11.83789,0 0,12.99414 9.71875,0 0,-2.197265 -6.876953,0 0,-3.283204 5.894532,0 0,-2.197265 -5.894532,0 0,-3.121094 6.482422,0 0,-2.195312 z m 11.828126,0 0,12.99414 2.841796,0 0,-4.960937 1.666016,0 2.792969,4.960937 3.197265,0 -3.361328,-5.597656 c 0.391692,-0.115581 0.752599,-0.274991 1.080078,-0.480469 0.32748,-0.211898 0.610073,-0.463 0.847657,-0.751953 0.237583,-0.295374 0.423749,-0.636214 0.558593,-1.021484 0.134845,-0.385271 0.201172,-0.813896 0.201172,-1.289063 0,-1.245706 -0.420545,-2.199947 -1.261718,-2.861328 -0.841175,-0.661381 -2.109499,-0.992187 -3.804688,-0.992187 z m -20.824219,2.205078 1.464843,0 c 0.841174,0 1.469343,0.151329 1.886719,0.453125 0.423798,0.295374 0.636719,0.794232 0.636719,1.49414 0,0.680644 -0.196199,1.197618 -0.587891,1.550782 -0.391691,0.346743 -1.01178,0.519531 -1.859375,0.519531 l -1.541015,0 z m 23.666015,0.263525 1.617188,0 c 0.398112,0 0.75233,0.03345 1.060547,0.09766 0.314636,0.05779 0.577163,0.157563 0.789062,0.298828 0.211899,0.134845 0.373262,0.314321 0.482422,0.539063 0.115581,0.22474 0.173828,0.368882 0.173828,0.696362 0,0.60359 -0.192854,0.933898 -0.578125,1.254956 -0.385269,0.314638 -1.002014,0.472657 -1.849609,0.472657 l -1.695313,0 z"
- id="path4243"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccscscscscsccccccccccccccccccccccccssssccscscscccscccscscc" />
- <path
- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c39a7a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m 14,54.026463 21.32109,0 2.573485,0 2.959509,0 33.431633,0 0,2.498928 -60.285717,0 z"
- id="rect4314"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
- <rect
- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c39a7a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- id="rect4280"
- width="1.4425607"
- height="7.0013866"
- x="13.5"
- y="51.883324" />
- <rect
- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c39a7a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- id="rect4284"
- width="0.93164003"
- height="3.311523"
- x="35.353516"
- y="52.012886" />
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="BADGE"
- style="display:none"
- sodipodi:insensitive="true">
- <g
- style="display:inline"
- transform="translate(-340.00001,-581)"
- id="g4394"
- clip-path="none">
- <g
- id="g855">
- <g
- inkscape:groupmode="maskhelper"
- id="g870"
- clip-path="url(#clipPath873)"
- style="opacity:0.6;filter:url(#filter891)">
- <path
- transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
- d="m 264,552.36218 a 12,12 0 0 1 -12,12 12,12 0 0 1 -12,-12 12,12 0 0 1 12,-12 12,12 0 0 1 12,12 z"
- sodipodi:ry="12"
- sodipodi:rx="12"
- sodipodi:cy="552.36218"
- sodipodi:cx="252"
- id="path844"
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- </g>
- <g
- id="g862">
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path4398"
- sodipodi:cx="252"
- sodipodi:cy="552.36218"
- sodipodi:rx="12"
- sodipodi:ry="12"
- d="m 264,552.36218 a 12,12 0 0 1 -12,12 12,12 0 0 1 -12,-12 12,12 0 0 1 12,-12 12,12 0 0 1 12,12 z"
- transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" />
- <path
- transform="matrix(1.25,0,0,1.25,33,-100.45273)"
- d="m 264,552.36218 a 12,12 0 0 1 -12,12 12,12 0 0 1 -12,-12 12,12 0 0 1 12,-12 12,12 0 0 1 12,12 z"
- sodipodi:ry="12"
- sodipodi:rx="12"
- sodipodi:cy="552.36218"
- sodipodi:cx="252"
- id="path4400"
- style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="star"
- style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path4459"
- sodipodi:sides="5"
- sodipodi:cx="666.19574"
- sodipodi:cy="589.50385"
- sodipodi:r1="7.2431178"
- sodipodi:r2="4.3458705"
- sodipodi:arg1="1.0471976"
- sodipodi:arg2="1.6755161"
- inkscape:flatsided="false"
- inkscape:rounded="0.1"
- inkscape:randomized="0"
- d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z"
- transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="100px" height="100px" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
+ <title>zookeeper</title>
+ <desc>Created with Sketch.</desc>
+ <defs>
+ <circle id="path-1" cx="50" cy="50" r="50"></circle>
+ <circle id="path-3" cx="50" cy="50" r="50"></circle>
+ </defs>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="zookeeper">
+ <g id="v1">
+ <mask id="mask-2" fill="white">
+ <use xlink:href="#path-1"></use>
+ </mask>
+ <use id="Oval-Copy" fill="#EDDDD1" transform="translate(50.000000, 50.000000) rotate(-180.000000) translate(-50.000000, -50.000000) " xlink:href="#path-1"></use>
+ <g id="lockup" mask="url(#mask-2)" fill-rule="nonzero">
+ <g transform="translate(15.000000, 31.000000)">
+ <path d="M4.3095293,0.660486479 C3.54834732,0.660486479 2.52991239,0.783788028 1.65603042,1.54819493 C0.755883662,2.33557465 0.492957746,3.47214493 0.492957746,4.32108225 L0.492957746,6.57790493 C0.492957746,7.42103423 0.772815775,8.59377676 1.72535211,9.34886676 C2.62971563,10.0657673 3.57504493,10.0960054 4.17473592,10.0960054 L9.67814676,10.0960054 L1.84859155,18.711213 C1.84730081,18.7124895 1.84601713,18.7137732 1.84474056,18.7150639 L1.84281507,18.7169894 L1.82163268,18.7400963 L1.80045127,18.7612787 L1.79274831,18.7709062 C1.73557404,18.8341239 1.69576679,18.9110851 1.67721183,18.9942782 C0.852378169,20.0028145 0.492957746,21.3000151 0.492957746,22.1002975 L0.492957746,24.9001427 C0.492957746,25.8009904 0.896039437,26.8789569 1.76001296,27.5074277 C2.55611507,28.0865239 3.34990225,28.1236249 3.78961268,28.1236249 L6.33720254,28.1236249 C6.62385944,28.1230886 6.89880268,28.0364799 7.16714324,27.9387658 C7.43548282,28.0364799 7.71042704,28.1230886 7.99708394,28.1236249 L19.9359044,28.1236249 L19.9455328,28.1236249 C20.0033878,28.1233775 20.0607477,28.1129484 20.114987,28.0928151 C20.826262,28.0831531 21.6527835,27.9308824 22.3621813,27.3110146 C23.1796304,26.5967287 23.4501538,25.5820886 23.4501538,24.8173415 L23.4501538,23.7216661 L26.5638751,26.8353873 C27.2099208,27.4881896 28.411323,28.1236249 29.6621924,28.1236249 L37.8864983,28.1236249 C38.1131169,28.123547 38.3370104,28.0869982 38.5546877,28.0254179 C39.3501746,28.1767027 40.1775648,27.9813179 40.7575927,27.4015187 L43.647942,24.5111685 C43.6485859,24.5105284 43.6492281,24.5098866 43.6498685,24.509243 L45.1248897,23.0149648 L47.137159,24.8731848 L49.0993615,26.8353873 C49.7454063,27.4881886 50.9468114,28.1236249 52.1976779,28.1236249 L60.4219848,28.1236249 C60.5088173,28.1235707 60.5921932,28.0952177 60.6780921,28.0851121 L60.6780921,27.8983275 C60.6780921,27.4616941 61.0290356,27.1107506 61.465669,27.1107506 L63.5838473,27.1107506 L67.1346831,23.5618403 L67.1135017,23.5753187 C67.1325615,23.5612299 67.1505805,23.5457849 67.1674185,23.5291039 C67.9170228,22.7724168 68.5211268,21.4505723 68.5211268,20.2709618 L68.5211268,8.75770197 C68.521128,8.75706014 68.521128,8.75641831 68.5211268,8.75577648 L68.5134248,7.45598592 C68.5133366,7.44248579 68.5126939,7.42899498 68.5114983,7.41554761 C68.4615913,6.84774901 68.2141975,6.30414282 67.7990206,5.88853408 L63.8149203,1.90636028 L63.8110693,1.90058282 C63.782113,1.87099549 63.7528963,1.8420293 63.7224907,1.8139307 C63.7205743,1.8126335 63.7186487,1.81134981 63.7167142,1.81007972 C62.9803546,1.14807789 61.7618459,0.660486479 60.6626872,0.660486479 L52.5346608,0.660486479 C52.534019,0.660485226 52.5333772,0.660485226 52.5327354,0.660486479 L51.3022665,0.664337465 C51.2945652,0.664156939 51.2868608,0.664156939 51.2791596,0.664337465 C50.6811308,0.695886761 50.1025996,0.945940563 49.665493,1.38259268 C49.6648494,1.38323273 49.6642075,1.38387457 49.6635675,1.38451817 L45.2385017,5.83654282 L44.5279485,5.15294845 L41.2794348,1.90636028 L41.2755828,1.90058282 C41.2466265,1.87099549 41.2174108,1.8420293 41.1870052,1.8139307 C41.1850885,1.8126335 41.1831626,1.8113498 41.1812277,1.81007972 C40.4448682,1.14807789 39.2263594,0.660486479 38.1272007,0.660486479 L29.9991744,0.660486479 C29.9978907,0.660481465 29.996607,0.660481465 29.9953234,0.660486479 L28.6916808,0.668188451 C28.678181,0.668276689 28.6646906,0.66891939 28.6512435,0.67011493 C28.085187,0.72113507 27.5443246,0.96870338 27.1300065,1.38259268 L23.4501538,5.06437085 L23.4501538,4.31145479 C23.4501538,3.67069549 23.3527848,2.60103732 22.5066021,1.72150113 C21.6578551,0.839291127 20.5415059,0.660486479 19.691351,0.660486479 L4.3095293,0.660486479 Z M31.3374777,10.0960054 L36.5501214,10.0960054 L36.5501214,18.6881051 L31.3374777,18.6881051 L31.3374777,10.0960054 Z M53.8729642,10.0960054 L59.0856079,10.0960054 L59.0856079,18.6881051 L53.8729642,18.6881051 L53.8729642,10.0960054 Z M15.316351,11.2224907 L15.5878632,11.2224907 L5.42253521,22.9494941 L5.42253521,22.1060739 C5.42746479,22.1008486 5.43305,22.0959437 5.43794014,22.090669 C5.43858757,22.0893882 5.43922941,22.0881045 5.43986563,22.086818 L15.316351,11.2224907 Z M21.9019589,11.4631931 L21.9019589,19.3197072 C21.2429513,18.9074545 20.5276844,18.6881051 19.9204994,18.6881051 L15.6398545,18.6881051 L21.9019589,11.4631931 Z" id="path4241" fill="#C39A7A"></path>
+ <rect id="rect4282" fill="#C39A7A" x="18.0489213" y="19.1813073" width="5.34176182" height="1.49971815"></rect>
+ <path d="M4.3095293,3.12550887 C3.36706901,3.12550887 2.95774648,3.47018493 2.95774648,4.32131592 L2.95774648,6.57813859 C2.95774648,7.40967254 3.34926732,7.63145028 4.17473592,7.63145028 L20.9853651,7.63145028 L20.9853651,4.31168845 C20.9853651,3.53962099 20.7397863,3.12550887 19.691351,3.12550887 L4.3095293,3.12550887 L4.3095293,3.12550887 Z M28.872689,3.12550887 L24.9675399,7.03065803 C24.5084286,7.45290394 24.3667476,7.87889042 24.3667476,8.66358056 L24.3667476,20.0266421 L28.872689,20.0266421 L28.872689,3.12550887 L28.872689,3.12550887 Z M29.9991744,3.12550887 L29.9991744,7.63145028 L43.5208515,7.63145028 L39.5329003,3.64349901 C39.101788,3.25592085 38.8033238,3.12550887 38.1272007,3.12550887 L29.9991744,3.12550887 L29.9991744,3.12550887 Z M51.4081755,3.12550887 L47.5030263,7.03065803 C47.0439151,7.45290394 46.9022341,7.87889042 46.9022341,8.66358056 L46.9022341,20.0266421 L51.4081755,20.0266421 L51.4081755,3.12550887 L51.4081755,3.12550887 Z M52.5346608,3.12550887 L52.5346608,7.63145028 L66.056338,7.63145028 L62.0683868,3.64349901 C61.6372745,3.25592085 61.3388103,3.12550887 60.6626872,3.12550887 L52.5346608,3.12550887 L52.5346608,3.12550887 Z M14.2245265,8.75793563 L3.61630746,20.4290958 C2.96621254,21.1009834 2.95774648,21.4137296 2.95774648,22.1005301 L2.95774648,24.9003763 C2.95774648,25.5239837 3.35458042,25.6590689 3.78961268,25.6590689 L6.33720254,25.6590689 L20.9853651,8.75793563 L14.2245265,8.75793563 Z M39.0149101,8.75793563 L39.0149101,25.6590689 L42.879622,21.794357 C43.3915694,21.2773715 43.5208515,21.0276332 43.5208515,20.2711955 L43.5208515,8.75793563 L39.0149101,8.75793563 Z M61.5503966,8.75793563 L61.5503966,25.6590689 L65.4151075,21.794357 C65.9270549,21.2773715 66.056338,21.0276332 66.056338,20.2711955 L66.056338,8.75793563 L61.5503966,8.75793563 Z M11.9715558,21.1531275 L7.99708394,25.6590689 L19.9455328,25.6590689 C20.6804746,25.693221 20.9853651,25.3596996 20.9853651,24.8175752 L20.9853651,22.1679273 C20.9853651,21.5235635 20.6978869,21.1531275 19.9204994,21.1531275 L11.9715558,21.1531275 Z M24.3667476,21.1531275 L28.3142606,25.1006404 C28.6683906,25.4590069 28.9949514,25.6590689 29.6621924,25.6590689 L37.8864983,25.6590689 L37.8864983,21.1531275 L24.3667476,21.1531275 Z M46.9022341,21.1531275 L50.849747,25.1006404 C51.203877,25.4590069 51.5304369,25.6590689 52.1976779,25.6590689 L60.4219848,25.6590689 L60.4219848,21.1531275 L46.9022341,21.1531275 Z" id="path4268" fill="#FFFFFF"></path>
+ <path d="M0.492957746,25.6280263 L0.492957746,38.4391503 L3.29472944,38.4391503 L3.29472944,34.4974138 L4.50016493,33.149483 L7.56767141,38.4391503 L10.8720293,38.4391503 L6.3237231,31.1256597 L10.6910211,25.6280263 L7.43480451,25.6280263 L3.29472944,31.3162963 L3.29472944,25.6280263 L0.492957746,25.6280263 Z M12.1641179,25.6280263 L12.1641179,38.4391503 L21.7459841,38.4391503 L21.7459841,36.2728327 L14.9658896,36.2728327 L14.9658896,33.035871 L20.777399,33.035871 L20.777399,30.8695534 L14.9658896,30.8695534 L14.9658896,27.7924185 L21.3550834,27.7924185 L21.3550834,25.6280263 L12.1641179,25.6280263 Z M23.8256496,25.6280263 L23.8256496,38.4391503 L33.4055893,38.4391503 L33.4055893,36.2728327 L26.6254948,36.2728327 L26.6254948,33.035871 L32.4370052,33.035871 L32.4370052,30.8695534 L26.6254948,30.8695534 L26.6254948,27.7924185 L33.0166151,27.7924185 L33.0166151,25.6280263 L23.8256496,25.6280263 Z M35.4756273,25.6280263 L35.4756273,38.4391503 L38.277399,38.4391503 L38.277399,33.9178039 L40.1490975,33.9178039 C40.9910851,33.9178039 41.7186661,33.8081731 42.3327465,33.5865975 C42.9468279,33.3586913 43.4532217,33.0504024 43.852058,32.6642272 C44.2508944,32.2780539 44.5459937,31.8290858 44.7359155,31.3162963 C44.9321689,30.7971763 45.0305346,30.2498424 45.0305346,29.6737454 C45.0305346,29.0470028 44.928871,28.4831824 44.726287,27.9830541 C44.5300346,27.4829268 44.2250427,27.0584123 43.8135452,26.7102224 C43.4020477,26.3620315 42.8843899,26.0966073 42.2576473,25.913017 C41.6309048,25.7230952 40.8901352,25.6280263 40.0354865,25.6280263 L35.4756273,25.6280263 Z M47.1467865,25.6280263 L47.1467865,38.4391503 L56.7286527,38.4391503 L56.7286527,36.2728327 L49.9485582,36.2728327 L49.9485582,33.035871 L55.7600686,33.035871 L55.7600686,30.8695534 L49.9485582,30.8695534 L49.9485582,27.7924185 L56.3396785,27.7924185 L56.3396785,25.6280263 L47.1467865,25.6280263 Z M58.8083192,25.6280263 L58.8083192,38.4391503 L61.6100899,38.4391503 L61.6100899,33.5480856 L63.2526408,33.5480856 L66.0062723,38.4391503 L69.1585054,38.4391503 L65.84452,32.9203345 C66.2306952,32.8063814 66.586519,32.6492166 66.9093856,32.4466327 C67.2322532,32.2377192 67.5108661,31.9901538 67.7451038,31.7052706 C67.9793406,31.4140568 68.1628845,31.0780173 68.2958293,30.6981737 C68.4287751,30.318329 68.4941679,29.895741 68.4941679,29.4272665 C68.4941679,28.1991056 68.0795461,27.2583046 67.2502206,26.6062389 C66.4208931,25.9541731 65.1704328,25.6280263 63.4991197,25.6280263 L58.8083192,25.6280263 Z M38.277399,27.8020469 L39.7216104,27.8020469 C40.5509369,27.8020469 41.1702585,27.9512445 41.5817559,28.2487899 C41.9995849,28.5400037 42.209507,29.0318355 42.209507,29.7218856 C42.209507,30.3929431 42.0160714,30.9026358 41.6298962,31.2508256 C41.243722,31.5926849 40.6323666,31.7630393 39.7967096,31.7630393 L38.277399,31.7630393 L38.277399,27.8020469 Z M61.6100899,28.0618603 L63.2045006,28.0618603 C63.5970054,28.0618603 63.9462344,28.0948392 64.2501103,28.1581448 C64.5603148,28.2151208 64.8191442,28.3134886 65.0280587,28.4527639 C65.2369732,28.5857097 65.3960635,28.7626579 65.5036861,28.9842345 C65.6176392,29.2058092 65.6750658,29.347921 65.6750658,29.6707886 C65.6750658,30.2658773 65.484928,30.5915331 65.1050834,30.9080692 C64.7252407,31.2182756 64.1171823,31.374069 63.2815252,31.374069 L61.6100899,31.374069 L61.6100899,28.0618603 Z" id="path4243" fill="#C39A7A"></path>
+ <polygon id="rect4314" fill="#C39A7A" points="0.985915493 25.6598931 22.0067085 25.6598931 24.5439472 25.6598931 27.461773 25.6598931 60.4225379 25.6598931 60.4225379 28.1236249 0.985915493 28.1236249"></polygon>
+ <rect id="rect4280" fill="#C39A7A" x="0.492957746" y="23.5469392" width="1.42224294" height="6.90277552"></rect>
+ <rect id="rect4284" fill="#C39A7A" x="22.0386777" y="23.6746763" width="1" height="3.26488183"></rect>
+ </g>
+ </g>
+ </g>
+ <g id="v2">
+ <mask id="mask-4" fill="white">
+ <use xlink:href="#path-3"></use>
+ </mask>
+ <use id="Oval-Copy" fill="#EDDDD1" transform="translate(50.000000, 50.000000) rotate(-180.000000) translate(-50.000000, -50.000000) " xlink:href="#path-3"></use>
+ <image id="zk_logo_use2" mask="url(#mask-4)" x="22" y="10" width="52.756654" height="75" xlink:href="data:image/png;base64,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"></image>
+ </g>
</g>
- </g>
</g>
- </g>
-</svg>
+</svg> \ No newline at end of file
diff --git a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/metadata.yaml b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/metadata.yaml
index d9818d79..a5637759 100644
--- a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/metadata.yaml
+++ b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/metadata.yaml
@@ -1,12 +1,15 @@
name: zookeeper
+summary: Zookeeper from Apache Bigtop
maintainer: Juju Big Data <bigdata@lists.ubuntu.com>
-summary: High-performance coordination service for distributed applications
-description: |
+description: >
Apache ZooKeeper is a centralized, reliable application for maintaining
configuration information, naming, synchronization, and group services. All
of these kinds of services are used in some form or another by distributed
applications. In order to install and configure Apache HBase and other Hadoop
ecosystem components, you need ZooKeeper.
+
+ This charm provides version 3.4.6 of the Zookeeper application from Apache
+ Bigtop.
tags: []
provides:
zookeeper:
diff --git a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/tests/01-deploy-smoke.py b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/tests/01-deploy-smoke.py
index f9a008a2..78a8656b 100755
--- a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/tests/01-deploy-smoke.py
+++ b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/tests/01-deploy-smoke.py
@@ -24,13 +24,10 @@ class TestDeploy(unittest.TestCase):
"""
Deployment test for Apache Zookeeper quorum
"""
-
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
-
- cls.d.add('zookeeper', charm='cs:xenial/zookeeper', units=3)
-
+ cls.d.add('zookeeper', units=3)
cls.d.setup(timeout=1800)
cls.d.sentry.wait_for_messages({'zookeeper': re.compile('ready')},
timeout=1800)
diff --git a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/tests/10-bind-address.py b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/tests/10-bind-address.py
index 17ef3a2a..5202faf0 100755
--- a/bigtop-packages/src/charm/zookeeper/layer-zookeeper/tests/10-bind-address.py
+++ b/bigtop-packages/src/charm/zookeeper/layer-zookeeper/tests/10-bind-address.py
@@ -31,9 +31,7 @@ class TestBindClientPort(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.d = amulet.Deployment(series='xenial')
-
- cls.d.add('zk-test', charm='cs:xenial/zookeeper')
-
+ cls.d.add('zk-test', charm='zookeeper')
cls.d.setup(timeout=TIMEOUT)
cls.d.sentry.wait_for_messages({'zk-test': re.compile('^ready')},
timeout=TIMEOUT)
diff --git a/bigtop-packages/src/common/ambari/do-component-build b/bigtop-packages/src/common/ambari/do-component-build
index f9a2d0d6..59a16348 100644
--- a/bigtop-packages/src/common/ambari/do-component-build
+++ b/bigtop-packages/src/common/ambari/do-component-build
@@ -17,7 +17,7 @@
set -ex
. `dirname $0`/bigtop.bom
-export _JAVA_OPTIONS="-Xmx2048m -XX:MaxPermSize=512m -Djava.awt.headless=true"
+export _JAVA_OPTIONS="-Xmx2048m -Djava.awt.headless=true"
mvn clean package -DskipTests -Drat.skip
(cd contrib/management-packs/odpi-ambari-mpack ; mvn clean package -DskipTests -Drat.skip)
diff --git a/bigtop-packages/src/common/ambari/patch0-AMBARI.diff b/bigtop-packages/src/common/ambari/patch0-AMBARI.diff
new file mode 100644
index 00000000..a77974c5
--- /dev/null
+++ b/bigtop-packages/src/common/ambari/patch0-AMBARI.diff
@@ -0,0 +1,25 @@
+diff --git a/contrib/management-packs/odpi-ambari-mpack/pom.xml b/contrib/management-packs/odpi-ambari-mpack/pom.xml
+index 7b97e65..49c37f3 100644
+--- a/contrib/management-packs/odpi-ambari-mpack/pom.xml
++++ b/contrib/management-packs/odpi-ambari-mpack/pom.xml
+@@ -84,6 +84,7 @@
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
++ <appendAssemblyId>false</appendAssemblyId>
+ <tarLongFileMode>gnu</tarLongFileMode>
+ <descriptors>
+ <descriptor>src/main/assemblies/odpi-ambari-mpack.xml</descriptor>
+diff --git a/contrib/management-packs/odpi-ambari-mpack/src/main/assemblies/odpi-ambari-mpack.xml b/contrib/management-packs/odpi-ambari-mpack/src/main/assemblies/odpi-ambari-mpack.xml
+index 5dd3db4..f7bd433 100644
+--- a/contrib/management-packs/odpi-ambari-mpack/src/main/assemblies/odpi-ambari-mpack.xml
++++ b/contrib/management-packs/odpi-ambari-mpack/src/main/assemblies/odpi-ambari-mpack.xml
+@@ -17,7 +17,7 @@
+ limitations under the License.
+ -->
+ <assembly>
+- <id></id>
++ <id>odpi-ambari-mpack</id>
+ <formats>
+ <format>dir</format>
+ <format>tar.gz</format>
diff --git a/bigtop-packages/src/common/ambari/patch1-AMBARI-storm.diff b/bigtop-packages/src/common/ambari/patch1-AMBARI-storm.diff
new file mode 100644
index 00000000..5780885e
--- /dev/null
+++ b/bigtop-packages/src/common/ambari/patch1-AMBARI-storm.diff
@@ -0,0 +1,12 @@
+diff -ruaN apache-ambari-2.5.0-src.orig/ambari-metrics/ambari-metrics-storm-sink/pom.xml apache-ambari-2.5.0-src/ambari-metrics/ambari-metrics-storm-sink/pom.xml
+--- apache-ambari-2.5.0-src.orig/ambari-metrics/ambari-metrics-storm-sink/pom.xml 2017-03-28 02:46:34.000000000 +0200
++++ apache-ambari-2.5.0-src/ambari-metrics/ambari-metrics-storm-sink/pom.xml 2017-04-10 22:05:35.679219116 +0200
+@@ -31,7 +31,7 @@
+ <packaging>jar</packaging>
+
+ <properties>
+- <storm.version>1.1.0-SNAPSHOT</storm.version>
++ <storm.version>1.1.0</storm.version>
+ </properties>
+
+ <build>
diff --git a/bigtop-packages/src/common/ambari/patch2-AMBARI-ConcurrentHashMap.diff b/bigtop-packages/src/common/ambari/patch2-AMBARI-ConcurrentHashMap.diff
new file mode 100644
index 00000000..bf0980e7
--- /dev/null
+++ b/bigtop-packages/src/common/ambari/patch2-AMBARI-ConcurrentHashMap.diff
@@ -0,0 +1,19 @@
+diff -ruaN apache-ambari-2.5.0-src.orig/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java apache-ambari-2.5.0-src/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
+--- apache-ambari-2.5.0-src.orig/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java 2017-03-27 20:46:35.000000000 -0400
++++ apache-ambari-2.5.0-src/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java 2017-05-21 23:48:37.676372818 -0400
+@@ -25,6 +25,7 @@
+ import java.util.Map;
+ import java.util.Map.Entry;
+ import java.util.Set;
++import java.util.concurrent.ConcurrentHashMap;
+ import java.util.concurrent.ConcurrentMap;
+ import java.util.concurrent.locks.Lock;
+ import java.util.concurrent.locks.ReadWriteLock;
+@@ -77,7 +78,6 @@
+ import org.apache.ambari.server.state.fsm.StateMachine;
+ import org.apache.ambari.server.state.fsm.StateMachineFactory;
+ import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
+-import org.jboss.netty.util.internal.ConcurrentHashMap;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+
diff --git a/bigtop-packages/src/common/apex/do-component-build b/bigtop-packages/src/common/apex/do-component-build
index 49a8e82b..f0905ae2 100644
--- a/bigtop-packages/src/common/apex/do-component-build
+++ b/bigtop-packages/src/common/apex/do-component-build
@@ -16,7 +16,7 @@
. `dirname $0`/bigtop.bom
-export MAVEN_OPTS="-XX:PermSize=1024m -XX:MaxPermSize=1024m"
+export MAVEN_OPTS=""
# bigtop installs maven on its own and not through the package manager
export PATH=/usr/local/maven/bin:$PATH
@@ -117,6 +117,7 @@ for i in `diff -r all-deps/ hadoop-deps/ | grep all-deps | awk '{print $4}'`; do
rm -rf all-deps/ hadoop-deps/
rm -rf deps/hadoop-common-$HADOOP_VERSION-tests.jar
+rm -rf deps/slf4j-*.jar
#Download non-ASF licenses for libraries
wget -t 3 -q -O jline-LICENSE.txt https://raw.githubusercontent.com/jline/jline2/jline-2.11/LICENSE.txt
diff --git a/bigtop-packages/src/common/apex/patch1-for-hadoop27x.diff b/bigtop-packages/src/common/apex/patch1-for-hadoop27x.diff
index 2cd6be71..3ff850a3 100644
--- a/bigtop-packages/src/common/apex/patch1-for-hadoop27x.diff
+++ b/bigtop-packages/src/common/apex/patch1-for-hadoop27x.diff
@@ -1,7 +1,7 @@
-diff -Naur orig/engine/src/main/java/com/datatorrent/stram/client/StramAppLauncher.java new/engine/src/main/java/com/datatorrent/stram/client/StramAppLauncher.java
---- orig/engine/src/main/java/com/datatorrent/stram/client/StramAppLauncher.java 2016-11-22 02:49:11.000000000 +0530
-+++ new/engine/src/main/java/com/datatorrent/stram/client/StramAppLauncher.java 2017-03-23 23:08:32.692947303 +0530
-@@ -583,7 +583,7 @@
+diff -uraN apache-apex-core-3.6.0-orig/engine/src/main/java/com/datatorrent/stram/client/StramAppLauncher.java apache-apex-core-3.6.0/engine/src/main/java/com/datatorrent/stram/client/StramAppLauncher.java
+--- apache-apex-core-3.6.0-orig/engine/src/main/java/com/datatorrent/stram/client/StramAppLauncher.java 2017-04-28 20:55:41.000000000 +0200
++++ apache-apex-core-3.6.0/engine/src/main/java/com/datatorrent/stram/client/StramAppLauncher.java 2017-05-27 23:44:35.028907503 +0200
+@@ -584,7 +584,7 @@
if (UserGroupInformation.isSecurityEnabled()) {
long hdfsTokenMaxLifeTime = conf.getLong(StramClientUtils.DT_HDFS_TOKEN_MAX_LIFE_TIME, conf.getLong(StramClientUtils.HDFS_TOKEN_MAX_LIFE_TIME, StramClientUtils.DELEGATION_TOKEN_MAX_LIFETIME_DEFAULT));
dag.setAttribute(LogicalPlan.HDFS_TOKEN_LIFE_TIME, hdfsTokenMaxLifeTime);
@@ -10,15 +10,15 @@ diff -Naur orig/engine/src/main/java/com/datatorrent/stram/client/StramAppLaunch
dag.setAttribute(LogicalPlan.RM_TOKEN_LIFE_TIME, rmTokenMaxLifeTime);
setTokenRefreshCredentials(dag, conf);
}
-diff -Naur orig/engine/src/main/java/com/datatorrent/stram/plan/logical/LogicalPlan.java new/engine/src/main/java/com/datatorrent/stram/plan/logical/LogicalPlan.java
---- orig/engine/src/main/java/com/datatorrent/stram/plan/logical/LogicalPlan.java 2016-11-22 02:48:16.000000000 +0530
-+++ new/engine/src/main/java/com/datatorrent/stram/plan/logical/LogicalPlan.java 2017-03-23 23:07:18.948865455 +0530
-@@ -156,7 +156,7 @@
+diff -uraN apache-apex-core-3.6.0-orig/engine/src/main/java/com/datatorrent/stram/plan/logical/LogicalPlan.java apache-apex-core-3.6.0/engine/src/main/java/com/datatorrent/stram/plan/logical/LogicalPlan.java
+--- apache-apex-core-3.6.0-orig/engine/src/main/java/com/datatorrent/stram/plan/logical/LogicalPlan.java 2017-04-28 20:55:41.000000000 +0200
++++ apache-apex-core-3.6.0/engine/src/main/java/com/datatorrent/stram/plan/logical/LogicalPlan.java 2017-05-27 23:44:20.360926755 +0200
+@@ -162,7 +162,7 @@
*/
public static Attribute<Boolean> FAST_PUBLISHER_SUBSCRIBER = new Attribute<>(false);
public static Attribute<Long> HDFS_TOKEN_LIFE_TIME = new Attribute<>(604800000L);
- public static Attribute<Long> RM_TOKEN_LIFE_TIME = new Attribute<>(YarnConfiguration.DELEGATION_TOKEN_MAX_LIFETIME_DEFAULT);
+ public static Attribute<Long> RM_TOKEN_LIFE_TIME = new Attribute<>(YarnConfiguration.RM_DELEGATION_TOKEN_MAX_LIFETIME_DEFAULT);
- public static Attribute<String> PRINCIPAL = new Attribute<String>(null, new StringCodec.String2String());
- public static Attribute<String> KEY_TAB_FILE = new Attribute<>((String)null, new StringCodec.String2String());
+ public static Attribute<String> PRINCIPAL = new Attribute<>(null, StringCodec.String2String.getInstance());
+ public static Attribute<String> KEY_TAB_FILE = new Attribute<>((String)null, StringCodec.String2String.getInstance());
public static Attribute<Double> TOKEN_REFRESH_ANTICIPATORY_FACTOR = new Attribute<>(0.7);
diff --git a/bigtop-packages/src/common/flume/do-component-build b/bigtop-packages/src/common/flume/do-component-build
index bbf76561..b7c3362c 100755
--- a/bigtop-packages/src/common/flume/do-component-build
+++ b/bigtop-packages/src/common/flume/do-component-build
@@ -18,7 +18,7 @@ set -ex
. `dirname $0`/bigtop.bom
-export MAVEN_OPTS="-Xmx1536m -Xms256m -XX:MaxPermSize=256m"
+export MAVEN_OPTS="-Xmx1536m -Xms256m"
sed -i -e \
's#<artifactId>asynchbase</artifactId>#<artifactId>asynchbase</artifactId>\n<exclusions>\n<exclusion>\n<groupId>org.apache.zookeeper</groupId>\n<artifactId>zookeeper</artifactId>\n</exclusion>\n</exclusions>#' flume-ng-sinks/flume-ng-hbase-sink/pom.xml
diff --git a/bigtop-packages/src/common/hadoop/init-hcfs.json b/bigtop-packages/src/common/hadoop/init-hcfs.json
index f71f3854..6225a69e 100644
--- a/bigtop-packages/src/common/hadoop/init-hcfs.json
+++ b/bigtop-packages/src/common/hadoop/init-hcfs.json
@@ -92,7 +92,8 @@
["/user/hbase","755","hbase",null],
["/apps",null,null,null],
["/apps/tez",null,null,null],
- ["/apps/tez/lib",null,null,null]
+ ["/apps/tez/lib",null,null,null],
+ ["/user/zeppelin","777","zeppelin"]
],
"user": [
["tom", "0755", null],
diff --git a/bigtop-packages/src/common/hama/do-component-build b/bigtop-packages/src/common/hama/do-component-build
index a5bfc916..78bd682d 100644
--- a/bigtop-packages/src/common/hama/do-component-build
+++ b/bigtop-packages/src/common/hama/do-component-build
@@ -17,5 +17,5 @@
set -ex
. `dirname $0`/bigtop.bom
-export MAVEN_OPTS="-XX:PermSize=1024m -XX:MaxPermSize=1024m"
+export MAVEN_OPTS=""
mvn -Phadoop2 -Dhadoop.version=$HADOOP_VERSION -Dzookeeper.version=$ZOOKEEPER_VERSION clean install -DskipTests "$@"
diff --git a/bigtop-packages/src/common/hbase/patch0-jline-jrub.diff b/bigtop-packages/src/common/hbase/patch0-jline-jrub.diff
new file mode 100644
index 00000000..d6aa4e78
--- /dev/null
+++ b/bigtop-packages/src/common/hbase/patch0-jline-jrub.diff
@@ -0,0 +1,15 @@
+--- ./hbase-shell/src/main/ruby/shell/formatter.rb.orig 2017-04-22 12:39:16.617041337 +0000
++++ ./hbase-shell/src/main/ruby/shell/formatter.rb 2017-04-22 12:40:46.642890485 +0000
+@@ -30,7 +30,11 @@
+
+ def refresh_width()
+ if $stdout.tty?
+- @max_width = Java::jline.Terminal.getTerminal().getTerminalWidth()
++ if Java::jline.Terminal.respond_to?(:getTerminal)
++ @max_width = Java::jline.Terminal.getTerminal.getTerminalWidth
++ else
++ @max_width = Java::jline.TerminalFactory.get.getWidth
++ end
+ else
+ @max_width = 0
+ end
diff --git a/bigtop-packages/src/common/hive/do-component-build b/bigtop-packages/src/common/hive/do-component-build
index 2293c55c..f8be82cf 100644
--- a/bigtop-packages/src/common/hive/do-component-build
+++ b/bigtop-packages/src/common/hive/do-component-build
@@ -31,7 +31,7 @@ HIVE_MAVEN_OPTS=" -Dhbase.version=$HBASE_VERSION \
-Dspark.version=${SPARK1_VERSION}
"
-export MAVEN_OPTS="-Xmx1500m -Xms1500m -XX:MaxPermSize=256m"
+export MAVEN_OPTS="-Xmx1500m -Xms1500m"
mvn ${HIVE_MAVEN_OPTS} clean install -Phadoop-2,dist "$@"
mkdir -p build/dist
diff --git a/bigtop-packages/src/common/ignite-hadoop/do-component-build b/bigtop-packages/src/common/ignite-hadoop/do-component-build
index 417477cc..5f0eb5d4 100644
--- a/bigtop-packages/src/common/ignite-hadoop/do-component-build
+++ b/bigtop-packages/src/common/ignite-hadoop/do-component-build
@@ -18,6 +18,6 @@ set -ex
. `dirname $0`/bigtop.bom
-export MAVEN_OPTS="-Xmx512M -XX:MaxPermSize=512M"
+export MAVEN_OPTS="-Xmx512M"
mvn clean install -DskipTests -Dhadoop.version=$HADOOP_VERSION -Dspark.version=$SPARK_VERSION -Dignite.edition=hadoop
diff --git a/bigtop-packages/src/common/ignite-hadoop/ignite-hadoop.default b/bigtop-packages/src/common/ignite-hadoop/ignite-hadoop.default
index 87626d63..a0947203 100644
--- a/bigtop-packages/src/common/ignite-hadoop/ignite-hadoop.default
+++ b/bigtop-packages/src/common/ignite-hadoop/ignite-hadoop.default
@@ -20,3 +20,5 @@ export IGNITE_PID_DIR="/var/run/ignite-hadoop"
export IGNITE_LOG_DIR="/var/log/ignite-hadoop"
export IGNITE_WORK_DIR="/var/run/ignite-hadoop/work"
export IGNITE_IDENT_STRING=ignite
+
+export HADOOP_HOME=${HADOOP_HOME:-/usr/lib/hadoop}
diff --git a/bigtop-packages/src/common/kafka/do-component-build b/bigtop-packages/src/common/kafka/do-component-build
index 31cef4a1..a67d46b3 100644
--- a/bigtop-packages/src/common/kafka/do-component-build
+++ b/bigtop-packages/src/common/kafka/do-component-build
@@ -25,7 +25,7 @@ BUILD_OPTS="-Divy.home=${HOME}/.ivy2 -Dsbt.ivy.home=${HOME}/.ivy2 -Duser.home=${
## this might be an issue at times
# http://maven.40175.n5.nabble.com/Not-finding-artifact-in-local-repo-td3727753.html
-export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m -XX:PermSize=1024m -XX:MaxPermSize=1024m"
+export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
gradle wrapper
diff --git a/bigtop-packages/src/common/oozie/do-component-build b/bigtop-packages/src/common/oozie/do-component-build
index 47fefbf5..601e5a7c 100755
--- a/bigtop-packages/src/common/oozie/do-component-build
+++ b/bigtop-packages/src/common/oozie/do-component-build
@@ -82,7 +82,7 @@ sed -i.bak "/http:\/\/repository.codehaus.org/a\\
<enabled>false</enabled>\\
</releases>" ${WORKDIR}/pom.xml
-export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=128m"
+export MAVEN_OPTS="-Xmx512m"
# Invoke Oozie build script
${WORKDIR}/bin/mkdistro.sh -DjavaVersion=${JDK_VERSION} -DskipTests -Phadoop-2 -Puber -Dhadoop.version=${HADOOP_VERSION} -Dhadoop.auth.version=${HADOOP_VERSION} -Dhive.version=${HIVE_VERSION} -Dpig.version=${PIG_VERSION} -Dsqoop.version=${SQOOP_VERSION} -Dspark.version=${SPARK_VERSION} ${EXTRA_GOALS} -Dmaven.repo.local=${HOME}/.m2/repository "$@"
MKDISTRO_RESULT=$?
diff --git a/bigtop-packages/src/common/spark/do-component-build b/bigtop-packages/src/common/spark/do-component-build
index 21dffbe0..3b79b0d3 100644
--- a/bigtop-packages/src/common/spark/do-component-build
+++ b/bigtop-packages/src/common/spark/do-component-build
@@ -28,7 +28,7 @@ BUILD_OPTS="-Divy.home=${HOME}/.ivy2 -Dsbt.ivy.home=${HOME}/.ivy2 -Duser.home=${
-Dyarn.version=$HADOOP_VERSION \
-Dprotobuf.version=2.5.0 \
-DrecompileMode=all \
- -Pyarn -Phadoop-2.6 \
+ -Pyarn -Phadoop-2.7 \
-Phive -Phive-thriftserver \
$SPARK_BUILD_OPTS"
diff --git a/bigtop-packages/src/common/spark/spark-env.sh b/bigtop-packages/src/common/spark/spark-env.sh
index 885aed13..f772ef1a 100755
--- a/bigtop-packages/src/common/spark/spark-env.sh
+++ b/bigtop-packages/src/common/spark/spark-env.sh
@@ -39,5 +39,5 @@ export SPARK_MASTER_WEBUI_PORT=18080
export SPARK_WORKER_DIR=${SPARK_WORKER_DIR:-/var/run/spark/work}
export SPARK_WORKER_PORT=7078
export SPARK_WORKER_WEBUI_PORT=18081
-
+export SPARK_MASTER_URL=spark://$STANDALONE_SPARK_MASTER_HOST:$SPARK_MASTER_PORT
export SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS -Dspark.history.fs.logDirectory=hdfs:///var/log/spark/apps -Dspark.history.ui.port=18082"
diff --git a/bigtop-packages/src/common/spark1/do-component-build b/bigtop-packages/src/common/spark1/do-component-build
index c6078b20..7ea85d43 100644
--- a/bigtop-packages/src/common/spark1/do-component-build
+++ b/bigtop-packages/src/common/spark1/do-component-build
@@ -35,7 +35,7 @@ BUILD_OPTS="-Divy.home=${HOME}/.ivy2 -Dsbt.ivy.home=${HOME}/.ivy2 -Duser.home=${
## this might be an issue at times
# http://maven.40175.n5.nabble.com/Not-finding-artifact-in-local-repo-td3727753.html
-export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m -XX:PermSize=1024m -XX:MaxPermSize=1024m"
+export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
mvn $BUILD_OPTS -DskipTests install
diff --git a/bigtop-packages/src/common/zeppelin/do-component-build b/bigtop-packages/src/common/zeppelin/do-component-build
index 2939b2a1..05d93f33 100644
--- a/bigtop-packages/src/common/zeppelin/do-component-build
+++ b/bigtop-packages/src/common/zeppelin/do-component-build
@@ -30,36 +30,31 @@ if [ $HOSTTYPE = "powerpc64le" ] ; then
sed -i "s|<version>0.0.25</version>|<version>1.1</version>|" zeppelin-web/pom.xml
fi
-t="scala.version"
-find . -name pom.xml -exec sed -i "s#<$t>.*</$t>#<$t>${SCALA_VERSION}</$t>#" {} \;
-t="scala.binary.version"
-find . -name pom.xml -exec sed -i "s#<$t>.*</$t>#<$t>${SCALA_VERSION%.*}</$t>#" {} \;
-t="scala.macros.version"
-find . -name pom.xml -exec sed -i "s#<$t>.*</$t>#<$t>2.1.0</$t>#" {} \;
-t="spark.version"
-find . -name pom.xml -exec sed -i "s#<$t>.*</$t>#<$t>${SPARK_VERSION}</$t>#" {} \;
-t="hadoop.version"
-find . -name pom.xml -exec sed -i "s#<$t>.*</$t>#<$t>${HADOOP_VERSION}</$t>#" {} \;
-t="hbase.hbase.version"
-find . -name pom.xml -exec sed -i "s#<$t>.*</$t>#<$t>${HBASE_VERSION}</$t>#" {} \;
-t="hbase.hadoop.version"
-find . -name pom.xml -exec sed -i "s#<$t>.*</$t>#<$t>${HADOOP_VERSION}</$t>#" {} \;
-t="ignite.version"
-find . -name pom.xml -exec sed -i "s#<$t>.*</$t>#<$t>${IGNITE_HADOOP_VERSION}</$t>#" {} \;
-
-BUILD_OPTS="-Divy.home=${HOME}/.ivy2 -Dsbt.ivy.home=${HOME}/.ivy2 -Duser.home=${HOME} \
- -Drepo.maven.org=$IVY_MIRROR_PROP \
- -Dreactor.repo=file://${HOME}/.m2/repository \
+./dev/change_scala_version.sh ${SCALA_VERSION%.*}
+
+BUILD_OPTS="-Dscala.version=${SCALA_VERSION} \
+ -Dscala.binary.version=${SCALA_VERSION%.*} \
+ -Dscala.macros.version=2.1.0 \
+ -Dspark.version=${SPARK_VERSION} \
+ -Dhadoop.version=${HADOOP_VERSION} \
+ -Dhbase.hbase.version=${HBASE_VERSION} \
+ -Dhbase.hadoop.version=${HADOOP_VERSION} \
+ -Dignite.version=${IGNITE_HADOOP_VERSION} \
+ -Dflink.version=${FLINK_VERSION} \
+ -Pspark-${SPARK_VERSION%.*} \
+ -Phadoop-${HADOOP_VERSION%.*} \
-Pscala-${SCALA_VERSION%.*} \
+ -Ppyspark \
+ -Psparkr \
-Pbuild-distr"
-
+
if [ "$ZEPPELIN_RUN_TESTS" = "true" ]; then
BUILD_OPTS="$BUILD_OPTS -DskipTests=false"
else
BUILD_OPTS="$BUILD_OPTS -DskipTests"
fi
-export MAVEN_OPTS="-Xmx1500m -Xms1500m -XX:MaxPermSize=256m"
+export MAVEN_OPTS="-Xmx1500m -Xms1500m"
mvn $BUILD_OPTS clean package
diff --git a/bigtop-packages/src/deb/flink/flink.preinst b/bigtop-packages/src/deb/flink/flink.preinst
index cee0a14a..ece0ee02 100644
--- a/bigtop-packages/src/deb/flink/flink.preinst
+++ b/bigtop-packages/src/deb/flink/flink.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group flink >/dev/null || groupadd -r flink
if ! getent passwd flink >/dev/null; then
# Adding system user: flink .
adduser \
--system \
- --group \
+ --ingroup flink \
--home /var/lib/flink \
--gecos "Flink" \
--shell /bin/false \
diff --git a/bigtop-packages/src/deb/flume/flume.preinst b/bigtop-packages/src/deb/flume/flume.preinst
index f0fb3e55..21c0ea02 100644
--- a/bigtop-packages/src/deb/flume/flume.preinst
+++ b/bigtop-packages/src/deb/flume/flume.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group flume >/dev/null || groupadd -r flume
if ! getent passwd flume >/dev/null; then
# Adding system user: flume .
adduser \
--system \
- --group \
+ --ingroup flume \
--home /var/lib/flume \
--gecos "Flume User" \
--shell /bin/false \
diff --git a/bigtop-packages/src/deb/hadoop/hadoop-hdfs.preinst b/bigtop-packages/src/deb/hadoop/hadoop-hdfs.preinst
index dedd7b9b..72bdc3c2 100644
--- a/bigtop-packages/src/deb/hadoop/hadoop-hdfs.preinst
+++ b/bigtop-packages/src/deb/hadoop/hadoop-hdfs.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group hdfs >/dev/null || groupadd -r hdfs
if ! getent passwd hdfs >/dev/null; then
# Adding system user: hdfs.
adduser \
--system \
- --group \
+ --ingroup hdfs \
--home /var/lib/hadoop-hdfs \
--gecos "Hadoop HDFS" \
--shell /bin/bash \
diff --git a/bigtop-packages/src/deb/hadoop/hadoop-httpfs.preinst b/bigtop-packages/src/deb/hadoop/hadoop-httpfs.preinst
index 634bcc3c..98d6a8ba 100644
--- a/bigtop-packages/src/deb/hadoop/hadoop-httpfs.preinst
+++ b/bigtop-packages/src/deb/hadoop/hadoop-httpfs.preinst
@@ -32,10 +32,11 @@ set -e
case "$1" in
install|upgrade)
+ getent group httpfs >/dev/null || groupadd -r httpfs
if ! getent passwd httpfs >/dev/null; then
adduser \
--system \
- --group \
+ --ingroup httpfs \
--home /var/run/hadoop-httpfs \
--gecos "Hadoop HTTPFS" \
--shell /bin/bash \
diff --git a/bigtop-packages/src/deb/hadoop/hadoop-mapreduce.preinst b/bigtop-packages/src/deb/hadoop/hadoop-mapreduce.preinst
index b52c5fdc..84e975e5 100644
--- a/bigtop-packages/src/deb/hadoop/hadoop-mapreduce.preinst
+++ b/bigtop-packages/src/deb/hadoop/hadoop-mapreduce.preinst
@@ -32,10 +32,11 @@ set -e
case "$1" in
install|upgrade)
+ getent group mapred >/dev/null || groupadd -r mapred
if ! getent passwd mapred >/dev/null; then
adduser \
--system \
- --group \
+ --ingroup mapred \
--home /var/lib/hadoop-mapreduce \
--gecos "Hadoop MapReduce" \
--shell /bin/bash \
diff --git a/bigtop-packages/src/deb/hadoop/hadoop-yarn.preinst b/bigtop-packages/src/deb/hadoop/hadoop-yarn.preinst
index 14451362..fdf5aae9 100644
--- a/bigtop-packages/src/deb/hadoop/hadoop-yarn.preinst
+++ b/bigtop-packages/src/deb/hadoop/hadoop-yarn.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group yarn >/dev/null || groupadd -r yarn
if ! getent passwd yarn >/dev/null; then
# Adding system user: yarn.
adduser \
--system \
- --group \
+ --ingroup yarn \
--home /var/lib/hadoop-yarn \
--gecos "Hadoop YARN" \
--shell /bin/bash \
diff --git a/bigtop-packages/src/deb/hama/hama.preinst b/bigtop-packages/src/deb/hama/hama.preinst
index 421ee900..cc0ecd7a 100644
--- a/bigtop-packages/src/deb/hama/hama.preinst
+++ b/bigtop-packages/src/deb/hama/hama.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group hama >/dev/null || groupadd -r hama
if ! getent passwd hama >/dev/null; then
# Adding system user: hama.
adduser \
--system \
- --group \
+ --ingroup hama \
--home /var/lib/hama \
--gecos "Apache Hama User" \
--shell /bin/bash \
diff --git a/bigtop-packages/src/deb/hbase/hbase.preinst b/bigtop-packages/src/deb/hbase/hbase.preinst
index 3c68f764..4e4a9ea8 100644
--- a/bigtop-packages/src/deb/hbase/hbase.preinst
+++ b/bigtop-packages/src/deb/hbase/hbase.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group hbase >/dev/null || groupadd -r hbase
if ! getent passwd hbase >/dev/null; then
# Adding system user: hbase.
adduser \
--system \
- --group \
+ --ingroup hbase \
--home /var/run/hbase \
--gecos "HBase User" \
--shell /bin/bash \
diff --git a/bigtop-packages/src/deb/hive/hive.preinst b/bigtop-packages/src/deb/hive/hive.preinst
index f87c85bf..db807fea 100644
--- a/bigtop-packages/src/deb/hive/hive.preinst
+++ b/bigtop-packages/src/deb/hive/hive.preinst
@@ -23,11 +23,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group hive >/dev/null || groupadd -r hive
if ! getent passwd hive >/dev/null; then
# Adding system user: hive.
adduser \
--system \
- --group \
+ --ingroup hive \
--home /var/lib/hive \
--gecos "Hive User" \
--shell /bin/false \
diff --git a/bigtop-packages/src/deb/hue/control b/bigtop-packages/src/deb/hue/control
index e1240d9b..ccfc640f 100644
--- a/bigtop-packages/src/deb/hue/control
+++ b/bigtop-packages/src/deb/hue/control
@@ -23,7 +23,7 @@ Homepage: http://github.com/cloudera/hue
Package: hue-common
Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, ${build:SYS-PYTHON}, libsasl2-modules-gssapi-mit, libxslt1.1, make, python (>= 2.6), libgmp10, libffi
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${build:SYS-PYTHON}, libsasl2-modules-gssapi-mit, libxslt1.1, make, python (>= 2.6), libgmp10, libffi6
Description: A browser-based desktop interface for Hadoop
Hue is a browser-based desktop interface for interacting with Hadoop.
It supports a file browser, job tracker interface, cluster health monitor, and more.
diff --git a/bigtop-packages/src/deb/hue/hue-common.preinst b/bigtop-packages/src/deb/hue/hue-common.preinst
index 0641767f..28242eaf 100644
--- a/bigtop-packages/src/deb/hue/hue-common.preinst
+++ b/bigtop-packages/src/deb/hue/hue-common.preinst
@@ -32,11 +32,12 @@ set -e
USER=hue
case "$1" in
install|upgrade)
+ getent group $USER >/dev/null || groupadd -r $USER
if ! getent passwd $USER >/dev/null; then
adduser \
--system \
--disabled-login \
- --group \
+ --ingroup $USER \
--home /usr/lib/hue \
--gecos "Hue daemon" \
$USER >/dev/null
diff --git a/bigtop-packages/src/deb/ignite-hadoop/ignite-hadoop.preinst b/bigtop-packages/src/deb/ignite-hadoop/ignite-hadoop.preinst
index b3b7db94..2623c283 100644
--- a/bigtop-packages/src/deb/ignite-hadoop/ignite-hadoop.preinst
+++ b/bigtop-packages/src/deb/ignite-hadoop/ignite-hadoop.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group ignite >/dev/null || groupadd -r ignite
if ! getent passwd ignite >/dev/null; then
# Adding system user: ignite.
adduser \
--system \
- --group \
+ --ingroup ignite \
--home /var/run/ignite-hadoop \
--gecos "Ignite User" \
--shell /bin/bash \
diff --git a/bigtop-packages/src/deb/oozie/oozie.preinst b/bigtop-packages/src/deb/oozie/oozie.preinst
index 8a74e9c5..a5f8d722 100644
--- a/bigtop-packages/src/deb/oozie/oozie.preinst
+++ b/bigtop-packages/src/deb/oozie/oozie.preinst
@@ -32,12 +32,13 @@ set -e
case "$1" in
install|upgrade)
+ getent group oozie >/dev/null || groupadd -r oozie
if ! getent passwd oozie >/dev/null; then
# Adding system user: oozie.
adduser \
--system \
--disabled-login \
- --group \
+ --ingroup oozie \
--home /var/lib/oozie \
--gecos "Oozie User" \
--shell /bin/false \
diff --git a/bigtop-packages/src/deb/phoenix/phoenix.preinst b/bigtop-packages/src/deb/phoenix/phoenix.preinst
index f3174ca5..24fe06d4 100644
--- a/bigtop-packages/src/deb/phoenix/phoenix.preinst
+++ b/bigtop-packages/src/deb/phoenix/phoenix.preinst
@@ -23,12 +23,13 @@ set -e
case "$1" in
install|upgrade)
- if ! getent passwd phenix >/dev/null; then
- # Adding system user: phenix.
+ getent group phoenix >/dev/null || groupadd -r phoenix
+ if ! getent passwd phoenix >/dev/null; then
+ # Adding system user: phoenix.
adduser \
--system \
- --group \
- --home /var/lib/phenix \
+ --ingroup phoenix \
+ --home /var/lib/phoenix \
--gecos "Phoenix User" \
--shell /bin/false \
phoenix >/dev/null
diff --git a/bigtop-packages/src/deb/solr/solr.preinst b/bigtop-packages/src/deb/solr/solr.preinst
index 1c2ad0f5..68ad4177 100644
--- a/bigtop-packages/src/deb/solr/solr.preinst
+++ b/bigtop-packages/src/deb/solr/solr.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group solr >/dev/null || groupadd -r solr
if ! getent passwd solr >/dev/null; then
# Adding system user: solr .
adduser \
--system \
- --group \
+ --ingroup solr \
--home /var/lib/solr \
--gecos "Solr" \
--shell /bin/false \
diff --git a/bigtop-packages/src/deb/spark/control b/bigtop-packages/src/deb/spark/control
index 4b7f2ffe..01a393de 100644
--- a/bigtop-packages/src/deb/spark/control
+++ b/bigtop-packages/src/deb/spark/control
@@ -23,7 +23,7 @@ Homepage: http://spark.apache.org/
Package: spark-core
Architecture: all
-Depends: adduser, bigtop-utils (>= 0.7), hadoop-client
+Depends: adduser, bigtop-utils (>= 0.7), hadoop-client, hadoop-yarn
Description: Lightning-Fast Cluster Computing
Spark is a MapReduce-like cluster computing framework designed to support
low-latency iterative jobs and interactive use from an interpreter. It is
diff --git a/bigtop-packages/src/deb/spark/rules b/bigtop-packages/src/deb/spark/rules
index 0bc7fc7f..d5fdb6d9 100644
--- a/bigtop-packages/src/deb/spark/rules
+++ b/bigtop-packages/src/deb/spark/rules
@@ -22,6 +22,10 @@ export DH_VERBOSE=1
# This has to be exported to make some magic below work.
export DH_OPTIONS
+lib_spark=/usr/lib/spark
+lib_hadoop_client=/usr/lib/hadoop/client
+lib_hadoop_yarn=/usr/lib/hadoop-yarn/
+
%:
dh $@
@@ -45,3 +49,20 @@ override_dh_install:
dh_install
# BIGTOP-2588 drop datanucleus jars from spark-core
rm -Rf debian/spark-core/usr/lib/spark/jars/datanucleus*
+
+ rm -f debian/tmp/${lib_spark}/jars/hadoop-*.jar
+ ln -s ${lib_hadoop_client}/hadoop-annotations.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_client}/hadoop-auth.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_client}/hadoop-client.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_client}/hadoop-common.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_client}/hadoop-hdfs.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_client}/hadoop-mapreduce-client-app.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_client}/hadoop-mapreduce-client-common.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_client}/hadoop-mapreduce-client-core.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_client}/hadoop-mapreduce-client-jobclient.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_client}/hadoop-mapreduce-client-shuffle.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_yarn}/hadoop-yarn-api.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_yarn}/hadoop-yarn-client.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_yarn}/hadoop-yarn-common.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_yarn}/hadoop-yarn-server-common.jar debian/tmp/${lib_spark}/jars/
+ ln -s ${lib_hadoop_yarn}/hadoop-yarn-server-web-proxy.jar debian/tmp/${lib_spark}/jars/
diff --git a/bigtop-packages/src/deb/spark/spark-core.preinst b/bigtop-packages/src/deb/spark/spark-core.preinst
index ea83e68e..d0b716f8 100644
--- a/bigtop-packages/src/deb/spark/spark-core.preinst
+++ b/bigtop-packages/src/deb/spark/spark-core.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group spark >/dev/null || groupadd -r spark
if ! getent passwd spark >/dev/null; then
# Adding system user: spark .
adduser \
--system \
- --group \
+ --ingroup spark \
--home /var/lib/spark \
--gecos "Spark" \
--shell /bin/false \
diff --git a/bigtop-packages/src/deb/spark1/spark-core.preinst b/bigtop-packages/src/deb/spark1/spark-core.preinst
index ea83e68e..d0b716f8 100644
--- a/bigtop-packages/src/deb/spark1/spark-core.preinst
+++ b/bigtop-packages/src/deb/spark1/spark-core.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group spark >/dev/null || groupadd -r spark
if ! getent passwd spark >/dev/null; then
# Adding system user: spark .
adduser \
--system \
- --group \
+ --ingroup spark \
--home /var/lib/spark \
--gecos "Spark" \
--shell /bin/false \
diff --git a/bigtop-packages/src/deb/sqoop/sqoop.preinst b/bigtop-packages/src/deb/sqoop/sqoop.preinst
index 56d7e736..1477d5cb 100644
--- a/bigtop-packages/src/deb/sqoop/sqoop.preinst
+++ b/bigtop-packages/src/deb/sqoop/sqoop.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group sqoop >/dev/null || groupadd -r sqoop
if ! getent passwd sqoop >/dev/null; then
# Adding system user: sqoop .
adduser \
--system \
- --group \
+ --ingroup sqoop \
--home /var/lib/sqoop \
--gecos "Sqoop User" \
--shell /bin/false \
diff --git a/bigtop-packages/src/deb/tajo/tajo.preinst b/bigtop-packages/src/deb/tajo/tajo.preinst
index ee7a7944..63d75962 100644
--- a/bigtop-packages/src/deb/tajo/tajo.preinst
+++ b/bigtop-packages/src/deb/tajo/tajo.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group tajo >/dev/null || groupadd -r tajo
if ! getent passwd tajo >/dev/null; then
# Adding system user: tajo .
adduser \
--system \
- --group \
+ --ingroup tajo \
--home /var/lib/tajo \
--gecos "Tajo" \
--shell /bin/false \
diff --git a/bigtop-packages/src/deb/zeppelin/zeppelin.preinst b/bigtop-packages/src/deb/zeppelin/zeppelin.preinst
index 6434c1ac..aa19763f 100644
--- a/bigtop-packages/src/deb/zeppelin/zeppelin.preinst
+++ b/bigtop-packages/src/deb/zeppelin/zeppelin.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group zeppelin >/dev/null || groupadd -r zeppelin
if ! getent passwd zeppelin >/dev/null; then
# Adding system user: zeppelin .
adduser \
--system \
- --group \
+ --ingroup zeppelin \
--home /var/lib/zeppelin \
--gecos "Zeppelin" \
--shell /bin/false \
diff --git a/bigtop-packages/src/deb/zookeeper/zookeeper.preinst b/bigtop-packages/src/deb/zookeeper/zookeeper.preinst
index 3183a513..98860628 100644
--- a/bigtop-packages/src/deb/zookeeper/zookeeper.preinst
+++ b/bigtop-packages/src/deb/zookeeper/zookeeper.preinst
@@ -32,11 +32,12 @@ set -e
case "$1" in
install|upgrade)
+ getent group zookeeper >/dev/null || groupadd -r zookeeper
if ! getent passwd zookeeper >/dev/null; then
# Adding system user: zookeeper .
adduser \
--system \
- --group \
+ --ingroup zookeeper \
--home /var/lib/zookeeper \
--gecos "ZooKeeper User" \
--shell /bin/false \
diff --git a/bigtop-packages/src/rpm/ambari/SPECS/ambari.spec b/bigtop-packages/src/rpm/ambari/SPECS/ambari.spec
index b51f9a11..24334978 100644
--- a/bigtop-packages/src/rpm/ambari/SPECS/ambari.spec
+++ b/bigtop-packages/src/rpm/ambari/SPECS/ambari.spec
@@ -37,10 +37,11 @@ Group: Development
BuildArch: noarch
Buildroot: %(mktemp -ud %{_tmppath}/apache-%{ambari_name}-%{version}-%{release}-XXXXXX)
License: ASL 2.0
-Source0: apache-%{ambari_name}-%{ambari_version}-src.tar.gz
+Source0: apache-%{ambari_name}-%{ambari_base_version}-src.tar.gz
Source1: do-component-build
Source2: install_%{ambari_name}.sh
Source3: bigtop.bom
+#BIGTOP_PATCH_FILES
# FIXME
AutoProv: no
AutoReqProv: no
@@ -51,6 +52,8 @@ Ambari
%prep
%setup -n apache-%{ambari_name}-%{ambari_base_version}-src
+#BIGTOP_PATCH_COMMANDS
+
%build
bash $RPM_SOURCE_DIR/do-component-build
diff --git a/bigtop-packages/src/rpm/hbase/SPECS/hbase.spec b/bigtop-packages/src/rpm/hbase/SPECS/hbase.spec
index d59a404b..a224b3ba 100644
--- a/bigtop-packages/src/rpm/hbase/SPECS/hbase.spec
+++ b/bigtop-packages/src/rpm/hbase/SPECS/hbase.spec
@@ -91,6 +91,7 @@ Source4: init.d.tmpl
Source5: hbase.default
Source6: hbase.nofiles.conf
Source7: regionserver-init.d.tpl
+#BIGTOP_PATCH_FILES
BuildArch: noarch
Requires: coreutils, /usr/sbin/useradd, /sbin/chkconfig, /sbin/service
Requires: hadoop-client, zookeeper >= 3.3.1, bigtop-utils >= 0.7
@@ -262,6 +263,8 @@ The Apache HBase REST gateway
%prep
%setup -n %{name}-%{hbase_base_version}
+#BIGTOP_PATCH_COMMANDS
+
%build
env HBASE_VERSION=%{version} bash %{SOURCE1}
diff --git a/bigtop-packages/src/rpm/ignite-hadoop/SPECS/ignite-hadoop.spec b/bigtop-packages/src/rpm/ignite-hadoop/SPECS/ignite-hadoop.spec
index 1d621c6b..b360b0a5 100644
--- a/bigtop-packages/src/rpm/ignite-hadoop/SPECS/ignite-hadoop.spec
+++ b/bigtop-packages/src/rpm/ignite-hadoop/SPECS/ignite-hadoop.spec
@@ -22,6 +22,7 @@
%define pids_ignite %{ignite_home}/pids
%define man_dir %{_mandir}
%define ignite_username ignite
+%define service_name %{name}-service
%define vcs_tag %{ignite_hadoop_version}
%if %{?suse_version:1}0
@@ -163,8 +164,8 @@ ln -s %{_localstatedir}/log/%{name} %{buildroot}/%{logs_ignite}
%__install -d -m 0755 %{buildroot}/%{_localstatedir}/run/%{name}
ln -s %{_localstatedir}/run/%{name} %{buildroot}/%{pids_ignite}
-init_file=$RPM_BUILD_ROOT/%{initd_dir}/%{name}
-bash %{SOURCE4} ${RPM_SOURCE_DIR}/ignite.svc rpm $init_file
+init_file=$RPM_BUILD_ROOT/%{initd_dir}/%{service_name}
+bash %{SOURCE4} ${RPM_SOURCE_DIR}/ignite-hadoop.svc rpm $init_file
chmod 755 $init_file
%__install -d -m 0755 $RPM_BUILD_ROOT/usr/bin
@@ -204,17 +205,17 @@ fi
%define service_macro() \
%files %1 \
-%attr(0755,root,root)/%{initd_dir}/%{name} \
+%attr(0755,root,root)/%{initd_dir}/%{service_name} \
%post %1 \
-chkconfig --add %{name} \
+chkconfig --add %{service_name} \
\
%preun %1 \
if [ $1 = 0 ] ; then \
- service %{name} stop > /dev/null 2>&1 \
- chkconfig --del %{name} \
+ service %{service_name} stop > /dev/null 2>&1 \
+ chkconfig --del %{service_name} \
fi \
%postun %1 \
if [ $1 -ge 1 ]; then \
- service %{name} condrestart >/dev/null 2>&1 \
+ service %{service_name} condrestart >/dev/null 2>&1 \
fi
%service_macro service
diff --git a/bigtop-packages/src/rpm/spark/SPECS/spark.spec b/bigtop-packages/src/rpm/spark/SPECS/spark.spec
index d2b07a68..24961095 100644
--- a/bigtop-packages/src/rpm/spark/SPECS/spark.spec
+++ b/bigtop-packages/src/rpm/spark/SPECS/spark.spec
@@ -24,6 +24,8 @@
%define bin /usr/bin
%define man_dir /usr/share/man
%define spark_services master worker history-server thriftserver
+%define lib_hadoop_client /usr/lib/hadoop/client
+%define lib_hadoop_yarn /usr/lib/hadoop-yarn/
%if %{?suse_version:1}0
%define doc_spark %{_docdir}/spark
@@ -54,7 +56,7 @@ Source6: init.d.tmpl
Source7: spark-history-server.svc
Source8: spark-thriftserver.svc
Source9: bigtop.bom
-Requires: bigtop-utils >= 0.7, hadoop-client
+Requires: bigtop-utils >= 0.7, hadoop-client, hadoop-yarn
Requires(preun): /sbin/service
%global initd_dir %{_sysconfdir}/init.d
@@ -157,6 +159,23 @@ bash $RPM_SOURCE_DIR/install_spark.sh \
--prefix=$RPM_BUILD_ROOT \
--doc-dir=%{doc_spark}
+%__rm -f $RPM_BUILD_ROOT/%{lib_spark}/jars/hadoop-*.jar
+%__ln_s %{lib_hadoop_client}/hadoop-annotations.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_client}/hadoop-auth.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_client}/hadoop-client.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_client}/hadoop-common.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_client}/hadoop-hdfs.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_client}/hadoop-mapreduce-client-app.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_client}/hadoop-mapreduce-client-common.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_client}/hadoop-mapreduce-client-core.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_client}/hadoop-mapreduce-client-jobclient.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_client}/hadoop-mapreduce-client-shuffle.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_yarn}/hadoop-yarn-api.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_yarn}/hadoop-yarn-client.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_yarn}/hadoop-yarn-common.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_yarn}/hadoop-yarn-server-common.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+%__ln_s %{lib_hadoop_yarn}/hadoop-yarn-server-web-proxy.jar $RPM_BUILD_ROOT/%{lib_spark}/jars/
+
for service in %{spark_services}
do
# Install init script
diff --git a/bigtop-packages/src/rpm/ycsb/SPECS/ycsb.spec b/bigtop-packages/src/rpm/ycsb/SPECS/ycsb.spec
index b208c36d..f89bf2e5 100644
--- a/bigtop-packages/src/rpm/ycsb/SPECS/ycsb.spec
+++ b/bigtop-packages/src/rpm/ycsb/SPECS/ycsb.spec
@@ -32,7 +32,10 @@ Source0: %{ycsb_name}-%{ycsb_base_version}.tar.gz
Source1: do-component-build
Source2: install_%{ycsb_name}.sh
Source3: bigtop.bom
-Requires: python
+## This package _explicitly_ turns off the auto-discovery of required dependencies
+## to work around OSGI corner case, added to RPM lately. See BIGTOP-2421 for more info.
+Requires: coreutils, bigtop-utils >= 0.7, python
+AutoReq: no
%description
The Yahoo! Cloud Serving Benchmark (YCSB) is an open-source
diff --git a/bigtop.bom b/bigtop.bom
index 828a9bcb..feef0d90 100644
--- a/bigtop.bom
+++ b/bigtop.bom
@@ -91,13 +91,12 @@ bigtop {
dependsOn := [list of dependents]
So, below phoenix and giraph ought to be build after the hbase has been built
- To build a component without its dependencies, simply comment out
- dependencies section or run build with -Dbuildnodeps=true
+ To build a component with its dependencies, run build with -Dbuildwithdeps=true
*/
dependencies = [
zookeeper:['hadoop', 'hbase'],
hadoop:['ignite-hadoop', 'hbase', 'crunch', 'pig', 'hive', 'tez', 'sqoop', 'sqoop2',
- 'oozie', 'mahout', 'flume', 'giraph', 'solr', 'crunch', 'spark','spark1',
+ 'oozie', 'mahout', 'flume', 'giraph', 'solr', 'spark','spark1',
'phoenix', 'alluxio', 'kafka', 'ycsb', 'kite', 'hama', 'zeppelin',
'tajo', 'apex'
],
@@ -151,7 +150,7 @@ bigtop {
'hbase' {
name = 'hbase'
relNotes = 'Apache HBase'
- version { base = '1.1.3'; pkg = base; release = 1 }
+ version { base = '1.1.9'; pkg = base; release = 1 }
tarball { destination = "${name}-${version.base}.tar.gz"
source = "${name}-${version.base}-src.tar.gz" }
url { download_path = "/$name/${version.base}/"
@@ -223,7 +222,7 @@ bigtop {
'mahout' {
name = 'mahout'
relNotes = 'Apache Mahout'
- version { base = '0.12.2'; pkg = base; release = 1 }
+ version { base = '0.13.0'; pkg = base; release = 1 }
tarball { destination = "apache-$name-distribution-${version.base}-src.tar.gz"
source = destination }
url { download_path = "/$name/${version.base}/"
@@ -305,7 +304,7 @@ bigtop {
name = 'spark'
pkg = 'spark-core'
relNotes = 'Apache Spark'
- version { base = '2.1.0'; pkg = base; release = 1 }
+ version { base = '2.1.1'; pkg = base; release = 1 }
tarball { destination = "$name-${version.base}.tar.gz"
source = "$name-${version.base}.tgz" }
url { download_path = "/$name/$name-${version.base}"
@@ -428,7 +427,7 @@ bigtop {
'zeppelin' {
name = 'zeppelin'
relNotes = 'Apache Zeppelin'
- version { base = '0.7.0'; pkg = base; release = 1 }
+ version { base = '0.7.2'; pkg = base; release = 1 }
tarball { source = "$name-${version.base}.tgz"
destination = "$name-${version.base}.tar.gz" }
url { download_path = "/$name/$name-${version.base}/"
@@ -448,7 +447,7 @@ bigtop {
'apex' {
name = 'apex'
relNotes = 'Apache Apex'
- version { base = '3.5.0'; pkg = base; release = 1 }
+ version { base = '3.6.0'; pkg = base; release = 1 }
tarball { source = "apache-$name-core-${version.base}-source-release.tar.gz"
destination = "$name-${version.base}.tar.gz" }
url { download_path = "/$name/apache-$name-core-${version.base}/"
@@ -476,7 +475,7 @@ bigtop {
'ambari' {
name = 'ambari'
relNotes = 'Apache Ambari'
- version { base = '2.5.0'; pkg = base; release = 1 }
+ version { base = '2.5.0'; pkg = '2.5.0.0'; release = 1 }
tarball { destination = "apache-$name-${version.base}-src.tar.gz"
source = destination }
url { download_path = "/$name/$name-${version.base}/"
diff --git a/bigtop_toolchain/bin/puppetize.sh b/bigtop_toolchain/bin/puppetize.sh
index a9d7798e..a5ae590b 100755
--- a/bigtop_toolchain/bin/puppetize.sh
+++ b/bigtop_toolchain/bin/puppetize.sh
@@ -55,11 +55,15 @@ case ${ID}-${VERSION_ID} in
apt-get update
apt-get -y install wget
# BIGTOP-2523. in order to install puppet 3.8 we need to get it from puppet repo
- wget -O /tmp/puppetlabs-release-trusty.deb https://apt.puppetlabs.com/puppetlabs-release-trusty.deb && dpkg -i /tmp/puppetlabs-release-trusty.deb
- rm -f /tmp/puppetlabs-release-trusty.deb
+ wget -O /tmp/puppetlabs-release-jessie.deb https://apt.puppetlabs.com/puppetlabs-release-jessie.deb && dpkg -i /tmp/puppetlabs-release-jessie.deb
+ rm -f /tmp/puppetlabs-release-jessie.deb
apt-get update
apt-get -y install curl sudo unzip puppet
;;
+ debian-9*)
+ apt-get update
+ apt-get -y install wget curl sudo unzip puppet
+ ;;
opensuse-*)
zypper --gpg-auto-import-keys install -y curl sudo unzip wget puppet suse-release ca-certificates-mozilla net-tools tar
;;
diff --git a/bigtop_toolchain/manifests/gradle.pp b/bigtop_toolchain/manifests/gradle.pp
index dcddfbe9..19be947e 100644
--- a/bigtop_toolchain/manifests/gradle.pp
+++ b/bigtop_toolchain/manifests/gradle.pp
@@ -15,7 +15,7 @@
class bigtop_toolchain::gradle {
- $gradle_version = '2.12'
+ $gradle_version = '2.14.1'
$gradle = "gradle-${gradle_version}"
exec {"/usr/bin/wget http://services.gradle.org/distributions/${gradle}-bin.zip":
diff --git a/bigtop_toolchain/manifests/jdk.pp b/bigtop_toolchain/manifests/jdk.pp
index b15539d1..8c1518b2 100644
--- a/bigtop_toolchain/manifests/jdk.pp
+++ b/bigtop_toolchain/manifests/jdk.pp
@@ -17,7 +17,9 @@ class bigtop_toolchain::jdk {
case $::operatingsystem {
/Debian/: {
require apt
- require apt::backports
+ unless $os[release][major] > "8" {
+ require apt::backports
+ }
package { 'openjdk-8-jdk' :
ensure => present,
@@ -42,6 +44,12 @@ class bigtop_toolchain::jdk {
package { 'java-1.8.0-openjdk-devel' :
ensure => present
}
+ if ($::operatingsystem == "Fedora") {
+ file { '/usr/lib/jvm/java-1.8.0-openjdk/jre/lib/security/cacerts':
+ ensure => 'link',
+ target => '/etc/pki/java/cacerts'
+ }
+ }
}
/OpenSuSE/: {
package { 'java-1_8_0-openjdk-devel' :
diff --git a/bigtop_toolchain/manifests/packages.pp b/bigtop_toolchain/manifests/packages.pp
index 64bc12b4..6101e357 100644
--- a/bigtop_toolchain/manifests/packages.pp
+++ b/bigtop_toolchain/manifests/packages.pp
@@ -132,7 +132,7 @@ class bigtop_toolchain::packages {
require => [Package['libapr1']]
}
}
- Amazon: { $pkgs = [
+ /Amazon/: { $pkgs = [
"unzip",
"curl",
"wget",
@@ -157,7 +157,14 @@ class bigtop_toolchain::packages {
"bzip2-devel",
"libffi-devel"
] }
- /(Ubuntu|Debian)/: { $pkgs = [
+ /(Ubuntu|Debian)/: {
+ # Debian-9 is using mariadb instead of mysql
+ if ($operatingsystem == "Debian") and ($os[release][major] > "8") {
+ $mysql_dev="libmariadb-dev"
+ } else {
+ $mysql_dev="libmysqlclient-dev"
+ }
+ $pkgs = [
"unzip",
"curl",
"wget",
@@ -192,7 +199,7 @@ class bigtop_toolchain::packages {
"libsqlite3-dev",
"libldap2-dev",
"libsasl2-dev",
- "libmysqlclient-dev",
+ $mysql_dev,
"python-setuptools",
"libkrb5-dev",
"asciidoc",
@@ -202,8 +209,7 @@ class bigtop_toolchain::packages {
"libboost-regex-dev",
"xfslibs-dev",
"libbz2-dev",
- "libreadline6",
- "libreadline6-dev",
+ "libreadline-dev",
"zlib1g",
"libapr1",
"libapr1-dev",
diff --git a/bigtop_toolchain/manifests/puppet-modules.pp b/bigtop_toolchain/manifests/puppet-modules.pp
index 3fab254f..38ecca26 100644
--- a/bigtop_toolchain/manifests/puppet-modules.pp
+++ b/bigtop_toolchain/manifests/puppet-modules.pp
@@ -23,9 +23,14 @@ class bigtop_toolchain::puppet-modules {
case $operatingsystem{
/Ubuntu|Debian/: {
+ if versioncmp($::puppetversion, '4') < 0 {
+ $version = '--version 2.4.0'
+ } else {
+ $version = ''
+ }
exec { 'install-puppet-apt':
path => '/usr/bin:/bin',
- command => 'puppet module install puppetlabs-apt',
+ command => "puppet module install puppetlabs-apt ${version}",
creates => '/etc/puppet/modules/apt',
}
}
diff --git a/build.gradle b/build.gradle
index 8857d7c5..7cf6b142 100644
--- a/build.gradle
+++ b/build.gradle
@@ -23,7 +23,7 @@ buildscript {
}
plugins {
- id "de.undercouch.download" version "2.0.0"
+ id "de.undercouch.download" version "3.2.0"
id "org.nosphere.apache.rat" version "0.2.0"
}
@@ -226,7 +226,7 @@ task toolchain(type:Exec,
description: 'Setup dev. env via toolchain; Requires: Puppet, sudo',
group: DEVENV_GROUP) {
def command = [
- 'sudo', 'puppet', 'apply', '-d',
+ 'sudo', 'puppet', 'apply', '-d', '--parser', 'future',
"--modulepath=${projectDir.absolutePath}:/etc/puppet/modules", '-e',
'include bigtop_toolchain::installer'
]
diff --git a/buildSrc/src/main/groovy/org/apache/bigtop/NullOutputStream.groovy b/buildSrc/src/main/groovy/org/apache/bigtop/NullOutputStream.groovy
deleted file mode 100644
index 0d673bbc..00000000
--- a/buildSrc/src/main/groovy/org/apache/bigtop/NullOutputStream.groovy
+++ /dev/null
@@ -1,27 +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.
- */
-package org.apache.bigtop
-
-import java.io.OutputStream
-import java.io.IOException
-
-public class NullOutputStream extends OutputStream {
- @Override
- public void write(int b) throws IOException {
- }
-}
diff --git a/buildSrc/src/test/groovy/org/apache/bigtop/TestNullOutputStream.groovy b/buildSrc/src/test/groovy/org/apache/bigtop/TestNullOutputStream.groovy
deleted file mode 100644
index 1e90d5f8..00000000
--- a/buildSrc/src/test/groovy/org/apache/bigtop/TestNullOutputStream.groovy
+++ /dev/null
@@ -1,29 +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.
- */
-package org.apache.bigtop
-
-import org.junit.Assert
-import org.junit.Test
-
-class TestNullOutputStream {
-
- @Test
- void testDevNull () {
- new Properties().store(new NullOutputStream(), "stuff");
- }
-}
diff --git a/docker/bigtop-deploy/centos-6/Dockerfile b/docker/bigtop-deploy/centos-6/Dockerfile
deleted file mode 100644
index cb1b6bb7..00000000
--- a/docker/bigtop-deploy/centos-6/Dockerfile
+++ /dev/null
@@ -1,28 +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.
-
-FROM bigtop/puppet:centos-6
-
-# enable ssh
-RUN yum -y install openssh-server openssh-clients vim && \
- # requiretty off
- sed -i.bak 's/requiretty/!requiretty/' /etc/sudoers && \
- # setup vagrant account
- mkdir /root/.ssh && \
- chmod 0700 /root/.ssh && \
- wget http://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub --no-check-certificate -O /root/.ssh/authorized_keys && \
- chmod 0600 /root/.ssh/authorized_keys
-
-CMD /sbin/init
diff --git a/docker/bigtop-deploy/centos-6/build.sh b/docker/bigtop-deploy/centos-6/build.sh
deleted file mode 100755
index fd32dbfd..00000000
--- a/docker/bigtop-deploy/centos-6/build.sh
+++ /dev/null
@@ -1,18 +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.
-
-docker build -t bigtop/deploy:centos-6 .
-ret=$?
-exit $ret
diff --git a/docker/bigtop-deploy/centos-7/Dockerfile b/docker/bigtop-deploy/centos-7/Dockerfile
deleted file mode 100644
index 22460764..00000000
--- a/docker/bigtop-deploy/centos-7/Dockerfile
+++ /dev/null
@@ -1,28 +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.
-
-FROM bigtop/puppet:centos-7
-
-# enable ssh
-RUN yum -y install openssh-server openssh-clients deltarpm vim && \
- # requiretty off
- sed -i.bak 's/requiretty/!requiretty/' /etc/sudoers && \
- # setup vagrant account
- mkdir /root/.ssh && \
- chmod 0700 /root/.ssh && \
- wget http://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub --no-check-certificate -O /root/.ssh/authorized_keys && \
- chmod 0600 /root/.ssh/authorized_keys
-
-CMD /sbin/init
diff --git a/docker/bigtop-deploy/debian-8/Dockerfile b/docker/bigtop-deploy/debian-8/Dockerfile
deleted file mode 100644
index 74bb1f5c..00000000
--- a/docker/bigtop-deploy/debian-8/Dockerfile
+++ /dev/null
@@ -1,34 +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.
-
-FROM bigtop/puppet:debian-8
-
-# enable ssh
-RUN apt-get update && \
- apt-get install -y openssh-server vim dbus && \
- # requiretty off
- sed -i.bak 's/requiretty/!requiretty/' /etc/sudoers && \
- # setup vagrant account
- mkdir -p /root/.ssh && \
- chmod 0700 /root/.ssh && \
- wget http://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub --no-check-certificate -O /root/.ssh/authorized_keys && \
- chmod 0600 /root/.ssh/authorized_keys && \
- sed -i -e "s,^PermitRootLogin.*,PermitRootLogin without-password," \
- /etc/ssh/sshd_config
-# fix systemd
-RUN rm /lib/systemd/system/getty-static.service /lib/systemd/system/console-getty.service && \
- systemctl disable getty@tty1.service
-
-CMD /sbin/init
diff --git a/docker/bigtop-deploy/ubuntu-14.04/build.sh b/docker/bigtop-puppet/debian-9/Dockerfile
index eec1d03b..26a4095d 100755..100644
--- a/docker/bigtop-deploy/ubuntu-14.04/build.sh
+++ b/docker/bigtop-puppet/debian-9/Dockerfile
@@ -12,7 +12,9 @@
# 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.
+FROM debian:9
+MAINTAINER dev@bigtop.apache.org
-docker build -t bigtop/deploy:ubuntu-14.04 .
-ret=$?
-exit $ret
+COPY puppetize.sh /tmp/puppetize.sh
+
+RUN bash /tmp/puppetize.sh
diff --git a/docker/bigtop-deploy/debian-8/build.sh b/docker/bigtop-puppet/debian-9/build.sh
index 72fef3c9..cdc4623b 100755
--- a/docker/bigtop-deploy/debian-8/build.sh
+++ b/docker/bigtop-puppet/debian-9/build.sh
@@ -12,7 +12,5 @@
# 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.
-
-docker build -t bigtop/deploy:debian-8 .
-ret=$?
-exit $ret
+cp ../../../bigtop_toolchain/bin/puppetize.sh .
+docker build --pull=true -t bigtop/puppet:debian-9 .
diff --git a/docker/bigtop-deploy/centos-7/build.sh b/docker/bigtop-slaves/debian-9/Dockerfile
index 89bae88d..69229d14 100755..100644
--- a/docker/bigtop-deploy/centos-7/build.sh
+++ b/docker/bigtop-slaves/debian-9/Dockerfile
@@ -12,9 +12,12 @@
# 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.
+FROM bigtop/puppet:debian-9
+MAINTAINER dev@bigtop.apache.org
-cp -r ../../../bigtop_toolchain .
-docker build -t bigtop/deploy:centos-7 .
-ret=$?
-rm -rf bigtop_toolchain
-exit $ret
+COPY bigtop_toolchain /usr/share/puppet/modules/bigtop_toolchain
+
+RUN apt-get clean && apt-get update && puppet apply -e "include bigtop_toolchain::installer"
+
+COPY . /tmp/bigtop
+RUN cd /tmp/bigtop && ./gradlew && cd && rm -rf /tmp/bigtop
diff --git a/docker/pseudo-cluster/config/hieradata/site.yaml b/docker/pseudo-cluster/config/hieradata/site.yaml
index 3e9ebc4d..eb338406 100644
--- a/docker/pseudo-cluster/config/hieradata/site.yaml
+++ b/docker/pseudo-cluster/config/hieradata/site.yaml
@@ -7,5 +7,4 @@ hadoop_cluster_node::cluster_components:
- yarn
- mapreduce
bigtop::bigtop_repo_uri: http://bigtop-repos.s3.amazonaws.com/releases/1.2.0/ubuntu/16.04/x86_64
-bigtop::jdk_package_name: openjdk-8-jdk
diff --git a/docker/sandbox/README.md b/docker/sandbox/README.md
index 711903cc..d7a61059 100644
--- a/docker/sandbox/README.md
+++ b/docker/sandbox/README.md
@@ -19,52 +19,56 @@ A tool to build and run big data pseudo cluster using Docker.
## How to run
-* Make sure you have Docker installed. We've tested this using [Docker for Mac](https://docs.docker.com/docker-for-mac/)
+Make sure you have Docker installed. We've tested this using [Docker for Mac](https://docs.docker.com/docker-for-mac/)
-* Currently supported OS list:
+Currently supported OS list:
* centos-6
* debian-8
- * ubuntu-14.04
+ * ubuntu-16.04
-* Running Hadoop
+### Run Hadoop HDFS
```
-docker run -ti --privileged -p 50070:50070 bigtop/sandbox:centos-6_hadoop
+docker run -d -p 50070:50070 bigtop/sandbox:centos-6_hdfs
```
-* Running Spark (Standalone mode)
+### Run Spark on YARN
```
-docker run -ti --privileged -p 8080:8080 bigtop/sandbox:debian-8_spark
+docker run -d -p 50070:50070 -p 8088:8088 -p 8080:8080 bigtop/sandbox:debian-8_hdfs_yarn_spark
```
-* Running Hadoop + HBase
+### Run Hadoop HDFS + HBase
```
-docker run -ti --privileged -p 50070:50070 -p 60010:60010 bigtop/sandbox:ubuntu-14.04_hbase
+docker run -d -p 50070:50070 -p 60010:60010 bigtop/sandbox:ubuntu-16.04_hdfs_hbase
```
## How to build
-### Examples
+### Build a Hadoop HDFS sandbox image
-* Build sandbox image that has Hadoop provisioned
+```
+./build.sh -a bigtop -o centos-6 -c hdfs
+```
+
+### Build a Hadoop HDFS, Hadoop YARN, and Spark on YARN sandbox image
```
-./build.sh -a bigtop -o debian-8 -c hadoop
+./build.sh -a bigtop -o debian-8 -c "hdfs, yarn, spark"
```
-* Build sandbox image that has Hadoop and Spark provisioned
+### Build a Hadoop HDFS and HBase sandbox image
```
-./build.sh -a bigtop -o debian-8 -c "hadoop, spark"
+./build.sh -a bigtop -o ubuntu-16.04 -c "hdfs, hbase"
```
-* Build sandbox image that has Hadoop and HBase provisioned
+### Use --dryrun to skip the build and get Dockerfile and configuration
```
-./build.sh -a bigtop -o debian-8 -c "hadoop, yarn, hbase"
+./build.sh -a bigtop -o ubuntu-16.04 -c "hdfs, hbase" --dryrun
```
### Change the repository of packages
@@ -73,10 +77,10 @@ docker run -ti --privileged -p 50070:50070 -p 60010:60010 bigtop/sandbox:ubuntu-
```
export REPO=http://ci.bigtop.apache.org:8080/job/Bigtop-trunk-repos/BUILD_ENVIRONMENTS=centos-6%2Clabel=docker-slave-06//ws/output
-./build.sh -a bigtop -o centos-6 -c "hadoop, spark, ignite"
+./build.sh -a bigtop -o centos-6 -c "hdfs, yarn, spark, ignite"
```
-### Customize your Hadoop stack
+### Customize your Big Data Stack
* Edit *site.yaml.template.centos-6_hadoop* to create your own prefered stack
@@ -89,7 +93,7 @@ vim site.yaml.template.centos-6_hadoop_ignite
```
...
-hadoop_cluster_node::cluster_components: [hadoop, yarn, ignite]
+hadoop_cluster_node::cluster_components: [hdfs, yarn, ignite]
...
```
diff --git a/docker/sandbox/build.sh b/docker/sandbox/build.sh
index 8936fd06..8910f93f 100755
--- a/docker/sandbox/build.sh
+++ b/docker/sandbox/build.sh
@@ -41,7 +41,6 @@ bigtop::hadoop_head_node: ${HEAD_NODE:-"head.node.fqdn"}
hadoop::hadoop_storage_dirs: [/data/1, /data/2]
bigtop::bigtop_repo_uri: ${REPO}
hadoop_cluster_node::cluster_components: [${COMPONENTS}]
-bigtop::jdk_package_name: ${JDK}
EOF
}
@@ -64,18 +63,9 @@ generate_tag() {
fi
}
-detect_jdk() {
- for RPM in ${RPMS[*]}; do
- [[ $OS == $RPM ]] && JDK=$RPM_JDK
- done
- for DEB in ${DEBS[*]}; do
- [[ $OS == $DEB ]] && JDK=$DEB_JDK
- done
-}
-
detect_repo() {
- OS_WITH_CODE_NAME=${OS/ubuntu-14.04/ubuntu-trusty}
- REPO=${REPO:-"http://bigtop-repos.s3.amazonaws.com/releases/${BIGTOP_VERSION}/${OS_WITH_CODE_NAME/-//}/x86_64"}
+ OS_SEP_BY_SLASH=${OS/-//}
+ REPO=${REPO:-"http://bigtop-repos.s3.amazonaws.com/releases/${BIGTOP_VERSION}/${OS_SEP_BY_SLASH}/x86_64"}
}
image_config_validator() {
@@ -103,10 +93,6 @@ deploy_config_validator() {
echo "repository unset!"
invalid=0
fi
- if [ -z "$JDK" ]; then
- echo "jdk unset!"
- invalid=0
- fi
if [ -z "$COMPONENTS" ]; then
echo "components unset!"
invalid=0
@@ -131,16 +117,20 @@ show_deploy_configs() {
echo "DEPLOY CONFIGS:"
echo "REPOSITORY $REPO"
echo "COMPONENTS $COMPONENTS"
- echo "JDK $JDK"
echo "-------------------------------------------------"
}
+log() {
+ echo -e "\n[LOG] $1\n"
+}
+
usage() {
echo "usage: $PROG args"
echo " -a, --account Specify account name for image."
echo " -c, --components Specify components to build."
echo " You need to specify a comma separated, quoted string."
echo " For example: --components \"hadoop, yarn\""
+ echo " -d, --dryrun Generate the Dockerfile and configuration and skip the build."
echo " -f, --file Specify a written site.yaml config file."
echo " -o, --operating-system Specify an OS from Bigtop supported OS list."
echo " RPM base: ${RPMS[*]}"
@@ -158,6 +148,9 @@ while [ $# -gt 0 ]; do
fi
ACCOUNT=$2
shift 2;;
+ -d|--dryrun)
+ DRYRUN=true
+ shift;;
-c|--components)
if [ $# -lt 2 ]; then
usage
@@ -194,7 +187,6 @@ image_config_validator
show_image_configs
if [ -z "$FILE" ]; then
- detect_jdk
detect_repo
deploy_config_validator
generate_config
@@ -203,7 +195,7 @@ else
if [ -f "$FILE" ]; then
cp -vfr $FILE site.yaml.template
else
- echo "$FILE not exist!"
+ log "$FILE not exist!"
exit 1
fi
fi
@@ -211,5 +203,10 @@ fi
export ACCOUNT
export TAG
generate_dockerfile
+if [ "$DRYRUN" == true ]; then
+ log "Generated Dockerfile:"
+ cat Dockerfile
+ exit 0
+fi
build
cleanup
diff --git a/docker/sandbox/sandbox-env.sh b/docker/sandbox/sandbox-env.sh
index f6caeef1..e1599d52 100644
--- a/docker/sandbox/sandbox-env.sh
+++ b/docker/sandbox/sandbox-env.sh
@@ -15,10 +15,16 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-RPMS=(centos-6 centos-7 fedora-20)
-DEBS=(debian-8 ubuntu-14.04)
-
-RPM_JDK=java-1.8.0-openjdk-devel.x86_64
-DEB_JDK=openjdk-8-jdk
-
BIGTOP_VERSION=1.2.0
+# REPO="YOUR CUSTOM REPO"
+
+RPMS=( \
+ centos-6 \
+ centos-7 \
+ fedora-25 \
+ opensuse-42.1 \
+)
+DEBS=( \
+ debian-8 \
+ ubuntu-16.04 \
+)
diff --git a/docker/sandbox/site.yaml.template.centos-6_hadoop b/docker/sandbox/site.yaml.template.centos-6_hadoop
index 4fd74979..db49e484 100644
--- a/docker/sandbox/site.yaml.template.centos-6_hadoop
+++ b/docker/sandbox/site.yaml.template.centos-6_hadoop
@@ -16,5 +16,4 @@
bigtop::hadoop_head_node: "head.node.fqdn"
hadoop::hadoop_storage_dirs: [/data/1, /data/2]
bigtop::bigtop_repo_uri: http://bigtop-repos.s3.amazonaws.com/releases/1.2.0/centos/6/x86_64
-hadoop_cluster_node::cluster_components: [hdfs, yarn, mapreduce]
-bigtop::jdk_package_name: java-1.8.0-openjdk-devel.x86_64
+hadoop_cluster_node::cluster_components: [hdfs, yarn, mapred-app]
diff --git a/docker/sandbox/site.yaml.template.debian-8_hadoop b/docker/sandbox/site.yaml.template.debian-8_hadoop
index d87146b2..1bbae6c6 100644
--- a/docker/sandbox/site.yaml.template.debian-8_hadoop
+++ b/docker/sandbox/site.yaml.template.debian-8_hadoop
@@ -16,5 +16,4 @@
bigtop::hadoop_head_node: "head.node.fqdn"
hadoop::hadoop_storage_dirs: [/data/1, /data/2]
bigtop::bigtop_repo_uri: http://bigtop-repos.s3.amazonaws.com/releases/1.2.0/debian/8/x86_64
-hadoop_cluster_node::cluster_components: [hdfs, yarn, mapreduce]
-bigtop::jdk_package_name: openjdk-8-jdk
+hadoop_cluster_node::cluster_components: [hdfs, yarn, mapred-app]
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index e44ba6c5..2fd41c7d 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -17,4 +17,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-bin.zip
diff --git a/packages.gradle b/packages.gradle
index 8576ab12..e93e94f0 100644
--- a/packages.gradle
+++ b/packages.gradle
@@ -89,8 +89,11 @@ def setDefaults = { comp ->
comp.version.pkg = comp.version.base
}
}
+def devNull = new OutputStream() {
+ @Override
+ public void write(int b) {}
+}
def nativePackaging = {
- def devNull = new org.apache.bigtop.NullOutputStream()
def result = exec {
commandLine "/bin/bash", "-c",
"""dpkg-query -S /bin/sh && exit 1
@@ -182,8 +185,6 @@ def genTasks = { target ->
def final GIT_USER_NAME = config.bigtop.components[target].git.user ?: config.bigtop.git.user
def final GIT_ACCESS_TOKEN = config.bigtop.components[target].git.token ?: config.bigtop.git.token
- def devNull = new org.apache.bigtop.NullOutputStream()
-
if (!DOWNLOAD_URL)
return
diff --git a/pom.xml b/pom.xml
index 3bb9ef93..5301f920 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,8 +40,7 @@
<properties>
<hadoop.version>2.7.3</hadoop.version>
- <!--An awful hack for BIGTOP-1429-->
- <hbase.version>1.1.3</hbase.version>
+ <hbase.version>1.1.9</hbase.version>
<pig.version>0.15.0</pig.version>
<pig-smoke.version>0.15.0</pig-smoke.version>
<sqoop.version>1.4.6</sqoop.version>
diff --git a/provisioner/docker/config.yaml b/provisioner/docker/config.yaml
index 776a8f1f..19fef164 120000
--- a/provisioner/docker/config.yaml
+++ b/provisioner/docker/config.yaml
@@ -1 +1 @@
-config_centos7.yaml \ No newline at end of file
+config_centos-7.yaml \ No newline at end of file
diff --git a/provisioner/docker/config/hiera.yaml b/provisioner/docker/config/hiera.yaml
deleted file mode 100644
index 8b137891..00000000
--- a/provisioner/docker/config/hiera.yaml
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/provisioner/docker/config/hieradata/PLACEHOLDER b/provisioner/docker/config/hieradata/PLACEHOLDER
deleted file mode 100644
index e69de29b..00000000
--- a/provisioner/docker/config/hieradata/PLACEHOLDER
+++ /dev/null
diff --git a/provisioner/docker/config/hosts b/provisioner/docker/config/hosts
deleted file mode 100644
index 8b137891..00000000
--- a/provisioner/docker/config/hosts
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/provisioner/docker/config_centos6.yaml b/provisioner/docker/config_centos-6.yaml
index 459f8a2a..7912aca6 100644
--- a/provisioner/docker/config_centos6.yaml
+++ b/provisioner/docker/config_centos-6.yaml
@@ -22,4 +22,3 @@ distro: centos
components: [hdfs, yarn, mapreduce]
enable_local_repo: false
smoke_test_components: [hdfs, yarn, mapreduce]
-jdk: "java-1.8.0-openjdk-devel.x86_64"
diff --git a/provisioner/docker/config_centos7.yaml b/provisioner/docker/config_centos-7.yaml
index 6e3c28b3..6cdd7cfc 100644
--- a/provisioner/docker/config_centos7.yaml
+++ b/provisioner/docker/config_centos-7.yaml
@@ -22,4 +22,3 @@ distro: centos
components: [hdfs, yarn, mapreduce]
enable_local_repo: false
smoke_test_components: [hdfs, yarn, mapreduce]
-jdk: "java-1.8.0-openjdk-devel.x86_64"
diff --git a/provisioner/docker/config_debian8.yaml b/provisioner/docker/config_debian-8.yaml
index 10915e50..c1a468a4 100644
--- a/provisioner/docker/config_debian8.yaml
+++ b/provisioner/docker/config_debian-8.yaml
@@ -22,4 +22,3 @@ distro: debian
components: [hdfs, yarn, mapreduce]
enable_local_repo: false
smoke_test_components: [hdfs, yarn, mapreduce]
-jdk: "openjdk-8-jdk"
diff --git a/provisioner/docker/config_ubuntu_xenial.yaml b/provisioner/docker/config_ubuntu-16.04.yaml
index 8f8cb878..54c91f77 100644
--- a/provisioner/docker/config_ubuntu_xenial.yaml
+++ b/provisioner/docker/config_ubuntu-16.04.yaml
@@ -22,4 +22,3 @@ distro: debian
components: [hdfs, yarn, mapreduce]
enable_local_repo: false
smoke_test_components: [hdfs, yarn, mapreduce]
-jdk: "openjdk-8-jdk"
diff --git a/provisioner/docker/docker-hadoop.sh b/provisioner/docker/docker-hadoop.sh
index 12488a13..2783a1fb 100755
--- a/provisioner/docker/docker-hadoop.sh
+++ b/provisioner/docker/docker-hadoop.sh
@@ -34,7 +34,7 @@ usage() {
create() {
if [ -e .provision_id ]; then
- echo "Cluster already exist! Run ./$PROG -d to destroy the cluster or delete .provision_id file and containers manually."
+ log "Cluster already exist! Run ./$PROG -d to destroy the cluster or delete .provision_id file and containers manually."
exit 1;
fi
echo "`date +'%Y%m%d_%H%M%S'`_R$RANDOM" > .provision_id
@@ -49,7 +49,7 @@ create() {
# Startup instances
docker-compose -p $PROVISION_ID scale bigtop=$1
if [ $? -ne 0 ]; then
- echo "Docker container(s) startup failed!";
+ log "Docker container(s) startup failed!";
exit 1;
fi
@@ -60,10 +60,9 @@ create() {
# Fetch configurations form specificed yaml config file
repo=$(get-yaml-config repo)
components="[`echo $(get-yaml-config components) | sed 's/ /, /g'`]"
- jdk=$(get-yaml-config jdk)
distro=$(get-yaml-config distro)
enable_local_repo=$(get-yaml-config enable_local_repo)
- generate-config "$hadoop_head_node" "$repo" "$components" "$jdk"
+ generate-config "$hadoop_head_node" "$repo" "$components"
# Start provisioning
generate-hosts
@@ -78,11 +77,11 @@ generate-hosts() {
done
wait
# This must be the last entry in the /etc/hosts
- echo "127.0.0.1 localhost" >> ./config/hosts
+ docker exec ${NODES[0]} bash -c "echo '127.0.0.1 localhost' >> ./etc/hosts"
}
generate-config() {
- echo "Bigtop Puppet configurations are shared between instances, and can be modified under config/hieradata"
+ log "Bigtop Puppet configurations are shared between instances, and can be modified under config/hieradata"
cat $BIGTOP_PUPPET_DIR/hiera.yaml >> ./config/hiera.yaml
cp -vfr $BIGTOP_PUPPET_DIR/hieradata ./config/
cat > ./config/hieradata/site.yaml << EOF
@@ -90,7 +89,6 @@ bigtop::hadoop_head_node: $1
hadoop::hadoop_storage_dirs: [/data/1, /data/2]
bigtop::bigtop_repo_uri: $2
hadoop_cluster_node::cluster_components: $3
-bigtop::jdk_package_name: $4
EOF
}
@@ -122,13 +120,12 @@ smoke-tests() {
}
destroy() {
+ docker exec ${NODES[0]} bash -c "umount /etc/hosts; rm -f /etc/hosts"
if [ -n "$PROVISION_ID" ]; then
docker-compose -p $PROVISION_ID stop
docker-compose -p $PROVISION_ID rm -f
fi
- echo > ./config/hiera.yaml
- echo > ./config/hosts
- rm -rvf ./config/hieradata/bigtop ./config/hieradata/site.yaml .provision_id
+ rm -rvf ./config .provision_id
}
bigtop-puppet() {
@@ -180,6 +177,10 @@ list() {
echo "$msg"
}
+log() {
+ echo -e "\n[LOG] $1\n"
+}
+
PROG=`basename $0`
if [ $# -eq 0 ]; then
diff --git a/provisioner/vagrant/Vagrantfile b/provisioner/vagrant/Vagrantfile
index fc6bfc19..ae099631 100755
--- a/provisioner/vagrant/Vagrantfile
+++ b/provisioner/vagrant/Vagrantfile
@@ -59,9 +59,6 @@ smoke_test_components = CONF['smoke_test_components'].join(',')
enable_local_repo = CONF['enable_local_repo']
puts "vagrant conf local repo enabled: #{enable_local_repo}"
-# JDK package name
-jdk = CONF['jdk']
-
# master node hostname
bigtop_master = "bigtop1.vagrant"
@@ -86,7 +83,6 @@ bigtop::hadoop_head_node: #{bigtop_master}
hadoop::hadoop_storage_dirs: [/data/1, /data/2]
bigtop::bigtop_repo_uri: #{repo}
hadoop_cluster_node::cluster_components: #{components}
-bigtop::jdk_package_name: #{jdk}
hadoop::common_hdfs::testonly_hdfs_sshkeys: "yes"
EOF
SCRIPT
diff --git a/provisioner/vagrant/vagrantconfig.yaml b/provisioner/vagrant/vagrantconfig.yaml
index 4fbb4e44..54604b01 100644
--- a/provisioner/vagrant/vagrantconfig.yaml
+++ b/provisioner/vagrant/vagrantconfig.yaml
@@ -23,4 +23,3 @@ components: [hdfs, yarn, mapreduce]
enable_local_repo: false
run_smoke_tests: false
smoke_test_components: [hdfs, yarn, mapreduce]
-jdk: "java-1.8.0-openjdk-devel.x86_64"