有关 RegionServers 的更多信息,请参见 RegionServer

136.1。启动错误

136.1.1。 Master Starts,但 RegionServers 没有

Master 认为 RegionServers 的 IP 为 127.0.0.1 - 这是 localhost 并解析为 master 自己的 localhost。

RegionServers 错误地通知 Master,他们的 IP 地址是 127.0.0.1。

修改区域服务器上的 / etc / hosts ,...

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               fully.qualified.regionservername regionservername  localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6 

... to(从 localhost 中删除主节点的名称)...

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6 

136.1.2。压缩链接错误

由于需要在每个群集上安装和配置 LZO 等压缩算法,因此这是启动错误的常见原因。如果你看到这样的消息......

11/02/20 01:32:15 ERROR lzo.GPLNativeCodeLoader: Could not load native gpl library
java.lang.UnsatisfiedLinkError: no gplcompression in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
        at java.lang.Runtime.loadLibrary0(Runtime.java:823)
        at java.lang.System.loadLibrary(System.java:1028) 

...然后压缩库存在路径问题。请参阅链接上的“配置”部分:[LZO 压缩配置]。

136.1.3。 RegionServer 由于缺少文件系统的 hsync 而中止

为了向集群写入提供数据持久性,HBase 依赖于在写入日志中持久保存状态的能力。当使用支持检查所需呼叫可用性的 Apache Hadoop Common 文件系统 API 版本时,如果发现它无法安全运行,HBase 将主动中止群集。

对于 RegionServer 角色,失败将显示在日志中,如下所示:

2018-04-05 11:36:22,785 ERROR [regionserver/192.168.1.123:16020] wal.AsyncFSWALProvider: The RegionServer async write ahead log provider relies on the ability to call hflush and hsync for proper operation during component failures, but the current FileSystem does not support doing so. Please check the config value of 'hbase.wal.dir' and ensure it points to a FileSystem mount that has suitable capabilities for output streams.
2018-04-05 11:36:22,799 ERROR [regionserver/192.168.1.123:16020] regionserver.HRegionServer: ***** ABORTING region server 192.168.1.123,16020,1522946074234: Unhandled: cannot get log writer *****
java.io.IOException: cannot get log writer
        at org.apache.hadoop.hbase.wal.AsyncFSWALProvider.createAsyncWriter(AsyncFSWALProvider.java:112)
        at org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.createWriterInstance(AsyncFSWAL.java:612)
        at org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.createWriterInstance(AsyncFSWAL.java:124)
        at org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.rollWriter(AbstractFSWAL.java:759)
        at org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.rollWriter(AbstractFSWAL.java:489)
        at org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.<init>(AsyncFSWAL.java:251)
        at org.apache.hadoop.hbase.wal.AsyncFSWALProvider.createWAL(AsyncFSWALProvider.java:69)
        at org.apache.hadoop.hbase.wal.AsyncFSWALProvider.createWAL(AsyncFSWALProvider.java:44)
        at org.apache.hadoop.hbase.wal.AbstractFSWALProvider.getWAL(AbstractFSWALProvider.java:138)
        at org.apache.hadoop.hbase.wal.AbstractFSWALProvider.getWAL(AbstractFSWALProvider.java:57)
        at org.apache.hadoop.hbase.wal.WALFactory.getWAL(WALFactory.java:252)
        at org.apache.hadoop.hbase.regionserver.HRegionServer.getWAL(HRegionServer.java:2105)
        at org.apache.hadoop.hbase.regionserver.HRegionServer.buildServerLoad(HRegionServer.java:1326)
        at org.apache.hadoop.hbase.regionserver.HRegionServer.tryRegionServerReport(HRegionServer.java:1191)
        at org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:1007)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.hadoop.hbase.util.CommonFSUtils$StreamLacksCapabilityException: hflush and hsync
        at org.apache.hadoop.hbase.io.asyncfs.AsyncFSOutputHelper.createOutput(AsyncFSOutputHelper.java:69)
        at org.apache.hadoop.hbase.regionserver.wal.AsyncProtobufLogWriter.initOutput(AsyncProtobufLogWriter.java:168)
        at org.apache.hadoop.hbase.regionserver.wal.AbstractProtobufLogWriter.init(AbstractProtobufLogWriter.java:167)
        at org.apache.hadoop.hbase.wal.AsyncFSWALProvider.createAsyncWriter(AsyncFSWALProvider.java:99)
        ... 15 more 

