hadoop job 抛出 Exception in thread "main" java.lang.NoClassDefFoundError: ___/tmp/hsperfdata_ 异常
2014-03-17 16:03
531 查看
hadoop的job抛出以下异常:
Exception in thread "main" java.lang.NoClassDefFoundError: ___/tmp/hsperfdata_pctvlog/11835
Caused by: java.lang.ClassNotFoundException: ___.tmp.hsperfdata_pctvlog.11835
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: ___/tmp/hsperfdata_pctvlog/11835. Program will exit.
=====================================Sun Mar 16 02:10:01 CST 2014===============================================
Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file:
/tmp/hsperfdata_pctvlog/12030
Try using the -Djava.io.tmpdir= option to select an alternate temp location.
原因是/tmp目录下没有空间来建立/tmp/hsperfdata_pctvlog/12030了。
进入/tmp目录,执行du -sm * 找出较大的文件并删除。
发现/tmp目录下较大的都是以用户名命名的文件,里面是hive的log和hive每个job的log。为了避免上述问题的再次发生,考虑有两个解决办法:
1. 找出hsperfdata_$username的具体含义,不生成或改到其他目录下生成。
2. hive的log改到其他大空间的目录下去生成。
解决办法1可以参考:http://stackoverflow.com/questions/76327/how-can-i-prevent-java-from-creating-hsperfdata-files ,hsperfdata_$username文件下存放到是jvmstat生成的一些pid,存放jvm进程信息。默认的存放地址就是/tmp目录下。
而jps、jconsole、jvisualvm等工具的数据来源就是这个文件(/tmp/hsperfdata_$username/pid)。所以当该文件不存在或是无法读取时就会出现jps无法查看该进程号,jconsole无法监控等问题
/tmp/hsperfdata_userName/pid文件会在对应java进程退出后被清除。如果java进程非正常退出(如kill-9),那么pid文件会被保留,直到执行一次java命令或是加载了jvm程序的命令(如jps、javac、jstat),会将所有无用的pid文件都清除掉
解决办法2首先找到两个log的配置地址:
hive的log位置:
hive的conf目录下的hive-log4j.properties中:默认值是hive.log.dir=/tmp/${user.name} 可进行修改(要保证用户权限正确)。
个人更改为:hive.log.dir=/data/hive-log/${user.name}
hive的查询log位置:
hive的conf目录下hive-site.xml中:配置内容为hive.querylog.location,
个人更改为:
<property>
<name>hive.querylog.location</name>
<value>/data/hive-log/querylog</value>
</property>
Exception in thread "main" java.lang.NoClassDefFoundError: ___/tmp/hsperfdata_pctvlog/11835
Caused by: java.lang.ClassNotFoundException: ___.tmp.hsperfdata_pctvlog.11835
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: ___/tmp/hsperfdata_pctvlog/11835. Program will exit.
=====================================Sun Mar 16 02:10:01 CST 2014===============================================
Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file:
/tmp/hsperfdata_pctvlog/12030
Try using the -Djava.io.tmpdir= option to select an alternate temp location.
原因是/tmp目录下没有空间来建立/tmp/hsperfdata_pctvlog/12030了。
进入/tmp目录,执行du -sm * 找出较大的文件并删除。
发现/tmp目录下较大的都是以用户名命名的文件,里面是hive的log和hive每个job的log。为了避免上述问题的再次发生,考虑有两个解决办法:
1. 找出hsperfdata_$username的具体含义,不生成或改到其他目录下生成。
2. hive的log改到其他大空间的目录下去生成。
解决办法1可以参考:http://stackoverflow.com/questions/76327/how-can-i-prevent-java-from-creating-hsperfdata-files ,hsperfdata_$username文件下存放到是jvmstat生成的一些pid,存放jvm进程信息。默认的存放地址就是/tmp目录下。
而jps、jconsole、jvisualvm等工具的数据来源就是这个文件(/tmp/hsperfdata_$username/pid)。所以当该文件不存在或是无法读取时就会出现jps无法查看该进程号,jconsole无法监控等问题
/tmp/hsperfdata_userName/pid文件会在对应java进程退出后被清除。如果java进程非正常退出(如kill-9),那么pid文件会被保留,直到执行一次java命令或是加载了jvm程序的命令(如jps、javac、jstat),会将所有无用的pid文件都清除掉
解决办法2首先找到两个log的配置地址:
hive的log位置:
hive的conf目录下的hive-log4j.properties中:默认值是hive.log.dir=/tmp/${user.name} 可进行修改(要保证用户权限正确)。
个人更改为:hive.log.dir=/data/hive-log/${user.name}
hive的查询log位置:
hive的conf目录下hive-site.xml中:配置内容为hive.querylog.location,
个人更改为:
<property>
<name>hive.querylog.location</name>
<value>/data/hive-log/querylog</value>
</property>
相关文章推荐
- java 集合排序异常Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violate
- Maven运行异常:Exception in thread "main" java.lang.UnsupportedClassVersionError
- scala出现异常:Exception in thread "main" java.lang.StackOverflowError
- Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/ql/CommandNeedRetr
- 解决Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/ FSDataInputStream
- 发送邮件时遇到mail包冲突异常Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 解决方法
- hException in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://hadoop:9000/tadoop:
- Exception in thread "main" java.lang.RuntimeException: java.sql.SQLException: Io 异常: The Network Ada
- Java异常:Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion;
- Jbpm发邮件抛出Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
- 异常:Exception in thread "main" java.lang.ClassNotFoundException: Student
- Hadoop运行class类出现Exception in thread "main" java.lang.NoClassDefFoundError:*
- Hibernate的Exception in thread "main" java.lang.NoSuchMethodError的异常
- Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/jobs/Job
- hadoop解决Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/util/Apps
- HIVE Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/ql/CommandNee
- Junit测试出现异常:Exception in thread "main" java.lang.NoSuchMethodError: org.junit.runner.Description.cre
- 异常:Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
- Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Wi
- Java报错异常-----Exception in thread "main" java.lang.NullPointerException