在嵌套文件夹中访问HBase表时遭遇java.lang.NumberFormatException
解决Hue创建的HBase表无法通过命令行/REST访问的问题
嘿,我碰到过类似的情况,Hue创建的表有时候会因为权限、命名空间或者服务配置的问题,导致外部访问出问题。咱们一步步来排查:
1. 先确认HBase表的真实状态
别先急着用curl碰那个自定义接口,先从HBase本身入手:
- 登录到集群节点,敲
hbase shell进入命令行 - 执行
list命令,看看你在Hue里看到的表是不是真的在集群里存在——有时候Hue会给用户创建的表加前缀(比如user_你的用户名),别找错了 - 如果找到了目标表,执行
describe '你的表名',重点看OWNER和PERMISSIONS字段,先搞清楚谁是表的主人,以及当前权限设置
2. 检查HBase权限是否足够
Hue创建表时用的是Hue服务自身的用户(一般是hue),而你命令行curl用的是me用户,大概率是权限不够:
- 在HBase shell里执行
user_permission '你的表名',看看me用户有没有访问权限 - 如果没有,就给它加权限:
grant 'me', 'RWXCA'(RW是读写,X是执行,C是创建,A是管理,根据你的需求调整就行) - 要是集群开了Kerberos,别忘了先
kinit获取票据再执行curl,不然身份验证过不了
3. 排查REST接口的问题
你用的curl路径http://node001:8080/etl/internal/example/raw-ingest/version-1/file-metastore/schema看起来是自定义的ETL服务接口,不是HBase原生的REST路径:
- 先试试原生HBase REST的表schema路径:
http://node001:8080/你的表名/schema,看能不能正常返回,这能先排除HBase本身的问题 - 如果是自定义接口的问题,赶紧去看这个服务的日志!你只看到了
java.lang.Numb...的半截错误,完整堆栈能告诉你到底是数字解析错了、空指针还是权限问题,这才是关键 - 还要确认这个ETL服务运行的用户有没有访问HBase表的权限,比如服务用的是
etl用户,那这个用户得在HBase里有对应表的权限才行
4. 顺带检查HDFS路径权限(可选)
虽然HBase主要靠自身ACL控制,但如果HDFS上的表数据路径/path/to/my/hbasetable权限不对,也可能拖后腿:
- 执行
hdfs dfs -ls /path/to/my/hbasetable看看权限设置 - 确保HBase服务用户(一般是
hbase)有读写权限,要是没有就调一下:hdfs dfs -chown -R hbase:hbase /path/to/my/hbasetable
5. 验证修复效果
- 先在HBase shell里用
me用户执行scan '你的表名',能读到数据就说明权限没问题了 - 再回头试curl请求,不管是原生REST还是你的自定义接口,确认schema能正常返回就行
内容的提问来源于stack exchange,提问作者lampShadesDrifter
相关产品推荐
相关产品推荐

