You need to enable JavaScript to run this app.
E-MapReduce

E-MapReduce

复制全文
使用限制
开源组件使用限制
复制全文
开源组件使用限制

在您使用及维护 EMR 集群时,一些非预期的操作可能会导致集群不可用或不稳定,您在控制台执行部分操作前会有相应的风险提示,本文为您列举了一些禁止及高危操作:

禁止及高危操作

组件

高危操作

建议

HDFS

使用RouterBasedFederation代理转发RPC性能下降

RouterBasedFederation有RPC性能下降的问题,如需使用建议通过 提工单 的方式,联系火山引擎技术支持人员

使用EC 实现存储降本

不建议使用,如有存储降本需求,可以将冷数据通过distcp转存到对象存储

使用Symlink创建软连接

不建议使用

在数据迁移之外的场景使用snapshot

不建议使用

使用本地journal

不建议使用,可使用Quorum Journal Manager

使用single模式部署

不建议使用,可使用HA模式部署

使用S3A访问对象存储

不建议使用,可使用Proton SDK模式

使用Provided Storage

不建议使用,如需使用建议通过 提工单 的方式,联系火山引擎技术支持人员

使用本地盘存储NameNode和JournalNode的image & edits

不建议使用,可使用EBS云盘

使用hdfs namenode stale read

不建议使用,可使用直读active的模式

使用AvailableSpaceRackFaultTolerantBlockPlacementPolicy、AvailableSpaceBlockPlacementPolicy

不建议使用,可使用默认的BlockPlacementPolicyDefault

Hive 3.x

使用Casting timestamps函数获取时间戳

建议使用 from_utc_timestampto_utc_timestamp
参考官网:Different TIMESTAMP typesHive UDFs

开启Hive SQL向量化模式

不建议使用

使用 Hive on Spark或Hive on MR

建议使用 Hive on Tez

开启事务,创建事务表

不建议使用

开启 hive.optimize.join.reduce.deduplication参数

不建议开启该参数

开启 hive.auto.convert.sortmerge.join.reduce.side参数

不建议开启该参数
参考官网:HIVE-27303

1.x 版本升级到 3.x 版本,且表的 bucketing_version 不是 2

建议修改元数据,将所有表 bucketing_version 修改为 2

Union all 子句中存在 lateral view

不建议使用
参考官网:HIVE-21660

Spark 3.5.x

Structured Streaming,watermark和time-interval的双流join可能导致不符合预期的状态清理,尽量避免这种用法

不建议使用

在如下场景使用Spark Connect:

  • spark connect client被killed之后没有正确shutdown
  • drop temp view后,show有问题
  • 调用UDF,反序列化可能有问题
  • 引用第三方依赖,可能会有类加载问题
  • 在spark connect中集成deltalake有问题
  • MacOS下使用spark-connect-repl有问题

不建议使用

Flink 1.16.x

开启Queryable state特性

不建议使用该特性

开启State Changelog特性

不建议使用该特性

将TM network blocking shuffle type配置为:mmap

建议配置为file

将TM network 压缩编码配置为:LZO与ZSTD

建议配置为LZ4

Flink on YARN 使用:Per-Job Mode

建议使用application mode替代

使用DataSet API及相关的connectors

建议使用 Table API 和 SQL,以便在完全统一的 API 中运行高效的批处理管道,或使用具有 BATCH 执行模式的 DataStream API

Kyuubi

使用如下协议通过Kyuubi来访问后端引擎:

  • Restful api(http)
  • MySQL兼容的文本协议
  • Trino兼容的http协议

不建议使用

使用由如下语言编写的代码通过Kyuubi提交给后端引擎:

  • Python
  • Scala

不建议使用

Doris 2.x

部分列更新导致crash

2.0.2及以下不建议使用

数据均衡不生效

2.0.2及以下不建议使用

执行DELETE FROM 表名 WHERE 过滤条件操作

不建议使用,该操作涉及全表扫描,资源消耗量大,建议通过 drop tabledrop partition 语句执行删除操作

查询时不使用分区键与分桶键进行过滤

不建议使用,此类查询涉及全表扫描,资源消耗量大,建议充分评估后执行

高并发查询、写入以及schema change等操作导致集群资源过载

不建议执行超出集群资源能力的负载,会导致集群不稳定。增加负载时需进行压测

Doris 1.X

连续执行add column操作

不建议对同一个表连续执行add column操作

查询时不使用分区键与分桶键进行过滤

不建议使用,此类查询涉及全表扫描,资源消耗量大,建议充分评估后执行

StarRocks

使用物化视图(MATERIALIZED VIEWS)功能

3.2.x 及以下版本不建议使用

使用异步物化视图(ASYNC MATERIALIZED VIEWS)功能

3.2.x 及以下版本不建议使用

主键表的迁移与compaction

3.2.x 及以下版本不建议使用

使用spill功能

3.2.x 及以下版本不建议使用

并发场景下bitmap使用与str_to_map 函数使用

3.2.x 及以下版本不建议使用

存算分离表delete 分区过多

3.1.x 及以下版本不建议使用存算分离,建议在3.2.x及以上版本使用该功能

执行DELETE FROM 表名 WHERE 过滤条件操作

不建议使用,该操作涉及全表扫描,资源消耗量大,建议通过 drop tabledrop partition 语句执行删除操作

查询时不使用分区键与分桶键进行过滤

不建议使用,此类查询涉及全表扫描,资源消耗量大,建议充分评估后执行

