{ "Description": "This template shows how to deploy a Hadoop-Spark environment. One ECS instance plays role of master, and one instance group plays role of worker. Step 1 configs the ssh login without password. Step 2 installs and configs Java env. Step 3 installs and configs hadoop env. Step 4 installs and configs Spark env. *** WARNING *** Only test in CentOS-7. Maybe stopping firewall is needed. The deploying time mainly depends on the speed of downloading 4 packages.", "Parameters": { "VpcName": { "Type": "String", "Description": { "zh-cn": "VPC 名称,[2,128]英文或中文字符,必须以字母或中文开头,可以包含数字、下划线或“.”、“-”。", "en": "Name of VPC, [2, 128] English or Chinese characters, must start with a letter or Chinese in size, can contain numbers, '_' or '.', '-'." }, "Label": "VPC Name", "ConstraintDescription": "[2, 128] English or Chinese characters", "MinLength": 2, "MaxLength": 128, "Default": "MyVPC" }, "VpcCidrBlock": { "Type": "String", "Description": { "zh-cn": "VPC的IP地址范围;
您可以使用以下IP地址范围及其子网:
[10.0.0.0/8]
[172.16.0.0/12]
[192.168.0/16]", "en": "The IP address range of the VPC in the CIDR Block form;
you can use the following IP address ranges and their subnets:
[10.0.0.0/8]
[172.16.0.0/12]
[192.168.0.0/16]" }, "AllowedValues": [ "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16" ], "Label": "VPC CIDR Block", "Default": "192.168.0.0/16" }, "VSwitchCidrBlock": { "Type": "String", "Description": { "zh-cn": "创建的虚拟交换机的子网,它必须属于自己的VPC网段内", "en": "CIDR Block of created VSwitch,It must belong to itself VPC CIDR block." }, "Label": "VSwitch CIDR Block", "Default": "192.168.1.0/24" }, "ZoneId": { "AssociationProperty": "ALIYUN::ECS::Instance:ZoneId", "Type": "String", "Description": { "zh-cn": "ECS 可用区ID, 查看可用区信息.", "en": "ECS Available Zone ID, View region and zone info." }, "Label": "Zone ID" }, "InstanceName": { "Type": "String", "Description": { "zh-cn": "ECS实例名称,[2,128]英文或中文字符,必须以字母或中文开头,可以包含数字、下划线或“.”、“-”。", "en": "The name of ECS instance,[2, 128] English or Chinese characters, must start with a letter or Chinese in size, can contain numbers, '_' or '.', '-'." }, "Label": "Instance Name", "Default": "ecsinstance" }, "InstanceType": { "Type": "String", "Description": { "zh-cn": "ECS实例类型,进入产品控制台确保当前实例可用, 查看实例类型", "en": "The ECS instance type,go to the product console to ensure the current instance is available, View instance types." }, "Label": "Instance Type", "Default": "ecs.c5.large" }, "SystemDiskCategory": { "Type": "String", "AllowedValues": [ "cloud", "cloud_efficiency", "cloud_ssd" ], "Description": { "zh-cn": "系统磁盘类别:普通云盘(cloud)、高效云盘(cloud_efficiency)或固态盘(cloud_ssd)", "en": "System disk category: average cloud disk(cloud), efficient cloud disk(cloud_efficiency) or SSD cloud disk(cloud_ssd)" }, "Label": "Instance System Disk Category", "Default": "cloud_ssd" }, "ImageId": { "Type": "String", "Description": { "zh-cn": "镜像ID,ECS实例的镜像资源, 查看镜像资源", "en": "Image ID, represents the image resource to startup one ECS instance, View image resources" }, "Label": "Image ID", "Default": "centos_7" }, "InstancePassword": { "NoEcho": true, "Type": "String", "Description": { "zh-cn": "长度8-30,必须包含大写字母、小写字母、数字、特殊符号三种;
特殊字符包括:()'~!@#$%^&*_-+=|{}[]:;'<>,.?/", "en": "The Instance Name,A maximum of 16 characters, consisting of lowercase letters, Numbers, underscores, letters beginning, letters or Numbers ending." }, "AllowedPattern": "[a-zA-Z0-9-\\(\\)\\`\\~\\!@\\#\\$%\\^&\\*-+=\\|\\{\\}\\[\\]\\:\\;\\‘\\,\\.\\?\\/]*", "Label": "Instance Password", "ConstraintDescription": "The password is a string of 8 to 30 characters and must contain uppercase/lowercase letters, numbers.", "MinLength": "8", "MaxLength": "30" }, "MasterName": { "Type": "String", "Description": { "zh-cn": "主机名,[2,128]英文或中文字符,必须以字母或中文开头,可以包含数字、下划线或“.”、“-”。", "en": "Master hostname, [2, 128] English or Chinese characters, must start with a letter or Chinese in size, can contain numbers, '_' or '.', '-'." }, "Label": "Master Name", "Default": "master.hadoop" }, "HadoopHome": { "Type": "String", "Description": { "zh-cn": "Hadoop 主目录必须是新的", "en": "HADOOP_HOME directory should be new." }, "Label": "Hadoop Home", "Default": "/usr/local/hadoop/hadoop-2.7.7" }, "HadoopUrl": { "Type": "String", "Description": { "zh-cn": ".tar.gz的官方下载路径", "en": "The official download path of .tar.gz" }, "Label": "Hadoop Url", "Default": "http://apache.claz.org/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz" }, "SlaveAmount": { "Type": "Number", "Description": { "zh-cn": "ECS实例的最小值必须小于或等于最大值。", "en": "The minimum of ECS instances, must be less than or equal to the maximum." }, "Label": "Slave Amount", "MinValue": 1, "ConstraintDescription": "An integer within [1, 100]", "MaxValue": 100, "Default": 1 }, "ScalaHome": { "Type": "String", "Description": { "zh-cn": "SCALA_HOME 主目录必须是新的", "en": "SCALA_HOME directory should be new." }, "Label": "Scala Home", "Default": "/usr/local/scala/scala-2.12.1" }, "ScalaUrl": { "Type": "String", "Description": { "zh-cn": ".tar.gz的官方下载路径", "en": "The official download path of .tar.gz" }, "Label": "Scala Url", "Default": "https://downloads.lightbend.com/scala/2.12.1/scala-2.12.1.tgz" }, "SparkHome": { "Type": "String", "Description": { "zh-cn": "SPARK_HOME 主目录必须是新的", "en": "SPARK_HOME directory should be new." }, "Label": "Spark Home", "Default": "/usr/local/hadoop/spark-2.1.0-bin-hadoop2.7" }, "SparkUrl": { "Type": "String", "Description": { "zh-cn": "-bin-hadoopx.x.tgz的官方下载路径", "en": "The official download path of -bin-hadoopx.x.tgz" }, "Label": "Spark Url", "Default": "http://d3kbcqa49mib13.cloudfront.net/spark-2.1.0-bin-hadoop2.7.tgz" } }, "Metadata": { "ALIYUN::ROS::Interface": { "ParameterGroups": [ { "Parameters": [ "VpcName", "VpcCidrBlock", "VSwitchCidrBlock" ], "Label": { "default": "VPC" } }, { "Parameters": [ "ZoneId", "InstanceName", "InstanceType", "SystemDiskCategory", "ImageId", "SlaveAmount", "InstancePassword" ], "Label": { "default": "ECS" } }, { "Parameters": [ "MasterName", "HadoopHome", "HadoopUrl" ], "Label": { "default": "Hadoop" } }, { "Parameters": [ "ScalaHome", "ScalaUrl" ], "Label": { "default": "Scala" } }, { "Parameters": [ "SparkHome", "SparkUrl" ], "Label": { "default": "Spark" } } ], "TemplateTags": [ "Deploy a Hadoop-Spark environment" ] } }, "ROSTemplateFormatVersion": "2015-09-01", "Outputs": { "SparkWebsiteURL": { "Description": "URL for newly created Spark environment.", "Value": { "Fn::Join": [ "", [ "http://", { "Fn::GetAtt": [ "EipForward", "EipAddress" ] }, ":8080" ] ] } }, "HadoopWebsiteURL": { "Description": "URL for newly created Hadoop environment.", "Value": { "Fn::Join": [ "", [ "http://", { "Fn::GetAtt": [ "EipForward", "EipAddress" ] }, ":50070" ] ] } } }, "Resources": { "EipSNat": { "Type": "ALIYUN::VPC::EIP", "Properties": { "InternetChargeType": "PayByTraffic", "Bandwidth": 5 } }, "EIpSnatAssociation": { "DependsOn": "NatGateway", "Type": "ALIYUN::VPC::EIPAssociation", "Properties": { "InstanceId": { "Ref": "NatGateway" }, "AllocationId": { "Ref": "EipSNat" } } }, "EipForward": { "Type": "ALIYUN::VPC::EIP", "Properties": { "InternetChargeType": "PayByTraffic", "Bandwidth": 5 } }, "EIpForwardAssociation": { "DependsOn": "EIpSnatAssociation", "Type": "ALIYUN::VPC::EIPAssociation", "Properties": { "InstanceId": { "Ref": "NatGateway" }, "AllocationId": { "Ref": "EipForward" } } }, "ForwardEntry": { "Type": "ALIYUN::ECS::ForwardEntry", "DependsOn": [ "Master", "EIpForwardAssociation" ], "Properties": { "ExternalPort": "Any", "ExternalIp": { "Fn::GetAtt": [ "EipForward", "EipAddress" ] }, "IpProtocol": "Any", "InternalPort": "Any", "InternalIp": { "Fn::GetAtt": [ "Master", "PrivateIp" ] }, "ForwardTableId": { "Fn::GetAtt": [ "NatGateway", "ForwardTableId" ] } } }, "Master": { "Type": "ALIYUN::ECS::Instance", "DependsOn": [ "SlaveGroupWaitCondition", "SNatEntry" ], "Properties": { "InstanceName": { "Ref": "InstanceName" }, "IoOptimized": "optimized", "VpcId": { "Fn::GetAtt": [ "Vpc", "VpcId" ] }, "UserData": { "Fn::Replace": [ { "ros-notify": { "Fn::GetAtt": [ "MasterConditionHandle", "CurlCli" ] } }, { "Fn::Join": [ "", [ "#!/bin/bash \n", "# set -e \n", "ips_slave=", { "Fn::Join": [ ",", { "Fn::GetAtt": [ "SlaveGroup", "PrivateIps" ] } ] }, "\n", "hostnames_slave=", { "Fn::Join": [ ",", { "Fn::GetAtt": [ "SlaveGroup", "HostNames" ] } ] }, "\n", "HADOOP_HOME=", { "Ref": "HadoopHome" }, "\n", "SCALA_HOME=", { "Ref": "ScalaHome" }, "\n", "SPARK_HOME=", { "Ref": "SparkHome" }, "\n", "HadoopUrl=", { "Ref": "HadoopUrl" }, "\n", "ScalaUrl=", { "Ref": "ScalaUrl" }, "\n", "SparkUrl=", { "Ref": "SparkUrl" }, "\n", "MasterName=", { "Ref": "MasterName" }, "\n", "OLD_IFS=$IFS \nIFS=, \nips=($ips_slave) \nhostnames=($hostnames_slave) \nIFS=$OLD_IFS \n", "hostnamectl --static set-hostname \"$MasterName\" \n", "export HOME=/root \nexport HOSTNAME=`hostname` \n", "ip_addr=`ifconfig eth0 | awk '/inet /{print $2}'` \n", "cd /root \n", "rm -rf .ssh \n", "ssh-keygen -t rsa -P '' -f '/root/.ssh/id_rsa' \n", "cd /root/.ssh \n", "mv id_rsa bak.id_rsa \nmv id_rsa.pub bak.id_rsa.pub \n", "echo '-----BEGIN RSA PRIVATE KEY-----' > id_rsa \n", "echo 'MIIEowIBAAKCAQEAzfQ/QHwWB1njU9+Wu3RYi9g+g5rydSpAE0klefTJuZjtcaic' >> id_rsa \n", "echo 'SCeBN5avih8UToZ148+Ef2YzOtoosqluZpoYLCPSpAqr8pmviBJIU3vfu9mnDG9L' >> id_rsa \n", "echo 'oevT6K8w3wCBRCmqu+vc0Tpju/EeCuYK3+8w7e2I6F3+zIYzhhX3qmkocje7ACnV' >> id_rsa \n", "echo 'yh2DB/2m3sogTMc0RT+5y3kJAnC6TOIlGsYjOOkPbEF3Ifn1o4ZjOFOmQlcRJer4' >> id_rsa \n", "echo '1E6rTdXAxS2uDNMFBCf9Xyx7O9J+ELTCAXc4h7AE6WLdQb5Apzv4t1KswCAtRenP' >> id_rsa \n", "echo '1xGcUYY8I/JUT2VvBWtQJennrk9jrPZUFDcmcwIDAQABAoIBAAwzDZQaRYvF7UtI' >> id_rsa \n", "echo 'kTslVyFhe8J76SS7jfQWfxvMPi66OkZjQG6duG+8g0VhNei42j7WSfjp6trvlT2P' >> id_rsa \n", "echo '/7QgKJJkxNNmtmy2Ycljm9kmG0ibSePYq9g5ieHcjr6G3yFUfoKHJBtYpBO74pWu' >> id_rsa \n", "echo 'rrI5DuLpERUCjFc9E8w7fOIhPH4XZ6wk/EmPxHTgxZk+aMvqptyPSbUyiUOvCiZf' >> id_rsa \n", "echo 'MD0ircs9vgtslMVDlz9m6CoiNz6B3Yf6eLRoGGMiGnsQzZHIfnHCMX8i65Jc+TvQ' >> id_rsa \n", "echo 'fLopIHzwBwI55xpcOIBRgYiEAQJhLsSNSFugoxMcwe9RalTGGS21HOQu4b3ZylKM' >> id_rsa \n", "echo '8ofEVKECgYEA/Y4MzN04wAsM1yNuHN+9sdiVLG28LWH3dgpcXqa9gyNsWs9Gf8uf' >> id_rsa \n", "echo 'qbuvQGeKDRXCW93wO1jO+pCYVrkyY3l+KhBKIqmkJT5gFsa8dBUvEBLALiHNg3+o' >> id_rsa \n", "echo 'jR2Vqsemk8kMZA8zfJ3FKcMb1pt4S2GqepqsdC3DgzIIsxufCh7jSzsCgYEAz/Cv' >> id_rsa \n", "echo 'Z7gAdSFC8q6QxFxSyhfZwGA6QW6ZU7rZv9ZdGySvZg+vHbpNVmQ0BAQzJui3Qs9u' >> id_rsa \n", "echo 'XQMpYafXWzKsPzG6ZWvYXTF7fuxlovvG8Qd2A2QnGtGMB9YtQMHVqbsUDwxMjiTn' >> id_rsa \n", "echo 'VBZILkDf+WCwQ98P5UMoumI0goIcNZ+AXhcqrikCgYBkSwLvKfYfqH9Mvfv5Odsr' >> id_rsa \n", "echo '9NKUv1c20FB1BYYh/mxp6eIbTW/CbwXZup6IqCvoHxpBAlna77b3T6iibSDsTgtE' >> id_rsa \n", "echo 'kirw6Q8/mBukBrpWZGa4QeJ4nPBQuncuUmx4H/7Y6CaZkZW5DiMF8OIbEmYT0y7+' >> id_rsa \n", "echo 'zh222r9CLtFYH23aL/uSLwKBgQCS1xyG2eE41aw5RBznDWtJW15iA5If8sJD5ocu' >> id_rsa \n", "echo 'eWp2aImUQS8ghxdmEozI6U5WA7CmdWUyObFXTPc/Z6FLXwqJ5IZ+CRt0neuIFNSA' >> id_rsa \n", "echo 'EQy9iFQ1FBUW06BRQpBns7yOg9jr6BOTxchjIV0I9caDp1nKRIrWU9NQ9iCFnYVA' >> id_rsa \n", "echo '7IsvQQKBgFxgF7UOhwaiMb/ATSuhm2v9kVvRPEO9umdo7YJ9I4L09lYbAtpcnusQ' >> id_rsa \n", "echo 'fIROYL25VeEMgYcQyInc3Fm/sgJdbXQnUy+3QbbCcBCmcLj27LPQyxuu7p9hbPPT' >> id_rsa \n", "echo 'Mxx37OmYvOkSVTQz0T9HfDGvOJgt4t4cXD4T/7ewk62p6jdpSQrt' >> id_rsa \n", "echo '-----END RSA PRIVATE KEY-----' >> id_rsa \n", "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDN9D9AfBYHWeNT35a7dFiL2D6DmvJ1KkATSSV59Mm5mO1xqJxIJ4E3lq+KHxROhnXjz4R/ZjM62iiyqW5mmhgsI9KkCqvyma+IEkhTe9+72acMb0uh69PorzDfAIFEKaq769zROmO78R4K5grf7zDt7YjoXf7MhjOGFfeqaShyN7sAKdXKHYMH/abeyiBMxzRFP7nLeQkCcLpM4iUaxiM46Q9sQXch+fWjhmM4U6ZCVxEl6vjUTqtN1cDFLa4M0wUEJ/1fLHs70n4QtMIBdziHsATpYt1BvkCnO/i3UqzAIC1F6c/XEZxRhjwj8lRPZW8Fa1Al6eeuT2Os9lQUNyZz root@iZ2zee53wf4ndvajz30cdvZ' > id_rsa.pub \n", "cp id_rsa.pub authorized_keys \n", "chmod 600 authorized_keys \nchmod 600 id_rsa \n", "sed -i 's/# StrictHostKeyChecking ask/StrictHostKeyChecking no/' /etc/ssh/ssh_config \n", "sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/ssh_config \n", "service sshd restart \n", "for ip in ${ips[*]} \ndo \nscp -r /root/.ssh/bak.* root@$ip:/root/.ssh/ \ndone \n", "for ip in ${ips[*]} \ndo \nssh root@$ip \"cd /root/.ssh; rm -f id_rsa; mv bak.id_rsa id_rsa; rm -f id_rsa.pub; mv bak.id_rsa.pub id_rsa.pub; rm -f authorized_keys; cp id_rsa.pub authorized_keys; chmod 600 authorized_keys; chmod 600 id_rsa; exit\" \ndone \n", "cd /root/.ssh \n rm id_rsa \n mv bak.id_rsa id_rsa \n rm id_rsa.pub \n mv bak.id_rsa.pub id_rsa.pub \n rm authorized_keys \n cp id_rsa.pub authorized_keys \n chmod 600 authorized_keys \n chmod 600 id_rsa \n cd \n", "echo $ip_addr $MasterName >> /etc/hosts \n", "i=0 \n", "for ip in ${ips[*]} \ndo \necho $ip ${hostnames[$i]} >> /etc/hosts \ni=$[i+1] \ndone \n", "for ip in ${ips[*]} \ndo \ni=0 \nssh root@$ip \"echo $ip_addr $MasterName >> /etc/hosts; exit\" \n", "for ip1 in ${ips[*]} \ndo \nssh root@$ip \"echo $ip1 ${hostnames[$i]} >> /etc/hosts; exit\" \ni=$[i+1] \ndone \n", "done \n", "cd /root \n", "yum -y install aria2 \n", "yum -y install java \n", "for ip in ${ips[*]} \ndo \nssh root@$ip \"yum -y install java; exit\" \ndone \n", "cd /root \n", "aria2c $HadoopUrl \n", "mkdir -p $HADOOP_HOME \ntar zxvf hadoop-*.tar.gz -C $HADOOP_HOME \ncd $HADOOP_HOME \nmv hadoop-*.*/* ./ \nrmdir hadoop-*.* \n", "echo >> /etc/profile \n", "echo export HADOOP_HOME=$HADOOP_HOME >> /etc/profile \n", "echo export HADOOP_MAPRED_HOME=$HADOOP_HOME >> /etc/profile \n", "echo export HADOOP_COMMON_HOME=$HADOOP_HOME >> /etc/profile \n", "echo export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native >> /etc/profile \n", "echo export YARN_HOME=$HADOOP_HOME >> /etc/profile \n", "echo export HADOOP_HDFS_HOME=$HADOOP_HOME >> /etc/profile \n", "echo export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop >> /etc/profile \n", "echo export HADOOP_OPTS=-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native >> /etc/profile \n", "echo export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH >> /etc/profile \n", "echo export CLASSPATH=.:$CLASSPATH:$HADOOP__HOME/lib >> /etc/profile \n", "source /etc/profile \n", " \n", "mkdir -p $HADOOP_HOME/tmp \nmkdir -p $HADOOP_HOME/dfs/name \nmkdir -p $HADOOP_HOME/dfs/data \n", "echo >> /etc/profile \n", "JAVA_HOME=`find /usr/lib/jvm -name 'java-1.8.0-openjdk-1.8.0*'` \n", "echo export JAVA_HOME=$JAVA_HOME/jre >> /etc/profile \n", "echo export JRE_HOME=$JAVA_HOME/jre >> /etc/profile \n", " \n", "cd $HADOOP_HOME/etc/hadoop \n", "cp hadoop-env.sh bak.hadoop-env.sh \n", "sed -i '/export JAVA_HOME=/{s/^/# /}' hadoop-env.sh \n", "sed -i \"/# export JAVA_HOME=/a export JAVA_HOME=$JAVA_HOME\" hadoop-env.sh \n", " \n", "cd $HADOOP_HOME/etc/hadoop \n", "cp core-site.xml bak.core-site.xml \n", "echo '' > core-site.xml \n", "echo ' ' >> core-site.xml \n", "echo ' hadoop.tmp.dir' >> core-site.xml \n", "echo \" $HADOOP_HOME/tmp\" >> core-site.xml \n", "echo ' ' >> core-site.xml \n", "echo '' >> core-site.xml \n", "echo ' ' >> core-site.xml \n", "echo ' fs.default.name' >> core-site.xml \n", "echo \" hdfs://$ip_addr:9000\" >> core-site.xml \n", "echo ' ' >> core-site.xml \n", "echo '' >> core-site.xml \n", " \n", "cd $HADOOP_HOME/etc/hadoop \n", "cp hdfs-site.xml bak.hdfs-site.xml \n", "echo '' > hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo ' dfs.namenode.name.dir' >> hdfs-site.xml \n", "echo \" file://$HADOOP_HOME/dfs/name\" >> hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo '' >> hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo ' dfs.datanode.data.dir' >> hdfs-site.xml \n", "echo \" file://$HADOOP_HOME/dfs/data\" >> hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo '' >> hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo ' dfs.replication' >> hdfs-site.xml \n", "echo ' 1' >> hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo '' >> hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo ' dfs.nameservices' >> hdfs-site.xml \n", "echo ' hadoop-cluster1' >> hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo '' >> hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo ' dfs.namenode.secondary.http-address' >> hdfs-site.xml \n", "echo \" $ip_addr:50090\" >> hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo '' >> hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo ' dfs.webhdfs.enabled' >> hdfs-site.xml \n", "echo ' true' >> hdfs-site.xml \n", "echo ' ' >> hdfs-site.xml \n", "echo '' >> hdfs-site.xml \n", " \n", "cd $HADOOP_HOME/etc/hadoop \n", "cp mapred-site.xml.template mapred-site.xml \n", "echo '' > mapred-site.xml \n", "echo ' ' >> mapred-site.xml \n", "echo ' mapreduce.framework.name' >> mapred-site.xml \n", "echo ' yarn' >> mapred-site.xml \n", "echo ' true' >> mapred-site.xml \n", "echo ' ' >> mapred-site.xml \n", "echo '' >> mapred-site.xml \n", "echo ' ' >> mapred-site.xml \n", "echo ' mapreduce.jobtracker.http.address' >> mapred-site.xml \n", "echo \" $ip_addr:50030\" >> mapred-site.xml \n", "echo ' ' >> mapred-site.xml \n", "echo '' >> mapred-site.xml \n", "echo ' ' >> mapred-site.xml \n", "echo ' mapreduce.jobhistory.address' >> mapred-site.xml \n", "echo \" $ip_addr:10020\" >> mapred-site.xml \n", "echo ' ' >> mapred-site.xml \n", "echo '' >> mapred-site.xml \n", "echo ' ' >> mapred-site.xml \n", "echo ' mapreduce.jobhistory.webapp.address' >> mapred-site.xml \n", "echo \" $ip_addr:19888\" >> mapred-site.xml \n", "echo ' ' >> mapred-site.xml \n", "echo '' >> mapred-site.xml \n", "echo ' ' >> mapred-site.xml \n", "echo ' mapred.job.tracker' >> mapred-site.xml \n", "echo \" http://$ip_addr:9001\" >> mapred-site.xml \n", "echo ' ' >> mapred-site.xml \n", "echo '' >> mapred-site.xml \n", " \n", "cd $HADOOP_HOME/etc/hadoop \n", "cp yarn-site.xml bak.yarn-site.xml \n", "echo '' > yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' yarn.resourcemanager.hostname' >> yarn-site.xml \n", "echo \" $ip_addr\" >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' yarn.nodemanager.aux-services' >> yarn-site.xml \n", "echo ' mapreduce_shuffle' >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' yarn.resourcemanager.address' >> yarn-site.xml \n", "echo \" $ip_addr:8032\" >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' yarn.resourcemanager.scheduler.address' >> yarn-site.xml \n", "echo \" $ip_addr:8030\" >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' yarn.resourcemanager.resource-tracker.address' >> yarn-site.xml \n", "echo \" $ip_addr:8031\" >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' yarn.resourcemanager.admin.address' >> yarn-site.xml \n", "echo \" $ip_addr:8033\" >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo ' yarn.resourcemanager.webapp.address' >> yarn-site.xml \n", "echo \" $ip_addr:8088\" >> yarn-site.xml \n", "echo ' ' >> yarn-site.xml \n", "echo '' >> yarn-site.xml \n", " \n", "sed -i 304s/'$JAVA'/'java'/ /usr/local/hadoop/hadoop-2.7.7/bin/hdfs \n", "for ip in ${ips[*]} \ndo \nssh root@$ip \"mkdir -p $HADOOP_HOME; exit\" \ndone \n", "for ip in ${ips[*]} \ndo \nscp -r $HADOOP_HOME/* root@$ip:$HADOOP_HOME \ndone \n", " \n", "cd $HADOOP_HOME/etc/hadoop \nrm slaves \n", "for ip in ${ips[*]} \ndo \necho $ip >> slaves \ndone \n", "cd /root \n", "aria2c $ScalaUrl \n", "mkdir -p $SCALA_HOME \ntar zxvf scala-*.tgz -C $SCALA_HOME \ncd $SCALA_HOME \nmv scala-*.*/* ./ \nrmdir scala-*.* \n", "echo >> /etc/profile \n", "echo export SCALA_HOME=$SCALA_HOME >> /etc/profile \n", "echo export PATH=$PATH:$SCALA_HOME/bin >> /etc/profile \n", "source /etc/profile \n", " \n", "cd /root \n", "aria2c $SparkUrl \n", "mkdir -p $SPARK_HOME \ntar zxvf spark-*hadoop*.tgz -C $SPARK_HOME \ncd $SPARK_HOME \nmv spark-*hadoop*/* ./ \nrmdir spark-*hadoop* \n", "echo >> /etc/profile \n", "echo export SPARK_HOME=$SPARK_HOME >> /etc/profile \n", "echo export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin >> /etc/profile \n", "source /etc/profile \n", "for ip in ${ips[*]} \ndo \necho $ip >> $SPARK_HOME/conf/slaves \ndone \n", "cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh \n", "echo export SCALA_HOME=$SCALA_HOME > $SPARK_HOME/conf/spark-env.sh \n", "echo export JAVA_HOME=$JAVA_HOME >> $SPARK_HOME/conf/spark-env.sh \n", "for ip in ${ips[*]} \ndo \nssh root@$ip \"mkdir -p $SCALA_HOME; mkdir -p $SPARK_HOME; exit\" \ndone \n", "for ip in ${ips[*]} \ndo \nscp -r $SCALA_HOME/* root@$ip:$SCALA_HOME \ndone \n", "for ip in ${ips[*]} \ndo \nscp -r $SPARK_HOME/* root@$ip:$SPARK_HOME \ndone \n", "for ip in ${ips[*]} \ndo \nssh root@$ip \"echo >> /etc/profile;echo export SCALA_HOME=$SCALA_HOME >> /etc/profile;echo export PATH=$PATH:$SCALA_HOME/bin >> /etc/profile;echo export SPARK_HOME=$SPARK_HOME >> /etc/profile;echo export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin >> /etc/profile;source /etc/profile;exit\" \ndone \n", "$HADOOP_HOME/bin/hadoop namenode -format \n", "systemctl stop firewalld \n", "$HADOOP_HOME/sbin/start-dfs.sh \n", "$HADOOP_HOME/sbin/start-yarn.sh \n", "$SPARK_HOME/sbin/start-all.sh \n", "ros-notify -d '{\"data\" : \"Install Spark.\"}'\n" ] ] } ] }, "SecurityGroupId": { "Ref": "SecurityGroup" }, "VSwitchId": { "Ref": "VSwitch" }, "ImageId": { "Ref": "ImageId" }, "AllocatePublicIP": false, "InstanceType": { "Ref": "InstanceType" }, "Password": { "Ref": "InstancePassword" }, "SystemDiskCategory": { "Ref": "SystemDiskCategory" } } }, "VSwitch": { "Type": "ALIYUN::ECS::VSwitch", "DependsOn": "Vpc", "Properties": { "ZoneId": { "Ref": "ZoneId" }, "VpcId": { "Fn::GetAtt": [ "Vpc", "VpcId" ] }, "CidrBlock": { "Ref": "VSwitchCidrBlock" } } }, "MasterConditionHandle": { "Type": "ALIYUN::ROS::WaitConditionHandle" }, "Vpc": { "Type": "ALIYUN::ECS::VPC", "Properties": { "CidrBlock": { "Ref": "VpcCidrBlock" }, "VpcName": { "Ref": "VpcName" } } }, "SlaveGroupWaitCondition": { "Type": "ALIYUN::ROS::WaitCondition", "DependsOn": "SlaveGroup", "Properties": { "Timeout": 1800, "Count": { "Ref": "SlaveAmount" }, "Handle": { "Ref": "SlaveGroupConditionHandle" } } }, "NatGateway": { "Type": "ALIYUN::ECS::NatGateway", "DependsOn": "VSwitch", "Properties": { "Description": "My NAT Gateway", "VpcId": { "Fn::GetAtt": [ "Vpc", "VpcId" ] }, "NatGatewayName": "nat_gateway_1", "VSwitchId": { "Fn::GetAtt": [ "VSwitch", "VSwitchId" ] }, "Spec": "Small" } }, "SecurityGroup": { "Type": "ALIYUN::ECS::SecurityGroup", "Properties": { "VpcId": { "Ref": "Vpc" }, "SecurityGroupIngress": [ { "PortRange": "-1/-1", "Priority": 1, "SourceCidrIp": "0.0.0.0/0", "IpProtocol": "all", "NicType": "internet" } ], "SecurityGroupEgress": [ { "PortRange": "-1/-1", "Priority": 1, "IpProtocol": "all", "DestCidrIp": "0.0.0.0/0", "NicType": "internet" } ] } }, "MasterWaitCondition": { "Type": "ALIYUN::ROS::WaitCondition", "DependsOn": "Master", "Properties": { "Timeout": 10800, "Count": 1, "Handle": { "Ref": "MasterConditionHandle" } } }, "SNatEntry": { "DependsOn": "EIpSnatAssociation", "Type": "ALIYUN::ECS::SNatEntry", "Properties": { "SourceVSwitchId": { "Fn::GetAtt": [ "VSwitch", "VSwitchId" ] }, "SNatIp": { "Fn::GetAtt": [ "EipSNat", "EipAddress" ] }, "SNatTableId": { "Fn::GetAtt": [ "NatGateway", "SNatTableId" ] } } }, "SlaveGroupConditionHandle": { "Type": "ALIYUN::ROS::WaitConditionHandle" }, "SlaveGroup": { "Type": "ALIYUN::ECS::InstanceGroup", "Properties": { "InstanceName": { "Ref": "InstanceName" }, "IoOptimized": "optimized", "VpcId": { "Fn::GetAtt": [ "Vpc", "VpcId" ] }, "UserData": { "Fn::Replace": [ { "ros-notify": { "Fn::GetAtt": [ "SlaveGroupConditionHandle", "CurlCli" ] } }, { "Fn::Join": [ "", [ "#!/bin/bash \n", "export HOME=/root \nexport HOSTNAME=`hostname` \n", "cd /root \n", "rm -rf .ssh \n", "ssh-keygen -t rsa -P '' -f '/root/.ssh/id_rsa' \n", "cd /root/.ssh \n", "rm -f * \n", "echo '-----BEGIN RSA PRIVATE KEY-----' > id_rsa \n", "echo 'MIIEowIBAAKCAQEAzfQ/QHwWB1njU9+Wu3RYi9g+g5rydSpAE0klefTJuZjtcaic' >> id_rsa \n", "echo 'SCeBN5avih8UToZ148+Ef2YzOtoosqluZpoYLCPSpAqr8pmviBJIU3vfu9mnDG9L' >> id_rsa \n", "echo 'oevT6K8w3wCBRCmqu+vc0Tpju/EeCuYK3+8w7e2I6F3+zIYzhhX3qmkocje7ACnV' >> id_rsa \n", "echo 'yh2DB/2m3sogTMc0RT+5y3kJAnC6TOIlGsYjOOkPbEF3Ifn1o4ZjOFOmQlcRJer4' >> id_rsa \n", "echo '1E6rTdXAxS2uDNMFBCf9Xyx7O9J+ELTCAXc4h7AE6WLdQb5Apzv4t1KswCAtRenP' >> id_rsa \n", "echo '1xGcUYY8I/JUT2VvBWtQJennrk9jrPZUFDcmcwIDAQABAoIBAAwzDZQaRYvF7UtI' >> id_rsa \n", "echo 'kTslVyFhe8J76SS7jfQWfxvMPi66OkZjQG6duG+8g0VhNei42j7WSfjp6trvlT2P' >> id_rsa \n", "echo '/7QgKJJkxNNmtmy2Ycljm9kmG0ibSePYq9g5ieHcjr6G3yFUfoKHJBtYpBO74pWu' >> id_rsa \n", "echo 'rrI5DuLpERUCjFc9E8w7fOIhPH4XZ6wk/EmPxHTgxZk+aMvqptyPSbUyiUOvCiZf' >> id_rsa \n", "echo 'MD0ircs9vgtslMVDlz9m6CoiNz6B3Yf6eLRoGGMiGnsQzZHIfnHCMX8i65Jc+TvQ' >> id_rsa \n", "echo 'fLopIHzwBwI55xpcOIBRgYiEAQJhLsSNSFugoxMcwe9RalTGGS21HOQu4b3ZylKM' >> id_rsa \n", "echo '8ofEVKECgYEA/Y4MzN04wAsM1yNuHN+9sdiVLG28LWH3dgpcXqa9gyNsWs9Gf8uf' >> id_rsa \n", "echo 'qbuvQGeKDRXCW93wO1jO+pCYVrkyY3l+KhBKIqmkJT5gFsa8dBUvEBLALiHNg3+o' >> id_rsa \n", "echo 'jR2Vqsemk8kMZA8zfJ3FKcMb1pt4S2GqepqsdC3DgzIIsxufCh7jSzsCgYEAz/Cv' >> id_rsa \n", "echo 'Z7gAdSFC8q6QxFxSyhfZwGA6QW6ZU7rZv9ZdGySvZg+vHbpNVmQ0BAQzJui3Qs9u' >> id_rsa \n", "echo 'XQMpYafXWzKsPzG6ZWvYXTF7fuxlovvG8Qd2A2QnGtGMB9YtQMHVqbsUDwxMjiTn' >> id_rsa \n", "echo 'VBZILkDf+WCwQ98P5UMoumI0goIcNZ+AXhcqrikCgYBkSwLvKfYfqH9Mvfv5Odsr' >> id_rsa \n", "echo '9NKUv1c20FB1BYYh/mxp6eIbTW/CbwXZup6IqCvoHxpBAlna77b3T6iibSDsTgtE' >> id_rsa \n", "echo 'kirw6Q8/mBukBrpWZGa4QeJ4nPBQuncuUmx4H/7Y6CaZkZW5DiMF8OIbEmYT0y7+' >> id_rsa \n", "echo 'zh222r9CLtFYH23aL/uSLwKBgQCS1xyG2eE41aw5RBznDWtJW15iA5If8sJD5ocu' >> id_rsa \n", "echo 'eWp2aImUQS8ghxdmEozI6U5WA7CmdWUyObFXTPc/Z6FLXwqJ5IZ+CRt0neuIFNSA' >> id_rsa \n", "echo 'EQy9iFQ1FBUW06BRQpBns7yOg9jr6BOTxchjIV0I9caDp1nKRIrWU9NQ9iCFnYVA' >> id_rsa \n", "echo '7IsvQQKBgFxgF7UOhwaiMb/ATSuhm2v9kVvRPEO9umdo7YJ9I4L09lYbAtpcnusQ' >> id_rsa \n", "echo 'fIROYL25VeEMgYcQyInc3Fm/sgJdbXQnUy+3QbbCcBCmcLj27LPQyxuu7p9hbPPT' >> id_rsa \n", "echo 'Mxx37OmYvOkSVTQz0T9HfDGvOJgt4t4cXD4T/7ewk62p6jdpSQrt' >> id_rsa \n", "echo '-----END RSA PRIVATE KEY-----' >> id_rsa \n", "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDN9D9AfBYHWeNT35a7dFiL2D6DmvJ1KkATSSV59Mm5mO1xqJxIJ4E3lq+KHxROhnXjz4R/ZjM62iiyqW5mmhgsI9KkCqvyma+IEkhTe9+72acMb0uh69PorzDfAIFEKaq769zROmO78R4K5grf7zDt7YjoXf7MhjOGFfeqaShyN7sAKdXKHYMH/abeyiBMxzRFP7nLeQkCcLpM4iUaxiM46Q9sQXch+fWjhmM4U6ZCVxEl6vjUTqtN1cDFLa4M0wUEJ/1fLHs70n4QtMIBdziHsATpYt1BvkCnO/i3UqzAIC1F6c/XEZxRhjwj8lRPZW8Fa1Al6eeuT2Os9lQUNyZz root@iZ2zee53wf4ndvajz30cdvZ' > id_rsa.pub \n", "cp id_rsa.pub authorized_keys \n", "chmod 600 authorized_keys \nchmod 600 id_rsa \n", "sed -i 's/# StrictHostKeyChecking ask/StrictHostKeyChecking no/' /etc/ssh/ssh_config \n", "sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/ssh_config \n", "service sshd restart \n", "ros-notify -d '{\"data\" : \"Config SSH login without password.\"}'\n" ] ] } ] }, "SystemDisk_Category": { "Ref": "SystemDiskCategory" }, "SecurityGroupId": { "Ref": "SecurityGroup" }, "VSwitchId": { "Ref": "VSwitch" }, "ImageId": { "Ref": "ImageId" }, "InstanceType": { "Ref": "InstanceType" }, "MaxAmount": { "Ref": "SlaveAmount" }, "Password": { "Ref": "InstancePassword" } } } } }