scala - 如何为 hadoopRDD 中的每条记录分离计算和网络 I/O
问题描述
我在我的 1 节点 spark 集群上运行 spark grep 应用程序。(本身就是主从)。我在 hdfs 服务器的远程源上有一个 913MB 的文本文件。文本文件分为 128MB 的块,复制设置为无。我的 spark 应用程序读取文本文件并应用过滤器转换,以搜索关键字,然后在输出到 hdfs 中,仅输出具有该关键字的行。为了深入了解 spark 的工作原理,我在 spark 源代码中记录了更多详细信息并构建它以运行修改后的版本。我在 hadoopRDD.scala 中的 getNext(K,V) 中使用 reader.getpos() 记录了字节读取信息,最多 10 条记录。我还在过滤操作中记录了一些消息,以获取计算实际开始的时间。由于 spark 使用延迟加载,因此登录过滤器会在读取任何数据字节之前显示。
while(iter.hasNext){
logInfo(s"value of the iterator: ${iter.next}")
}
上面的代码在文本文件中记录下一行,每次读取一条记录(这里的记录将是文本文件中的一行,作为默认的 hadoop 读取记录器操作)。但之后不执行任何过滤,我得到一个空输出。如果我只是在过滤操作后打印日志,结果只有在读取所有记录并关闭 hadoop 阅读器后才会显示。
我试图至少在第一组字节中分离计算和网络 I/O 以显示性能瓶颈,但我不确定 spark 是否真的在每条记录上执行计算,或者一旦为任务读取了所有记录?以及如何单独计算?
解决方案
推荐阅读
- asp.net-core - Swagger 对具有参数的控制器操作不显示任何参数
- java - 如何找到有效子集和最佳有效子集?
- firebase - 如何在不指定的情况下在 Firebase 上获取子集合?
- python - “不正确的字符串值:'\\xD8\\xB9\\xD8\\xB1\\xD8\\xA8...' 用于第 1 行的列 'soup'”。可以过滤 4 字节 utf-8 字符吗?
- python - 无需打开新的 matplotlib 窗口即可获取支持的文件格式列表
- linux - 共享组文件夹权限问题
- r - 如何在 R 中创建“动态”列?
- ffmpeg - ffmpeg - 在为 HLS 直播流生成 .ts 段时如何“设置”连续性计数器?
- python - Python 3.7.3 IDLE 找不到 kivy 模块
- xamarin.android - Xamarin:Java.IO.IOException 消息=不允许到 myapi.azurewebsites.net 的明文 HTTP 流量