如果您尝试在独立模式下运行并看到此错误,请返回快速入门 - 独立 HBase 部分并确保您已将所有包含在给定的配置设置中。

136.1.4。 RegionServer 因无法初始化对 HDFS 的访问而中止

我们将尝试将 AsyncFSWAL 用于 HBase-2.x,因为它具有更好的性能,同时消耗更少的资源。但 AsyncFSWAL 的问题在于它侵入了 DFSClient 实现的内部,因此在升级 hadoop 时很容易被破解,即使是简单的补丁发布也是如此。

如果你没有指定 wal 提供者,如果我们无法初始化 AsyncFSWAL ,我们将尝试回退到旧的 FSHLog ,但它可能并不总是有效。失败将显示在这样的日志中:

18/07/02 18:51:06 WARN concurrent.DefaultPromise: An exception was
thrown by org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper$13.operationComplete()
java.lang.Error: Couldn't properly initialize access to HDFS
internals. Please update your WAL Provider to not make use of the
'asyncfs' provider. See HBASE-16110 for more information.
     at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputSaslHelper.<clinit>(FanOutOneBlockAsyncDFSOutputSaslHelper.java:268)
     at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper.initialize(FanOutOneBlockAsyncDFSOutputHelper.java:661)
     at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper.access$300(FanOutOneBlockAsyncDFSOutputHelper.java:118)
     at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper$13.operationComplete(FanOutOneBlockAsyncDFSOutputHelper.java:720)
     at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper$13.operationComplete(FanOutOneBlockAsyncDFSOutputHelper.java:715)
     at org.apache.hbase.thirdparty.io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:507)
     at org.apache.hbase.thirdparty.io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:500)
     at org.apache.hbase.thirdparty.io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:479)
     at org.apache.hbase.thirdparty.io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:420)
     at org.apache.hbase.thirdparty.io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
     at org.apache.hbase.thirdparty.io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:82)
     at org.apache.hbase.thirdparty.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.fulfillConnectPromise(AbstractEpollChannel.java:638)
     at org.apache.hbase.thirdparty.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.finishConnect(AbstractEpollChannel.java:676)
     at org.apache.hbase.thirdparty.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.epollOutReady(AbstractEpollChannel.java:552)
     at org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:394)
     at org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:304)
     at org.apache.hbase.thirdparty.io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
     at org.apache.hbase.thirdparty.io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
     at java.lang.Thread.run(Thread.java:748)
 Caused by: java.lang.NoSuchMethodException:
org.apache.hadoop.hdfs.DFSClient.decryptEncryptedDataEncryptionKey(org.apache.hadoop.fs.FileEncryptionInfo)
     at java.lang.Class.getDeclaredMethod(Class.java:2130)
     at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputSaslHelper.createTransparentCryptoHelper(FanOutOneBlockAsyncDFSOutputSaslHelper.java:232)
     at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputSaslHelper.<clinit>(FanOutOneBlockAsyncDFSOutputSaslHelper.java:262)
     ... 18 more 

如果您遇到此错误,请在配置文件中明确指定 FSHLog ,即 _ 文件系统 _。

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

并且不要忘记发送电子邮件至 user@hbase.apache.orgdev@hbase.apache.org 报告失败以及您的 hadoop 版本,我们将尝试在下一个版本中尽快解决问题。

136.2。运行时错误

136.2.1。 RegionServer 挂起

你在运行旧的 JVM(&lt; 1.6.0_u21?)?当你看一个线程转储时,它是否看起来像是线程被阻塞但没有人持有锁都被阻止了?请参阅 HBaseServer 中的 HBASE 3622 死锁(JVM 错误?)。将-XX:+UseMembar添加到 conf / hbase-env.sh 中的 HBase HBASE_OPTS可能会修复它。

136.2.2。 java.io.IOException ...(打开的文件太多)

如果您看到这样的日志消息......

2010-09-13 01:24:17,336 WARN org.apache.hadoop.hdfs.server.datanode.DataNode:
Disk-related IOException in BlockReceiver constructor. Cause is java.io.IOException: Too many open files
        at java.io.UnixFileSystem.createFileExclusively(Native Method)
        at java.io.File.createNewFile(File.java:883) 

...请参阅链接上的“入门”部分:[ulimit 和 nproc 配置]。

136.2.3。 xceiverCount 258 超过并发 xcievers 256 的限制

这通常显示在 DataNode 日志中。

请参阅链接上的“入门”部分:[xceivers 配置]。

136.2.4。系统不稳定,并且存在“java.lang.OutOfMemoryError:无法在异常中创建新的本机线程”HDFS DataNode 日志或任何系统守护程序的日志

请参阅有关 ulimit 和 nproc 配置的“入门”部分。最新 Linux 发行版的默认值为 1024 - 这对于 HBase 来说太低了。

136.2.5。 DFS 不稳定和/或 RegionServer 租约超时

如果你看到这样的警告信息......

2009-02-24 10:01:33,516 WARN org.apache.hadoop.hbase.util.Sleeper: We slept xxx ms, ten times longer than scheduled: 10000
2009-02-24 10:01:33,516 WARN org.apache.hadoop.hbase.util.Sleeper: We slept xxx ms, ten times longer than scheduled: 15000
2009-02-24 10:01:36,472 WARN org.apache.hadoop.hbase.regionserver.HRegionServer: unable to report to master for xxx milliseconds - retrying 

...或者看到完整的 GC 压缩,那么您可能正在体验完整的 GC。

136.2.6。 “没有活动节点包含当前块”和/或 YouAreDeadException

这些错误可能在用完 OS 文件句柄时或在节点无法访问的严重网络问题期间发生。

请参阅有关 ulimit 和 nproc 配置的“入门”部分,并检查您的网络。

136.2.7。 ZooKeeper SessionExpired 事件

Master 或 RegionServers 关闭日志中的消息:

WARN org.apache.zookeeper.ClientCnxn: Exception
closing session 0x278bd16a96000f to sun.nio.ch.SelectionKeyImpl@355811ec
java.io.IOException: TIMED OUT
       at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:906)
WARN org.apache.hadoop.hbase.util.Sleeper: We slept 79410ms, ten times longer than scheduled: 5000
INFO org.apache.zookeeper.ClientCnxn: Attempting connection to server hostname/IP:PORT
INFO org.apache.zookeeper.ClientCnxn: Priming connection to java.nio.channels.SocketChannel[connected local=/IP:PORT remote=hostname/IP:PORT]
INFO org.apache.zookeeper.ClientCnxn: Server connection successful
WARN org.apache.zookeeper.ClientCnxn: Exception closing session 0x278bd16a96000d to sun.nio.ch.SelectionKeyImpl@3544d65e
java.io.IOException: Session Expired
       at org.apache.zookeeper.ClientCnxn$SendThread.readConnectResult(ClientCnxn.java:589)
       at org.apache.zookeeper.ClientCnxn$SendThread.doIO(ClientCnxn.java:709)
       at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:945)
ERROR org.apache.hadoop.hbase.regionserver.HRegionServer: ZooKeeper session expired 

