页面树结构

2017-11-09 ApacheCN 开源组织,第二期邀请成员活动,一起走的更远 : http://www.apachecn.org/member/209.html


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始

本节列出了所需的服务和一些所需的系统配置。

Table 2. Java 

HBase VersionJDK 6JDK 7JDK 8
1.3不支持支持支持
1.2不支持支持支持
1.1不支持支持在 JDK 8 环境下可以运行但是没有很好的测试
1.0不支持支持在 JDK 8 环境下可以运行但是没有很好的测试
0.98支持支持

在 JDK 8 环境下可以运行但是没有很好的测试。使用 JDK 8 创建

需要去除 PoolMap 类中已经弃用的 remove() 方法和正在考虑弃用的方法。

查看 HBase-7608 来了解关于 JDK 8 支持的更多信息。

0.94支持支持N/A

在 HBase 0.98.5 和更新的版本中,你必须在集群的每个节点中设置 JAVA_HOME 。 hbase-env.sh 提供了一个便利的机制来做到这一点。

 

操作系统工具

ssh

HBase 使用安全性高和实用性广泛的 Shell 命令(ssh) 来实现集群中各节点之间的通信。集群中的每个服务器都必须运行 ssh ,使 Hadoop 和 HBase 的进程可以被管理。你必须能够通过 SSH 从 Master 和任何备用 Master 连接到所有的节点,包括本地节点(local node),使用一个共享的秘钥而不是使用一个密码。你可以在 Linux 或者 Unix 系统的 "步骤:配置 SSH 无密码访问" 中看到这样的一种体制的基础方法。如果你的集群节点使用 OS X 操作系统,可以在 Hadoop wiki 中,请参阅这一部分,SSH: 设置远程桌面和启用自登录

DNS

HBase 使用本地主机名来自我报告其 IP 地址。正向和反向 DNS 解析必须在早于 0.92.0 的版本运行。 hadoop-dns-checker 工具可以被用来验证 DNS 在集群中是否正常运行。该项目的 README 文件提供了有关使用情况的详细说明。

回环 IP 

在 hbase-0.96.0 版本之前的版本, HBase 只使用 127.0.0.1 IP地址指向本地主机,并且这无法配置。参阅 回环 IP 来了解更多细节。

NTP

集群节点上的时钟应该是同步的。少量的变动是可以接受的,但是较大的偏移会导致不稳定和意想不到的行为。如果你在你的集群中看到无法解释的问题,时间同步是你首先要检查的事情之一。建议您在集群上运行网络时间协议(NTP)服务,或者其他时间同步机制。并且所有的节点使用相同的时间同步服务。在 Linux 文档项目 中查看 基础的 NTP 配置,来设置 NTP 。

对文件和进程的限制(ulimit)

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

 

建议提高限制到最少 10000 ,但是 10240 更好点,因为这个值通常是 1024 的倍数。每个列族(ColumnFamily)拥有至少一个 StoreFile ,并且可能超过 6 个 StoreFile 如果该 region 处于负载下。打开文件的数量取决于列族(ColumnFaminly)的数量和 regions 的数量。以下是用于计算在一个 RegionServer 上打开文件的潜在数量的粗略计算公式。

计算打开文件的潜在数量

(StoreFiles per ColumnFamily) x (regions per RegionServer)

例如,假设一个 schema 具有每个 region 3 个列族(ColumnFamily)并且每个列族平均 3 个 StoreFile ,并且每个 RegionServer 上有 100 个 region 。JVM 将会打开 3 * 3 * 100 = 900 个文件描述符,不算打开 JAR 文件,配置文件和其他文件。打开文件不会占用很多的资源,并且允许用户打开太多文件的风险是最小的。

另一个相关的设置就是一个用户被允许一次运行的进程的数目。在 Linux 和 Unix 中,进程数是使用 ulimit -n 命令设置的。这不应该与 nproc 命令相混淆, nproc 命令是控制提供给一个给定用户的可用的 CPU 数量。在负载下,一个 ulimit -n 过低可能会导致 OutOfMemoryError 异常。查看 HBase 邮件列表中的 Jack Levin 的主要 HDFS 问题线 ,从2011年开始。

为正在运行 HBase 进程的用户配置文件描述符和进程的最大数目是一个操作系统的配置而不是一个 HBase 的配置。同样重要的是,确认这个为真正运行 HBase 的用户的设置已经改变了。要查看哪个用户启动的 HBase ,和这个用户的 ulimit 设置,查看这个实例在 HBase log日志中的第一行。一个有用的读取你的 Hadoop 集群设置的配置是 Aaron Kimball 的配置参数:你能忽略?


Example 6. ulimit 在Ubuntu 上配置

在 Ubuntu 上配置 ulimit ,编辑 /etc/security/limits.conf ,这是一个以四列为空间分隔符的文件。请参考手册页中 limits.conf 文件中有关此文件格式的详细信息。在下面的例子中,第一行为 username 名为 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

在 HBase 的 0.96 版本之前,在微软的 Windows 上运行 HBase 测试是被限制的。在 Windows 节点上运行的不建议用于生产系统。


1.Hadoop

下表总结了 HBase 每个版本所支持的 Hadoop 版本。根据 HBase 版本,你应该选择最合适的版本的 Hadoop 。你可以使用 Apache Hadoop ,或者一个供应商发行的 Hadoop 。这里没有区别。查看 Hadoop 供应商的信息,在 the Hadoop wiki 上。

建议 Hadoop 2.x 版本
Hadoop 2.x 版本更快,并且包括更多的功能,如短路读取,这个功能能够有助于提高您的 HBase 随机读取配置文件。 Hadoop 2.x 还包括重要的 BUG 修复,这将提高你的整体 HBase 体验。 HBase 0.98 版本不再支持 Hadoop 1.0,不再使用 Hadoop 1.1+ ,并且 HBase 1.0 不再支持 Hadoop 1.x 。

使用以下说明来解释这个表:

Hadoop 的版本支持矩阵

"S" = supported

"X" = not supported

"NT" = Not tested


 HBase-0.94.x

HBase-0.98.x

(Support for

Hadoop 1.1+ is

deprecated.)

HBase-1.0.x

(Hadoop 1.x is

NOT supported)

HBase-1.1.xHBase-1.2.xHBase-1.3.x
Hadoop-1.0.xXXXXXX
Hadoop-1.1.xSNTXXXX
Hadoop-0.23.xSXXXXX
Hadoop-2.0.x-alphaNTXXXXX
Hadoop-2.1.0-betaNTXXXXX
Hadoop-2.2.0NTSNTNTXX
Hadoop-2.3.xNTSNTNTXX
Hadoop-2.4.xNTSSSSS
Hadoop-2.5.xNTSSSSS
Hadoop-2.6.0XXXXXX
Hadoop-2.6.1+NTNTNTNTSS
Hadoop-2.7.0XXXXXX
Hadoop-2.7.1+NTNTNTNTSS

Hadoop 2.6.x 

如果你计划在 HDFS 的加密区之上运行 HBase ,那么基于 2.6.x 线的 Hadoop 发行版必须应用 HADOOP-11710 。如果不这样做会导致集群故障和数据丢失。这个补丁目前存在于 Apache Hadoop 2.6.1+ 版本上。

Hadoop 2.7.x 

Hadoop 2.7.0 版本没有被测试或支持。因为这个版本的 Hadoop PMC 被明确地标示了这个版本不是稳定版本。

更换 Hadoop 的捆绑 HBase !

因为 HBase 是依赖于 Hadoop 的。 HBase 的 lib 目录下捆绑了一个 Hadoop 的 jar 的实例。捆绑的 jar 只适用于独立模式下使用。在分布式模式下,至关重要的是,你的集群上的 Hadoop 的版本匹配与 HBase 下支持的版本。使用运行在你集群上的 hadoop 的 jar 替换在 HBase 的 lib 目录下的 jar 以避免版本不匹配的问题。确保你替换了集群中所有 HBase 下的 jar 。Hadoop 版本不匹配问题有不同的表现,但是往往看起来像是它挂了。

 

