写点什么

动态扩展 Amazon EMR 集群上的存储

  • 2020-03-13
  • 本文字数:2609 字

    阅读完需:约 9 分钟

动态扩展 Amazon EMR 集群上的存储

在托管的 Apache Hadoop 环境(如


Amazon EMR 集群)中,当集群中的存储容量用满时,没有方便的办法处理该问题。出现这种情况的原因是,您设置了


Amazon Elastic Block Store (Amazon EBS) 卷,并在启动集群时配置了挂载点,因此很难在集群运行后修改存储容量。可行的解决方案通常有:向集群添加更多节点,将数据备份到数据湖,然后启动具有更高存储容量的新集群。如果占用存储的数据可舍弃,也可删除多余的数据。下面将演示如何使用 Amazon EBS 的


_弹性卷_功能的存储动态扩展来处理此问题。利用此功能,您可以增加卷大小、调整性能或在卷使用过程中更改卷类型。在更改生效期间,您可以继续使用 EMR 集群运行大数据应用程序。

HDFS 和 YARN 如何使用 Amazon EMR 集群上的磁盘空间

默认情况下,创建 Amazon EMR 集群时,HDFS(Hadoop 分布式文件系统)和 YARN 会配置为使用所有核心/任务节点上的本地磁盘存储。您可以在 yarn-site.xml 和 hdfs-site.xml 配置文件中对此进行配置。


具体而言,对于 HDFS,在 dfs.datanode.data.dir 参数中配置使用本地存储。对于 YARN,yarn.nodemanager.local-dirs 参数将配置为存储 NodeManager 运行 YARN 容器所需的中间文件。


例如,当集群运行 MapReduce 作业时,映射任务将其输出文件存储在 yarn.nodemanager.local-dirs 定义的目录中。此外,yarn.nodemanager.log-dirs 参数还配置 YARN 应用程序日志的存储位置。

避免存储问题的常用最佳实践

当您规划在 Amazon EMR 集群上运行的作业时,请参见以下这些避免超出集群可用存储的实用技巧。


规划您未来的存储需求


提前规划作业的存储需求。当您使用默认存储配置启动集群时,它可能无法满足您的工作负载要求,并且您可能会在运行作业时遇到问题。最好估计一下作业所需的中间存储空间。在此基础上,您可以在启动新集群时自定义存储配置。


将被动数据存储在数据湖中


尝试将您的工作负载设计为将所有被动数据存储在 Amazon Simple Storage Service (Amazon S3)数据湖中。这样,您可以仅将集群用于数据处理、执行其他计算任务,并将结果重新存储到数据湖以便永久存储。这种方法最大程度地减少了运行集群的存储要求。


规划更多容量


如果您的使用案例要求输入或输出数据存储在集群本地(HDFS 或本地存储),则您应据此规划集群大小。例如,如果使用 HDFS,则可以创建具有更多核心节点的集群,以便为存储数据提供足够空间。或者,可以自定义核心实例组,使其具有比默认配置更多的 EBS 存储容量。

存储达到最大容量时可能出现的问题

随着 EMR 集群用于运行各种不同的数据处理应用程序,在某一刻,集群上的存储容量可能会耗尽。在这种情况下,会出现一些可能会影响集群的问题,如下所示。

YARN 方面的问题

如果 yarn.nodemanager.local-dirs 或 yarn.nodemanager.log-dirs 参数定义的目录占满了卷总存储容量的 90%时,NodeManager 会将该磁盘标记为不正常。然后,此操作会导致 NodeManager 也将拥有这些磁盘的节点标记为不正常。如果节点不正常,ResourceManager 将不会向该节点分配任何容器。


此外,如果在 EMR 集群上关闭了终止保护功能,EMR 服务最终将终止集群中的此节点。

HDFS 方面的问题

如果集群上的 HDFS 使用量增加,相应的 EBS 卷上的本地存储使用量也会增加。在 EMR 中,HDFS 数据目录配置在与 YARN 本地目录和日志目录相同的挂载点下。因此,如果由于 HDFS 而导致挂载点的使用量超出存储阈值 (90%),则会再次导致 YARN 将该磁盘标记为不正常,而且 ResourceManager 会将该节点列入黑名单。

动态调整核心节点和任务节点上的存储空间

可以使用下面链接里的 Bootstrap Actions 脚本来实现动态增加集群中核心节点和任务节点的存储:


s3://aws-bigdata-blog/artifacts/resize_storage/resize_storage.sh


