本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
DistributedCache 是一项 Hadoop 功能,当地图或简化任务需要访问公共数据时,它可以提高效率。如果您的集群依赖于创建集群时未安装的现有应用程序或二进制文件,则可以使用 DistributedCache 来导入这些文件。此功能让集群节点可以从它的本地文件系统中读取导入的文件,而不是从其它集群节点中检索文件。
欲了解更多信息,请访问 http://hadoop.apache。 org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html。
你调用 DistributedCache 当你创建集群时。在即将开始 Hadoop 作业前,将文件读入缓存区,并且在作业持续期间文件会保留在缓存中。您可以缓存存储在任何兼容 Hadoop 的文件系统(例如或 HDFS Amazon S3)上的文件。文件缓存的默认大小是 10 GB。要更改缓存大小,可使用引导操作重新配置 Hadoop 参数 local.cache.size
。有关更多信息,请参阅创建引导操作以在 Amazon EMR 集群中安装其他软件。
支持的文件类型
DistributedCache 允许单个文件和存档。单个文件缓存为只读模式。可执行文件和二进制文件具有执行权限设置。
存档是通过实用工具 (如 gzip
) 打包的一个或多个文件。DistributedCache 将压缩文件传递到每个核心节点,并在缓存过程中对存档进行解压缩。DistributedCache 支持以下压缩格式:
缓存文件的位置
DistributedCache 仅将文件复制到核心节点。如果集群中没有核心节点,DistributedCache 将文件复制到主节点。
DistributedCache 使用符号链接将缓存文件关联到映射器和缩减器的当前工作目录。符号链接是文件位置的一个别名,而不是实际的文件位置。参数值(yarn-site.xml
中的 yarn.nodemanager.local-dirs
),可指定临时文件的位置。Amazon 将此参数EMR设置为/mnt/mapred
,或者根据实例类型和EMR版本设置一些变体。例如,某个设置可能包含 /mnt/mapred
和 /mnt1/mapred
,因为此实例类型有两个短暂卷。缓存文件位于临时文件位置的子目录中:/mnt/mapred/taskTracker/archive
。
如果您缓存单个文件,DistributedCache 将文件放在archive
目录中。如果您缓存档案,DistributedCache 解压缩文件,在中创建一个/archive
与存档文件名同名的子目录。单个文件位于新的子目录下。
您可以使用 … DistributedCache 仅在使用流媒体时。
从 Streaming 应用程序访问缓存文件
要从映射器或 Reducer 应用程序中访问缓存文件,您需要确保已将当前工作目录 (./) 添加到应用程序路径中,并引用了缓存文件,就好像这些文件存在于当前工作目录下一样。
从 Streaming 应用程序访问缓存文件
您可以使用 AWS Management Console 和 AWS CLI 来创建使用分布式缓存的集群。
- Console
-
使用新控制台指定分布式缓存文件
-
登录 AWS Management Console,然后通过 https://console.aws.amazon.com/em r 打开亚马逊EMR控制台。
-
EC2在左侧导航窗格的开下EMR,选择集群,然后选择创建集群。
-
在 Steps(步骤)下,选择 Add step(添加步骤)。Add step(添加步骤)对话框随即打开。在 Arguments(参数)字段,将要保存至缓存的文件和存档包含在内。文件大小 (或存档文件中文件的总计大小) 必须小于分配的缓存大小。
如果要将单个文件添加到分布式缓存,请指定 -cacheFile
,后跟文件名称和位置、井号(#)以及将文件放入本地缓存时要为其指定的名称。以下示例说明了如何将单个文件添加到分布式缓存。
-cacheFile \
s3://DOC-EXAMPLE-BUCKET
/file-name
#cache-file-name
如果要将存档文件添加到分布式缓存,请输入 -cacheArchive
,后跟文件在 Amazon S3 中的位置、井号(#)以及您要为本地缓存中的文件集合指定的名称。以下示例说明了如何将存档文件添加到分布式缓存。
-cacheArchive \
s3://DOC-EXAMPLE-BUCKET
/archive-name
#cache-archive-name
在其他对话框字段中输入相应值。选项因步骤类型而异。要添加步骤并退出对话框,请选择 Add step(添加步骤)。
-
选择适用于集群的任何其他选项。
-
要启动集群,选择 Create cluster(创建集群)。
- CLI
-
使用指定分布式缓存文件 AWS CLI
-
要在创建集群时提交 Streaming 步骤,请键入带 create-cluster
参数的 --steps
命令。要使用指定分布式缓存文件 AWS CLI,请在提交 Streaming 步骤时指定相应的参数。
如果要将单个文件添加到分布式缓存,请指定 -cacheFile
,后跟文件名称和位置、井号(#)以及将文件放入本地缓存时要为其指定的名称。
如果要将存档文件添加到分布式缓存,请输入 -cacheArchive
,后跟文件在 Amazon S3 中的位置、井号(#)以及您要为本地缓存中的文件集合指定的名称。以下示例说明了如何将存档文件添加到分布式缓存。
有关在中使用 Amazon EMR 命令的更多信息 AWS CLI,请参阅https://docs.aws.amazon.com/cli/latest/reference/emr。
例 1
键入以下命令启动集群并提交一个 Streaming 步骤,该步骤使用 -cacheFile
将文件 sample_dataset_cached.dat
添加到缓存。
aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheFile","s3://my_bucket/sample_dataset.dat#sample_dataset_cached.dat"]
如果不使用 --instance-groups
参数指定实例计数,则将启动单个主节点,其余实例将作为核心节点启动。所有节点都使用该命令中指定的实例类型。
如果您之前没有创建过默认EMR服务角色和EC2实例配置文件,请在键入create-cluster
子命令之前键入aws emr
create-default-roles
以创建它们。
例 2
以下命令显示了流式集群的创建过程,并使用 -cacheArchive
将一份存档的文件添加到缓存。
aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheArchive","s3://my_bucket/sample_dataset.tgz#sample_dataset_cached"]
如果不使用 --instance-groups
参数指定实例计数,则将启动单个主节点,其余实例将作为核心节点启动。所有节点都使用该命令中指定的实例类型。
如果您之前没有创建过默认EMR服务角色和EC2实例配置文件,请在键入create-cluster
子命令之前键入aws emr
create-default-roles
以创建它们。