launch-hadoop-master
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
源码类别:

网格计算

开发平台:

Java

  1. #!/usr/bin/env bash
  2. # Licensed to the Apache Software Foundation (ASF) under one or more
  3. # contributor license agreements.  See the NOTICE file distributed with
  4. # this work for additional information regarding copyright ownership.
  5. # The ASF licenses this file to You under the Apache License, Version 2.0
  6. # (the "License"); you may not use this file except in compliance with
  7. # the License.  You may obtain a copy of the License at
  8. #
  9. #     http://www.apache.org/licenses/LICENSE-2.0
  10. #
  11. # Unless required by applicable law or agreed to in writing, software
  12. # distributed under the License is distributed on an "AS IS" BASIS,
  13. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. # See the License for the specific language governing permissions and
  15. # limitations under the License.
  16. # Launch an EC2 Hadoop master.
  17. if [ -z $1 ]; then
  18.   echo "Cluster name required!"
  19.   exit -1
  20. fi
  21. CLUSTER=$1
  22. # Import variables
  23. bin=`dirname "$0"`
  24. bin=`cd "$bin"; pwd`
  25. . "$bin"/hadoop-ec2-env.sh
  26. if [ -z $AWS_ACCOUNT_ID ]; then
  27.   echo "Please set AWS_ACCOUNT_ID in $bin/hadoop-ec2-env.sh."
  28.   exit -1
  29. fi
  30. echo "Testing for existing master in group: $CLUSTER"
  31. MASTER_EC2_HOST=`ec2-describe-instances | awk '"RESERVATION" == $1 && "'$CLUSTER_MASTER'" == $4, "RESERVATION" == $1 && "'$CLUSTER_MASTER'" != $4'`
  32. MASTER_EC2_HOST=`echo "$MASTER_EC2_HOST" | awk '"INSTANCE" == $1 && "running" == $6 {print $4}'`
  33. if [ ! -z "$MASTER_EC2_HOST" ]; then
  34.   echo "Master already running on: $MASTER_EC2_HOST"
  35.   MASTER_HOST=`ec2-describe-instances $INSTANCE | grep INSTANCE | grep running | grep $MASTER_EC2_HOST | awk '{print $5}'`
  36.   echo $MASTER_HOST > $MASTER_PRIVATE_IP_PATH
  37.   echo $MASTER_EC2_HOST > $MASTER_IP_PATH
  38.   exit 0
  39. fi
  40. ec2-describe-group | egrep "[[:space:]]$CLUSTER_MASTER[[:space:]]" > /dev/null
  41. if [ ! $? -eq 0 ]; then
  42.   echo "Creating group $CLUSTER_MASTER"
  43.   ec2-add-group $CLUSTER_MASTER -d "Group for Hadoop Master."
  44.   ec2-authorize $CLUSTER_MASTER -o $CLUSTER_MASTER -u $AWS_ACCOUNT_ID
  45.   ec2-authorize $CLUSTER_MASTER -p 22    # ssh
  46.   if [ $ENABLE_WEB_PORTS == "true" ]; then
  47.     ec2-authorize $CLUSTER_MASTER -p 50030 # JobTracker web interface
  48.     ec2-authorize $CLUSTER_MASTER -p 50060 # TaskTracker web interface
  49.     ec2-authorize $CLUSTER_MASTER -p 50070 # NameNode web interface
  50.     ec2-authorize $CLUSTER_MASTER -p 50075 # DataNode web interface
  51.   fi
  52. fi
  53. ec2-describe-group | egrep "[[:space:]]$CLUSTER[[:space:]]" > /dev/null
  54. if [ ! $? -eq 0 ]; then
  55.   echo "Creating group $CLUSTER"
  56.   ec2-add-group $CLUSTER -d "Group for Hadoop Slaves."
  57.   ec2-authorize $CLUSTER -o $CLUSTER -u $AWS_ACCOUNT_ID
  58.   ec2-authorize $CLUSTER -p 22    # ssh
  59.   if [ $ENABLE_WEB_PORTS == "true" ]; then
  60.     ec2-authorize $CLUSTER -p 50030 # JobTracker web interface
  61.     ec2-authorize $CLUSTER -p 50060 # TaskTracker web interface
  62.     ec2-authorize $CLUSTER -p 50070 # NameNode web interface
  63.     ec2-authorize $CLUSTER -p 50075 # DataNode web interface
  64.   fi
  65.   ec2-authorize $CLUSTER_MASTER -o $CLUSTER -u $AWS_ACCOUNT_ID
  66.   ec2-authorize $CLUSTER -o $CLUSTER_MASTER -u $AWS_ACCOUNT_ID
  67. fi
  68. # Finding Hadoop image
  69. AMI_IMAGE=`ec2-describe-images -a | grep $S3_BUCKET | grep $HADOOP_VERSION | grep $ARCH | grep available | awk '{print $2}'`
  70. # Start a master
  71. echo "Starting master with AMI $AMI_IMAGE"
  72. USER_DATA="MASTER_HOST=master,MAX_MAP_TASKS=$MAX_MAP_TASKS,MAX_REDUCE_TASKS=$MAX_REDUCE_TASKS,COMPRESS=$COMPRESS"
  73. INSTANCE=`ec2-run-instances $AMI_IMAGE -n 1 -g $CLUSTER_MASTER -k $KEY_NAME -f "$bin"/$USER_DATA_FILE -t $INSTANCE_TYPE $KERNEL_ARG | grep INSTANCE | awk '{print $2}'`
  74. echo "Waiting for instance $INSTANCE to start"
  75. while true; do
  76.   printf "."
  77.   # get private dns
  78.   MASTER_HOST=`ec2-describe-instances $INSTANCE | grep running | awk '{print $5}'`
  79.   if [ ! -z $MASTER_HOST ]; then
  80.     echo "Started as $MASTER_HOST"
  81.     break;
  82.   fi
  83.   sleep 1
  84. done
  85. MASTER_EC2_HOST=`ec2-describe-instances $INSTANCE | grep INSTANCE | grep running | grep $MASTER_HOST | awk '{print $4}'`
  86. echo $MASTER_HOST > $MASTER_PRIVATE_IP_PATH
  87. echo $MASTER_EC2_HOST > $MASTER_IP_PATH
  88. MASTER_EC2_ZONE=`ec2-describe-instances $INSTANCE | grep INSTANCE | grep running | grep $MASTER_HOST | awk '{print $11}'`
  89. echo $MASTER_EC2_ZONE > $MASTER_ZONE_PATH
  90. while true; do
  91.   REPLY=`ssh $SSH_OPTS "root@$MASTER_EC2_HOST" 'echo "hello"'`
  92.   if [ ! -z $REPLY ]; then
  93.    break;
  94.   fi
  95.   sleep 5
  96. done
  97. echo "Copying private key to master"
  98. scp $SSH_OPTS $PRIVATE_KEY_PATH "root@$MASTER_EC2_HOST:/root/.ssh/id_rsa"
  99. ssh $SSH_OPTS "root@$MASTER_EC2_HOST" "chmod 600 /root/.ssh/id_rsa"
  100. MASTER_IP=`dig +short $MASTER_EC2_HOST`
  101. echo "Master is $MASTER_EC2_HOST, ip is $MASTER_IP, zone is $MASTER_EC2_ZONE."