您的位置:首页 > 编程语言 > Java开发

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