在本节中,我们列出了使用 HBase 时所需要的服务和一些必需的系统配置。

Java

在下表中你可以看到 HBase 版本与其对应支持的 JDK 版本: 社区很乐意帮助你诊断和解决可能遇到的问题.你需要进去社区查找类似问题,可能需要你更改 java 环境.某些情况下,例如编译/测试单元有效性,具体操作问题)也要注意.

建议使用长期支持 JDKs

HBase 建议用户依赖长期支持 (LTS)版本的 JDK,无论是 OpenJDK 项目或其他.截至 2018 年 3 月,这意味着 Java 8 是唯一适用的版本,而下一个可能的测试版本将是 2018 Q3 的 Java 11。

HBase Version JDK 7 JDK 8 JDK 9 (Non-LTS) JDK 10 (Non-LTS) JDK 11
2.0+ HBASE-20264 HBASE-20264 HBASE-21110
1.2+ HBASE-20264 HBASE-20264 HBASE-21110

HBase 不支持 Java 6 的构建或编译

你必须在集群的每个节点上设置JAVA_HOMEhbase-env.sh 提供了一种方便的机制。

操作系统

ssh

(必须的)HBase 广泛使用安全 Shell(ssh)命令和实用程序在集群节点之间进行通信。集群中的每台服务器都必须运行ssh,以便可以管理 Hadoop 和 HBase 后台进程。您必须能够使用共享密钥而不是密码,通过 SSH(包括本地节点)从主服务器和任何备份主服务器连接到所有节点。您可以在 Linux 或 Unix 系统中的"Procedure: Configure Passwordless SSH Access"(配置无密码 SSH 访问)中看到这种设置的基本方法。如果群集节点使用 OS X,请参阅SSH: Setting up Remote Desktop and Enabling Self-Login

DNS

HBase 使用本地主机名来自行报告其 IP 地址

NTP

群集节点上的时钟应该同步。少量的变化是可以接受的,但是大量的不同会导致不稳定和意外的行为。如果在群集中看到无法解释的问题,则时间同步是首先要检查的事项之一。建议您在群集上运行网络时间协议(NTP)服务或其他时间同步机制,并且所有节点都查找相同的服务以进行时间同步。请参阅 The Linux Documentation Project (TLDP) 中的Basic NTP Configuration以设置 NTP。

文件和进程数限制

Apache HBase 是一个数据库。它需要能够一次打开大量的文件。许多 Linux 发行版限制了允许单个用户打开的文件数量1024(或者256,在旧版本的 OS X 上)。当以运行 HBase 的用户身份登录时,您可以通过在服务器上运行ulimit -n 命令来检查服务器上的限制。限制太低会产生一些 故障 您也可能会注意到以下错误:

2010-04-06 03:04:37,542 INFO org.apache.hadoop.hdfs.DFSClient: Exception increateBlockOutputStream java.io.EOFException
2010-04-06 03:04:37,542 INFO org.apache.hadoop.hdfs.DFSClient: Abandoning block blk_-6935524980745310745_1391901

建议将 ulimit 提高到至少 10,000,但更可能是 10,240,因为该值通常以 1024 的倍数表示。每个 ColumnFamily 至少有一个 StoreFile,如果该区域处于加载状态,则可能有多于六个的 StoreFile。所需的打开文件的数量取决于 ColumnFamilies 的数量和区域的数量。以下是计算 RegionServer 上打开的文件的潜在数量的粗略公式。

计算打开文件的潜在数量:

(StoreFiles per ColumnFamily) x (regions per RegionServer)

假设一个模式的每个区域有 3 个 ColumnFamilies,每个 ColumnFamily 平均有 3 个 StoreFiles,每个 RegionServer 有 100 个区域,则 JVM 将打开3 * 3 * 100 = 900文件描述符,不包括打开的 JAR 文件、配置文件等等。打开一个文件不需要很多资源,而且允许用户打开太多文件的风险很小。

另一个相关设置是允许用户同时运行的进程数量。在 Linux 和 Unix 中,使用该ulimit -u 命令设置进程的数量。这不应与nproc命令混淆,该命令控制给定用户可用的 CPU 数量。在负载下,ulimit -u太低会导致 OutOfMemoryError 异常。

为运行 HBase 进程的用户配置文件描述符和进程的最大数量是操作系统配置,而不是 HBase 配置。确保为实际运行 HBase 的用户更改设置也很重要。要查看哪个用户启动了 HBase,以及该用户的 ulimit 配置,请查看该实例的 HBase 日志的第一行。

示例 2. ulimit 在 Ubuntu 上的设置

要在 Ubuntu 上配置 limits.conf 设置,请编辑:/etc/security/limits.conf,它是一个由四列组成的空格分隔的文件。在以下示例中,第一行将用户名为 hadoop 的操作系统用户的打开文件数(nofile)的软限制和硬限制设置为 32768。第二行将同一用户的进程数设置为 32000。

hadoop  -       nofile  32768
hadoop  -       nproc   32000

这些设置仅适用于可插入身份验证模块(PAM)环境指示使用它们的情况。要配置 PAM 以使用这些限制,请确保 /etc/pam.d/common-session 文件包含以下行:

session required  pam_limits.so

Linux Shell

所有 HBase 附带的 shell 脚本都依赖于GNU Bash shell.