(https://aws-bigdata-blog.s3.amazonaws.com/artifacts/resize_storage/resize_storage.sh )


脚本执行的方法请参考下面链接:


https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-bootstrap.html


另外,集群的 EC2 实例配置文件还必须具有 ec2:ModifyVolume 权限才能调整卷的大小。


该脚本在 EMR 集群的所有节点上运行。它会在节点上配置 cron 作业,并每 2 分钟检查一次磁盘利用率。在主节点上,它会对 root 卷和存储各种主守护程序日志的卷进行检查。在核心节点和任务节点上,它会对 YARN 和 HDFS 使用的卷执行检查,并确定是否需要扩展存储。


当它确定卷超出其使用量的 90% 时,该卷将按照“–scaling-factor”参数指定的百分比进行大小扩展。在调整大小过程中,卷的分区将会扩展,并且文件系统也会扩展并反映更新后的容量。所有这些操作在执行时都不会影响集群上运行的应用程序。


在使用此解决方案之前,请考虑以下注意事项:


  • 只有当 EMR 集群使用 EBS 卷作为其存储后端时,才能扩展该集群中节点的存储容量。某些 EC2 实例类型只使用实例存储卷,或者同时使用实例存储卷和 EBS 卷。无法调整使用此类 EC2 实例类型的集群的存储容量。

  • 当您使用脚本的 scaling-factor 选项时,请提前规划好增加的卷大小。扩展存储后,必须至少等待 6 小时,才能再次对同一卷进行修改。

小结

本博文介绍了 HDFS 和 YARN 如何使用 Amazon EMR 集群节点上的本地存储。还介绍了如何使用 Amazon EBS 的弹性卷功能扩展 EMR 集群上的存储。您可以利用此功能增加卷大小、调整性能或在卷使用过程中更改卷类型。在更改期间,您可以继续使用 EMR 集群运行大数据应用程序。


相关参考:


  1. 巧用 Amazon EMR 节省数据分析成本


https://amazonaws-china.com/cn/blogs/china/emr-reduce-cost/


  1. 手把手教你使用 Amazon EMR 进行交互式数据查询


https://amazonaws-china.com/cn/blogs/china/amazon-emr/


  1. 通过 Amazon EMR 重新配置动态修改集群


https://amazonaws-china.com/cn/blogs/china/modifying-your-cluster-on-the-fly-with-amazon-emr-reconfiguration/


  1. 为什么我的 Amazon EMR 集群中的核心节点的磁盘空间不足?


https://amazonaws-china.com/cn/premiumsupport/knowledge-center/core-node-emr-cluster-disk-space/




作者介绍:


Jigar Mistry 是 Amazon Web Services 的 Hadoop 系统工程师**。他与客户合作,为他们提供使用开源应用程序在云中处理大型数据集方面的架构指导和技术支持。在闲暇时间,他喜欢露营和光顾西雅图地区不同的餐馆。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/dynamically-scale-up-storage-on-amazon-emr-clusters/


2020-03-13 17:28774

评论

发布
暂无评论
发现更多内容

翻译:《实用的 Python 编程》02_07_Objects

codists

Python

产品迭代最有力的工具:每周产品讨论会

boshi

产品策略 七日更

区块链打造“红娘链”,婚姻上链让爱更“牢固”

CECBC

婚姻

未来赚钱的行业大预测

ES_her0

28天写作

分布式应用监控与链路追踪:SkyWalking

xcbeyond

微服务 监控 Skywalking 调用链 28天写作

区块链能否一劳永逸地结束痛苦的选票争端?

CECBC

区块链

第五周作业:用例流程图

克比

攀爬天梯的手机厂商,能从LG的滑落中学到什么?

脑极体

【LeetCode】猜字谜Java题解

Albert

算法 LeetCode 28天写作 2月春节不断更

341 万考生,除了图书馆他们去了这样一个地方

IoT云工坊

小程序 人工智能 物联网 云平台 24小时无人自习室

【得物技术】Web Components 初探

得物技术

Web API 得物技术 Web Component 组件

微信公众平台-渠道二维码开发

Geek_247dae

Nginx中常见header配置及修改

运维研习社

nginx Linux

开源镜像仓库Harbor的镜像安全

运维研习社

Docker 安全 Harbor CI/CD

产品经理第五周:如何绘制流程图?

克比

分页问题-Offset-based Pagination和Cursor-based Pagination

诸葛小猿

分页 Offset-based Pagination Cursor-based Pagination

这道 Hard 到底难在哪里?大概是难在考察的全是违反“人性直觉”的内容吧 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

医者,智也:智慧医院破茧时,翻开转型新一页

脑极体

无人机蜂群

冠冠

Elasticsearch 相关度评分

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

云主机配置微信公众号后台全记录

小jack

简单脚本监控SSL证书,并到期提醒续签

运维研习社

收音机焊接

aaaaa

28天瞎写的第二百四十五天:怎么样开始练习冥想?

树上

冥想 28天写作 正念

元宵佳节快乐哦

Nydia

Kafka 中所谓的 ‘零拷贝’ 技术到底是什么?

李尚智

Java kafka 程序员 架构 微服务

区块链与数字货币的发展到底有什么意义

CECBC

金融

Java中的String类型到底占用多大的内存空间?

冰河

Java 性能优化 string 高并发 内存空间

正月十五吃汤圆CountDownLatch

叫练

AQS join 共享锁 CountDownLatch 多线程高并发

我看JAVA 之 AbstractStringBuilder & StringBuffer & StringBuilder

awen

Java 源码 jdk string

Docker安装

Sakura

Docker

动态扩展 Amazon EMR 集群上的存储_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章