Skip to content
Snippets Groups Projects
Commit 44d3a6a7 authored by Daniel Darabos's avatar Daniel Darabos Committed by Matei Zaharia
Browse files

[SPARK-3342] Add SSDs to block device mapping

On `m3.2xlarge` instances the 2x80GB SSDs are inaccessible if not added to the block device mapping when the instance is created. They work when added with this patch. I have not tested this with other instance types, and I do not know much about this script and EC2 deployment in general. Maybe this code needs to depend on the instance type.

The requirement for this mapping is described in the AWS docs at:
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html#InstanceStore_UsageScenarios

"For M3 instances, you must specify instance store volumes in the block
device mapping for the instance. When you launch an M3 instance, we
ignore any instance store volumes specified in the block device mapping
for the AMI."

Author: Daniel Darabos <darabos.daniel@gmail.com>

Closes #2081 from darabos/patch-1 and squashes the following commits:

1ceb2c8 [Daniel Darabos] Use %d string interpolation instead of {}.
a1854d7 [Daniel Darabos] Only specify ephemeral device mapping for M3.
e0d9e37 [Daniel Darabos] Create ephemeral device mapping based on get_num_disks().
6b116a6 [Daniel Darabos] Add SSDs to block device mapping
parent db160676
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,7 @@ import os ...@@ -26,6 +26,7 @@ import os
import pipes import pipes
import random import random
import shutil import shutil
import string
import subprocess import subprocess
import sys import sys
import tempfile import tempfile
...@@ -34,7 +35,7 @@ import urllib2 ...@@ -34,7 +35,7 @@ import urllib2
from optparse import OptionParser from optparse import OptionParser
from sys import stderr from sys import stderr
import boto import boto
from boto.ec2.blockdevicemapping import BlockDeviceMapping, EBSBlockDeviceType from boto.ec2.blockdevicemapping import BlockDeviceMapping, BlockDeviceType, EBSBlockDeviceType
from boto import ec2 from boto import ec2
# A URL prefix from which to fetch AMI information # A URL prefix from which to fetch AMI information
...@@ -355,6 +356,15 @@ def launch_cluster(conn, opts, cluster_name): ...@@ -355,6 +356,15 @@ def launch_cluster(conn, opts, cluster_name):
device.delete_on_termination = True device.delete_on_termination = True
block_map["/dev/sdv"] = device block_map["/dev/sdv"] = device
# AWS ignores the AMI-specified block device mapping for M3 (see SPARK-3342).
if opts.instance_type.startswith('m3.'):
for i in range(get_num_disks(opts.instance_type)):
dev = BlockDeviceType()
dev.ephemeral_name = 'ephemeral%d' % i
# The first ephemeral drive is /dev/sdb.
name = '/dev/sd' + string.letters[i + 1]
block_map[name] = dev
# Launch slaves # Launch slaves
if opts.spot_price is not None: if opts.spot_price is not None:
# Launch spot instances with the requested price # Launch spot instances with the requested price
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment