Spark 中打开的文件太多,中止 Spark 作业

2024-03-30

在我的应用程序中,我正在读取 40 GB 的文本文件,这些文件完全分布在 188 个文件中。 我拆分此文件并使用 rdd 对在 Spark 中每行创建 xml 文件。 对于 40 GB 的输入,它将创建数百万个小 xml 文件,这是我的要求。 一切正常,但是当 Spark 将文件保存在 S3 中时,它会抛出错误并且作业失败。

这是我得到的例外

引起原因:java.nio.file.FileSystemException: /mnt/s3/emrfs-2408623010549537848/0000000000:打开的文件太多 sun.nio.fs.UnixException.translateToIOException(UnixException.java:91) 在 sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) 在 sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) 在 sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214) 在 java.nio.file.Files.newByteChannel(Files.java:361) 处 java.nio.file.Files.createFile(Files.java:632) 在 com.amazon.ws.emr.hadoop.fs.files.TemporaryFiles.create(TemporaryFiles.java:70) 在 com.amazon.ws.emr.hadoop.fs.s3n.MultipartUploadOutputStream.openNewPart(MultipartUploadOutputStream.java:493) ... 21 更多

ApplicationMaster主机:10.97.57.1​​98 ApplicationMaster RPC端口:0 队列:默认开始时间:1542344243252 最终状态:FAILED
跟踪网址:http://ip-10-97-57-234.tr-fr-nonprod.aws-int.thomsonreuters.com:20888/proxy/application_1542343091900_0001/ http://ip-10-97-57-234.tr-fr-nonprod.aws-int.thomsonreuters.com:20888/proxy/application_1542343091900_0001/用户:线程“main”中的hadoop异常 org.apache.spark.SparkException:应用程序 application_1542343091900_0001 已完成,状态为失败

还有这个

com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: 请降低您的请求率。 (服务:Amazon S3;状态代码: 503;错误代码:减速;请求 ID:D33581CA9A799F64; S3 扩展 请求ID: /SlEplo+lCKQRVVH+zHiop0oh8q8WqwnNykK3Ga6/VM2HENl/eKizbd1rg4vZD1BZIpp8lk6zwA=), S3 扩展请求 ID: /SlEplo+lCKQRVVH+zHiop0oh8q8WqwnNykK3Ga6/VM2HENl/eKizbd1rg4vZD1BZIpp8lk6zwA=

这是我的代码来做到这一点。

object TestAudit {

  def main(args: Array[String]) {


    val inputPath = args(0)
    val output = args(1)
    val noOfHashPartitioner = args(2).toInt

    //val conf = new SparkConf().setAppName("AuditXML").setMaster("local");
    val conf = new SparkConf().setAppName("AuditXML")

    val sc = new SparkContext(conf);
    val input = sc.textFile(inputPath)


    val pairedRDD = input.map(row => {
      val split = row.split("\\|")
      val fileName = split(0)
      val fileContent = split(1)
      (fileName, fileContent)
    })

    import org.apache.hadoop.io.NullWritable
    import org.apache.spark.HashPartitioner
    import org.apache.hadoop.mapred.lib.MultipleTextOutputFormat

    class RddMultiTextOutputFormat extends MultipleTextOutputFormat[Any, Any] {
      override def generateActualKey(key: Any, value: Any): Any = NullWritable.get()
      override def generateFileNameForKeyValue(key: Any, value: Any, name: String): String = key.asInstanceOf[String]
    }

    pairedRDD.partitionBy(new HashPartitioner(10000)).saveAsHadoopFile("s3://a205381-tr-fr-development-us-east-1-trf-auditabilty//AUDITOUTPUT", classOf[String], classOf[String], classOf[RddMultiTextOutputFormat], classOf[GzipCodec])

  }

}

即使我尝试减少 HashPartitioner 的数量,它也不起作用


Unix 系统上的每个进程都有打开文件或文件描述符数量的限制。由于您的数据很大并且分区为子文件(在 Spark 内部),因此您的过程会遇到限制和错误。 您可以增加文件描述符的数量对于每个用户如下:

编辑文件:/etc/security/limits.conf并添加(或修改)

*         hard    nofile      500000
*         soft    nofile      500000
root      hard    nofile      500000
root      soft    nofile      500000

这将设置nofile(文件描述符的数量)功能500000对于每个用户以及 root 用户。

重新启动后,更改将被应用。

此外,有人可以通过设置特殊进程的文件描述符的数量限制NOFILE。例如,如果您使用yarn来运行Spark作业,并且Yarn守护程序将使用以下命令启动systemd,您可以在 Yarn systemd 脚本(资源管理器和节点管理器)中添加 LimitNOFILE=128000 将 Yarn 进程文件描述符数设置为128000.

相关文章:

  • 更改 Linux 中打开文件数量限制的 3 种方法 https://linoxide.com/linux-how-to/03-methods-change-number-open-file-limit-linux/
  • 文件描述符数量限制 https://unix.stackexchange.com/questions/84227/limits-on-the-number-of-file-descriptors
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 中打开的文件太多,中止 Spark 作业 的相关文章