高并发查询、写入以及schema change等操作导致集群资源过载

不建议执行超出集群资源能力的负载,会导致集群不稳定。增加负载时需进行压测

Presto

使用 Presto on Velox 模式

不建议使用 Presto on Velox 模式,部分算子不支持

执行大型 ETL 作业

不建议执行大型 ETL 作业,会影响集群稳定性

Ray

在线服务场景下使用Ray Serve

不建议使用

数据覆盖风险及规避建议

无论是您的自定义代码,还是开源组件执行的维护操作,在涉及数据变更或删除时均存在误删风险。如果使用了TOS,分层桶必须开启回收站功能,扁平桶必须开启版本控制。​除开启底层的 TOS 恢复功能外,用户必须明确计算引擎的操作原理,审慎评估写入模式,避免意外的数据覆盖与丢失。
下表简要说明了常见大数据引擎的数据覆盖风险与核心规避建议。

引擎/组件

核心风险与规避建议摘要

HDFS

  • 文件覆盖与误删除风险:使用 distcphdfs dfs -cp -f 等命令强制覆盖文件时,若目标路径已存在,源文件将直接覆盖目标文件,可能导致历史数据永久丢失。此外,hdfs dfs -rm -skipTrash 跳过回收站直接删除文件,或 -rm -r 递归删除目录,均为不可逆操作。
  • 建议
    1. distcp 等覆盖操作前,务必确认目标路径是否包含有效数据,或使用 -update 选项(仅覆盖修改时间更新的文件)避免全量覆盖。
    2. 生产环境开启 HDFS 回收站机制(fs.trash.interval 参数),并严格限制跳过回收站的删除权限。
    3. 对于关键目录,启用 HDFS 快照(Snapshot)功能,以便快速恢复误删数据。

Hive

  • 动态分区覆盖误删风险:执行 INSERT OVERWRITE TABLE ... PARTITION(...) 时,若动态分区生成逻辑有误(如分区字段值为 NULL 或空),可能意外覆盖默认分区(当 hive.exec.dynamic.partition.mode=nonstrict 时),甚至清空整个表。
  • 建议
    1. 设置 hive.exec.dynamic.partition.mode=strict,强制要求至少指定一个静态分区,防止全表覆盖。
    2. 执行动态分区写入前,对分区字段的数据质量进行检查,过滤掉 NULL 或无效值。
    3. 对重要表执行覆盖操作前,先备份目标分区数据(如使用 EXPORT 命令或导出到外部存储)。

Spark

  • 数据清空风险:​参数 spark.sql.sources.partitionOverwriteMode 在开源社区的默认值为 static。在对 DataSource 类型表(如 Parquet/ORC)执行覆盖写入时,static 模式会清理掉匹配到的全量分区数据,而非仅覆盖写入部分。这在增量更新场景下极易导致历史数据被意外清空。
  • 强烈建议:在生产环境全局显式设置该参数为 dynamic,以确保仅覆盖实际写入的分区,保障数据的一致性与安全性。

Presto/Trino

  • 风险:不同 Connector 的覆盖语义差异巨大。Hive Connector 遵循 Hive 的覆盖逻辑,但其他 Connector(如 Iceberg)可能提供不同的原子性保证。默认的 INSERT OVERWRITE 通常不具备事务性,操作失败可能导致数据不一致。
  • 建议明确 Connector 类型及其写入语义。对于支持事务的表格式(如 Iceberg、Hudi),优先使用其提供的 MERGE INTO 或原子性覆盖 API。对于非事务性场景,采用“先写临时表,再原子化重命名”的策略。

Ray

  • 分布式任务数据冲突风险:Ray 常被用于 Python 分布式计算,若多个任务并发写入同一共享存储路径(如 TOS、HDFS),且未做互斥或唯一标识,可能导致文件相互覆盖或数据损坏。
  • 建议
    1. 为每个 Ray 任务或 Actor 分配独立的输出目录,目录名包含任务 ID 或时间戳,避免冲突。
    2. 对于需要覆盖写入的场景,使用对象存储或文件系统的原子操作(如 TOS 的 rename 并非原子,需谨慎),或依赖外部协调服务(如 ZooKeeper)实现分布式锁。
    3. 避免在生产环境的关键数据路径上直接使用 Ray 默认的文件写入行为,建议先写入临时路径,验证成功后再通过原子 rename 移动到最终位置。

StarRocks / Doris

  • 导入覆盖与删除风险
    • Stream Load/Broker Load 覆盖:使用 -"strict_mode" 等参数不当,可能导致不符合数据质量规范的数据覆盖原有正确数据。
    • DELETE 语句误删:DELETE FROM table WHERE condition 若条件未使用分区键或分桶键,将触发全表扫描,不仅消耗巨大资源,还可能因条件写错而误删大量数据。
  • 建议
    1. 对于 Unique Key 模型表,若需要频繁更新且要求强一致性,可考虑开启 Merge-on-Write 模式(版本支持时),减少导入过程中临时数据的影响。
    2. 执行 DELETE 前,先通过 SELECT 确认条件命中的数据范围,并尽量在 WHERE 条件中指定分区键和分桶键以减少扫描范围。
    3. 对于大规模数据删除,推荐使用 TRUNCATE TABLE 清空整表,或 DROP PARTITION 删除整个分区,而非逐行删除。
最近更新时间:2026.03.19 14:55:48
这个页面对您有帮助吗?
有用
有用
无用
无用