跳到主要内容

配置 MR3

MR3 的行为由类路径中的配置文件 mr3-site.xml 指定。以下是 MR3 的所有配置键,分为 12 个部分:

MR3Runtime

NameDefault valueDescription
mr3.runtimeteztez:使用 Tez 0.9.1 运行时。 spark:使用 Spark 运行时。
mr3.master.modeyarnlocal-thread:DAGAppMaster 作为新线程在 MR3Client 内部启动。 local-process:DAGAppMaster 作为新进程在与 MR3Client 相同的机器上启动。 yarn:DAGAppMaster 在 Hadoop 集群中作为新容器启动。 kubernetes:DAGAppMaster 在 Kubernetes 集群中作为 Pod 启动。更多详情请参阅 DAGAppMaster 和 ContainerWorker 模式
mr3.am.acls.enabledtruetrue:启用 DAGAppMaster 和 DAG 的 ACL。 false:禁用 DAGAppMaster 和 DAG 的 ACL。
mr3.cluster.additional.classpathDAGAppMaster 和 ContainerWorker 的附加类路径
mr3.cluster.use.hadoop-libsfalsetrue:包含 YarnConfiguration.YARN_APPLICATION_CLASSPATH 中定义的类路径。 false:不包含 YarnConfiguration.YARN_APPLICATION_CLASSPATH 中定义的类路径。
mr3.am.max.java.heap.fraction0.8分配给 DAGAppMaster 中 Java 堆的内存比例
mr3.container.max.java.heap.fraction0.8分配给 ContainerWorker 中 Java 堆的内存比例
mr3.async.loggingtruetrue:使用异步日志。 false:使用同步日志。

MR3Client