随机推荐

  • 如何在VB6中模拟.net Int64?

    如何在 VB6 中存储 Int64 数字以与 Win32 函数一起使用 有没有办法在 net中定义像Int64这样的类型 并简单评估一下数字 我认为许多 VB6 程序员都需要这样的东西 因为一些 Win32 API 使用 int64 作为参
  • 如何淡出图像的侧面?

    当您扩大浏览器时 您会注意到图像的右侧和左侧以黑色淡出 我需要将相同的功能应用到我的画廊 但不知道 我找到了这个 gt gt link https stackoverflow com questions 9437400 css fade o
  • 不带 href="#" 的脚本链接

    我的网络应用程序使用了很多 a href Perform client script action a 用于脚本编写的锚链接 这是我十多年前作为 Dreamweaver 用户时养成的习惯 现在我开始质疑这是否有必要 我其实不知道为什么 a
  • 我应该在 SSL 证书请求的通用名称中包含“www”吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我即将为一个小型网站购买 SSL 证书 输入 www domain Name com 或 domainName com 作为常用名是最佳做法吗 确保您
  • `ggplot2` axis.text margin 修改了刻度位置

    我不确定我是否遇到了错误或者操作不正确 指定时axis textggplot 中的边距 并移动轴的位置 设置不会保留 在不移动轴文本的情况下 轴周围有足够的空间 library ggplot ggplot mtcars aes mpg wt
  • Google 主页网址 https://www.google.co.in/?gws_rd=cr&ei=xgH... 中的“ei”是什么意思?

    我知道谷歌网址中的一些参数 例如 gws 谷歌网络服务器 rd 重定向 cr 所指国家 但我注意到一个我无法识别的 ei 什么是ei这个网址是什么意思 http www google co in url ei qWwlUqD4MIrRrQf
  • 异步方法的并发执行

    使用 async await 模型 我有一个方法可以对 Web 服务进行 3 次不同的调用 然后返回结果的并集 var result1 await myService GetData source1 var result2 await my
  • 通过 RFC 5987 处理带空格的 filename* 参数会导致文件名中出现“+”

    我正在处理一些遗留代码 所以不 我不能只使用带有编码文件名组件的 URL 允许用户从我们的网站下载文件 由于我们的文件名通常采用多种不同的语言 因此它们都存储为 UTF 8 我编写了一些代码来处理 RFC5987 转换为正确的 filena
  • 让 JSF 从 EL 访问 Map 值而不是 bean 字段?

    是否有任何正确的方法来覆盖 JSF 从表达式语言访问 beans 字段的方式 这个想法是模仿这种行为以便访问Map
  • 在 Windows 7 中删除超过 10 天的文件夹的批处理文件

    我想创建一个批处理文件 该文件应使用 Windows 7 删除文件夹中超过 10 天的所有子文件夹 任何帮助 将不胜感激 改编自这是对一个非常相似问题的回答 https stackoverflow com questions 3419091
  • 从整数列表中获取随机数

    如果我有一个整数列表 List
  • 计算出的字体大小大于 Asus Nexus 7 上 CSS 中定义的字体大小

    我在 Asus Nexus 7 用 jQuery Mobile 编写 上运行该网页 我在 CSS 中将字体大小设置为 14px 但在调试过程中 在 PC 上使用 Chrome 我可以看到它的计算大小是 22px HTML 代码如下所示 di
  • Kubernetes 和 AWS:设置 LoadBalancer 以使用预定义的安全组

    正如标题所示 我正在寻找一种方法来强制 LoadBalancer 服务使用 AWS 中预定义的安全组 我不想手动编辑 Kubernetes 为 ELB 创建的安全组的入站 出站规则 我无法在文档中找到任何内容 也没有找到任何可以在网上其他地
  • 使用 jinja 的 Ansible set_fact 列表

    我正在尝试学习 jinja 和 Ansible 这是在 RHEL 7 9 上 ansible 2 9 27 ansible python module location usr lib python2 7 site packages ans
  • 同步睡眠进入 asyncio 协程

    我有一个协程如下 async def download downloader DataManager downloader download DataManager download 方法如下 def download self start
  • 使用 Mojo::IOLoop 将命令输出到套接字而不进行缓冲

    如何在Mojo服务器上以实时模式连续输出命令 对我来说是长ping 我正在寻找 Mojo IOLoop 的一些示例 例如 客户端连接到服务器并请求 ping X X X X 服务器返回非缓冲输出 而服务器上的 ping 返回每一行输出 客户
  • 如何从 TVML 文本字段获取值?

    我正在尝试弄清楚如何使用 TVJS 从 TVML 中的文本字段获取值 但我还没有找到任何相关文档 而且我不想等待文档更新 实际上没有任何绑定到输入的模式 因为我确信除了登录服务之外这是很少使用的情况 我想我可以解析 Xml 但这看起来非常老
  • 警报对话框背景颜色

    我正在使用具有自定义布局的 AlertDialog 布局中TextView的颜色为黑色 因此在Android 4 0上使用Holo Light打开对话框时 文本是可见的 但是 如果您在 Android 2 2 中打开该对话框 由于灰色背景
  • 如何在Unity中正确导入fbx?

    我已经建模了一个对象并导出为 fbx 在 Unity 中导入资源后 会出现一些伪影 这些文物似乎与 Unity 导入有关 而不是 fbx 文件 因为在 Windo3d 3d viever 中查看的模型似乎没有问题 万分感谢 Blender
  • Spark 中打开的文件太多,中止 Spark 作业

    在我的应用程序中 我正在读取 40 GB 的文本文件 这些文件完全分布在 188 个文件中 我拆分此文件并使用 rdd 对在 Spark 中每行创建 xml 文件 对于 40 GB 的输入 它将创建数百万个小 xml 文件 这是我的要求 一