阿里云开源大数据平台E-MapReduce对接使用完全指南
1. E-MapReduce产品概述
阿里云开源大数据平台E-MapReduce(简称EMR)是运行在阿里云平台上的一种大数据处理系统解决方案。EMR基于开源的Apache Hadoop和Apache Spark,让用户可以方便地使用Hadoop和Spark生态系统中的其他周边系统分析和处理数据。EMR还可以与阿里云其他的云数据存储系统和数据库系统(例如阿里云OSS和RDS等)进行数据传输。
阿里云EMR提供了三种产品形态,以满足不同用户的需求:
- EMR on ECS:EMR负责将开源Hadoop生态的组件安装部署在ECS上,并启动相应的服务。用户可以在EMR控制台完成对集群ECS及服务的运维操作。这种形态适合需要完全掌控集群基础设施、对底层资源有自定义需求的场景。
- EMR on ACK:用户需要先完成ACK集群的安装部署。当ACK集群准备就绪后,EMR将基于ACK的资源安装部署大数据服务组件,并在容器内运行。这种形态适合已经采用容器化架构、希望统一管理大数据和在线业务的团队。
- EMR Serverless Spark:这是一款面向Data+AI的高性能Lakehouse产品,为企业提供了一站式的数据平台服务,包括任务开发、调试、调度及运维等功能。它100%兼容开源Spark生态,能够无缝集成到客户现有的数据平台。这种形态适合希望免去集群运维负担、专注于数据处理分析的团队。
在实际生产环境中,EMR on ECS是最为广泛使用的形态,本文后续的对接使用讲解将主要围绕EMR on ECS展开。
2. 使用前的准备工作
2.1 账号注册与实名认证
使用EMR服务前,首先需要注册阿里云账号并完成实名认证。这是使用任何阿里云云服务的基础前置条件。
2.2 服务角色授权
完成对E-MapReduce的服务账号授予默认的EMR和ECS角色权限。这一步是必须的,因为EMR在创建集群、管理ECS实例、访问OSS存储等操作时,需要以服务角色的身份调用其他阿里云服务的API。授权操作可以在EMR控制台的引导下完成,系统会自动创建所需的默认角色。
2.3 RAM用户与权限规划
为确保阿里云账号及云资源的使用安全,如非必要都应避免直接使用阿里云账号(即主账号)来访问EMR集群。推荐的做法是使用RAM身份(即RAM用户和RAM角色)来访问EMR on ECS集群。
RAM用户需要由阿里云账号或拥有管理员权限的RAM用户、RAM角色来创建,且必须在获得授权后才能登录控制台或使用API访问阿里云账号下的资源。在权限管理上,应遵循最小权限原则——授予用户执行某项任务所需的权限,不授予其他无需用到的权限。
对于通过控制台访问的用户,推荐为其开启MFA多因素认证。不要把RAM用户的AccessKey ID和AccessKey Secret保存在工程代码中,否则可能导致AK泄露。建议使用STS或环境变量等方式获取访问授权。
当阿里云账号下有多个RAM用户时,可以通过创建用户组对职责相同的RAM用户进行分组管理和批量授权。
2.4 网络与地域规划
EMR集群创建后无法更改地域,因此需要谨慎选择。建议将EMR集群部署在与业务数据源(如OSS Bucket、RDS实例)相同的地域,以便利用内网高速访问,避免产生额外的外网流量费用。
网络方面,EMR集群通常部署在专有网络VPC中。如果集群需要对外提供公网访问能力(例如通过公网提交作业或访问Web UI),需要在创建集群时开启Master节点组的"挂载公网"开关,或者创建后为Master节点绑定弹性公网IP(EIP)。
需要先登录阿里云控制台,点击:阿里云控制台
3. 创建EMR集群
3.1 进入创建集群页面
登录阿里云控制台后,进入E-MapReduce产品页面。在顶部菜单栏处,根据实际情况选择地域和资源组。单击"创建集群"按钮进入集群配置页面。
3.2 软件配置
在软件配置区域,需要完成以下关键配置:
- 业务场景:选择适合的业务场景,阿里云EMR会自动为您配置默认的组件、服务和资源。对于数据湖分析场景,可以选择"数据湖";对于自定义需求,可以选择"自定义集群"。
- 产品版本:选择最新的稳定版本,例如EMR-5.18.1。新版本通常包含更多的组件版本更新和性能优化。
- 服务高可用:默认不开启。开启后EMR会把Master节点分布在不同的底层硬件上以降低故障风险。生产环境建议开启。
- 可选服务:根据实际需求选择组件。例如HADOOP-COMMON、OSS-HDFS、YARN、Hive、Spark3、Tez、Knox和OpenLDAP等。如需通过控制台访问Web UI界面,还需选择Knox和OpenLDAP服务。
- 允许采集服务运行日志:默认开启,将收集服务运行日志,这些日志仅供集群诊断使用。关闭日志采集后EMR的健康检查和技术支持将受到限制。
3.3 元数据配置
元数据配置是集群创建中的重要环节。EMR支持以下几种元数据存储方式:
- 内置MySQL:元数据存储在集群自带的MySQL中,适合快速搭建测试环境,不建议在生产环境中使用。
- 自建RDS:将元数据存储在独立的RDS实例中,元数据不随集群销毁而销毁,适合生产环境。
- DLF统一元数据:通过数据湖构建(Data Lake Formation,DLF)实现湖仓元数据全面打通,确保数据访问一致性与权限管理完整性。DLF提供跨OSS、数据库、文件系统的统一元数据目录服务,支持自动元数据发现、细粒度权限控制、数据血缘追踪。
对于生产环境,强烈推荐使用DLF统一元数据方案,这样可以实现多种数据源入湖,搭建高效的数据湖解决方案。
3.4 存储配置
EMR支持将数据存储在OSS-HDFS上,这是一种提供兼容HDFS协议的对象存储底座,替代传统本地HDFS,实现计算资源与存储的解耦,可独立扩展计算节点。当在可选服务区域选择了OSS-HDFS服务时,需要配置集群存储根路径。
OSS-HDFS服务是一款云原生数据湖存储产品,基于统一的元数据管理能力,在完全兼容HDFS文件系统接口的同时,提供充分的POSIX能力支持。这能更好地满足大数据和AI领域丰富多样的数据湖计算场景。
3.5 硬件配置与集群创建
在硬件配置中,需要选择Master节点和Core节点的ECS实例规格和数量。对于生产环境,建议Master节点选择较高的配置以保证集群管理服务的稳定性,Core节点则根据计算需求选择合适的规格。
完成所有配置后,勾选服务协议,单击确认订单,等待集群创建完成。当集群状态显示为"运行中"时,表示集群创建成功。
4. 数据源对接
4.1 对接OSS对象存储
OSS是EMR最常用的数据存储层。EMR on ECS集群天然支持访问OSS数据,无需额外配置。在Spark或Hive中,可以通过OSS路径直接读写数据。
以下是在Spark SQL中创建基于OSS存储的外部表的示例:
CREATE TABLE orders (
order_id STRING,
order_date STRING,
order_category STRING,
order_revenue DOUBLE
)
USING CSV
OPTIONS (
path 'oss://<bucketname>/user/',
header 'true'
);上述代码中,`oss://<bucketname>/user/`需要替换为实际的OSS Bucket路径。通过这种方式,EMR集群可以直接对OSS中的海量数据进行分布式计算。
如果使用OSS-HDFS服务,则可以通过`oss-hdfs://`协议访问,获得与HDFS完全兼容的接口体验。
4.2 对接Tablestore(表格存储)
EMR支持通过Spark读取和写入Tablestore中的数据。对于流计算场景,基于通道服务,利用CDC(数据变更捕获)技术完成Spark的mini batch流式消费和计算,同时提供了at-least-once一致性语义。
以下是使用Spark SQL对接Tablestore的步骤:
首先,远程登录EMR集群的Master节点。然后执行如下命令启动Spark SQL CLI:
spark-sql --jars /opt/apps/SPARK-EXTENSION/spark-extension-current/spark2-emrsdk/*接着创建Source外表(对应Tablestore中的源表):
CREATE TABLE order_source (
UserId STRING,
OrderId STRING,
price DOUBLE,
timestamp BIGINT
)
USING tablestore
OPTIONS (
endpoint 'https://<instance>.cn-hangzhou.ots.aliyuncs.com',
access.key.id '<access_key_id>',
access.key.secret '<access_key_secret>',
instance.name '<instance_name>',
table.name 'OrderSource'
);同样方式创建Sink外表后,即可通过INSERT INTO ... SELECT ...语句实现数据的流式处理。
4.3 对接RDS关系型数据库
EMR可以通过多种方式对接RDS数据库:
- Sqoop/DataX:定期批量抽取全量或增量数据,按业务表结构同步至OSS-HDFS。
- Spark JDBC:在Spark作业中直接通过JDBC读取RDS数据。
- DataWorks数据同步:通过DataWorks的数据集成功能,将RDS数据同步到OSS。
以下是通过Spark JDBC读取RDS数据的示例:
val jdbcDF = spark.read
.format("jdbc")
.option("url", "jdbc:mysql://<rds_endpoint>:3306/<database>")
.option("dbtable", "<table_name>")
.option("user", "<username>")
.option("password", "<password>")
.option("driver", "com.mysql.jdbc.Driver")
.load()4.4 对接Kafka实时数据流
EMR DataFlow类型集群集成了Kafka,支持高吞吐、低延迟的流式数据缓冲。Flink和Spark Streaming都可以从Kafka消费实时数据流进行处理。
5. 任务开发与提交
5.1 Spark SQL任务开发
在EMR Serverless Spark环境中,可以通过控制台的数据开发功能创建Spark SQL任务。
首先进入开发页面,在左侧导航栏选择数据开发,新建任务并选择类型为SparkSQL。然后在右上角选择数据目录、数据库和一个已启动的SQL会话实例。在任务编辑器中输入SQL语句即可。
以下是一个完整的Spark SQL示例:
CREATE DATABASE test_sql;
USE test_sql;
CREATE TABLE IF NOT EXISTS my_table (
id INT,
name STRING
);
INSERT INTO my_table VALUES(1, 'Alice'),(2, 'Bob');
SELECT * FROM my_table WHERE id > 1;5.2 在EMR on ECS集群中提交作业
对于EMR on ECS集群,可以通过以下方式提交作业:
- SSH登录Master节点:通过SSH连接到集群的Master节点,使用命令行提交Spark、Hive或MapReduce作业。
- EMR Studio:使用Zeppelin、Jupyter等Notebook进行交互式开发。
- DataWorks:通过DataWorks的EMR节点进行作业开发与调度。
以下是通过SSH提交Spark作业的示例:
spark-submit \
--class com.example.WordCount \
--master yarn \
--deploy-mode cluster \
--num-executors 10 \
--executor-memory 4g \
--executor-cores 2 \
/path/to/your-job.jar \
oss://<bucket>/input \
oss://<bucket>/output5.3 Flink实时任务开发
EMR DataFlow类型集群支持Flink实时计算。Flink核心是一个流式的数据流执行引擎,针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。
Flink SQL是开发实时任务的高效方式,以下是一个简单的Flink SQL示例:
CREATE TABLE source_table (
user_id STRING,
event_time TIMESTAMP(3),
event_type STRING
) WITH (
'connector' = 'kafka',
'topic' = 'user_events',
'properties.bootstrap.servers' = '<kafka_brokers>',
'format' = 'json'
);
CREATE TABLE sink_table (
event_type STRING,
event_count BIGINT
) WITH (
'connector' = 'print'
);
INSERT INTO sink_table
SELECT event_type, COUNT(*) AS event_count
FROM source_table
GROUP BY event_type;6. 权限管理与安全控制
6.1 RAM权限策略
EMR Serverless Spark使用的权限策略包括系统策略和自定义策略。常用的系统策略有:
- AliyunEMRSparkReadOnlyAccess:EMR Serverless Spark只读权限。
- AliyunEMRFullAccess:EMR所有操作权限。
对于更精细化的权限控制,可以创建自定义策略。
6.2 集群级别的访问控制
EMR on ECS集群支持通过以下方式控制访问:
- 安全组:通过VPC安全组规则控制网络访问。
- Knox网关:开启Knox服务后,可以通过Web UI进行安全的集群服务访问。
- OpenLDAP:集成LDAP实现用户认证和授权。
7. 监控与告警
EMR自动采集集群服务指标,并自动同步到云监控服务。用户可以在EMR控制台查看集群服务常用指标,并可以在云监控控制台设置指标的阈值告警及自定义设置图表大盘。
EMR Serverless StarRocks还提供针对核心性能与稳定性的预设告警模板,覆盖可用性、资源负载、集群服务状态及其他典型业务场景。
对于Hadoop集群,EMR提供了事件中心功能,可以将事件自动同步到云监控服务。用户可以在EMR控制台上查看集群的事件,并在云监控控制台上设置相应的事件告警。
8. 成本优化最佳实践
8.1 计算与存储分离
EMR支持计算与存储分离架构,数据存储在OSS-HDFS中,计算资源可按需弹性伸缩。这种架构的优势在于:
- 存储按量付费,避免资源浪费。
- 计算资源可秒级弹性伸缩,最小粒度为1核。
- 集群无需长期保有大量存储资源,降低总体拥有成本。
8.2 弹性伸缩
EMR on ECS支持基于时间的弹性伸缩能力,抢占式实例可进一步降低成本。在创建集群时支持配置弹性伸缩规则,集群创建后弹性伸缩规则即可启动。
8.3 内网访问免流量
将EMR集群与OSS Bucket部署在相同地域,通过内网访问OSS可以免去外网流量费用。这是降低成本最直接有效的方式。
8.4 存储类型优化
根据数据的访问频率选择合适的存储类型。对于冷数据,可以配置生命周期规则将其转换为低频访问或归档存储,以降低存储成本。
8.5 Serverless形态的成本优势
EMR Serverless Spark内置了Fusion Engine(Spark Native Engine),相对开源版本性能提升300%,显著加速大数据计算任务。同时内置Celeborn(Remote Shuffle Service),支持PB级Shuffle数据处理,计算资源总成本最高下降30%。
9. 与DataWorks的集成
EMR与DataWorks深度集成,用户可以在DataWorks上使用EMR作为作业计算和数据存储引擎。通过DataWorks,可以实现数据同步、数据开发、任务调度和运维的全流程管理。
DataWorks支持多种EMR节点类型,包括EMR Spark SQL、EMR Hive、EMR Trino等。用户可以在DataWorks的工作流中编排EMR任务,实现复杂的数据处理流程。
10. 总结
阿里云开源大数据平台E-MapReduce为大数据处理提供了灵活、高效、成本可控的解决方案。通过本文的介绍,读者应当已经掌握了从集群创建、数据源对接、任务开发到运维监控的完整使用流程。无论是选择EMR on ECS获得最大的灵活性,还是选择EMR Serverless Spark免除运维负担,EMR都能满足不同场景下的大数据处理需求。
在实际使用中,建议始终遵循最小权限原则进行安全管理,充分利用计算与存储分离架构进行成本优化,并善用DataWorks等配套工具提升开发效率。
常见问题解答
问1:EMR on ECS和EMR Serverless Spark有什么区别?如何选择?
答:EMR on ECS需要用户自行管理和运维ECS集群,适合需要完全掌控底层基础设施、有自定义组件和配置需求的场景。EMR Serverless Spark是全托管的大数据计算服务,用户无需管理集群,只需提交任务即可,适合希望专注于数据处理逻辑、免去运维负担的团队。如果业务对资源有强管控需求或需要安装特定组件,选择EMR on ECS;如果希望快速上线、按量付费、弹性扩缩,选择EMR Serverless Spark。
问2:EMR集群如何访问OSS中的数据?
答:EMR集群天然支持通过OSS路径访问数据,无需额外配置。在Spark SQL中可以使用`oss://<bucketname>/path`格式的路径创建外部表。如果使用OSS-HDFS服务,则可以使用`oss-hdfs://`协议。建议将EMR集群与OSS Bucket部署在同一地域,利用内网访问免流量。
问3:EMR集群的元数据应该选择内置MySQL还是DLF?
答:内置MySQL适合快速搭建测试环境,元数据随集群销毁而销毁,不建议在生产环境中使用。DLF(数据湖构建)提供跨数据源的统一元数据目录服务,支持自动元数据发现、细粒度权限控制、数据血缘追踪。对于生产环境,强烈推荐使用DLF作为统一元数据管理方案,可以实现多种数据源入湖,搭建高效的数据湖解决方案。
问4:如何保障EMR集群的访问安全?
答:建议从以下几个方面保障安全:使用RAM用户和RAM角色代替主账号访问EMR;遵循最小权限原则授予RAM用户必要的权限;为控制台用户开启MFA多因素认证;不要将AccessKey保存在代码中,使用STS或环境变量获取访问授权;通过VPC安全组控制网络访问。
问5:EMR集群创建后可以修改地域吗?
答:不可以。EMR集群创建后无法更改地域。因此在创建集群前需要谨慎选择地域。建议将EMR集群部署在与业务数据源(如OSS Bucket、RDS实例)相同的地域,以便利用内网高速访问,避免产生额外的外网流量费用。
问6:EMR Serverless Spark支持哪些内置模型?
答:EMR Serverless Spark已内置多个常用模型,包括qwen3.6-plus、qwen3.5-plus、qwen-plus、text-embedding-v4、tongyi-embedding-vision-plus等。用户可以直接配合AI Function调用这些模型能力,无需额外注册。如果内置模型无法满足业务需求,还可以注册外部模型服务,支持对接百炼、PAI-EAS及自建模型服务。