NameDefault valueDescription
mr3.lib.urisMR3 库 jar 文件的 URI
mr3.aux.urisMR3 辅助 jar 文件的 URI
mr3.queue.nameMR3 作业提交到的 Yarn 队列名称。在 Yarn 上,用户可以利用它来限制 MR3 消耗的资源总量。在 Kubernetes 上不使用。
mr3.application.tagsMR3 作业的标签列表
mr3.application.scheduling.properties.mapMR3 作业的调度属性列表(例如 foo1=bar1,foo2=bar2
mr3.application.am.node.labelDAGAppMaster 在 Yarn 上的节点标签表达式
mr3.application.worker.node.labelContainerWorker 在 Yarn 上的节点标签表达式
mr3.credentials.pathMR3 的凭证路径
mr3.am.staging-dir/tmp/${user.name}/mr3/stagingDAGAppMaster 的暂存目录
mr3.am.staging.dir.check.ownership.permissiontruetrue:检查暂存目录的所有权和目录权限。 false:不检查。如果暂存目录位于 S3 上(没有所有权和目录权限的概念),则设置为 false。
mr3.am.resource.memory.mb4096DAGAppMaster 的内存大小(MB)
mr3.am.resource.cpu.cores1DAGAppMaster 的核心数
mr3.am.max.app.attempts2MR3 作业的最大 Yarn ApplicationAttempts 次数
mr3.am.log.levelINFODAGAppMaster 的日志级别
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.completiontruetrue:MR3 作业完成时取消委托令牌。 false:不取消委托令牌。
mr3.dag.status.pollinterval.ms1000获取运行中 DAG 状态的时间间隔(毫秒)
mr3.am.session.modefalsetrue:创建 MR3 SessionClient。 false:创建 MR3 JobClient。更多详情请参阅 MR3Client
mr3.am.session.share.dag.client.rpctrue仅适用于 MR3 SessionClient。 true:所有 DAGClient 共享一个公共 DAGClientRPC 对象。 false:每个 DAGClient 创建自己的 DAGClientRPC 对象。
mr3.session.client.timeout.secs120使用超时终止 MR3 SessionClient 的时间(秒)
mr3.am.rpc.protectionauthentication对应 Hadoop 的 hadoop.rpc.protection 配置键。设置为 privacy 以加密消息。
NameDefault valueDescription
mr3.am.launch.cmd-opts-server -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -XX:+UseNUMA -XX:+UseParallelGC启动 DAGAppMaster 的命令行选项
mr3.am.launch.envLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/启动 DAGAppMaster 的环境变量。每个条目采用以 "=" 分隔的 "VAR=VALUE" 或 "VAR" 形式。在后一种情况下,使用系统环境中的值。

DAGAppMaster

NameDefault valueDescription
mr3.yarn.priority0MR3 Yarn 应用程序的优先级
mr3.am.worker.modelocal在 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.dags128DAGAppMaster 中可同时运行的最大 DAG 数量
mr3.am.shutdown.rightawaytruetrue:DAGAppMaster 不等待 MR3Client 获取所有 DAG 的最终状态。 false:DAGAppMaster 等待 MR3Client 获取所有 DAG 的最终状态。
mr3.am.shutdown.sleep.max.ms5000等待 MR3Client 获取所有 DAG 最终状态的时间(毫秒)
mr3.am.delete.local.working-dirtruetrue:以 LocalThread 或 LocalProcess 模式运行的 DAGAppMaster 在终止时删除其本地工作目录。 false:以 LocalThread 或 LocalProcess 模式运行的 DAGAppMaster 不删除其本地工作目录。设置为 true 以确保 LocalProcess 模式下的 DAGAppMaster 正确终止。
mr3.am.taskcommunicator.typeprotobufprotobuf:使用 Protobuf 进行 TaskCommunicator 与 ContainerWorker 之间的通信。 protowritable:使用 Protobuf + Writable 进行 TaskCommunicator 与 ContainerWorker 之间的通信。 writable:使用 Writable 进行 TaskCommunicator 与 ContainerWorker 之间的通信。 direct:使用 TaskCommunicator 与本地 ContainerWorker 直接通信。
mr3.am.taskcommunicator.thread.count30TaskCommunicator 中为 ContainerWorker 请求提供服务的线程数
mr3.am.rm.heartbeat.interval.ms1000AMRMClientAsync 心跳的时间间隔(毫秒)
mr3.dag.priority.schemefifofifo:按 FIFO 基准分配 DAG 优先级。 concurrent:为所有 DAG 分配相同的优先级。不为单个 DAG 设置。
mr3.vertex.priority.schemeintact分配 Vertex 优先级的方案。可用选项:intactrootsleavespostordernormalize。不为单个 DAG 设置。
mr3.am.client.thread-count32DAGClientServer 中为 MR3Client 请求提供服务的线程数
mr3.heartbeat.task.timeout.ms120000触发 TaskAttempt 心跳超时的时间(毫秒)(在 ContainerWorker 获取之后开始计数)
mr3.heartbeat.container.timeout.ms600000触发 ContainerWorker 心跳超时的时间(毫秒)。应(远)大于因 mr3.container.task.failure.num.sleeps 导致睡眠的总时间。
mr3.task.heartbeat.timeout.check.ms30000检查 TaskAttempt 心跳超时的时间间隔(毫秒)
mr3.container.heartbeat.timeout.check.ms15000检查 ContainerWorker 心跳超时的时间间隔(毫秒)
mr3.dag.timeout.kill.check.ms15000检查 DAG 超时的时间间隔(毫秒)
mr3.container.idle.timeout.ms300000触发空闲 ContainerWorker 超时的时间(毫秒)
mr3.am.node-blacklisting.enabledfalsetrue:启用节点黑名单。 false:禁用节点黑名单。更多详情请参阅 节点黑名单
mr3.am.maxtaskfailure.percent5触发节点黑名单的 TaskAttempt 失败百分比
mr3.am.max.safe.resource.percent.blacklisted50可分配给黑名单节点的最大资源百分比
mr3.am.min.safe.resource.percent.blacklisted10可分配给黑名单节点的最小资源百分比
mr3.dag.delete.local.dirtruetrue:请求 ContainerWorker 删除 DAG 本地目录。 false:不请求(如 Spark on MR3)。
mr3.dag.recovery.enabledtruetrue:启用 DAGAppMaster 重启时 DAG 恢复。 false:禁用 DAGAppMaster 重启时 DAG 恢复。
mr3.am.max.finished.reported.dags10报告给 MR3Client 后,DAGAppMaster 中保持其最终状态的 DAG 最大数量
mr3.am.generate.dag.graph.vizfalsetrue:创建 DOT 图形文件,显示 DAGAppMaster 工作目录中 DAG 的结构。 false:不创建 DOT 图形文件。
NameDefault valueDescription
mr3.am.local.resourcescheduler.min.memory.mb256为在 DAGAppMaster 中运行的所有本地 ContainerWorker 保留的最小内存(MB)
mr3.am.local.resourcescheduler.max.memory.mb4096为在 DAGAppMaster 中运行的所有本地 ContainerWorker 保留的最大内存(MB)
mr3.am.local.resourcescheduler.max.cpu.cores16在 DAGAppMaster 中运行的所有本地 ContainerWorker 的最大核心数
mr3.am.local.resourcescheduler.native.fraction0.0为在 DAGAppMaster 中运行的所有本地 ContainerWorker 分配的本机内存比例
mr3.am.resourcescheduler.max.requests.per.taskscheduler10TaskScheduler 一次可向 Yarn ResourceScheduler 请求的最大容器数

ContainerGroup

NameDefault valueDescription
mr3.container.scheduler.schemenonenone:不回收 ContainerWorker。 fifo:使用 FIFO 调度回收 ContainerWorker。 fair:使用公平调度回收 ContainerWorker。
mr3.container.scheduler.remove.empty.kindfalsetrue:移除没有 ContainerGroup 的 ContainerKind,并且仅当其 ContainerKind 有多个 ContainerGroup 时才保留用于回收的 ContainerWorker。 false:永不移除 ContainerKind,并为所有 ContainerWorker 保留用于回收。
mr3.dag.queue.schemecommon将 DAG 映射到 TaskScheduler 中 TaskAttempt 队列的方案。可用选项:commonindividualcapacity。可为单个 ContainerGroup 设置。
mr3.dag.queue.capacity.specsdefault:0容量调度的规格列表。每个队列包含队列名称和最小容量百分比。按优先级顺序指定队列。例如 high=50,medium=30,default=20,background=0。可为单个 ContainerGroup 设置。
mr3.taskattempt.queue.schemeindexed管理 TaskScheduler 中 TaskAttempt 队列的方案。可用选项:basicsimpleoptindexedspark。可为单个 ContainerGroup 设置。 basic:TaskScheduler 不使用基于生产者完成度的优化。 simpleoptindexed:TaskScheduler 应用基于生产者完成度的优化。 spark:TaskScheduler 使用 Spark 风格的方案,其中消费者 Task 仅在所有生产者 Task 完成后才被调度。
mr3.taskattempt.queue.scheme.strictfalsetrue:仅在与位置提示匹配的 ContainerWorker 上调度 Task。 false:不必在与位置提示匹配的 ContainerWorker 上调度 Task。
mr3.vertex.high.task.priority.fraction0.05同一 Vertex 内根据输入数据大小分配较高优先级的 Task 比例
mr3.container.stop.cross.dag.reusetruetrue:停止当前 ContainerGroup 的跨 DAG 容器重用。 false:不更新当前 ContainerGroup 关于跨 DAG 容器重用。可为单个 ContainerGroup 设置。
mr3.container.reusefalsetrue:重用当前 ContainerGroup 中的 ContainerWorker。 false:每个 ContainerWorker 仅用于单个 TaskAttempt。可为单个 ContainerGroup 设置。
mr3.container.resourcescheduler.typelocalContainerWorker 的类型。 local:为当前 ContainerGroup 在 DAGAppMaster 中创建本地 ContainerWorker。 yarn:为当前 ContainerGroup 创建 Yarn ContainerWorker。 kubernetes:为当前 ContainerGroup 创建 Kubernetes ContainerWorker。 process:使用由用户执行的 ContainerWorker。可为单个 ContainerGroup 设置。
mr3.container.combine.taskattemptsfalsetrue:允许多个 TaskAttempt 在同一 ContainerWorker 中并发运行。 false:一次仅允许一个 TaskAttempt 在同一 ContainerWorker 中运行。可为单个 ContainerGroup 设置。
mr3.container.mix.taskattemptstruetrue:允许来自不同 DAG 的 TaskAttempt 在同一 ContainerWorker 中并发运行。 false:每个 ContainerWorker 专用于单个 DAG。可为单个 ContainerGroup 设置。
mr3.container.max.num.workersInt.MaxValueContainerGroup 可以创建的最大 ContainerWorker 数量。可为单个 ContainerGroup 设置。
mr3.container.log.levelINFOContainerWorker 的日志级别
mr3.use.daemon.shufflehandler0每个 ContainerWorker 中的 shuffle handler 数量。在 Kubernetes 上,值为 0 会导致为 shuffle handler 创建进程。
mr3.daemon.shuffle.service-idshuffle handler 的服务标识符
mr3.daemon.shuffle.portshuffle handler 的端口号
mr3.daemon.task.message.buffer.size16每个 DaemonTask 的消息队列大小
NameDefault valueDescription
mr3.container.launch.cmd-opts-server -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -XX:+UseNUMA -XX:+UseParallelGC启动 ContainerWorker 的命令行选项
mr3.container.launch.envLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/启动 ContainerWorker 的环境变量。每个条目采用以 "=" 分隔的 "VAR=VALUE" 或 "VAR" 形式。在后一种情况下,使用系统环境中的值。
mr3.container.kill.policycontainer.kill.wait.workervertexcontainer.kill.wait.workervertex:仅在没有更多 TaskAttempt 要到达时停止 ContainerWorker。 container.kill.nowait:如果 ContainerWorker 不再服务于任何 TaskAttempt,立即停止。

DAG

NameDefault valueDescription
mr3.am.min.cluster.resource.memory.mb102400DAGAppMaster 在初始化 Map Task 时假设的最小集群内存(MB)。可为单个 DAG 设置。
mr3.am.min.cluster.resource.cpu.cores100DAGAppMaster 在初始化 Map Task 时假设的最小集群核心数。可为单个 DAG 设置。
mr3.am.task.max.failed.attempts3每个 Task 的最大 TaskAttempt 数量。必须大于零。可为单个 DAG 设置。更多详情请参阅 容错
mr3.am.task.no.retry.errors防止 Task 重新执行的异常和错误名称列表。可为单个 DAG 设置。更多详情请参阅 容错
mr3.am.task.retry.on.fatal.errorfalsetrue:即使 TaskAttempt 因致命错误而失败,也重试。 false:如果 TaskAttempt 因致命错误而失败,不重试。可为单个 DAG 设置。更多详情请参阅 容错
mr3.am.notify.destination.vertex.completefalsetrue:通知 ContainerWorker 所有目标 Vertex 已完成,以便它可以删除源 Vertex 的中间数据目录。 false:不通知。可为单个 DAG 设置。
mr3.am.commit-all-outputs-on-dag-successtruetrue:DAG 成功完成时提交所有 Vertex 的输出。 false:Vertex 成功完成时提交输出。可为单个 DAG 设置。
mr3.am.permit.custom.user.classfalsetrue:允许自定义 VertexManager、InputInitializer、OutputCommitter 类。 false:不允许自定义类。可为单个 DAG 设置。
mr3.am.task.concurrent.run.threshold.percent100.0开始推测执行前完成 Task 的百分比。可以设置为高达 100.0 的浮点数。如果设置为 100.0,则禁用 TaskAttempt 的推测执行。可为单个 DAG 设置。更多详情请参阅 推测执行
mr3.am.task.concurrent.run.min.threshold.ms10000开始推测执行前完成 Task 的最大执行时间(毫秒)的最小值。例如,值为 10000 意味着如果所有 Task 在开始推测执行前 10 秒内完成,我们使用 10 秒作为它们的最大执行时间。可为单个 DAG 设置。
mr3.am.task.concurrent.run.multiplier2.0d开始推测执行前完成 Task 的最大执行时间的倍数。可为单个 DAG 设置。
mr3.am.task.concurrent.run.enable.root.vertexfalsetrue:推测执行对没有前置的根 Vertex 有效。 false:推测执行对根 Vertex 无效。
mr3.dag.queue.namedefault当前 DAG 所属的 Task 队列名称。与容量调度一起使用。如果给出无效名称,则使用默认值 default。可为单个 DAG 设置。
mr3.dag.vertex.schedule.by.stagefalsetrue:Vertex 仅在所有源 Vertex 完成后才创建 Task。 false:Vertex 可以在源 Vertex 运行时就创建 Task。
mr3.dag.route.event.after.source.vertexfalsetrue:Vertex 仅在所有源 Vertex 完成后才接收事件。 false:Vertex 可以在源 Vertex 运行时接收事件。
mr3.dag.include.indeterminate.vertexfalsetrue:DAG 包含不确定 Vertex,其输出每次执行可能都不同。当发生 fetch 失败时不支持容错。 false:DAG 不包含不确定 Vertex。
mr3.dag.create.daemon.vertex.alwaysfalsetrue:在每个 DAG 中创建 DaemonVertex。 false:除创建者 DAG(创建 ContainerGroup)外,不创建 DaemonVertex
mr3.dag.timeout.kill.threshold.secs0DAG 的最大执行时间(秒)。设置为 0 以禁用超时检查。可为单个 DAG 设置。

ContainerWorker

NameDefault valueDescription
mr3.container.get.command.interval.ms2000当前服务于 TaskAttempt 的 ContainerWorker 中获取命令的时间间隔(毫秒)
mr3.container.busy.wait.interval.ms100空闲 ContainerWorker 中获取命令的时间间隔(毫秒)
mr3.task.am.heartbeat.interval.ms250TaskAttempt 发送心跳的时间间隔(毫秒)
mr3.task.am.heartbeat.duration.interval.ms15000TaskAttempt 发送心跳的时间间隔(毫秒)。它还决定在推测执行中更新 TaskAttempt 持续时间的粒度。更多详情请参阅 推测执行
mr3.task.am.heartbeat.counter.interval.ms60000TaskAttempt 在心跳中发送计数器的时间间隔(毫秒)
mr3.task.max.events.per.heartbeat500心跳回复中包含的最大 task 事件数量
mr3.container.thread.keep.alive.time.ms4000ContainerWorker 中为 TaskAttempt 提供服务的线程保持时间(毫秒)
mr3.container.command.num.waits.in.reserved180保留的 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.kill6ContainerWorker 以 1 秒间隔联系 DAGAppMaster 以重新建立连接的次数。失败尝试大约需要 10 秒。
mr3.container.use.termination.checkertruetrue:在终止请求后检查 TaskAttempt 是否成功终止。如果 TaskAttempt 未能终止,则终止 ContainerWorker。 false:不检查。在生产环境中不要设置为 false。
mr3.container.terminate.on.fatal.errorfalsetrue:始终终止抛出致命错误(如 OutOfMemoryError)的 ContainerWorker。 false:不终止能够从致命错误中恢复的 ContainerWorker。
mr3.container.termination.checker.timeout.ms300000终止请求后检查 TaskAttempt 终止的时间(毫秒)。使用默认值,ContainerWorker 在终止请求后 300 秒内检查 TaskAttempt 是否已正确终止。如果 TaskAttempt 尚未终止,则关闭整个 ContainerWorker。用户不应使用太小的值(例如 30 秒的 30000),因为关闭 shuffle handler 的 HTTP 连接可能需要很长时间。
mr3.container.task.failure.num.sleeps0TaskAttempt 失败后 ContainerWorker 线程睡眠的次数(默认每次 15 秒)。在每次睡眠前后,线程尝试分配 1GB 内存块以触发垃圾回收。例如,如果设置为 2,则顺序为:分配 1GB,睡眠 15 秒,分配 1GB,睡眠 15 秒,分配 1GB。如果设置为 0,则不睡眠,也不尝试分配内存块。对于 Hive on MR3,在执行带有 limit 运算符的交互式查询时不要设置为非零值,因为当记录数达到限制时所有活动 Task 都会被杀死。
mr3.container.task.failure.sleep.period.secs15TaskAttempt 失败后睡眠的时间(秒)
mr3.container.runtime.auto.start.inputfalsetrue:在 RuntimeTask 中自动启动 LogicalInput。 false:不自动启动 LogicalInput。设置为 true 可能会对性能产生负面影响,因为 ContainerWorker 可能通过广播边多次获取相同的输入数据。
mr3.container.close.filesystem.ugitruetrue:在 ContainerWorker 中完成每个 DAG 后调用 FileSystem.closeAllForUGI()。 false:不调用(用于 Spark on MR3)。
mr3.container.use.framework.countersfalsetrue:在 ContainerWorker 中收集框架计数器(关于垃圾回收和进程统计)。 false:不收集框架计数器。使用 MR3-UI 时设置为 true。
mr3.container.localize.python.working.dir.unsafefalsetrue:将 Python 资源(*.py*.PY)本地化到 ContainerWorker 的工作目录中。 false:不将 Python 资源本地化到工作目录中。
mr3.container.use.am.credentials.for.daemontruetrue:为所有 DaemonTaskAttempt 使用 DAGAppMaster 的凭证。 false:为其所有 DaemonTaskAttempt 使用 DAG 的凭证。
NameDefault valueDescription
mr3.container.elastic.execution.memory.commit.ratio1.0分配给每个 TaskAttempt 的内存乘数。例如,值为 1.5 意味着使用 4GB 内存资源创建的 TaskAttempt 实际上在 ContainerWorker 中分配了 6GB 内存。

内存使用与自动扩缩容

NameDefault valueDescription
mr3.memory.usage.check.schemeaverageaverage:计算当前窗口的平均内存使用量。 maximum:计算当前窗口的最大内存使用量。
mr3.memory.usage.check.window.length.secs600计算内存使用的窗口长度(秒)
mr3.check.memory.usage.event.interval.secs10以下操作的时间间隔(秒):1)生成事件以计算自动扩缩容的内存使用量;2)在回收 ContainerWorker 时更新公平调度下每个 ContainerGroup 的 ContainerWorker 数量
mr3.enable.auto.scalingfalsetrue:启用自动扩缩容。 false:禁用自动扩缩容。
mr3.auto.scale.out.threshold.percent80触发扩容的最小内存使用百分比
mr3.auto.scale.in.threshold.percent50触发缩容的最大内存使用百分比
mr3.auto.scale.in.min.hosts1执行缩容时应保持的最小节点数
mr3.auto.scale.out.grace.period.secs300触发扩容后的冷却时间(秒)
mr3.auto.scale.in.delay.after.scale.out.secs60离开扩容状态后触发缩容前等待的最小时间(秒)
mr3.auto.scale.in.grace.period.secs300触发缩容后的冷却时间(秒)
mr3.auto.scale.in.wait.dag.finishedtruetrue:在缩容事件中终止容器前等待所有运行的 DAG 完成。 false:不等待,立即终止容器。
mr3.auto.scale.out.num.initial.containers0如果大于零:当没有容器运行时扩容时要添加的容器数量。如果为零或更小:不使用。
mr3.auto.scale.out.num.increment.containers0如果大于零:扩容时要添加的容器数量。如果为零或更小:使用 mr3.auto.scale.out.threshold.percent 计算要添加的容器数量。
mr3.auto.scale.in.num.decrement.hosts0如果大于零:缩容时要删除的主机数量。如果为零或更小:使用 mr3.auto.scale.in.threshold.percent 计算要删除的主机数量。