JVM 正在进行长时间运行的垃圾收集,这会暂停每个线程(也就是“停止世界”)。由于 RegionServer 的本地 ZooKeeper 客户端无法发送心跳,因此会话超时。根据设计,我们会在超时后关闭任何无法联系 ZooKeeper 集合的节点,以便它停止提供可能已在其他地方分配的数据。

  • 确保你提供足够的 RAM(在 hbase-env.sh 中),默认的 1GB 将无法维持长时间运行的导入。

  • 确保不交换,JVM 在交换时从不表现良好。

  • 确保您没有 CPU 占用 RegionServer 线程。例如,如果在具有 4 个内核的计算机上使用 6 个 CPU 密集型任务运行 MapReduce 作业,则可能会使 RegionServer 匮乏,从而导致更长时间的垃圾收集暂停。

  • 增加 ZooKeeper 会话超时

如果您希望增加会话超时,请将以下内容添加到 hbase-site.xml ,以将超时从默认值 60 秒增加到 120 秒。

<property>
  <name>zookeeper.session.timeout</name>
  <value>120000</value>
</property>
<property>
  <name>hbase.zookeeper.property.tickTime</name>
  <value>6000</value>
</property> 

请注意,设置较高的超时意味着由失败的 RegionServer 服务的区域将至少花费该时间量传输到另一个 RegionServer。对于提供实时请求的生产系统,我们建议将其设置为低于 1 分钟并过度配置群集,以便每台计算机上的内存负载越低(因此每台计算机收集的垃圾越少)。

如果在只发生一次的上传过程中发生这种情况(比如最初将所有数据加载到 HBase 中),请考虑批量加载。

有关 ZooKeeper 故障排除的其他一般信息,请参阅 ZooKeeper,Cluster Canary

136.2.8。 NotServingRegionException

在 DEBUG 级别的 RegionServer 日志中找到此异常是“正常”。此异常将返回给客户端,然后客户端返回hbase:meta以查找已移动区域的新位置。

但是,如果 NotServingRegionException 被记录为 ERROR,则客户端用尽了重试并且可能出现了错误。

136.2.9。日志充斥着'2011-01-10 12:40:48,407 INFO org.apache.hadoop.io.compress.CodecPool:Gotbrand-new compressor'消息

我们没有使用压缩库的本机版本。参见 HBASE-1900 释放 hadoop 0.21 后放回原生支持。从 HBase lib 目录下的 hadoop 复制本机库或将它们符号链接到位,消息应该消失。

136.2.10。 60020 上的服务器处理程序 X 捕获:java.nio.channels.ClosedChannelException

如果您看到此类消息,则表示区域服务器正在尝试从/向客户端读取/发送数据,但它已经消失。造成这种情况的典型原因是客户端被杀死(当 MapReduce 作业被终止或失败时,您会看到类似这样的消息)或者客户端收到 SocketTimeoutException。它是无害的,但如果你没有做一些触发它们,你应该考虑多挖一点。

136.3。反向 DNS 导致的快照错误

HBase 中的多个操作(包括快照)依赖于正确配置的反向 DNS。某些环境(如 Amazon EC2)在反向 DNS 方面存在问题。如果在 RegionServers 上看到如下错误,请检查反向 DNS 配置:

2013-05-01 00:04:56,356 DEBUG org.apache.hadoop.hbase.procedure.Subprocedure: Subprocedure 'backup1'
coordinator notified of 'acquire', waiting on 'reached' or 'abort' from coordinator. 

通常,RegionServer 报告的主机名需要与 Master 尝试访问的主机名相同。您可以通过在启动时在 RegionServer 的日志中查找以下类型的消息来查看主机名不匹配。

2013-05-01 00:03:00,614 INFO org.apache.hadoop.hbase.regionserver.HRegionServer: Master passed us hostname
to use. Was=myhost-1234, Now=ip-10-55-88-99.ec2.internal 

136.4。关机错误