我的应用程序 运行 高效吗?
Is my application running efficiently?
这个问题是通用的,可以扩展到 Spark 和机器学习算法之外的其他框架或上下文。
不管细节如何,从高层次的角度来看,该代码应用于带标签的文本文档的大型数据集。它通过 9 次交叉验证迭代来调整逻辑回归 multi-class classifier.
的一些参数
预计这种机器学习处理在时间和资源方面会很昂贵。
我 运行 现在代码和一切似乎都正常,除了 我不知道我的应用程序 运行 是否有效 .
我找不到说明对于特定类型和数量的数据以及特定类型的处理和计算资源,处理时间的大致顺序应为...
有什么方法可以帮助判断我的应用程序是 运行 慢还是快,还是纯粹是经验问题?
我有同样的问题,但我没有找到真正的 answer/tool/way 来测试我的表现有多好,只是看起来 "only inside" 我的申请。
我的意思是,据我所知,没有像速度测试或类似互联网连接的工具:-)
我找到的唯一方法是 re-write 我的应用程序(如果可能)与另一个堆栈,以查看差异(在时间方面)是否有那么大。
否则,我发现了 2 个非常有趣的主要资源,即使它们很旧:
1) 编码时要记住的 4 点指南:
Understanding the Performance of Spark Applications, SPark Summit 2013
2) Cloudera 博客中的一篇 2 集文章,以优化您的工作:
episode1
episode2
希望能帮到你
FF
你的问题很笼统,所以我还要强调几个你可以寻找性能优化的一般区域:-
- 调度延迟 - 在调度任务时是否存在明显的调度延迟?如果是,那么您可以分析原因(可能是您的集群需要更多资源等)。
- 集群利用率 - 您的作业是否利用了可用的集群资源(如 CPU、mem)?如果没有,请再次查看原因。 可能 创建更多分区有助于加快执行速度。序列化可能会花费大量时间,所以您可以切换到 Kyro Serialization.
- JVM 调优 - 考虑分析 GC 日志并在发现异常时进行调优。
- 执行器配置 - 分析提供给执行器的内存/内核。它应该足以容纳 task/job 处理的数据。
你的 DAG 和
- Driver Configuration - 与 executors 一样,Driver 也应该有足够的内存来保存某些函数的结果,如
collect()
.
- Shuffling - 查看在 Shuffling 上花费了多少时间以及您的任务使用的数据局部性类型。
初步调查需要以上所有内容,在某些情况下,它还可以在一定程度上提高您的工作绩效,但可能存在复杂的问题,解决方案将视具体情况而定。
这个问题是通用的,可以扩展到 Spark 和机器学习算法之外的其他框架或上下文。
不管细节如何,从高层次的角度来看,该代码应用于带标签的文本文档的大型数据集。它通过 9 次交叉验证迭代来调整逻辑回归 multi-class classifier.
的一些参数预计这种机器学习处理在时间和资源方面会很昂贵。
我 运行 现在代码和一切似乎都正常,除了 我不知道我的应用程序 运行 是否有效 .
我找不到说明对于特定类型和数量的数据以及特定类型的处理和计算资源,处理时间的大致顺序应为...
有什么方法可以帮助判断我的应用程序是 运行 慢还是快,还是纯粹是经验问题?
我有同样的问题,但我没有找到真正的 answer/tool/way 来测试我的表现有多好,只是看起来 "only inside" 我的申请。
我的意思是,据我所知,没有像速度测试或类似互联网连接的工具:-)
我找到的唯一方法是 re-write 我的应用程序(如果可能)与另一个堆栈,以查看差异(在时间方面)是否有那么大。
否则,我发现了 2 个非常有趣的主要资源,即使它们很旧:
1) 编码时要记住的 4 点指南:
Understanding the Performance of Spark Applications, SPark Summit 2013
2) Cloudera 博客中的一篇 2 集文章,以优化您的工作: episode1 episode2
希望能帮到你
FF
你的问题很笼统,所以我还要强调几个你可以寻找性能优化的一般区域:-
- 调度延迟 - 在调度任务时是否存在明显的调度延迟?如果是,那么您可以分析原因(可能是您的集群需要更多资源等)。
- 集群利用率 - 您的作业是否利用了可用的集群资源(如 CPU、mem)?如果没有,请再次查看原因。 可能 创建更多分区有助于加快执行速度。序列化可能会花费大量时间,所以您可以切换到 Kyro Serialization.
- JVM 调优 - 考虑分析 GC 日志并在发现异常时进行调优。
- 执行器配置 - 分析提供给执行器的内存/内核。它应该足以容纳 task/job 处理的数据。 你的 DAG 和
- Driver Configuration - 与 executors 一样,Driver 也应该有足够的内存来保存某些函数的结果,如
collect()
. - Shuffling - 查看在 Shuffling 上花费了多少时间以及您的任务使用的数据局部性类型。
初步调查需要以上所有内容,在某些情况下,它还可以在一定程度上提高您的工作绩效,但可能存在复杂的问题,解决方案将视具体情况而定。