Prometheus

NameDefault valueDescription
mr3.prometheus.enable.metricsfalsetrue:DAGAppMaster 运行 Prometheus 客户端以导出指标。 false:DAGAppMaster 不运行 Prometheus 客户端。
mr3.prometheus.enable.jvm.metricsfalsetrue:从 DAGAppMaster 导出 Java VM 指标(使用 io.prometheus.client.hotspot.DefaultExports)。 false:不导出 Java VM 指标。
mr3.prometheus.httpserver.port9890Prometheus 客户端的端口号
mr3.prometheus.worker.enable.metricsfalsetrue:每个 ContainerWorker 运行 Prometheus 客户端以导出指标。 false:ContainerWorker 不运行 Prometheus 客户端。
mr3.prometheus.worker.enable.jvm.metricsfalsetrue:从 ContainerWorker 导出 Java VM 指标(使用 io.prometheus.client.hotspot.DefaultExports)。 false:不从 ContainerWorker 导出 Java VM 指标。
mr3.prometheus.worker.httpserver.port0ContainerWorker 的 Prometheus 客户端的端口号。如果多个 ContainerWorker 在同一节点上运行,使用 0。

TokenRenewer

NameDefault valueDescription
mr3.principalKerberos 主体
mr3.keytabKerberos keytab 文件的位置
mr3.token.renewal.fraction0.75token 续期间隔的分数,用于保守地续期 token
mr3.token.renewal.retry.interval.ms3600000重试 token 续期的时间间隔(毫秒)
mr3.token.renewal.num.credentials.files5用于 token 续期的最大凭证文件数量
mr3.token.renewal.hdfs.enabledfalsetrue:自动续期 HDFS token。 false:不续期 HDFS token。
mr3.token.renewal.hive.enabledfalsetrue:自动续期 Hive token。 false:不续期 Hive token。
mr3.am.token.renewal.paths指定用于 token 续期的 FileSystem 的路径。如果为空,DAGAppMaster 使用暂存目录。
mr3.token.renewal.pass.credentials.via.memorytruetrue:DAGAppMaster 通过消息直接将凭证传递给 ContainerWorker。 false:DAGAppMaster 将凭证存储在 HDFS 上。

