【问题标题】:Hadoop Streaming Omitting Very Large RecordsHadoop Streaming 忽略非常大的记录
【发布时间】:2011-06-29 22:07:01
【问题描述】:

我有一个 hadoop 流程序,如果传入的行太大(超过 20M 左右),reader.readline() 会出现 OutOfMemoryException。有没有办法告诉hadoop不要传入超过一定大小的记录?太大的记录是百万分之一。我宁愿不使用跳过不良记录选项...

我也尝试使用此代码 http://code.google.com/p/owasp-esapi-java/issues/attachmentText?id=183&aid=-7134623167843514645&name=BoundedBufferedReader.java 代替 reader.readline(),但它太慢了,我认为是因为它一次只能读取一个字符。

【问题讨论】:

  • 我添加了一个似乎可以缓解问题的交换,尽管我原来的问题仍然存在。

标签: streaming hadoop out-of-memory readline bufferedreader


【解决方案1】:

这不是 Hadoop 的问题,而是您阅读该行的方式的问题。

reader.readline() 可能一次读取一个字符,因为它需要找出行尾在哪里。因此,逐个字符检查可能不会慢很多。您可以一次读取一个字符,将其推回某种列表或缓冲区。如果它变得太长,请忽略该行并继续前进。一旦你看到换行符,你就可以开始了。

【讨论】:

    猜你喜欢
    • 2011-03-17
    • 2019-10-17
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多