【问题标题】:Writing to a local FS in cluster mode SPARK以集群模式 SPARK 写入本地 FS
【发布时间】:2020-10-22 22:02:04
【问题描述】:

对于 Spark 作业,我们正在尝试添加一个日志框架,以在本地 FS 上创建自定义日志文件。 在客户端模式下,一切都很好,文件是由启动 spark-submit 的用户在本地 FS 上创建的。 但是在集群模式下,本地文件是用没有写入本地目录权限的用户yarn创建的...

是否有任何解决方案可以在不将权限更改为 777 的情况下与提交作业的用户以集群模式写入本地文件? 在这种情况下集群模式是否更好(我们在 PROD 环境中),知道作业是从集群的一个节点启动的(因此不存在网络问题)。

谢谢。

【问题讨论】:

    标签: apache-spark permissions hadoop-yarn cluster-mode


    【解决方案1】:

    是的,这里有一种方法:使用 shell 脚本提交 spark 作业

    我们使用记录器来打印我们所有的日志。我们总是有唯一的文本和日志消息 例如:log.info("INFO_CUSTOM: 信息消息")。一旦我们的应用程序完成,我们将使用 Yarn logs 命令和 grep 来获取唯一的文本。

    1. 使用带有应用名称的 yarn 命令获取应用 ID。

    例如。 yarn application -list -appStates FINISHED,FAIED,KILLED | grep <application name>

    1. 运行 yarn logs 命令和 grep,将其重定向到您想要的文件。

    例如。 yarn logs -applicationId <application id u got fro step 1> | grep -w "INFO_CUSTOM" >> joblog.log

    【讨论】:

    • 您好,问题不是如何获取yarn日志,而是如何在集群模式下将功能日志写入本地FS。
    • @Amirharoun 您的所有功能日志都将写入运行代码的实际工作节点。所有这些日志将再次由 Yarn 聚合并存储在 HDFS 目录中。如果您运行 yarn logs 命令,它将显示所有日志。在这些日志中,您可以提取您感兴趣的内容。
    • 日志不是问题,问题是如何使用提交作业的用户将文件写入本地文件系统。因为当您在集群模式下启动它时,尝试写入文件的是用户 yarn,我们不想让 777 访问所有目录...
    • 你的问题是日志文件,所以我解释为另一种方式!
    • 你是从驱动节点写的吗?如果在集群模式下是,任何节点都将运行它,这将是你的本地 FS。想知道将文件写入任何未知节点有什么用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2019-03-03
    • 2015-08-31
    相关资源
    最近更新 更多