Updated script from SequenceIQ Ambari
curl -Lo .amb https://gist.githubusercontent.com/dacamo76/31a0227c13cd0eb50cee/raw/6498457aa85d8d75d201187482c52297cbc25b9e/docker-ambari && . .amb && amb-deploy-cluster
Updated script from SequenceIQ Ambari
curl -Lo .amb https://gist.githubusercontent.com/dacamo76/31a0227c13cd0eb50cee/raw/6498457aa85d8d75d201187482c52297cbc25b9e/docker-ambari && . .amb && amb-deploy-cluster
| :<<USAGE | |
| ######################################## | |
| curl -Lo .amb j.mp/docker-ambari && . .amb | |
| ######################################## | |
| full documentation: https://github.com/sequenceiq/docker-ambari | |
| USAGE | |
| : ${NODE_PREFIX=amb} | |
| : ${AMBARI_SERVER_NAME:=${NODE_PREFIX}0} | |
| : ${MYDOMAIN:=mycorp.kom} | |
| : ${IMAGE:="sequenceiq/ambari:1.7.0"} | |
| : ${DOCKER_OPTS:="--dns 127.0.0.1 --entrypoint /usr/local/serf/bin/start-serf-agent.sh -e KEYCHAIN=$KEYCHAIN"} | |
| : ${CLUSTER_SIZE:=3} | |
| : ${DEBUG:=1} | |
| : ${SLEEP_TIME:=2} | |
| : ${DRY_RUN:=false} | |
| run-command() { | |
| CMD="$@" | |
| if [ "$DRY_RUN" == "false" ]; then | |
| debug "$CMD" | |
| "$@" | |
| else | |
| debug [DRY_RUN] "$CMD" | |
| fi | |
| } | |
| amb-clean() { | |
| unset NODE_PREFIX AMBARI_SERVER_NAME MYDOMAIN IMAGE DOCKER_OPTS DEBUG SLEEP_TIME AMBARI_SERVER_IP DRY_RUN | |
| } | |
| get-ambari-server-ip() { | |
| AMBARI_SERVER_IP=$(get-host-ip ${AMBARI_SERVER_NAME}) | |
| } | |
| get-host-ip() { | |
| HOST=$1 | |
| sudo docker inspect --format="{{.NetworkSettings.IPAddress}}" ${HOST} | |
| } | |
| amb-members() { | |
| get-ambari-server-ip | |
| serf members --rpc-addr $(sudo docker inspect --format "{{.NetworkSettings.IPAddress}}" ${AMBARI_SERVER_NAME}):7373 | |
| } | |
| amb-settings() { | |
| cat <<EOF | |
| NODE_PREFIX=$NODE_PREFIX | |
| MYDOMAIN=$MYDOMAIN | |
| CLUSTER_SIZE=$CLUSTER_SIZE | |
| AMBARI_SERVER_NAME=$AMBARI_SERVER_NAME | |
| IMAGE=$IMAGE | |
| DOCKER_OPTS=$DOCKER_OPTS | |
| AMBARI_SERVER_IP=$AMBARI_SERVER_IP | |
| DRY_RUN=$DRY_RUN | |
| EOF | |
| } | |
| debug() { | |
| [ $DEBUG -gt 0 ] && echo [DEBUG] "$@" 1>&2 | |
| } | |
| docker-ps() { | |
| #docker ps|sed "s/ \{3,\}/#/g"|cut -d '#' -f 1,2,7|sed "s/#/\t/g" | |
| sudo docker inspect --format="{{.Name}} {{.NetworkSettings.IPAddress}} {{.Config.Image}} {{.Config.Entrypoint}} {{.Config.Cmd}}" $(sudo docker ps -q) | |
| } | |
| docker-psa() { | |
| #docker ps|sed "s/ \{3,\}/#/g"|cut -d '#' -f 1,2,7|sed "s/#/\t/g" | |
| sudo docker inspect --format="{{.Name}} {{.NetworkSettings.IPAddress}} {{.Config.Image}} {{.Config.Entrypoint}} {{.Config.Cmd}}" $(sudo docker ps -qa) | |
| } | |
| amb-start-cluster() { | |
| local act_cluster_size=$1 | |
| : ${act_cluster_size:=$CLUSTER_SIZE} | |
| echo starting an ambari cluster with: $act_cluster_size nodes | |
| amb-start-first | |
| [ $act_cluster_size -gt 1 ] && for i in $(seq $((act_cluster_size - 1))); do | |
| amb-start-node $i | |
| done | |
| } | |
| _amb_run_shell() { | |
| COMMAND=$1 | |
| : ${COMMAND:? required} | |
| get-ambari-server-ip | |
| NODES=$(sudo docker inspect --format="{{.Config.Image}} {{.Name}}" $(sudo docker ps -q)|grep $IMAGE|grep $NODE_PREFIX|wc -l|xargs) | |
| run-command sudo docker run -it --rm -e EXPECTED_HOST_COUNT=$NODES -e BLUEPRINT=$BLUEPRINT --link ${AMBARI_SERVER_NAME}:ambariserver --entrypoint /bin/sh $IMAGE -c $COMMAND | |
| } | |
| amb-shell() { | |
| _amb_run_shell /tmp/ambari-shell.sh | |
| } | |
| amb-deploy-cluster() { | |
| local act_cluster_size=$1 | |
| : ${act_cluster_size:=$CLUSTER_SIZE} | |
| if [ $# -gt 1 ]; then | |
| BLUEPRINT=$2 | |
| else | |
| [ $act_cluster_size -gt 1 ] && BLUEPRINT=multi-node-hdfs-yarn || BLUEPRINT=single-node-hdfs-yarn | |
| fi | |
| : ${BLUEPRINT:?" required (single-node-hdfs-yarn / multi-node-hdfs-yarn / hdp-singlenode-default / hdp-multinode-default)"} | |
| amb-start-cluster $act_cluster_size | |
| _amb_run_shell /tmp/install-cluster.sh | |
| } | |
| amb-start-first() { | |
| run-command sudo docker run -P -d $DOCKER_OPTS --name $AMBARI_SERVER_NAME -h $AMBARI_SERVER_NAME.$MYDOMAIN $IMAGE --tag ambari-server=true | |
| } | |
| amb-copy-to-hdfs() { | |
| get-ambari-server-ip | |
| FILE_PATH=${1:?"usage: <FILE_PATH> <NEW_FILE_NAME_ON_HDFS> <HDFS_PATH>"} | |
| FILE_NAME=${2:?"usage: <FILE_PATH> <NEW_FILE_NAME_ON_HDFS> <HDFS_PATH>"} | |
| DIR=${3:?"usage: <FILE_PATH> <NEW_FILE_NAME_ON_HDFS> <HDFS_PATH>"} | |
| amb-create-hdfs-dir $DIR | |
| DATANODE=$(curl -si -X PUT "http://$AMBARI_SERVER_IP:50070/webhdfs/v1$DIR/$FILE_NAME?user.name=hdfs&op=CREATE" |grep Location | sed "s/\..*//; s@.*http://@@") | |
| DATANODE_IP=$(get-host-ip $DATANODE) | |
| curl -T $FILE_PATH "http://$DATANODE_IP:50075/webhdfs/v1$DIR/$FILE_NAME?op=CREATE&user.name=hdfs&overwrite=true&namenoderpcaddress=$AMBARI_SERVER_IP:8020" | |
| } | |
| amb-create-hdfs-dir() { | |
| get-ambari-server-ip | |
| DIR=$1 | |
| curl -X PUT "http://$AMBARI_SERVER_IP:50070/webhdfs/v1$DIR?user.name=hdfs&op=MKDIRS" > /dev/null 2>&1 | |
| } | |
| amb-scp-to-first() { | |
| get-ambari-server-ip | |
| FILE_PATH=${1:?"usage: <FILE_PATH> <DESTINATION_PATH>"} | |
| DEST_PATH=${2:?"usage: <FILE_PATH> <DESTINATION_PATH>"} | |
| scp $FILE_PATH root@$AMBARI_SERVER_IP:$DEST_PATH | |
| } | |
| amb-start-node() { | |
| get-ambari-server-ip | |
| : ${AMBARI_SERVER_IP:?"AMBARI_SERVER_IP is needed"} | |
| NUMBER=${1:?"please give a <NUMBER> parameter it will be used as node<NUMBER>"} | |
| if [ $# -eq 1 ] ;then | |
| MORE_OPTIONS="-d" | |
| else | |
| shift | |
| MORE_OPTIONS="$@" | |
| fi | |
| run-command sudo docker run -P $MORE_OPTIONS -e SERF_JOIN_IP=$AMBARI_SERVER_IP $DOCKER_OPTS --name ${NODE_PREFIX}$NUMBER -h ${NODE_PREFIX}${NUMBER}.$MYDOMAIN $IMAGE --log-level debug | |
| } |