ÎÒÃÇÒѾÍê³ÉÁ˶ÔHadoopÐèÇóµÄ̽Ë÷£¬²¢¿´µ½ÁËVPCÓëEC2´îÅäÆðÀ´ÈÃEMR·þÎñ¸ü¾ßЧÂʵIJÙ×÷¡£Í¨¹ý½¨Á¢Ò»¸öеÄVPC£¬ÎÒÃÇ¿´µ½Ä¬ÈÏÉèÖÃÈçºÎÌṩͨÐÅ£¬ÒÔ¼°¹¹³ÉHadoop¼¯ÈºµÄʵÀýÐèÇ󣬲¢Í¨¹ýÐÞ¸ÄÕâЩÐÐΪÀ´Ó°ÏìEMR¡£
ʱÏ£¬VPCÒѾ³ÉΪ·¢²¼Amazon EC2ʵÀýµÄĬÈÏ»·¾³£¬Òò´ËÕÆÎÕAmazon
VPC»·¾³ÖеÄAmazon EMR¼¯ÈºÔËÐÐÔÀíÖÁ¹ØÖØÒª¡£ÔÚÕâÆª²©ÎÄÖУ¬ÎÒÃǽ«ÅªÇå³þΪʲôÐèÒªÔÚEC2 VPC»·¾³ÖÐÔËÐÐHadoop¼¯Èº¡£È»ºó£¬ÎÒÃǽ«½¨Á¢Ò»¸öеÄVPC»·¾³£¬²¢·¢²¼Ò»¸öEMR¼¯Èº¡£ÕâÊÇÕâϵÁв©ÎĵĵÚÒ»²¿·Ö£¬µÚ¶þ²¿·ÖÎÒÃǽ«Ïêϸ½éÉÜÈçºÎ¶¨ÖÆ»¯DNS¡£
HadoopͨÐÅÐèÇó£¨1£©
ͨ¹ý Hadoop wikiÎÒÃÇÁ˽⵽£º¡°ÎªÁËÈÃHadoopÕý³£¹¤×÷£¬ËùÓеĻúÆ÷±ØÐë¿ÉÒÔÏ໥¸ÐÖª£¬²¢Ï໥ͨÐÅ£»Òò´Ë£¬ËüÃÇÐèÒªÒ»¸öʶ±ð»úÖÆ£¬´Ó¶øÆäËüÖ÷»ú¿ÉÒÔ¿ìËÙÕÒµ½ËüÃÇ¡£¡±ÔÚEMRÖУ¬Ö÷»ú¼äµÄ¸ÐÖªºÍͨÐÅͨ¹ýÉèÖÃ
VPCÖеÄDNS½â¾ö·½°¸ºÍDNSÖ÷»úÃû³ÆÍê³É¡£Í¨¹ýÆôÓÃÕâЩĬÈÏÉèÖã¬ÄãµÄʵÀý»á±»×Ô¶¯µØÖ¸ÅäÖ÷»úÃû³Æ¡ª¡ªÊ¹Óù«¹²ºÍ˽ÓÐIPµØÖ·£¨Í¬Ê±£¬Ê¹Óá°-¡±Ìæ»»¡°.¡±£¬±ÈÈçip-10-128-8-1.ec2.internal£©¡£´Ó¶ø£¬ÊµÀý¿ÉÒÔͨ¹ý
EMR-managed security groupsʵÏÖͨÐÅ¡£
Hadoop ͨѶÐèÇó£¨2£©
ÔÚHadoop 1ÖУ¬Í¨ÐÅÐèÇóÊǷdz£¼òµ¥µÄ£¬Í¬Ê±´ó²¿·ÖÇé¿öÒ²ÊǷdz£¿íÈݵġ£¾Ù¸öÀý×Ó£¬Hadoop 1ÖУ¬Èç¹ûHDFS
DataNodes²»¿ÉÒÔ±»NameNode½âÎö³ÉÒ»¸öÈ«³ÆÓòÃû£¬ÄÇôËü½«±»»Ø¹öµ½Ò»¸öIPµØÖ·£¬Í¨ÐżÌÐø¡£Òò´Ë£¬³ýÏ»·¾³ÖгöÏÖÎÊÌ⣬һ¸öÅäÖõõ±µÄHadoop
1»·¾³ºÜÉÙ±ÀÀ£¡£
Ëæ×ÅHadoopÏîÄ¿Öð½¥³ÉÊ죬¸ü½¡×³µÄ Hadoop°²È«Ä£ÐÍÐèÇóÒ²Öð½¥ÌáÉý¡£Kerberosʶ±ð¡¢ÍøÂç¼ÓÃܵȹ¦Äܱ»¼ÓÈëHadoopÒÔ°ïÖú×èÖ¹½Úµã±»Ìí¼Óµ½Ò»¸ö¼¯Èº£¬±ÈÈçÏÂÃæÕâ¸öHDFSÅäÖòÎÊý£º
dfs.namenode.datanode.registration.ip-hostname-check |
ÔÚHadoop 2ÖУ¬²»¿ÉÒÔ±»NameNode½âÎöµÄDataNode½«»á±»¾Ü¾øÍ¨ÐÅ£º
org.apache.hadoop.hdfs.server.protocol.DisallowedDatanodeException: Datanode denied communication with namenode |
±¾ÖÊÉÏ£¬Hadoop 1Éý¼¶µ½Hadoop 2ºó²¢Ã»ÓÐÒýÆð¼¼ÊõÒªÇóµÄ¸Ä±ä¡£ÎªÁ˱£Ö¤Õý³£ÔËÐУ¬½Úµã¼ä»¹ÊÇÐèÒªÏ໥¸ÐÖª²¢Í¨ÐÅ¡£µ«ÊÇÔÚHadoop
2ÖУ¬Éý¼¶ÒýÆðµÄ¸Ä±äºÜ¿ÉÄÜ»áÔì³É²»Êʵ±µÄ»·¾³ÅäÖ㬴ӶøÔì³ÉHDFSÒòΪUnknownHost¡¢ConnectionRefusedºÍNoRouteToHostÒì³£ÎÞ·¨¼ÓÔØÎļþ¡£
VPCÖеÄÉèÖÃ
EMRλÓÚVPCÖ®Í⣬ͬʱ»¹ÐèÒªÔÚÈκÎʱ¼ä¿ÉÒÔÓëËùÓнڵ㽻»¥¡£¼¯ÈºÖеÄʵÀýÐèÒª¶¨Î»£¨Í¨¹ýDNS£©ÒÔ¼°ÓëEMRºÍAmazon
S3·þÎñ¶Ëµã½»»¥£¨Ê¹ÓÿíËɵݲȫ×éºÍÍøÂçACLs£©¡£ÒÔÉÏÕâЩ½«°ïÖúµ½¼¯ÈºµÄ´´½¨¡¢CloudWatch¼àÊÓ¡¢ÈÕ־ͬ²½ÒÔ¼°Ìá½»´¦Àí¡£Î¢ÁËÍê³ÉÕâЩ£¬EMR¼¯Èº»¹ÐèÒªÒ»¸ö
InernetÍø¹Ø¡£