Windows

不建议在 Windows 计算机上运行生产系统。

4.1. Hadoop

下表总结了每个 HBase 版本支持的 Hadoop 版本。下表总结了每个版本的 HBase 支持的 Hadoop 版本。未出现在此表中的旧版本被视为不受支持,可能缺少必要的功能,而新版本未经测试,但可能适用。

基于 HBase 的版本,您应该选择最合适的 Hadoop 版本。参考更多关于 Hadoop 环境配置的内容! 版本无区别. 请查看 the Hadoop wiki .

建议使用 Hadoop 2.x

Hadoop 2.x 速度更快,包括短路读取功能( Leveraging local data),这将有助于提高您的 HBase 随机读取配置文件;Hadoop 2.x 还包括重要的 bug 修复,可以改善您的整体 HBase 体验;HBase 不支持使用早期版本的 Hadoop 运行;有关特定于不同 HBase 版本的要求,请参见下表

Hadoop 3.x 仍处于早期访问版本中,尚未被 HBase 社区对生产用例进行充分测试。

使用以下的注解来解释下面的这个表格:

Hadoop 版本支持

  • T = 支持

  • F = 不支持

  • N = 未测试

HBase-1.2.x, HBase-1.3.x HBase-1.4.x HBase-2.0.x HBase-2.1.x
Hadoop-2.4.x T F F F
Hadoop-2.5.x T F F F
Hadoop-2.6.0 F F F F
Hadoop-2.6.1+ T F T F
Hadoop-2.7.0 F F F F
Hadoop-2.7.1+ T T T T
Hadoop-2.8.[0-1] F F F F
Hadoop-2.8.2 N N N N
Hadoop-2.8.3+ N N T T
Hadoop-2.9.0 F F F F
Hadoop-2.9.1+ N N N N
Hadoop-3.0.[0-2] F F F F
Hadoop-3.0.3+ F F T T
Hadoop-3.1.0 F F F F
Hadoop-3.1.1+ F F T T

Hadoop Pre-2.6.1 和 JDK 1.8 Kerbero

在 Kerberos 环境中使用 pre-2.6.1 Hadoop 版本和 JDK 1.8 时,HBase 服务器可能因 Kerberos keytab relogin 错误而失败并中止。JDK 1.7 (1.7. 0_80) 的后期版本也有问题HADOOP-10786。在这种情况下考虑升级到 Hadoop 2.6.1+。

Hadoop 2.6.

如果您计划在 HDFS 加密区域的顶部运行 HBase,则基于 2.6.x 行的 Hadoop 发行版必须具有 HADOOP-11710 应用。如果不这样做,将导致群集故障和数据丢失。此修补程序存在于 Apache Hadoop 2.6.1+版本中。

Hadoop 2.y.0

Hadoop 2.7.0 开始两个版本未经测试或不受支持,因为 Hadoop PMC 明确将该版本标记为不稳定.因此,HBase 明确建议用户避免在这些版本之上运行。另外,Hadoop PMC 也给出了同样的警告。有关参考,请参见 Apache Hadoop 2.7.0, Apache Hadoop 2.8.0, Apache Hadoop 2.8.1, and Apache Hadoop 2.9.0.

Hadoop 3.0.x

包含应用程序时间服务特性的 Hadoop 集群可能会导致出现意外的 HBase 类版本.用户要确保YARN-7190 存在于 yarn 服务中 (目前已修复 2.9.1+ , 3.1.0+).

Hadoop 3.1.0

Hadoop PMC 声称 3.1.0 不稳定且不能用于生产.因此,HBase 建议用户避免使用本版本.详情: release announcement for Hadoop 3.1.0.

更换 Hadoop

因为 hbase 依赖于 hadoop,并且 hadoop jar 存在 lib 目录下。这些的 jar 仅在独立模式下使用。在分布式模式下,集群上的 Hadoop 版本与 HBase 下的版本匹配是 _ 至关重要 _ 的。将 hbase lib 目录中的 hadoop jar 替换为集群上运行的版本中的 hadoop jar,以避免版本不匹配问题。确保在整个集群中替换 hbase 下的 jar。Hadoop 版本不匹配问题有多种表现形式。如果 HBase 出现挂起,请检查是否不匹配。

4.1.1. dfs.datanode.max.transfer.threads

HDFS DataNode 在任何时候都会有一个文件数上限。在进行任何加载之前,请确保您已经配置了 Hadoop 的 conf/hdfs-site.xml,并将该dfs.datanode.max.transfer.threads值设置为至少如下的值:

<property>
  <name>dfs.datanode.max.transfer.threads</name>
  <value>4096</value>
</property>

进行上述配置后,务必重新启动 HDFS。

没有这个配置就会造成奇怪的故障。其中一种表现是缺失区块。例如:

10/12/08 20:10:31 INFO hdfs.DFSClient: Could not obtain block
          blk_XXXXXXXXXXXXXXXXXXXXXX_YYYYYYYY from any node: java.io.IOException: No live nodes
          contain current block. Will get new block locations from namenode and retry...

查看 casestudies.max.transfer.threads 并注意 dfs.datanode.max.xcievers (e.g. Hadoop HDFS: Deceived by Xciever).

4.2. ZooKeeper 要求

ZooKeeper 3.4.x 必需.