hadoop - java.lang.OutOfMemoryError : unable to create new native thread for big data set 错误

标签 hadoop hive

我运行的 hive 查询对于小型数据集运行良好。但我正在运行 2.5 亿条记录,我在日志中遇到的错误低于此

 FATAL org.apache.hadoop.mapred.Child: Error running child : java.lang.OutOfMemoryError:   unable to create new native thread
    at java.lang.Thread.start0(Native Method)
    at java.lang.Thread.start(Thread.java:640)
    at org.apache.hadoop.mapred.Task$TaskReporter.startCommunicationThread(Task.java:725)
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:362)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1136)
    at org.apache.hadoop.mapred.Child.main(Child.java:249)



 2013-03-18 14:12:58,907 WARN org.apache.hadoop.mapred.Child: Error running child
 java.io.IOException: Cannot run program "ln": java.io.IOException: error=11, Resource temporarily unavailable
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
    at java.lang.Runtime.exec(Runtime.java:593)
    at java.lang.Runtime.exec(Runtime.java:431)
    at java.lang.Runtime.exec(Runtime.java:369)
    at org.apache.hadoop.fs.FileUtil.symLink(FileUtil.java:567)
    at org.apache.hadoop.mapred.TaskRunner.symlink(TaskRunner.java:787)
    at org.apache.hadoop.mapred.TaskRunner.setupWorkDir(TaskRunner.java:752)
    at org.apache.hadoop.mapred.Child.main(Child.java:225)
 Caused by: java.io.IOException: java.io.IOException: error=11, Resource temporarily unavailable
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
    at java.lang.ProcessImpl.start(ProcessImpl.java:65)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
    ... 7 more
2013-03-18 14:12:58,911 INFO org.apache.hadoop.mapred.Task: Runnning cleanup for the task
2013-03-18 14:12:58,911 INFO org.apache.hadoop.mapred.Child: Error cleaning up
  java.lang.NullPointerException
    at org.apache.hadoop.mapred.Task.taskCleanup(Task.java:1048)
    at org.apache.hadoop.mapred.Child.main(Child.java:281)

需要这方面的帮助。

最佳答案

我在使用 MapReduce 时大体上遇到过这种情况。根据我的经验,这实际上并不是内存不足错误 - 系统正在用尽文件描述符来启动线程,这就是它显示“无法创建新的 native 线程”的原因。

我们(在 Linux 上)的修复是通过以下方式将设置为 1024 的 ulimit 增加到 2048:ulimit -n 2048。您将需要具有执行此操作的权限 - sudo 或 root 访问权限或具有 2048 或更高的硬限制,以便您可以在系统上将其设置为您自己的用户。您可以在 .profile.bashrc 设置文件中执行此操作。

您可以使用 ulimit -a 检查您当前的设置。有关详细信息,请参阅此引用资料:https://stackoverflow.com/a/34645/871012

我还看到许多其他人谈论更改 /etc/security/limits.conf 文件,但我还没有这样做。这是一个谈论它的链接:https://stackoverflow.com/a/8285278/871012

关于hadoop - java.lang.OutOfMemoryError : unable to create new native thread for big data set 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15494749/

相关文章:

hadoop - 在hadoop/hive中执行脚本

hadoop - Phoenix csv大容量数据加载失败

hadoop - 查询适用于Hive 1.x,但不适用于beeline

python - 为什么我在 pyspark 中收集它们时我的 `binaryFiles` 是空的?

hadoop - 如何按点和相应的多边形连接 2 个配置单元表?

c# - JVM方法执行失败: Nonstatic method load failed for class 14 when called with no parameters

hadoop - 通过 HUE 创建的 Oozie 工作流的 Rest API

java - Hadoop MapReduce 新手,在 mapred.Reducer.<init>() 上获取 NoSuchMethodException

c# - 如何在查询中将 .net DateTime.Ticks 转换为 Hive DateTime?

apache-spark - Spark SQL : Error in session initiation NoClassDefFoundError: org/apache/tez/dag/api/SessionNotRunning