一、maven工程中,需要连接hbase。然后加入jar依赖的版本为hbase 1.2.5和hadoop 2.7.3,结果报错 DoNotRetryIOException
<project ...>
...
<dependencies>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.4</version>
</dependency>
...
</dependencies>
</project>
然而,运行时却报错:
org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.IllegalAccessError:
tried to access method com.google.common.base.Stopwatch.<init>()V from class
org.apache.hadoop.hbase.zookeeper.MetaTableLocator
百度和谷歌的结果都说是因为guava包冲突,从pom的依赖层次看也确实如此。
后来将hbase-client的版本改为1.3.0,错误消失!
二、JPS相关问题
1、jps的作用
jps类似linux的ps命令,不同的是ps是用来显示进程,而jps只显示java进程,准确的说是当前用户已启动的部分java进程信息(包括进程号和
简短的进程command)。
2、执行JPS没有任何输出:
java程序启动以后,会在/tmp目录下生成一个hsperfdata_username的文件夹,这个文件夹的文件,就是以java进程的pid命名。
因此使用jps查看当前进程的时候,其实就是把/tmp/hsperfdata_username中的文件名遍历一遍之后输出。
如果/tmp/hsperfdata_username的文件所有者和文件所属用户组与启动进程的用户不一致的话,在进程启动之后,就没有权限写
/tmp/hsperfdata_username,所以/tmp/hsperfdata_username是一个空文件,理所当然jps也就没有任何显示。
利用ls -l /tmp查看服务器下/hsperfdata_hostname的属性,如果文件所有者和文件所属用户组不一样,则需要使用以下命令进行修改:
chown [-R] 账号名称:组群 文件/目录
drwxrwxrwx 2 zlj zlj 4096 12月 12 17:21 hsperfdata_zlj
执行chown [-R] root:root hsperfdata_zlj ,则表明把hsperfdata_zlj文件夹下的所有文件改变所有者和所属组为root
执行chown [-R] root hsperfdata_zlj ,则表明把hsperfdata_zlj文件夹下的所有文件只改变所有者为root
网友评论