本文共 2940 字,大约阅读时间需要 9 分钟。
在客户端机器上安装了hbase客户端,正常的情况下,各用户都应该可以执行hbase shell命令,但是今天发现,在执行hbase shell的时候报错:(贴一些主要的错误信息,省略一些不必要的信息提示)
java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Permission denied
at com.kenai.jffi.Foreign$InValidInstanceHolder.getForeign(Foreign.java:90) at com.kenai.jffi.Foreign.getInstance(Foreign.java:95) at com.kenai.jffi.Library.openLibrary(Library.java:151) at com.kenai.jffi.Library.getCachedInstance(Library.java:125) ........ ........ at org.jruby.RubyClass$i$newInstance.call(RubyClass$i$newInstance.gen:65535) at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrNBlock.call(JavaMethod.java:249) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:292) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:135) at usr.hdp.$2_dot_5_dot_0_dot_0_minus_1245.hbase.bin.hirb.__file__(/usr/hdp/2.5.0.0-1245/hbase/bin/hirb at usr.hdp.$2_dot_5_dot_0_dot_0_minus_1245.hbase.bin.hirb.load(/usr/hdp/2.5.0.0-1245/hbase/bin/hirb.rb) at org.jruby.Ruby.runScript(Ruby.java:697) at org.jruby.Ruby.runScript(Ruby.java:690) ......at org.jruby.Main.main(Main.java:188)
Caused by: java.lang.UnsatisfiedLinkError: Permission denied at com.kenai.jffi.Init.loadFromJar(Init.java:151) at com.kenai.jffi.Init.load(Init.java:78) at com.kenai.jffi.Foreign$InstanceHolder.getInstanceHolder(Foreign.java:49) at com.kenai.jffi.Foreign$InstanceHolder.<clinit>(Foreign.java:45) at com.kenai.jffi.Foreign.getInstance(Foreign.java:95) at com.kenai.jffi.Internals.getErrnoSaveFunction(Internals.java:44) at com.kenai.jaffl.provider.jffi.StubCompiler.getErrnoSaveFunction(StubCompiler.java:68) at com.kenai.jaffl.provider.jffi.StubCompiler.<clinit>(StubCompiler.java:18) at com.kenai.jaffl.provider.jffi.AsmLibraryLoader.generateInterfaceImpl(AsmLibraryLoader.java:146) ... 50 moreForeign.java:90:in `getForeign': java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Permission denied from Foreign.java:95:in `getInstance' from Library.java:151:in `openLibrary' from Library.java:125:in `getCachedInstance' ........ from Main.java:188:in `main'Caused by:Init.java:151:in `loadFromJar': java.lang.UnsatisfiedLinkError: Permission denied from Init.java:78:in `load' from Foreign.java:49:in `getInstanceHolder' ......... from Ruby.java:597:in `runNormally' from Ruby.java:446:in `runFromMain' from Main.java:369:in `doRunFromMain' from Main.java:258:in `internalRun' from Main.java:224:in `run' from Main.java:208:in `run' from Main.java:188:in `main'从关键词Permission denied可以看的出这是权限问题,经核查发现这是由于hbase的hbase_
我们的集群管理工具是Ambari,ambari里可以知道HDFS,HIVE,HBASE..等等的配置,查看hbase的配置,其中hbase_
从客户端机器查看该文件夹的权限如图:
可以看到起权限为740,很明细其他的非root组下的用户没有权限使用/hadoop/hbasejava_io_tmpdir 目录,
解决方式: chmod 755 /hadoop即可,
不需要执行到hbasejava_io_tmpdir这级别,即不需要chmod -R 755 /hadoop/hbasejava_io_tmpdir. 因为hbase shell执行过程中会自动生成:hbasejava_io_tmpdir目录,且其权限值为 777,如图: