赞
踩
hbase常见问题及解决方案总结(一)
使用hbase已经有一段时间,无论是在linux还是使用java api,大多数的问题…都没有进行整理,为了加强记忆,现在列举出曾一些我曾经踩过的坑,希望能对读者有些帮助
org.apache.hadoop.hbase.security.AccessDeniedException: org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient permissions for user ‘mingtong’ (action=create)
at org.apache.ranger.authorization.hbase.AuthorizationSession.publishResults(AuthorizationSession.java:261)
at org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.authorizeAccess(RangerAuthorizationCoprocessor.java:595)
at org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.requirePermission(RangerAuthorizationCoprocessor.java:664)
at org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preCreateTable(RangerAuthorizationCoprocessor.java:769)
at org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preCreateTable(RangerAuthorizationCoprocessor.java:496)
at org.apache.hadoop.hbase.master.MasterCoprocessorHost$11.call(MasterCoprocessorHost.java:222)
at org.apache.hadoop.hbase.master.MasterCoprocessorHost.execOperation(MasterCoprocessorHost.java:1146)
at org.apache.hadoop.hbase.master.MasterCoprocessorHost.preCreateTable(MasterCoprocessorHost.java:218)
at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:1603)
at org.apache.hadoop.hbase.master.MasterRpcServices.createTable(MasterRpcServices.java:462)
at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:57204)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2127)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:107)
at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:133)
at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:108)
at java.lang.Thread.run(Thread.java:748)
at sun.reflect.GeneratedConstructorAccessor15.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
可能导致该问题的原因:
linux最常见的权限问题:
当前使用的账户没有建表权限
解决方法: 用权限更高的账户对该用户进行赋权
另一个可能就是namespace命名空间的限制:也就是说只有按照ns的格式来创建表格,例如: create ‘nc_table:table’,‘info’
注意: nc_table是一个已经存在的nc
第一个解决思路:去zookeeper conf/zoo.cfg配置文件查看
这里有两个目录:一个是数据目录dataDir,一个是日志目录dataLogDir,
使用cd命令,能不能进入这两个目录下面,如果可以进去,就证明无误
如果提示: 没有那个文件或目录,就使用mkdir命令创建这两个文件夹即可
vim /etc/hosts 查看主机名配置是否正确
如果使用和配置有误,进行修改
使用上述办法不能解决:
关闭防火墙
centOS6使用chkconfig iftables off 永久关闭防火墙
service iptables stop 临时关闭防火墙
centOS7 默认的使用firewall作为防火墙
1、关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
防火墙已经关闭,问题还没有解决,有可能是账户的问题,不妨切换账户试一下
端口号的问题: zookeeper默认的端口号是2181,但不是所有的都是使用这个端口号!比如我们的!
去 hbase-site.xml里面查看:
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>4180</value>
<description>Property from ZooKeeper's config zoo.cfg.
The port at which the clients will connect.
</description>
</property>
改变代码里面设置的端口号,问题得到解决!!
一个最坑的可能原因就是集群节点的时间不同步,hbase,和zookeeper对时间的要求很高!!好像是误差要在180s
最好的方式就是对整个集群配置时钟同步,或者是使用date命令为每个节点修改时间
以上方案都尝试过,问题仍然不能解决,就重启hbase,和zookeeper试试吧
zookeeper如果上次没有被正常关闭的话,很容易影响到下一次的使用
Error: java.lang.ClassNotFoundException:
org.apache.hadoop.hbase.client.ConnectionFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at mastercom.cn.bigdata.util.hbase.HbaseDBHelper.getConnection(HbaseDBHelper.java:50)
at mapr.mro.loc.MroLableFileReducers$MroDataFileReducers.setup(MroLableFileReducers.java:43)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:168)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:627)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
解决方法:
4.jdk版本冲突的问题
我的eclipse使用的是jdk1.8, 集群上的jdk配置的是1.7,jar包丢到集群上报错:
java.lang.UnsupportedClassVersionError: PR/Sort : Unsupported major.minor version 52.0
解决方法: 很简单,使用集群里对应的jdk版本编译就好了
右键项目–>BuildPath -->Configure Build Path --> Java Compiler —>将版本调整成为集群里面对应的版本即可–>apply
重新打jar包,放到集群上跑,问题得到解决
5.运行hbase shell 输入 list,等基本语句报错
ERROR: Can't get master address from ZooKeeper; znode data == null
Here is some help for this command:
List all tables in hbase. Optional regular expression parameter could
be used to filter the output. Examples:
hbase> list
hbase> list 'abc.*'
hbase> list 'ns:abc.*'
hbase> list 'ns:.*'
可能原因:
Exception in thread “main” java.lang.IllegalArgumentException:
Compression codec com.hadoop.compression.lzo.LzoCodec not found. at
org.apache.hadoop.io.compress.CompressionCodecFactory.getCodecClasses(CompressionCodecFactory.java:135)
at
org.apache.hadoop.io.compress.CompressionCodecFactory.(CompressionCodecFactory.java:175)
at
org.apache.hadoop.mapreduce.lib.input.TextInputFormat.isSplitable(TextInputFormat.java:58)
at
org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:397)
at
org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:597)
at
org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:614)
at
org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:492)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1296) at
org.apache.hadoop.mapreduce.Job$10.run(Job.java:1293) at
java.security.AccessController.doPrivileged(Native Method) at
javax.security.auth.Subject.doAs(Subject.java:415) at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1293) at
org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1314) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606) at
org.apache.hadoop.util.RunJar.run(RunJar.java:221) at
org.apache.hadoop.util.RunJar.main(RunJar.java:136) Caused by:
java.lang.ClassNotFoundException: Class
com.hadoop.compression.lzo.LzoCodec not found at
org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1980)
at
org.apache.hadoop.io.compress.CompressionCodecFactory.getCodecClasses(CompressionCodecFactory.java:128)
… 20 more
解决的方案:由于是自己搞着玩的集群,就直接简单粗暴的将core-site.xml和mapred-site.xml中所有涉及到LZO压缩的地方暴力删除,重启集群,正式集群不要尝试
windows下开发HBase应用程序,HBase部署在linux环境中,在运行调试时可能会出现无法找到主机,类似异常信息如下:
java.net.UnknownHostException: unknown host: gp-node02
解决办法如下:
在C:\WINDOWS\system32\drivers\etc\hosts文件中添加如下信息:
在linux 的 /etc/hosts也要添加该行信息
192.168.137.139 gp-node02
java.lang.OutOfMemoryError
从错误本身可以发现是堆错误,很明显是设置的值太小而导致这样错误。
在hadoop开始配置的时候,在hadoop/etc/hadoop/目录下的hadoop-env.sh文件中
export HADOOP_HEAPSIZE=
是被注释掉的,查看上面的注释,这个值默认为1000,单位为Mb
这里去掉注释,修改为4000,需要注意的是这里要根据内存大小来选择值
export HADOOP_HEAPSIZE=4000
org.apache.hadoop.hbase.TableNotFoundException: ns_wangyou.simu_out_GuangXi
at org.apache.hadoop.hbase.client.HBaseAdmin.getTableDescriptor(HBaseAdmin.java:572)
at org.apache.hadoop.hbase.client.HTable.getTableDescriptor(HTable.java:574)
at org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:372)
at mastercom.cn.hbase.helper.AddPaths.addConfigJob(AddPaths.java:212)
at mastercom.cn.hbase.config.HbaseBulkloadConfigMain.CreateJob(HbaseBulkloadConfigMain.java:101)
at mastercom.cn.hbase.config.HbaseBulkloadConfigMain.main(HbaseBulkloadConfigMain.java:109)
这个问题最简单,很明显是查询的hbase数据库里面没有相应的表名导致的
检查输入的表名是否正确, 如果正确的话,去创建相应的表即可
今天先介绍到这里,后面继续介绍我在hbase使用过程中爬过的坑~
————————————————
版权声明:本文为CSDN博主「new个对象先」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40861707/article/details/79979491
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。