HistoryLogger 和 MR3-UI

NameDefault valueDescription
mr3.app.history.logging.enabledfalsetrue:为 Yarn 应用程序和 ContainerWorker 启用历史记录。 false:为 Yarn 应用程序和 ContainerWorker 禁用历史记录。
mr3.dag.history.logging.enabledfalsetrue:为 DAG 启用历史记录。 false:为 DAG 禁用历史记录。
mr3.task.history.logging.enabledfalsetrue:为 Task 启用历史记录。 false:为 Task 禁用历史记录。
NameDefault valueDescription
mr3.ui.create.serverfalsetrue:为 MR3-UI 创建 HTTP 服务器。 false:不创建。
mr3.ui.timline.store.typememorymemory:为 Timeline Server 使用内存数据库。 leveldb:为 Timeline Server 使用 LevelDB。
mr3.ui.timeline-service.leveldb-timeline-store.path/tmp/存储 LevelDB 数据的目录。请参阅 LevelDbTimelineStore.java 了解其他配置键。
mr3.ui.server.port19003MR3-UI HTTP 服务器的端口
mr3.ui.server.host0.0.0.0MR3-UI HTTP 服务器的主机
mr3.ui.server.max.threads10MR3-UI HTTP 服务器中的最大线程数
mr3.ui.server.admin.usersMR3-UI 中具有管理员权限的用户的逗号分隔列表

Tez 计数器

NameDefault valueDescription
tez.counters.max1200最大 Tez 计数器数量
tez.counters.max.groups500最大 Tez 计数器组数量
tez.counters.counter-name.max-length64Tez 计数器名称的最大长度
tez.counters.group-name.max-length256Tez 计数器组名称的最大长度

Kubernetes

NameDefault valueDescription
mr3.k8s.api.server.urlhttps://kubernetes.default.svcKubernetes API 服务器的 URL
mr3.k8s.client.config.file创建 Kubernetes 客户端的配置文件(例如 ~/.kube/config
mr3.k8s.service.account.use.token.ca.cert.pathtruetrue:使用 mr3.k8s.service.account.token.pathmr3.k8s.service.account.token.ca.cert.pathfalse:不使用。
mr3.k8s.service.account.token.path/var/run/secrets/kubernetes.io/serviceaccount/tokenKubernetes 客户端 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.crtKubernetes 客户端 ServiceAccount 的证书路径。仅在 mr3.k8s.service.account.use.token.ca.cert.path 设置为 true 时使用。
NameDefault valueDescription
mr3.k8s.namespacemr3创建 Kubernetes 客户端时要使用的 Kubernetes 命名空间
mr3.k8s.am.service.hostDAGAppMaster Pod 的 Service 相关主机。仅当 MR3Client 在 Kubernetes 集群外部运行且用户手动创建 Service 时设置。如果未设置,MR3 从 MR3Client 创建的 Service 获取主机,例如 service-master-4110-0.hivemr3.svc.cluster.local
mr3.k8s.am.service.port80DAGAppMaster Pod 的 Service 相关端口
mr3.k8s.nodes.polling.interval.ms60000查询 Kubernetes Node 状态的时间间隔(毫秒)
mr3.k8s.pods.polling.interval.ms15000查询 Pod 状态的时间间隔(毫秒)
mr3.k8s.pod.creation.timeout.ms30000等待新 Pod 创建的时间(毫秒)
mr3.k8s.pod.image.pull.policyIfNotPresentPod 的镜像拉取策略
mr3.k8s.pod.image.pull.secretsPod 的镜像拉取 secret
mr3.k8s.pod.master.serviceaccountDAGAppMaster Pod 的 ServiceAccount
mr3.k8s.pod.worker.serviceaccountContainerWorker Pod 的 ServiceAccount
mr3.k8s.pod.master.imageDAGAppMaster 容器的 Docker 镜像
mr3.k8s.pod.master.userDAGAppMaster Pod 的用户
mr3.k8s.pod.master.emptydirs为 DAGAppMaster 挂载 emptyDir 卷的目录逗号分隔列表
mr3.k8s.pod.master.hostpathsDAGAppMaster 的 hostPath 卷指向的目录(每个节点上)的逗号分隔列表。例如,/data1/k8s,/data2/k8s,/data3/k8s 挂载三个 hostPath 卷,这些卷创建自 DAGAppMaster Pod 将运行的节点上的三个本地目录。
mr3.k8s.pod.master.node.selectorDAGAppMaster Pod 的节点选择器的逗号分隔列表(例如 masternode=true,hivemr3=true
mr3.k8s.pod.master.toleration.specsDAGAppMaster Pod 的容忍度规格的逗号分隔列表。每个条目的格式为 [key]:[operator]:[value]:[effect]:[toleration in seconds],其中 [value]:[toleration in seconds] 是可选的。
mr3.k8s.master.working.dirDAGAppMaster 容器的工作目录
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.labelsDAGAppMaster Pod 的附加标签的逗号分隔列表(例如 foo=bar,hivemr3_aux=prometheus
mr3.k8s.master.pod.cpu.limit.multiplier1.0DAGAppMaster Pod 的 CPU 资源限制乘数
mr3.k8s.pod.worker.imageContainerWorker 容器的 Docker 镜像
mr3.k8s.pod.worker.userContainerWorker Pod 的用户
mr3.k8s.pod.worker.emptydirs为 ContainerWorker 挂载 emptyDir 卷的目录逗号分隔列表。这些卷成为写入中间数据的本地目录。
mr3.k8s.pod.worker.hostpathsContainerWorker 的 hostPath 卷指向的目录(每个节点上)的逗号分隔列表。例如,/data1/k8s,/data2/k8s,/data3/k8s 挂载三个 hostPath 卷,这些卷创建自 ContainerWorker Pod 将运行的节点上的三个本地目录。这些卷成为写入中间数据的本地目录。
mr3.k8s.pod.worker.additional.hostpathsContainerWorker 的附加 hostPath 目录的逗号分隔列表
mr3.k8s.pod.worker.node.selectorContainerWorker Pod 的节点选择器的逗号分隔列表(例如 workernode=true,hivemr3=true
mr3.k8s.pod.worker.toleration.specsContainerWorker Pod 的容忍度规格的逗号分隔列表。每个条目的格式为 [key]:[operator]:[value]:[effect]:[toleration in seconds],其中 [value]:[toleration in seconds] 是可选的。
mr3.k8s.pod.worker.node.affinity.specsContainerWorker Pod 的节点亲和性规格的逗号分隔列表。每个条目的格式为 [key]:[operator]:[value#1]:...:[value#N](例如 key1:In:value1:value2:value3)。在内部,MR3 使用 requiredDuringSchedulingIgnoredDuringExecution
mr3.k8s.worker.working.dirContainerWorker 容器的工作目录
mr3.k8s.java.io.tmpdir/tmpContainerWorker 容器中 Java 的临时目录
mr3.k8s.worker.command/usr/bin/java启动 ContainerWorker 容器的 Java VM 的命令
mr3.k8s.worker.total.max.memory.gb1048576所有 ContainerWorker Pod 的最大内存(GB)
mr3.k8s.worker.total.max.cpu.cores1048576所有 ContainerWorker Pod 的最大核心数
mr3.k8s.pod.cpu.cores.max.multiplier1.0每个 ContainerWorker Pod 的 CPU 核心限制乘数。例如,值为 2.0 意味着 ContainerWorker Pod 的 CPU 限制是其 CPU 请求的两倍。
mr3.k8s.pod.memory.max.multiplier1.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.secretDAGAppMaster 使用的包含 Keytab 文件的 Secret 名称
mr3.k8s.worker.secretContainerWorker 使用的 Secret 名称
mr3.k8s.keytab.mount.dirSecret(包含 keytab 文件)在 DAGAppMaster 和 ContainerWorker 中的挂载路径
mr3.k8s.keytab.mount.file包含 keytab 文件的 Secret 的文件名。mr3.k8s.keytab.mount.dirmr3.k8s.keytab.mount.file 指定在 ContainerWorker Pod 内部挂载的 keytab 文件的完整路径。
mr3.k8s.mount.keytab.secretfalsetrue:将 mr3.k8s.keytab.secret 挂载到 mr3.k8s.keytab.mount.dirfalse:不挂载。在以下情况下设置为 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.secretfalsetrue:将 mr3.k8s.worker.secret 挂载到 mr3.k8s.keytab.mount.dirfalse:不挂载。在使用安全 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.secs10执行第一次就绪探针前的等待时间(秒)
mr3.k8s.readiness.probe.period.secs20执行就绪探针的时间间隔(秒)
mr3.k8s.liveness.probe.initial.delay.secs20执行第一次存活探针前的等待时间(秒)
mr3.k8s.liveness.probe.period.secs40执行存活探针的时间间隔(秒)
NameDefault valueDescription
mr3.k8s.master.persistentvolumeclaim.mountsDAGAppMaster Pod 的 PersistentVolumeClaim 及其挂载点对的逗号分隔列表
mr3.k8s.worker.persistentvolumeclaim.mountsPersistentVolumeClaim 及其挂载点对的逗号分隔列表。例如,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 可以正常工作。