Hbase RegionServer启动报错:org.apache.hadoop.hdfs.protocol.HdfsFileStatus, but class was expected

Posted 地表最强菜鸡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hbase RegionServer启动报错:org.apache.hadoop.hdfs.protocol.HdfsFileStatus, but class was expected相关的知识,希望对你有一定的参考价值。

        最近通过CDH部署Hbase报错:org.apache.hadoop.hdfs.protocol.HdfsFileStatus, but class was expected,造成这个问题的原因是没有设置 hbase wal 的保存方式(或者集群时钟不同步):

WAL(Write-Ahead Logging)是一种高效的日志算法,几乎是所有非内存数据库提升写性能的不二法门,基本原理是在数据写入之前首先顺序写入日志,然后再写入缓存,等到缓存写满之后统一落盘。

之所以能够提升写性能,是因为WAL将一次随机写转化为了一次顺序写加一次内存写。提升写性能的同时,WAL可以保证数据的可靠性,即在任何情况下数据不丢失。假如一次写入完成之后发生了宕机,即使所有缓存中的数据丢失,

也可以通过恢复日志还原出丢失的数据。

每个Region Server维护一个HLog,而不是每个Region一个。这样不同region(来自不同table)的日志会混在一起,这样做的目的是不断追加单个文件相对于同时写多个文件而言,可以减少磁盘寻址次数,因此可以提高对table的写性能。

带来的麻烦是,如果一台region server下线,为了恢复其上的Region,需要将RegionServer上的log进行拆分,然后分发到其他RegionServer上进行恢复。

 1、集群时钟不同步问题解决

        ntp服务器

#安装
yum -y install ntp
#使⽤crontab 每半个⼩时同步⼀次内⽹的⼀台机器
#time
30 * * * * /usr/sbin/ntpdate bigdata001; /sbin/hwclock -w
#开启ntp服务
systemctl start ntpd.service
systemctl enable ntpd.service

        关闭selinux

vim /etc/selinux/config —> SELINUX=disabled (修改)

        关闭改Linux swapping参数

#查看
cat /proc/sys/vm/swappiness #30
#修改当前
echo 0 > /proc/sys/vm/swappiness
#添加到配置⽂件
echo "vm.swappiness=0" >> /etc/sysctl.conf

        禁⽌透明⻚

echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
#添加到配置⽂件
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >>
/etc/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >>
/etc/rc.local
#避免重启后不⽣效 添加执⾏权限
chmod +x /etc/rc.d/rc.local

        内⽹机器dns解析

        第三⽅依赖

yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrussasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb httpd mod_ssl
yum install bind-utils psmisc cyrus-sasl-plain libaio cyrus-sasl-gssapi fuse
portmap fuse-libs /lib/lsb/init-functions httpd mod_ssl openssl-devel pythonpsycopg2 mysql-python libxslt

 2、Hbase WAL配置问题解决        

        打开CDH,找到Hbase的配置文件增加WAL配置,图示如下:

        也可以去服务器找到 hbase-site.xml 配置文件添加:

<property>
  <name>hbase.wal.provider</name>
  <value>filesystem</value>
</property>

        到此 Hbase RegionServer启动报错:org.apache.hadoop.hdfs.protocol.HdfsFileStatus, but class was expected。

以上是关于Hbase RegionServer启动报错:org.apache.hadoop.hdfs.protocol.HdfsFileStatus, but class was expected的主要内容,如果未能解决你的问题,请参考以下文章

启动hbase时,hregionserver没有启动的原因

HBase里配置SNAPPY压缩以后regionserver启动不了的问题

hbase启动之后master和regionserver相继自动断掉

hdp3: regionserver running as process 3170. Stop it first.

HBase 报错系列之region is not online

HBase原理分析