配置 MR3
MR3 的行为由类路径中的配置文件 mr3-site.xml 指定。以下是 MR3 的所有配置键,分为 12 个部分:
- MR3Runtime:所有组件(MR3Client、DAGAppMaster、ContainerWorker)相关的配置键
- MR3Client:MR3Client 使用或设置的配置键
- DAGAppMaster:DAGAppMaster 使用或设置的配置键
- ContainerGroup:指定 ContainerGroup 属性的配置键
- DAG:指定 DAG 属性的配置键
- ContainerWorker:ContainerWorker 的配置键
- 内存使用与自动扩缩容:自动扩缩容的配置键
- Prometheus:Prometheus 指标相关的配置键
- TokenRenewer:Kerberos 和 token 续期相关的配置键
- HistoryLogger 和 MR3-UI:历史记录和 MR3-UI 的配置键
- Tez 计数器:Tez 计数器的配置键
- Kubernetes:在 Kubernetes 上运行 MR3 的配置键
MR3Runtime
| Name | Default value | Description |
|---|---|---|
| mr3.runtime | tez | tez:使用 Tez 0.9.1 运行时。 spark:使用 Spark 运行时。 |
| mr3.master.mode | yarn | local-thread:DAGAppMaster 作为新线程在 MR3Client 内部启动。 local-process:DAGAppMaster 作为新进程在与 MR3Client 相同的机器上启动。 yarn:DAGAppMaster 在 Hadoop 集群中作为新容器启动。 kubernetes:DAGAppMaster 在 Kubernetes 集群中作为 Pod 启动。更多详情请参阅 DAGAppMaster 和 ContainerWorker 模式。 |
| mr3.am.acls.enabled | true | true:启用 DAGAppMaster 和 DAG 的 ACL。 false:禁用 DAGAppMaster 和 DAG 的 ACL。 |
| mr3.cluster.additional.classpath | DAGAppMaster 和 ContainerWorker 的附加类路径 | |
| mr3.cluster.use.hadoop-libs | false | true:包含 YarnConfiguration.YARN_APPLICATION_CLASSPATH 中定义的类路径。 false:不包含 YarnConfiguration.YARN_APPLICATION_CLASSPATH 中定义的类路径。 |
| mr3.am.max.java.heap.fraction | 0.8 | 分配给 DAGAppMaster 中 Java 堆的内存比例 |
| mr3.container.max.java.heap.fraction | 0.8 | 分配给 ContainerWorker 中 Java 堆的内存比例 |
| mr3.async.logging | true | true:使用异步日志。 false:使用同步日志。 |
MR3Client
| Name | Default value | Description |
|---|---|---|
| mr3.lib.uris | MR3 库 jar 文件的 URI | |
| mr3.aux.uris | MR3 辅助 jar 文件的 URI | |
| mr3.queue.name | MR3 作业提交到的 Yarn 队列名称。在 Yarn 上,用户可以利用它来限制 MR3 消耗的资源总量。在 Kubernetes 上不使用。 | |
| mr3.application.tags | MR3 作业的标签列表 | |
| mr3.application.scheduling.properties.map | MR3 作业的调度属性列表(例如 foo1=bar1,foo2=bar2) | |
| mr3.application.am.node.label | DAGAppMaster 在 Yarn 上的节点标签表达式 | |
| mr3.application.worker.node.label | ContainerWorker 在 Yarn 上的节点标签表达式 | |
| mr3.credentials.path | MR3 的凭证路径 | |
| mr3.am.staging-dir | /tmp/${user.name}/mr3/staging | DAGAppMaster 的暂存目录 |
| mr3.am.staging.dir.check.ownership.permission | true | true:检查暂存目录的所有权和目录权限。 false:不检查。如果暂存目录位于 S3 上(没有所有权和目录权限的概念),则设置为 false。 |
| mr3.am.resource.memory.mb | 4096 | DAGAppMaster 的内存大小(MB) |
| mr3.am.resource.cpu.cores | 1 | DAGAppMaster 的核心数 |
| mr3.am.max.app.attempts | 2 | MR3 作业的最大 Yarn ApplicationAttempts 次数 |
| mr3.am.log.level | INFO | DAGAppMaster 的日志级别 |
| mr3.am.local.working-dir | /tmp/${user.name}/mr3/working-dir | 以 LocalThread 或 LocalProcess 模式运行的 DAGAppMaster 的本地工作目录 |
| mr3.am.local.log-dir | /tmp/${user.name}/mr3/log-dir | 以 LocalThread 或 LocalProcess 模式运行的 DAGAppMaster 的日志目录 |
| mr3.cancel.delegation.tokens.on.completion | true | true:MR3 作业完成时取消委托令牌。 false:不取消委托令牌。 |
| mr3.dag.status.pollinterval.ms | 1000 | 获取运行中 DAG 状态的时间间隔(毫秒) |
| mr3.am.session.mode | false | true:创建 MR3 SessionClient。 false:创建 MR3 JobClient。更多详情请参阅 MR3Client。 |
| mr3.am.session.share.dag.client.rpc | true | 仅适用于 MR3 SessionClient。 true:所有 DAGClient 共享一个公共 DAGClientRPC 对象。 false:每个 DAGClient 创建自己的 DAGClientRPC 对象。 |
| mr3.session.client.timeout.secs | 120 | 使用超时终止 MR3 SessionClient 的时间(秒) |
| mr3.am.rpc.protection | authentication | 对应 Hadoop 的 hadoop.rpc.protection 配置键。设置为 privacy 以加密消息。 |
| Name | Default value | Description |
|---|---|---|
| mr3.am.launch.cmd-opts | -server -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -XX:+UseNUMA -XX:+UseParallelGC | 启动 DAGAppMaster 的命令行选项 |
| mr3.am.launch.env | LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/ | 启动 DAGAppMaster 的环境变量。每个条目采用以 "=" 分隔的 "VAR=VALUE" 或 "VAR" 形式。在后一种情况下,使用系统环境中的值。 |
DAGAppMaster
| Name | Default value | Description |
|---|---|---|
| mr3.yarn.priority | 0 | MR3 Yarn 应用程序的优先级 |
| mr3.am.worker.mode | local | 在 DAGAppMaster 中创建的资源调度器类型。实际的 ContainerWorker 类型由每个 ContainerGroup 的 mr3.container.resourcescheduler.type 指定。 local:ContainerWorker 作为线程在 DAGAppMaster 内部启动。 yarn:ContainerWorker 在 Hadoop 集群中作为容器启动。 kubernetes:ContainerWorker 在 Kubernetes 集群中作为 Pod 启动。 process:由用户执行的 ContainerWorker 联系 DAGAppMaster。更多详情请参阅 DAGAppMaster 和 ContainerWorker 模式。 |
| mr3.am.max.num.concurrent.dags | 128 | DAGAppMaster 中可同时运行的最大 DAG 数量 |
| mr3.am.shutdown.rightaway | true | true:DAGAppMaster 不等待 MR3Client 获取所有 DAG 的最终状态。 false:DAGAppMaster 等待 MR3Client 获取所有 DAG 的最终状态。 |
| mr3.am.shutdown.sleep.max.ms | 5000 | 等待 MR3Client 获取所有 DAG 最终状态的时间(毫秒) |
| mr3.am.delete.local.working-dir | true | true:以 LocalThread 或 LocalProcess 模式运行的 DAGAppMaster 在终止时删除其本地工作目录。 false:以 LocalThread 或 LocalProcess 模式运行的 DAGAppMaster 不删除其本地工作目录。设置为 true 以确保 LocalProcess 模式下的 DAGAppMaster 正确终止。 |
| mr3.am.taskcommunicator.type | protobuf | protobuf:使用 Protobuf 进行 TaskCommunicator 与 ContainerWorker 之间的通信。 protowritable:使用 Protobuf + Writable 进行 TaskCommunicator 与 ContainerWorker 之间的通信。 writable:使用 Writable 进行 TaskCommunicator 与 ContainerWorker 之间的通信。 direct:使用 TaskCommunicator 与本地 ContainerWorker 直接通信。 |
| mr3.am.taskcommunicator.thread.count | 30 | TaskCommunicator 中为 ContainerWorker 请求提供服务的线程数 |
| mr3.am.rm.heartbeat.interval.ms | 1000 | AMRMClientAsync 心跳的时间间隔(毫秒) |
| mr3.dag.priority.scheme | fifo | fifo:按 FIFO 基准分配 DAG 优先级。 concurrent:为所有 DAG 分配相同的优先级。不为单个 DAG 设置。 |
| mr3.vertex.priority.scheme | intact | 分配 Vertex 优先级的方案。可用选项:intact、roots、leaves、postorder、normalize。不为单个 DAG 设置。 |
| mr3.am.client.thread-count | 32 | DAGClientServer 中为 MR3Client 请求提供服务的线程数 |
| mr3.heartbeat.task.timeout.ms | 120000 | 触发 TaskAttempt 心跳超时的时间(毫秒)(在 ContainerWorker 获取之后开始计数) |
| mr3.heartbeat.container.timeout.ms | 600000 | 触发 ContainerWorker 心跳超时的时间(毫秒)。应(远)大于因 mr3.container.task.failure.num.sleeps 导致睡眠的总时间。 |
| mr3.task.heartbeat.timeout.check.ms | 30000 | 检查 TaskAttempt 心跳超时的时间间隔(毫秒) |
| mr3.container.heartbeat.timeout.check.ms | 15000 | 检查 ContainerWorker 心跳超时的时间间隔(毫秒) |
| mr3.dag.timeout.kill.check.ms | 15000 | 检查 DAG 超时的时间间隔(毫秒) |
| mr3.container.idle.timeout.ms | 300000 | 触发空闲 ContainerWorker 超时的时间(毫秒) |
| mr3.am.node-blacklisting.enabled | false | true:启用节点黑名单。 false:禁用节点黑名单。更多详情请参阅 节点黑名单。 |
| mr3.am.maxtaskfailure.percent | 5 | 触发节点黑名单的 TaskAttempt 失败百分比 |
| mr3.am.max.safe.resource.percent.blacklisted | 50 | 可分配给黑名单节点的最大资源百分比 |
| mr3.am.min.safe.resource.percent.blacklisted | 10 | 可分配给黑名单节点的最小资源百分比 |
| mr3.dag.delete.local.dir | true | true:请求 ContainerWorker 删除 DAG 本地目录。 false:不请求(如 Spark on MR3)。 |
| mr3.dag.recovery.enabled | true | true:启用 DAGAppMaster 重启时 DAG 恢复。 false:禁用 DAGAppMaster 重启时 DAG 恢复。 |
| mr3.am.max.finished.reported.dags | 10 | 报告给 MR3Client 后,DAGAppMaster 中保持其最终状态的 DAG 最大数量 |
| mr3.am.generate.dag.graph.viz | false | true:创建 DOT 图形文件,显示 DAGAppMaster 工作目录中 DAG 的结构。 false:不创建 DOT 图形文件。 |
| Name | Default value | Description |
|---|---|---|
| mr3.am.local.resourcescheduler.min.memory.mb | 256 | 为在 DAGAppMaster 中运行的所有本地 ContainerWorker 保留的最小内存(MB) |
| mr3.am.local.resourcescheduler.max.memory.mb | 4096 | 为在 DAGAppMaster 中运行的所有本地 ContainerWorker 保留的最大内存(MB) |
| mr3.am.local.resourcescheduler.max.cpu.cores | 16 | 在 DAGAppMaster 中运行的所有本地 ContainerWorker 的最大核心数 |
| mr3.am.local.resourcescheduler.native.fraction | 0.0 | 为在 DAGAppMaster 中运行的所有本地 ContainerWorker 分配的本机内存比例 |
| mr3.am.resourcescheduler.max.requests.per.taskscheduler | 10 | TaskScheduler 一次可向 Yarn ResourceScheduler 请求的最大容器数 |
ContainerGroup
| Name | Default value | Description |
|---|---|---|
| mr3.container.scheduler.scheme | none | none:不回收 ContainerWorker。 fifo:使用 FIFO 调度回收 ContainerWorker。 fair:使用公平调度回收 ContainerWorker。 |
| mr3.container.scheduler.remove.empty.kind | false | true:移除没有 ContainerGroup 的 ContainerKind,并且仅当其 ContainerKind 有多个 ContainerGroup 时才保留用于回收的 ContainerWorker。 false:永不移除 ContainerKind,并为所有 ContainerWorker 保留用于回收。 |
| mr3.dag.queue.scheme | common | 将 DAG 映射到 TaskScheduler 中 TaskAttempt 队列的方案。可用选项:common、individual、capacity。可为单个 ContainerGroup 设置。 |
| mr3.dag.queue.capacity.specs | default:0 | 容量调度的规格列表。每个队列包含队列名称和最小容量百分比。按优先级顺序指定队列。例如 high=50,medium=30,default=20,background=0。可为单个 ContainerGroup 设置。 |
| mr3.taskattempt.queue.scheme | indexed | 管理 TaskScheduler 中 TaskAttempt 队列的方案。可用选项:basic、simple、opt、indexed、spark。可为单个 ContainerGroup 设置。 basic:TaskScheduler 不使用基于生产者完成度的优化。 simple、opt、indexed:TaskScheduler 应用基于生产者完成度的优化。 spark:TaskScheduler 使用 Spark 风格的方案,其中消费者 Task 仅在所有生产者 Task 完成后才被调度。 |
| mr3.taskattempt.queue.scheme.strict | false | true:仅在与位置提示匹配的 ContainerWorker 上调度 Task。 false:不必在与位置提示匹配的 ContainerWorker 上调度 Task。 |
| mr3.vertex.high.task.priority.fraction | 0.05 | 同一 Vertex 内根据输入数据大小分配较高优先级的 Task 比例 |
| mr3.container.stop.cross.dag.reuse | true | true:停止当前 ContainerGroup 的跨 DAG 容器重用。 false:不更新当前 ContainerGroup 关于跨 DAG 容器重用。可为单个 ContainerGroup 设置。 |
| mr3.container.reuse | false | true:重用当前 ContainerGroup 中的 ContainerWorker。 false:每个 ContainerWorker 仅用于单个 TaskAttempt。可为单个 ContainerGroup 设置。 |
| mr3.container.resourcescheduler.type | local | ContainerWorker 的类型。 local:为当前 ContainerGroup 在 DAGAppMaster 中创建本地 ContainerWorker。 yarn:为当前 ContainerGroup 创建 Yarn ContainerWorker。 kubernetes:为当前 ContainerGroup 创建 Kubernetes ContainerWorker。 process:使用由用户执行的 ContainerWorker。可为单个 ContainerGroup 设置。 |
| mr3.container.combine.taskattempts | false | true:允许多个 TaskAttempt 在同一 ContainerWorker 中并发运行。 false:一次仅允许一个 TaskAttempt 在同一 ContainerWorker 中运行。可为单个 ContainerGroup 设置。 |
| mr3.container.mix.taskattempts | true | true:允许来自不同 DAG 的 TaskAttempt 在同一 ContainerWorker 中并发运行。 false:每个 ContainerWorker 专用于单个 DAG。可为单个 ContainerGroup 设置。 |
| mr3.container.max.num.workers | Int.MaxValue | ContainerGroup 可以创建的最大 ContainerWorker 数量。可为单个 ContainerGroup 设置。 |
| mr3.container.log.level | INFO | ContainerWorker 的日志级别 |
| mr3.use.daemon.shufflehandler | 0 | 每个 ContainerWorker 中的 shuffle handler 数量。在 Kubernetes 上,值为 0 会导致为 shuffle handler 创建进程。 |
| mr3.daemon.shuffle.service-id | shuffle handler 的服务标识符 | |
| mr3.daemon.shuffle.port | shuffle handler 的端口号 | |
| mr3.daemon.task.message.buffer.size | 16 | 每个 DaemonTask 的消息队列大小 |
| Name | Default value | Description |
|---|---|---|
| mr3.container.launch.cmd-opts | -server -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -XX:+UseNUMA -XX:+UseParallelGC | 启动 ContainerWorker 的命令行选项 |
| mr3.container.launch.env | LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/ | 启动 ContainerWorker 的环境变量。每个条目采用以 "=" 分隔的 "VAR=VALUE" 或 "VAR" 形式。在后一种情况下,使用系统环境中的值。 |
| mr3.container.kill.policy | container.kill.wait.workervertex | container.kill.wait.workervertex:仅在没有更多 TaskAttempt 要到达时停止 ContainerWorker。 container.kill.nowait:如果 ContainerWorker 不再服务于任何 TaskAttempt,立即停止。 |
DAG
| Name | Default value | Description |
|---|---|---|
| mr3.am.min.cluster.resource.memory.mb | 102400 | DAGAppMaster 在初始化 Map Task 时假设的最小集群内存(MB)。可为单个 DAG 设置。 |
| mr3.am.min.cluster.resource.cpu.cores | 100 | DAGAppMaster 在初始化 Map Task 时假设的最小集群核心数。可为单个 DAG 设置。 |
| mr3.am.task.max.failed.attempts | 3 | 每个 Task 的最大 TaskAttempt 数量。必须大于零。可为单个 DAG 设置。更多详情请参阅 容错。 |
| mr3.am.task.no.retry.errors | 防止 Task 重新执行的异常和错误名称列表。可为单个 DAG 设置。更多详情请参阅 容错。 | |
| mr3.am.task.retry.on.fatal.error | false | true:即使 TaskAttempt 因致命错误而失败,也重试。 false:如果 TaskAttempt 因致命错误而失败,不重试。可为单个 DAG 设置。更多详情请参阅 容错。 |
| mr3.am.notify.destination.vertex.complete | false | true:通知 ContainerWorker 所有目标 Vertex 已完成,以便它可以删除源 Vertex 的中间数据目录。 false:不通知。可为单个 DAG 设置。 |
| mr3.am.commit-all-outputs-on-dag-success | true | true:DAG 成功完成时提交所有 Vertex 的输出。 false:Vertex 成功完成时提交输出。可为单个 DAG 设置。 |
| mr3.am.permit.custom.user.class | false | true:允许自定义 VertexManager、InputInitializer、OutputCommitter 类。 false:不允许自定义类。可为单个 DAG 设置。 |
| mr3.am.task.concurrent.run.threshold.percent | 100.0 | 开始推测执行前完成 Task 的百分比。可以设置为高达 100.0 的浮点数。如果设置为 100.0,则禁用 TaskAttempt 的推测执行。可为单个 DAG 设置。更多详情请参阅 推测执行。 |
| mr3.am.task.concurrent.run.min.threshold.ms | 10000 | 开始推测执行前完成 Task 的最大执行时间(毫秒)的最小值。例如,值为 10000 意味着如果所有 Task 在开始推测执行前 10 秒内完成,我们使用 10 秒作为它们的最大执行时间。可为单个 DAG 设置。 |
| mr3.am.task.concurrent.run.multiplier | 2.0d | 开始推测执行前完成 Task 的最大执行时间的倍数。可为单个 DAG 设置。 |
| mr3.am.task.concurrent.run.enable.root.vertex | false | true:推测执行对没有前置的根 Vertex 有效。 false:推测执行对根 Vertex 无效。 |
| mr3.dag.queue.name | default | 当前 DAG 所属的 Task 队列名称。与容量调度一起使用。如果给出无效名称,则使用默认值 default。可为单个 DAG 设置。 |
| mr3.dag.vertex.schedule.by.stage | false | true:Vertex 仅在所有源 Vertex 完成后才创建 Task。 false:Vertex 可以在源 Vertex 运行时就创建 Task。 |
| mr3.dag.route.event.after.source.vertex | false | true:Vertex 仅在所有源 Vertex 完成后才接收事件。 false:Vertex 可以在源 Vertex 运行时接收事件。 |
| mr3.dag.include.indeterminate.vertex | false | true:DAG 包含不确定 Vertex,其输出每次执行可能都不同。当发生 fetch 失败时不支持容错。 false:DAG 不包含不确定 Vertex。 |
| mr3.dag.create.daemon.vertex.always | false | true:在每个 DAG 中创建 DaemonVertex。 false:除创建者 DAG(创建 ContainerGroup)外,不创建 DaemonVertex |
| mr3.dag.timeout.kill.threshold.secs | 0 | DAG 的最大执行时间(秒)。设置为 0 以禁用超时检查。可为单个 DAG 设置。 |
ContainerWorker
| Name | Default value | Description |
|---|---|---|
| mr3.container.get.command.interval.ms | 2000 | 当前服务于 TaskAttempt 的 ContainerWorker 中获取命令的时间间隔(毫秒) |
| mr3.container.busy.wait.interval.ms | 100 | 空闲 ContainerWorker 中获取命令的时间间隔(毫秒) |
| mr3.task.am.heartbeat.interval.ms | 250 | TaskAttempt 发送心跳的时间间隔(毫秒) |
| mr3.task.am.heartbeat.duration.interval.ms | 15000 | TaskAttempt 发送心跳的时间间隔(毫秒)。它还决定在推测执行中更新 TaskAttempt 持续时间的粒度。更多详情请参阅 推测执行。 |
| mr3.task.am.heartbeat.counter.interval.ms | 60000 | TaskAttempt 在心跳中发送计数器的时间间隔(毫秒) |
| mr3.task.max.events.per.heartbeat | 500 | 心跳回复中包含的最大 task 事件数量 |
| mr3.container.thread.keep.alive.time.ms | 4000 | ContainerWorker 中为 TaskAttempt 提供服务的线程保持时间(毫秒) |
| mr3.container.command.num.waits.in.reserved | 180 | 保留的 ContainerWorker 以 1 秒间隔联系 DAGAppMaster 的次数。请确保在启用自动缩放的 Kubernetes 上 mr3.container.command.num.waits.in.reserved * 1 秒 > mr3.k8s.pod.creation.timeout.ms,以便在保留的 ContainerWorker 仍然存活时可以发出新的 ContainerWorker 请求。 |
| mr3.container.command.num.waits.to.kill | 6 | ContainerWorker 以 1 秒间隔联系 DAGAppMaster 以重新建立连接的次数。失败尝试大约需要 10 秒。 |
| mr3.container.use.termination.checker | true | true:在终止请求后检查 TaskAttempt 是否成功终止。如果 TaskAttempt 未能终止,则终止 ContainerWorker。 false:不检查。在生产环境中不要设置为 false。 |
| mr3.container.terminate.on.fatal.error | false | true:始终终止抛出致命错误(如 OutOfMemoryError)的 ContainerWorker。 false:不终止能够从致命错误中恢复的 ContainerWorker。 |
| mr3.container.termination.checker.timeout.ms | 300000 | 终止请求后检查 TaskAttempt 终止的时间(毫秒)。使用默认值,ContainerWorker 在终止请求后 300 秒内检查 TaskAttempt 是否已正确终止。如果 TaskAttempt 尚未终止,则关闭整个 ContainerWorker。用户不应使用太小的值(例如 30 秒的 30000),因为关闭 shuffle handler 的 HTTP 连接可能需要很长时间。 |
| mr3.container.task.failure.num.sleeps | 0 | TaskAttempt 失败后 ContainerWorker 线程睡眠的次数(默认每次 15 秒)。在每次睡眠前后,线程尝试分配 1GB 内存块以触发垃圾回收。例如,如果设置为 2,则顺序为:分配 1GB,睡眠 15 秒,分配 1GB,睡眠 15 秒,分配 1GB。如果设置为 0,则不睡眠,也不尝试分配内存块。对于 Hive on MR3,在执行带有 limit 运算符的交互式查询时不要设置为非零值,因为当记录数达到限制时所有活动 Task 都会被杀死。 |
| mr3.container.task.failure.sleep.period.secs | 15 | TaskAttempt 失败后睡眠的时间(秒) |
| mr3.container.runtime.auto.start.input | false | true:在 RuntimeTask 中自动启动 LogicalInput。 false:不自动启动 LogicalInput。设置为 true 可能会对性能产生负面影响,因为 ContainerWorker 可能通过广播边多次获取相同的输入数据。 |
| mr3.container.close.filesystem.ugi | true | true:在 ContainerWorker 中完成每个 DAG 后调用 FileSystem.closeAllForUGI()。 false:不调用(用于 Spark on MR3)。 |
| mr3.container.use.framework.counters | false | true:在 ContainerWorker 中收集框架计数器(关于垃圾回收和进程统计)。 false:不收集框架计数器。使用 MR3-UI 时设置为 true。 |
| mr3.container.localize.python.working.dir.unsafe | false | true:将 Python 资源(*.py 或 *.PY)本地化到 ContainerWorker 的工作目录中。 false:不将 Python 资源本地化到工作目录中。 |
| mr3.container.use.am.credentials.for.daemon | true | true:为所有 DaemonTaskAttempt 使用 DAGAppMaster 的凭证。 false:为其所有 DaemonTaskAttempt 使用 DAG 的凭证。 |
| Name | Default value | Description |
|---|---|---|
| mr3.container.elastic.execution.memory.commit.ratio | 1.0 | 分配给每个 TaskAttempt 的内存乘数。例如,值为 1.5 意味着使用 4GB 内存资源创建的 TaskAttempt 实际上在 ContainerWorker 中分配了 6GB 内存。 |
内存使用与自动扩缩容
| Name | Default value | Description |
|---|---|---|
| mr3.memory.usage.check.scheme | average | average:计算当前窗口的平均内存使用量。 maximum:计算当前窗口的最大内存使用量。 |
| mr3.memory.usage.check.window.length.secs | 600 | 计算内存使用的窗口长度(秒) |
| mr3.check.memory.usage.event.interval.secs | 10 | 以下操作的时间间隔(秒):1)生成事件以计算自动扩缩容的内存使用量;2)在回收 ContainerWorker 时更新公平调度下每个 ContainerGroup 的 ContainerWorker 数量 |
| mr3.enable.auto.scaling | false | true:启用自动扩缩容。 false:禁用自动扩缩容。 |
| mr3.auto.scale.out.threshold.percent | 80 | 触发扩容的最小内存使用百分比 |
| mr3.auto.scale.in.threshold.percent | 50 | 触发缩容的最大内存使用百分比 |
| mr3.auto.scale.in.min.hosts | 1 | 执行缩容时应保持的最小节点数 |
| mr3.auto.scale.out.grace.period.secs | 300 | 触发扩容后的冷却时间(秒) |
| mr3.auto.scale.in.delay.after.scale.out.secs | 60 | 离开扩容状态后触发缩容前等待的最小时间(秒) |
| mr3.auto.scale.in.grace.period.secs | 300 | 触发缩容后的冷却时间(秒) |
| mr3.auto.scale.in.wait.dag.finished | true | true:在缩容事件中终止容器前等待所有运行的 DAG 完成。 false:不等待,立即终止容器。 |
| mr3.auto.scale.out.num.initial.containers | 0 | 如果大于零:当没有容器运行时扩容时要添加的容器数量。如果为零或更小:不使用。 |
| mr3.auto.scale.out.num.increment.containers | 0 | 如果大于零:扩容时要添加的容器数量。如果为零或更小:使用 mr3.auto.scale.out.threshold.percent 计算要添加的容器数量。 |
| mr3.auto.scale.in.num.decrement.hosts | 0 | 如果大于零:缩容时要删除的主机数量。如果为零或更小:使用 mr3.auto.scale.in.threshold.percent 计算要删除的主机数量。 |
Prometheus
| Name | Default value | Description |
|---|---|---|
| mr3.prometheus.enable.metrics | false | true:DAGAppMaster 运行 Prometheus 客户端以导出指标。 false:DAGAppMaster 不运行 Prometheus 客户端。 |
| mr3.prometheus.enable.jvm.metrics | false | true:从 DAGAppMaster 导出 Java VM 指标(使用 io.prometheus.client.hotspot.DefaultExports)。 false:不导出 Java VM 指标。 |
| mr3.prometheus.httpserver.port | 9890 | Prometheus 客户端的端口号 |
| mr3.prometheus.worker.enable.metrics | false | true:每个 ContainerWorker 运行 Prometheus 客户端以导出指标。 false:ContainerWorker 不运行 Prometheus 客户端。 |
| mr3.prometheus.worker.enable.jvm.metrics | false | true:从 ContainerWorker 导出 Java VM 指标(使用 io.prometheus.client.hotspot.DefaultExports)。 false:不从 ContainerWorker 导出 Java VM 指标。 |
| mr3.prometheus.worker.httpserver.port | 0 | ContainerWorker 的 Prometheus 客户端的端口号。如果多个 ContainerWorker 在同一节点上运行,使用 0。 |
TokenRenewer
| Name | Default value | Description |
|---|---|---|
| mr3.principal | Kerberos 主体 | |
| mr3.keytab | Kerberos keytab 文件的位置 | |
| mr3.token.renewal.fraction | 0.75 | token 续期间隔的分数,用于保守地续期 token |
| mr3.token.renewal.retry.interval.ms | 3600000 | 重试 token 续期的时间间隔(毫秒) |
| mr3.token.renewal.num.credentials.files | 5 | 用于 token 续期的最大凭证文件数量 |
| mr3.token.renewal.hdfs.enabled | false | true:自动续期 HDFS token。 false:不续期 HDFS token。 |
| mr3.token.renewal.hive.enabled | false | true:自动续期 Hive token。 false:不续期 Hive token。 |
| mr3.am.token.renewal.paths | 指定用于 token 续期的 FileSystem 的路径。如果为空,DAGAppMaster 使用暂存目录。 | |
| mr3.token.renewal.pass.credentials.via.memory | true | true:DAGAppMaster 通过消息直接将凭证传递给 ContainerWorker。 false:DAGAppMaster 将凭证存储在 HDFS 上。 |
HistoryLogger 和 MR3-UI
| Name | Default value | Description |
|---|---|---|
| mr3.app.history.logging.enabled | false | true:为 Yarn 应用程序和 ContainerWorker 启用历史记录。 false:为 Yarn 应用程序和 ContainerWorker 禁用历史记录。 |
| mr3.dag.history.logging.enabled | false | true:为 DAG 启用历史记录。 false:为 DAG 禁用历史记录。 |
| mr3.task.history.logging.enabled | false | true:为 Task 启用历史记录。 false:为 Task 禁用历史记录。 |
| Name | Default value | Description |
|---|---|---|
| mr3.ui.create.server | false | true:为 MR3-UI 创建 HTTP 服务器。 false:不创建。 |
| mr3.ui.timline.store.type | memory | memory:为 Timeline Server 使用内存数据库。 leveldb:为 Timeline Server 使用 LevelDB。 |
| mr3.ui.timeline-service.leveldb-timeline-store.path | /tmp/ | 存储 LevelDB 数据的目录。请参阅 LevelDbTimelineStore.java 了解其他配置键。 |
| mr3.ui.server.port | 19003 | MR3-UI HTTP 服务器的端口 |
| mr3.ui.server.host | 0.0.0.0 | MR3-UI HTTP 服务器的主机 |
| mr3.ui.server.max.threads | 10 | MR3-UI HTTP 服务器中的最大线程数 |
| mr3.ui.server.admin.users | MR3-UI 中具有管理员权限的用户的逗号分隔列表 |
Tez 计数器
| Name | Default value | Description |
|---|---|---|
| tez.counters.max | 1200 | 最大 Tez 计数器数量 |
| tez.counters.max.groups | 500 | 最大 Tez 计数器组数量 |
| tez.counters.counter-name.max-length | 64 | Tez 计数器名称的最大长度 |
| tez.counters.group-name.max-length | 256 | Tez 计数器组名称的最大长度 |
Kubernetes
| Name | Default value | Description |
|---|---|---|
| mr3.k8s.api.server.url | https://kubernetes.default.svc | Kubernetes API 服务器的 URL |
| mr3.k8s.client.config.file | 创建 Kubernetes 客户端的配置文件(例如 ~/.kube/config) | |
| mr3.k8s.service.account.use.token.ca.cert.path | true | true:使用 mr3.k8s.service.account.token.path 和 mr3.k8s.service.account.token.ca.cert.path。 false:不使用。 |
| mr3.k8s.service.account.token.path | /var/run/secrets/kubernetes.io/serviceaccount/token | Kubernetes 客户端 ServiceAccount 的 token 路径。仅在 mr3.k8s.service.account.use.token.ca.cert.path 设置为 true 时使用。 |
| mr3.k8s.service.account.token.ca.cert.path | /var/run/secrets/kubernetes.io/serviceaccount/ca.crt | Kubernetes 客户端 ServiceAccount 的证书路径。仅在 mr3.k8s.service.account.use.token.ca.cert.path 设置为 true 时使用。 |
| Name | Default value | Description |
|---|---|---|
| mr3.k8s.namespace | mr3 | 创建 Kubernetes 客户端时要使用的 Kubernetes 命名空间 |
| mr3.k8s.am.service.host | DAGAppMaster Pod 的 Service 相关主机。仅当 MR3Client 在 Kubernetes 集群外部运行且用户手动创建 Service 时设置。如果未设置,MR3 从 MR3Client 创建的 Service 获取主机,例如 service-master-4110-0.hivemr3.svc.cluster.local。 | |
| mr3.k8s.am.service.port | 80 | DAGAppMaster Pod 的 Service 相关端口 |
| mr3.k8s.nodes.polling.interval.ms | 60000 | 查询 Kubernetes Node 状态的时间间隔(毫秒) |
| mr3.k8s.pods.polling.interval.ms | 15000 | 查询 Pod 状态的时间间隔(毫秒) |
| mr3.k8s.pod.creation.timeout.ms | 30000 | 等待新 Pod 创建的时间(毫秒) |
| mr3.k8s.pod.image.pull.policy | IfNotPresent | Pod 的镜像拉取策略 |
| mr3.k8s.pod.image.pull.secrets | Pod 的镜像拉取 secret | |
| mr3.k8s.pod.master.serviceaccount | DAGAppMaster Pod 的 ServiceAccount | |
| mr3.k8s.pod.worker.serviceaccount | ContainerWorker Pod 的 ServiceAccount | |
| mr3.k8s.pod.master.image | DAGAppMaster 容器的 Docker 镜像 | |
| mr3.k8s.pod.master.user | DAGAppMaster Pod 的用户 | |
| mr3.k8s.pod.master.emptydirs | 为 DAGAppMaster 挂载 emptyDir 卷的目录逗号分隔列表 | |
| mr3.k8s.pod.master.hostpaths | DAGAppMaster 的 hostPath 卷指向的目录(每个节点上)的逗号分隔列表。例如,/data1/k8s,/data2/k8s,/data3/k8s 挂载三个 hostPath 卷,这些卷创建自 DAGAppMaster Pod 将运行的节点上的三个本地目录。 | |
| mr3.k8s.pod.master.node.selector | DAGAppMaster Pod 的节点选择器的逗号分隔列表(例如 masternode=true,hivemr3=true) | |
| mr3.k8s.pod.master.toleration.specs | DAGAppMaster Pod 的容忍度规格的逗号分隔列表。每个条目的格式为 [key]:[operator]:[value]:[effect]:[toleration in seconds],其中 [value] 和 :[toleration in seconds] 是可选的。 | |
| mr3.k8s.master.working.dir | DAGAppMaster 容器的工作目录 | |
| mr3.k8s.master.command | /usr/bin/java | 启动 DAGAppMaster 容器的 Java VM 的命令 |
| mr3.k8s.master.pod.affinity.match.label | 用于指定 DAGAppMaster Pod 的 Pod 亲和性的标签(例如 hivemr3_app=hiveserver2)。在内部,MR3 使用 weight 为 100 的 preferredDuringSchedulingIgnoredDuringExecution。 | |
| mr3.k8s.master.pod.additional.labels | DAGAppMaster Pod 的附加标签的逗号分隔列表(例如 foo=bar,hivemr3_aux=prometheus) | |
| mr3.k8s.master.pod.cpu.limit.multiplier | 1.0 | DAGAppMaster Pod 的 CPU 资源限制乘数 |
| mr3.k8s.pod.worker.image | ContainerWorker 容器的 Docker 镜像 | |
| mr3.k8s.pod.worker.user | ContainerWorker Pod 的用户 | |
| mr3.k8s.pod.worker.emptydirs | 为 ContainerWorker 挂载 emptyDir 卷的目录逗号分隔列表。这些卷成为写入中间数据的本地目录。 | |
| mr3.k8s.pod.worker.hostpaths | ContainerWorker 的 hostPath 卷指向的目录(每个节点上)的逗号分隔列表。例如,/data1/k8s,/data2/k8s,/data3/k8s 挂载三个 hostPath 卷,这些卷创建自 ContainerWorker Pod 将运行的节点上的三个本地目录。这些卷成为写入中间数据的本地目录。 | |
| mr3.k8s.pod.worker.additional.hostpaths | ContainerWorker 的附加 hostPath 目录的逗号分隔列表 | |
| mr3.k8s.pod.worker.node.selector | ContainerWorker Pod 的节点选择器的逗号分隔列表(例如 workernode=true,hivemr3=true) | |
| mr3.k8s.pod.worker.toleration.specs | ContainerWorker Pod 的容忍度规格的逗号分隔列表。每个条目的格式为 [key]:[operator]:[value]:[effect]:[toleration in seconds],其中 [value] 和 :[toleration in seconds] 是可选的。 | |
| mr3.k8s.pod.worker.node.affinity.specs | ContainerWorker Pod 的节点亲和性规格的逗号分隔列表。每个条目的格式为 [key]:[operator]:[value#1]:...:[value#N](例如 key1:In:value1:value2:value3)。在内部,MR3 使用 requiredDuringSchedulingIgnoredDuringExecution。 | |
| mr3.k8s.worker.working.dir | ContainerWorker 容器的工作目录 | |
| mr3.k8s.java.io.tmpdir | /tmp | ContainerWorker 容器中 Java 的临时目录 |
| mr3.k8s.worker.command | /usr/bin/java | 启动 ContainerWorker 容器的 Java VM 的命令 |
| mr3.k8s.worker.total.max.memory.gb | 1048576 | 所有 ContainerWorker Pod 的最大内存(GB) |
| mr3.k8s.worker.total.max.cpu.cores | 1048576 | 所有 ContainerWorker Pod 的最大核心数 |
| mr3.k8s.pod.cpu.cores.max.multiplier | 1.0 | 每个 ContainerWorker Pod 的 CPU 核心限制乘数。例如,值为 2.0 意味着 ContainerWorker Pod 的 CPU 限制是其 CPU 请求的两倍。 |
| mr3.k8s.pod.memory.max.multiplier | 1.0 | 每个 ContainerWorker Pod 的内存限制乘数。例如,值为 2.0 意味着 ContainerWorker Pod 的内存限制是其内存请求的两倍。除非每个节点都有超过所需的内存,否则不建议使用大于 1.0 的值(因为 ContainerWorker Pod 可能会被杀死)。 |
| mr3.k8s.conf.dir.configmap | 携带所有配置文件(如 mr3-site.xml)的 ConfigMap 名称 | |
| mr3.k8s.conf.dir.mount.dir | 携带所有配置文件的 ConfigMap 的挂载路径 | |
| mr3.k8s.keytab.secret | DAGAppMaster 使用的包含 Keytab 文件的 Secret 名称 | |
| mr3.k8s.worker.secret | ContainerWorker 使用的 Secret 名称 | |
| mr3.k8s.keytab.mount.dir | Secret(包含 keytab 文件)在 DAGAppMaster 和 ContainerWorker 中的挂载路径 | |
| mr3.k8s.keytab.mount.file | 包含 keytab 文件的 Secret 的文件名。mr3.k8s.keytab.mount.dir 和 mr3.k8s.keytab.mount.file 指定在 ContainerWorker Pod 内部挂载的 keytab 文件的完整路径。 | |
| mr3.k8s.mount.keytab.secret | false | true:将 mr3.k8s.keytab.secret 挂载到 mr3.k8s.keytab.mount.dir。 false:不挂载。在以下情况下设置为 true:1)mr3.token.renewal.hdfs.enabled 设置为 true;2)mr3.token.renewal.hive.enabled 设置为 true;3)使用安全 shuffle(tez-site.xml 中的 tez.runtime.shuffle.ssl.enable 设置为 true),以便传递 keystore 和 truststore 文件。 |
| mr3.k8s.mount.worker.secret | false | true:将 mr3.k8s.worker.secret 挂载到 mr3.k8s.keytab.mount.dir。 false:不挂载。在使用安全 shuffle(tez-site.xml 中的 tez.runtime.shuffle.ssl.enable 设置为 true)时设置为 true,以便传递 keystore 和 truststore 文件。 |
| mr3.k8s.host.aliases | 主机名和 IP 地址对的逗号分隔列表。例如,foo=1.1.1.1,bar=2.2.2.2 在 DAGAppMaster 和 ContainerWorker Pod 中将主机 foo 注册为 IP 地址 1.1.1.1,以此类推。 | |
| mr3.k8s.readiness.probe.initial.delay.secs | 10 | 执行第一次就绪探针前的等待时间(秒) |
| mr3.k8s.readiness.probe.period.secs | 20 | 执行就绪探针的时间间隔(秒) |
| mr3.k8s.liveness.probe.initial.delay.secs | 20 | 执行第一次存活探针前的等待时间(秒) |
| mr3.k8s.liveness.probe.period.secs | 40 | 执行存活探针的时间间隔(秒) |
| Name | Default value | Description |
|---|---|---|
| mr3.k8s.master.persistentvolumeclaim.mounts | DAGAppMaster Pod 的 PersistentVolumeClaim 及其挂载点对的逗号分隔列表 | |
| mr3.k8s.worker.persistentvolumeclaim.mounts | PersistentVolumeClaim 及其挂载点对的逗号分隔列表。例如,foo1=bar1,foo2=bar2,foo3=bar3 将 PersistentVolumeClaim foo1 挂载到 ContainerWorker Pod 中的目录 bar1,以此类推。 | |
| mr3.k8s.pod.worker.security.context.sysctls | 通过 ContainerWorker Pod 中的 init 容器设置的 sysctl 属性的逗号分隔列表。示例:net.core.somaxconn=16384,net.ipv4.ip_local_port_range='1024 65535'。 | |
| mr3.k8s.pod.worker.init.container.command | 在 ContainerWorker Pod 中的 init 容器中执行的 shell 命令。在执行 shell 命令之前,init 容器挂载由 mr3.k8s.pod.worker.hostpaths 指定的 hostPath 卷。示例:chown 1000:1000 /data1/k8s/; ls -alt /data1/k8s。 | |
| mr3.k8s.pod.worker.init.container.image | 当设置 mr3.k8s.pod.worker.security.context.sysctls 时 init 容器的 Docker 镜像。busybox 可以正常工作。 |