ĬÈÏ·ÓÉ»òÕß·ÇVGWsµÄÇé¿öÏ£¬NATʵÀý½«²»±»Ö§³Ö¡£ÔÚÕâÁ½ÖÖ³¡¾°³¢ÊÔ·¢²¼Ò»¸ö¼¯Èº½«µ¼Ö¼¯ÈºÖÕÖ¹»òÕß´íÎó£º
"The subnet configuration was invalid: Cannot find route to
InternetGateway in main RouteTable rtb-036bc666 for vpc vpc-a33690c6" |
´ËÍ⣬ÔÚʹÓÃÍøÂçACL×ÓÍøÖз¢²¼µÄEMR¼¯Èº¿ÉÄÜ»á´ò¶ÏÕâ¸öͨÐÅ¡£ÕâÖ÷ÒªÒòΪ ACLsÊÇÎÞ״̬µÄ£¬ÊäÈëºÍÊä³ö¹æÔò±ØÐë±»Ã÷È·µÄ¹æ¶¨£¬²»Ïñ
EMR-managed security groupsÖÐʹÓõÄÓÐ״̬¹æÔò¡£Èç¹ûEMR¼¯Èº·¢²¼ÔÚÒ»¸öʹÓÃÁËACLµÄ×ÓÍøÖУ¬²¢ÇÒûÓÐÌṩ×ã¹»µÄ·ÃÎÊ£¬ÄÇô¼¯Èº½«±»ÖÕÖ¹¡£Èç¹ûÄã±ØÐëʹÓÃACL£¬ÄÇôÇëʹÓÃ
EMR-managed security groups×÷ΪIPµØÖ·ºÍ¶Ë¿Ú·¶Î§µ¼º½ÒÔÂú×ãʵÀýµÄͨÐÅ¡£
Àí½âDNS½â¾ö·½°¸ºÍDNSÖ÷»úÃû³Æ
ÔÚVPCÖУ¬½ÚµãÖ®¼ä±ØÐëҪʹÓÃDNS²éÕÒÒÔ×öµ½Ï໥¶¨Î»¡£·ñÔò£¬ÀàËÆYarn ResourceManagerºÍHDFS
NameNodeÕâÑùÖÁ¹Ø½ôÒªµÄÊØ»¤½ø³Ì½«³öÏÖÎÊÌâ¡£¼øÓÚ¼¯ÈºÖÐÃû³Æ½âÎöµÄÖØÒªÐÔ£¬Èκ௧öÊÓµÄDNSÎÊÌ⽫ºÄ·Ñ´óÁ¿µÄ¹ÜÀíʱ¼ä¡£
ÎÞÂÛÄãµÄʵÀýÊÇ·ñ×Ô¶¯ÊÕµ½Ò»¸öÍêÈ«ÃèÊöµÄDNSÃû³Æ£¬DNSÖ÷»úÃû³Æ¶¼¿ÉÒÔÔÚVPC¿ØÖÆÖÐÉèÖá£Èç¹ûÄãʹÓõÄÊÇAmazonProvidedDNS×÷ΪDNS·þÎñÆ÷µÄĬÈÏÅäÖ㬽ûÖ¹Õâ¸öÉèÖÃͬÑù×èÖ¹ÄãµÄʵÀý½âÎöÈκÎλÓÚVPC×ÓÍøCIDR·¶Î§µÄÖ÷»úÃû³Æ¡£
ÏÂÃæÕâЩ´úÂëչʾÁËÔÚ¿ªÆôDNSÖ÷»úÃû³ÆµÄʵÀýÉϲéÕÒÁíÒ»¸öVPCÖеÄʵÀý£º
[ec2-user@ip-192-168-128-5 ~]$ nslookup 192.168.128.6 Server: 192.168.0.2 Address: 192.168.0.2#53 Non-authoritative answer: 6.128.168.192.in-addr.arpa name = ip-192-168-128-6.us-west-2.compute.internal.
Authoritative answers can be found from:
[ec2-user@ip-192-168-128-5 ~]$ nslookup ip-192-168-128-6.us-west-2.compute.internal
Server: 192.168.0.2
Address: 192.168.0.2#53
Non-authoritative answer:
Name: ip-192-168-128-6.us-west-2.compute.internal
Address: 192.168.128.6
[ec2-user@ip-192-168-128-5 ~]$ |
ÔÚ½ûÓÃÁËDNSÖ÷»úÃû³ÆÖ§³Ö¡¢ÖØÆôºóÔËÐÐÏàͬµÄ²éÕÒ£º
aws ec2 modify-vpc-attribute --vpc-id vpc-a33690c6 --no-enable-dns-hostnames |
[ec2-user@ip-192-168-128-5 ~]$ nslookup 192.168.128.6 Server: 192.168.0.2 Address: 192.168.0.2#53
** server can't find 6.128.168.192.in-addr.arpa.:
NXDOMAIN
[ec2-user@ip-192-168-128-5 ~]$ nslookup ip-192-168-128-6.us-west-2.compute.internal
Server: 192.168.0.2
Address: 192.168.0.2#53
** server can't find ip-192-168-128-6.us-west-2.compute.internal:
NXDOMAIN |
ÔÚÕâ¸öÇé¿öÏ£¬Õý·´Ïò²éÕÒ¶¼ÎÞ·¨½øÐС£×¢Ò⣬ÍⲿµÄ²éÕÒÈÔÈ»¿ÉÒÔ½øÐС£
[ec2-user@ip-192-168-128-5 ~]$ [ec2-user@ip-192-168-128-5 ~]$ nslookup <a href="http://www.google.com">www.google.com</a> Server: 192.168.0.2 Address: 192.168.0.2#53 |
Non-authoritative answer: Name: <a href="http://www.google.com">www.google.com</a> Address: 216.58.216.132 |
¹Ø±ÕDNS½âÎö»á×èÖ¹ÎÒÃǽâÎöÈκβéÕÒ¡£
aws ec2 modify-vpc-attribute --vpc-id vpc-a33690c6 --no-enable-dns-support
[ec2-user@ip-172-31-15-59 ~]$ nslookup google.com |
;; connection timed out; trying next origin ;; connection timed out; no servers could be reached |
µ±¹Ø¼ü±£»¤½ø³ÌÓöµ½DNSÎÊÌâʱ£¬ËüÃǽ«ÎÞ·¨Æô¶¯¡£ÔÚÈ«²¿¹Ø¼üϵͳûÓÐÍêÈ«Õý³£ÔËÐеÄÇé¿öÏ£¬EMR²»ÔÊÐí¼¯Èº¹¤×÷¡£ÏÂÃæÕâ¸öÈÕ־˵Ã÷ÁËÕâ¸öÎÊÌ⣺
SHUTDOWN_MSG: Shutting down ResourceManager at java.net.UnknownHostException:
ip-192-168-128-13.hadoop.local: ip-192-168-128-13.hadoop.local: Name or service not known
SHUTDOWN_MSG: Shutting down NameNode at java.net.UnknownHostException:
ip-192-168-128-13.hadoop.local: ip-192-168-128-13.hadoop.local |
Õâ¸öÎÊÌâÖ÷ÒªÓÉÓÚDNS´íÎóµ¼Öµļ¯ÈºÖÕÖ¹£¬´íÎóÀàÐÍÈçÏ£º
"On the master instance (i-b3b1e3bf), after bootstrap actions were run Hadoop failed to launch" |
ÁíÒ»¸öʾÀý£º
On 2 slave instances (including i-92f8aa9e and i-8cf8aa80), after bootstrap actions were run Hadoop failed to launch. |
EMR¼Ù¶¨ÄãµÄEC2ʵÀý½«·ÖÅäĬÈϵÄÄÚ²¿Ö÷»úÃû³Æ£¨ec2.internal»òÕßregion.compute.internal£©»òÕßÒ»¸öIPµØÖ·
£¨Èç¹ûÄãµÄVPCÅäÖÃÖÐÔÊÐíDNSÖ÷»úÃû³Æ£©¡£µ±Æô¶¯Ò»¸ö¶¨ÖÆÓòÃûʱ£¬Hadoop 1½«²»»á²úÉú´íÎó£¬ÒòΪÔÚHadoop
1ÖУ¬Ã»Óй涨Æô¶¯Ç°½Úµã±ØÐëʹÓÃÓòÃû½âÎö¡£
ÔÚHadoop 2ÖУ¬Ê¹Óö¨ÖÆ»¯ÓòÃû½«µ¼Ö¼¯ÈºÅäÖÃÖµ£¨Ö÷»úÃû³ÆÌî³ä£©²»ÄÜÕýÈ·µÄ½âÎö¡£·´¹ýÀ´£¬¼¯Èº»áÒòÊØ»¤½ø³ÌÆô¶¯Éèʧ°Ü¶øÖÕÖ¹¡£ÕâÒ²¾ÍÊÇ˵£¬Èç¹û×Ô¶¨ÒåÖµ¿ÉÒÔ±»½âÎö£¬Hadoop
2¼¯Èº¾Í¿ÉÒÔʹÓö¨ÖÆÓòÃû¡£Í¨¹ýʹÓÃDNS·þÎñÆ÷ºÍ VPC£¬ÎÒÃÇ¿ÉÒÔ±ã½ÝµØÊµÏÖÕâ¸ö²Ù×÷¡£
ΪEMR½¨Á¢Ò»¸öVPC
µ½´ËΪֹ£¬ÎÒÃǶÔHadoopºÍEMRµÄ¹²Í¬ÐèÇóÒѾÓÐÁËÒ»¶¨µÄÀí½â£¬ÎÒÃÇ¿ÉÒÔ½¨Á¢Ò»¸öVPCÀ´·¢²¼¼¯Èº¡£Õâ¸ö²Ù×÷Äã¿ÉÒÔͨ¹ý¿ØÖÆÌ¨ÖеÄVPC
wizardʵÏÖ£¬»òÕßÊÇͨ¹ýÏÂÃæµÄCLI²½Öè¡£
¿ªÆôÒ»¸ö/24µÄVPC£¬²¢Ê¹ÓÃÒ»¸ö/28µÄ×ÓÍø¡£
aws ec2 create-vpc --cidr-block 10.20.30.0/24 { "Vpc": { "InstanceTenancy": "default", "State": "pending",
"VpcId": "vpc-055ef660", "CidrBlock": "10.20.30.0/24", "DhcpOptionsId": "dopt-a8c1c9ca" } } |
½¨Á¢Ò»¸öÓµÓÐ×ÓÍøµÄVPC£¬²¢ÎªÆäÖ¸¶¨Ò»¸öVPC IDºÍÒ»¸ö×ÓÍø·¶Î§¡£ÔÚÕâ¸öʾÀýÖУ¬ÎÒÃǽ«Ê¹ÓÃ10.20.30.0/28¡£
aws ec2 create-subnet --vpc-id vpc-055ef660 --cidr-block 10.20.30.0/28 |
×ÓÍøIDºÍIPµØÖ·ÊýÁ¿½«»á±»·µ»Ø£¬×¢ÒâÕâЩ¡£
{ "Subnet": { "VpcId": "vpc-055ef660", "CidrBlock": "10.20.30.0/28", "State": "pending", "AvailabilityZone": "us-west-2a", "SubnetId": "subnet-907af9f5", "AvailableIpAddressCount": 11 } } |
ÐèÒªÒ»¸ö¹«¹²InternetÍø¹ØºÍÒ»¸ö·ÓÉ±í¡£ÔÚÕâ֮ǰ£¬ÎÒÃÇÐèÒª·¢ËÍÒ»¸ö´øÓÐVPC IDµÄcreate-route-tableÃüÁî¡£ÏÂÒ»²½£¬ÎÒÃǽ«Í¨¹ýcreate-route½¨Á¢Ä¬ÈÏ·ÓÉ¡£
aws ec2 create-route-table --vpc-id vpc-055ef660 |
ÕâÀïÐèҪעÒâ·µ»ØµÄ·ÓɱíID¡£
{ "RouteTable": { "Associations": [], "RouteTableId": "rtb-4640f623", "VpcId": "vpc-055ef660", "PropagatingVgws": [], "Tags": [], "Routes": [ { "GatewayId": "local", "DestinationCidrBlock": "10.20.30.0/24", "State": "active", "Origin": "CreateRouteTable" } ] } } |
ÒòΪEMRµÄÐèÇó£¬ÕâÀïÐèÒª½¨Á¢Ò»¸öÐµĻ¥ÁªÍøÍø¹Ø¡£
aws ec2 create-internet-gateway |
{ "InternetGateway": { "Tags": [], "InternetGatewayId": "igw-24469141", "Attachments": [] } } |
×¢ÒâÕâÀï·µ»ØµÄ»¥ÁªÍøÍø¹ØID¡£ÏÂÒ»²½£¬ÎÒÃǽ«»¥ÁªÍøÍø¹Ø¼Óµ½VPCÉÏ£º
{ "InternetGateway": { "Tags": [], "InternetGatewayId": "igw-24469141", "Attachments": [] } } |
aws ec2 attach-internet-gateway --internet-gateway-id igw-24469141 --vpc-id vpc-055ef660 |
ͨ¹ý֮ǰ»ñµÃµÄÎïÁªÍøÍø¹ØIDºÍ·ÓɱíID£¬ÎÒÃǽ«»¥ÁªÍøÍø¹Ø×÷ΪĬÈÏ·ÓÉʹÓá£
aws ec2 create-route --route-table-id rtb-e743f582 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-24469141 |
ÎÒÃÇÐèÒª¼ì²éDNSÖ÷»úÃû³ÆÊÇ·ñ±»ÔÊÐí¡£Èç¹û²»ÔÊÐí£¬ÄÇô´ò¿ª¡£
aws ec2 describe-vpc-attribute --vpc-id vpc-055ef660 --attribute enableDnsHostnames { "VpcId": "vpc-055ef660", "EnableDnsHostnames": { "Value": false } } |
aws ec2 modify-vpc-attribute --vpc-id vpc-055ef660 --enable-dns-hostnames |
×îÖÕ£¬ÎÒÃÇÒѾ×öºÃÁËÔÚVPCÖз¢²¼¼¯ÈºµÄËùÓÐÏȾö×¼±¸¡£ÎÒÃÇ¿ÉÒÔʹÓÃÒÔÏÂÃüÁîÀ´·¢²¼Ò»¸ö²âÊÔ¼¯Èº£¬²¢Ê¹ÓÃËü×öword-cout¡£ÌáÐÑ£º²âÊÔʱ¼ÇµÃ½«ÏÂÃæ´úÂëÖеÄÊä³öµØÖ·»»³ÉÄã×Ô¼ºµÄS3
bucket¡£
aws emr create-cluster --steps Type=STREAMING,Name='Streaming Program&',
ActionOnFailure=CONTINUE,Args=[-files,s3://elasticmapreduce/samples/wordcount/wordSplitter.py,
-mapper,wordSplitter.py,-reducer,aggregate,-input,s3://elasticmapreduce/samples/wordcount/input,
-output,s3://<mybucket>/wordcount/output] --ec2-attributes
SubnetId=subnet-907af9f5 --ami-version 3.3.2 --instance-groups
InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge
InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge --auto-terminate |
¼¯Èº±»·µ»Ø¡£
{ ClusterId": "j-2TEFHMDR3LXWD" } |
¼¸·ÖÖӺ󣬼ì²éÄãµÄ¼¯ÈºÊÇ·ñÒѾÍê³ÉÁËword cout×÷Òµ¡£
aws emr describe-cluster --cluster-id j-2TEFHMDR3LXWD --query Cluster.Status.StateChangeReason.Message "Steps completed" |
|