Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
145 lines (122 sloc) 4.32 KB
: ${NODE_PREFIX=amb}
: ${AMBARI_SERVER_NAME:=${NODE_PREFIX}0}
: ${MYDOMAIN:=mycorp.kom}
: ${IMAGE:="sequenceiq/kylin:0.7.2"}
: ${DOCKER_OPTS:="--dns 127.0.0.1 --entrypoint /usr/local/serf/bin/start-serf-agent.sh -e KEYCHAIN=$KEYCHAIN"}
: ${CLUSTER_SIZE:=1}
: ${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
docker inspect --format="{{.NetworkSettings.IPAddress}}" ${HOST}
}
amb-members() {
get-ambari-server-ip
serf members --rpc-addr $(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"
docker inspect --format="{{.Name}} {{.NetworkSettings.IPAddress}} {{.Config.Image}} {{.Config.Entrypoint}} {{.Config.Cmd}}" $(docker ps -q)
}
docker-psa() {
#docker ps|sed "s/ \{3,\}/#/g"|cut -d '#' -f 1,2,7|sed "s/#/\t/g"
docker inspect --format="{{.Name}} {{.NetworkSettings.IPAddress}} {{.Config.Image}} {{.Config.Entrypoint}} {{.Config.Cmd}}" $(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=$(docker inspect --format="{{.Config.Image}} {{.Name}}" $(docker ps -q)|grep $IMAGE|grep $NODE_PREFIX|wc -l|xargs)
run-command 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
}
kylin-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=hdp-multinode-kylin || BLUEPRINT=hdp-singlenode-kylin
fi
: ${BLUEPRINT:?" required (hdp-singlenode-kylin / hdp-multinode-kylin)"}
amb-start-cluster $act_cluster_size
_amb_run_shell /tmp/install-cluster.sh
}
amb-start-first() {
run-command 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 docker run $MORE_OPTIONS -e SERF_JOIN_IP=$AMBARI_SERVER_IP $DOCKER_OPTS --name ${NODE_PREFIX}$NUMBER -h ${NODE_PREFIX}${NUMBER}.$MYDOMAIN $IMAGE --log-level debug
}