现在需要把 mysql 里面的数据进行一些脱敏处理,然后往 hive 里面插,我用的 hiveserver2 作为服务器端,然后用客户端通过 thrift 去连接 hiveserver2 来插数据的。
由于一次 mapreduce 耗时很长,所以我尽可能一次插很多的数据进去,也就是用的 INSERT INTO table VALUES...这个语法。现在问题来了就是如果插得数据大于 10M 的话就会出错,客户端提示的错误就是:
Hive ERROR_STATE Error Message: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
去找出 yarn 的 log 就是这样:
2017-07-18 11:35:54,832 WARN org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Exit code from container container_1499276494511_0407_01_000005 is : 255 2017-07-18 11:35:54,832 WARN org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Exception from container-launch with container ID: container_1499276494511_0407_01_000005 and exit code: 255 ExitCodeException exitCode=255: at org.apache.hadoop.util.Shell.runCommand(Shell.java:538) at org.apache.hadoop.util.Shell.run(Shell.java:455) at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:715) at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:212) at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302) at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
可以看到 2 个提示都不是有价值的信息,目前已经排除了 jvm 的 stack 或者 heap 不足了,因为之前遇到过 heap 不足抛出 OutOfMemory 异常,增加-Xmx 后问题就解决了。
我搜遍了互联网都找不到答案,求 hvie 大神帮忙看看
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.