1.1. Apache HBase 0.94 和 Hadoop 2

为了使 HBase 0.94.x 运行在 Hadoop 2.2.0 上,你需要更改 hadoop 2 和 protobuf 版本的 pom.xml 文件:这里是 pom.xml 的变化的差异:

$ svn diff pom.xml
Index: pom.xml
===================================================================
--- pom.xml     (revision 1545157)
+++ pom.xml     (working copy)
@@ -1034,7 +1034,7 @@
     <slf4j.version>1.4.3</slf4j.version>
     <log4j.version>1.2.16</log4j.version>
     <mockito-all.version>1.8.5</mockito-all.version>
-    <protobuf.version>2.4.0a</protobuf.version>
+    <protobuf.version>2.5.0</protobuf.version>
     <stax-api.version>1.0.1</stax-api.version>
     <thrift.version>0.8.0</thrift.version>
     <zookeeper.version>3.4.5</zookeeper.version>
@@ -2241,7 +2241,7 @@
         </property>
       </activation>
       <properties>
-        <hadoop.version>2.0.0-alpha</hadoop.version>
+        <hadoop.version>2.2.0</hadoop.version>
         <slf4j.version>1.6.1</slf4j.version>
       </properties>
       <dependencies>

下一步是重新生成 Protobuf 文件,并且假定 Protobuf 已安装:

使用命令行进入 HBase 的根目录;

输入以下命令:

$ protoc -Isrc/main/protobuf --java_out=src/main/java src/main/protobuf/hbase.proto
$ protoc -Isrc/main/protobuf --java_out=src/main/java src/main/protobuf/ErrorHandling.proto

 

建立针对于 Hadoop 2 的配置文件,通过运行像下面这样的命令:

$  mvn clean install assembly:single -Dhadoop.profile=2.0 -DskipTests

 

1.2. Apache HBase 0.92 和 0.94 

HBase 0.92 和 0.94 可以在 Hadoop 的 0.20.205 , 0.22.x ,1.0.x 和 1.1.x 版本上运行。另外 HBase-0.94 可以在 Hadoop-0.23.x 和 2.x 上运行。但您可能必须使用特定的 Maven 配置文件来重新编译代码(查看顶层的 pom.xml)。

1.3 Apache HBase 0.96 

自从 Apache HBase 0.96.x 版本, Apache Hadoop 至少需要 1.0.x 版本。强烈建议使用 Hadoop 2 (更快并且拥有有助于 MTTR 的修复)。我们将不再在更老版本的 Hadoop 上正确运行,如 0.20.205 或者 branch-0.20-append 。不要移动到 Apache HBase 0.96.x 版本,如果您不能升级您的 Hadoop 。查看  HBase, mail # dev - DISCUSS: Have hbase require at least hadoop 1.0.0 in hbase 0.96.0?

1.4 Hadoop 版本 0.20.x - 1.x

不要使用 Hadoop 的版本低于 2.2.0 版本来运行 HBase 的版本高于 1.0 版本。如果你正在使用一个旧版本的 HBase,检查发行文档,查找 Hadoop 的相关信息。

1.5 在安全 Hadoop 上运行 Apache HBase

Apache HBase 将运行在任意的采用 Hadoop 的安全功能的 Hadoop 0.20.x 版本上,只要你像上面建议的那样,用安全版本替换了附带 HBase 的 Hadoop 的 jar 。如果你想了解更多的关于如何设置安全 HBase 的信息,查看 HBase 的安全配置

1.6 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 。(例如:  Hadoop HDFS: Deceived by Xciever)。

 

2.ZooKeeper 的要求

自从 HBase 1.0.0 版本之后,ZooKeeper 3.4.x 版本是被要求的。 HBase 利用了只有在 ZooKeeper 3.4.0 版本以及之后的版本才可用的很多功能(在 HBase 1.0.0 版本使用多配置选项默认是 true )。查看 HBase-12241(当使用 deadserver 的备份队列打破备份时,regionServer 崩溃)HBase-6775(当 HBase-6710 0.92/0.94 的兼容性修补程序可用时,使用 ZK.multi) 来了解背景。