1.1 HBase 配置文件文件概述
-
backup-masters
默认情况在 conf/ 目录下是不存在的。它只是一个普通的文本问你件,内容是列举运行 backpu HMaster 进程的主机名
-
hadoop-metrics2-hbase.properties
连接 HBase Hadoop 的 Metrics2 框架,可以点击这里了解更多关于 Metrics2 框架的信息。默认情况下,此属性文件只是包含一些被注释的配置样例。
-
hbase-env.cmd 和 hbase-env.sh
包含启动 HBase 的工作环境的脚本,比如 java 的目录和其他的一些环境变量。
-
hbase-policy.xml
RPC 服务使用的默认决策配置在这里配置,用于对来自 client 的请求进行授权。只有当 HBase 安全模式打开时才会生效。
-
hbase-site.xml
HBase 的核心配置文件,它指定了覆盖 HBase 默认配置选项的配置。可以在 docs/ 目录下查看(不要编辑)默认配置文件 hbase-defalut.xml 了解一下默认配置选项。也可以通过 web 页面查看在集群中生效的默认配置选项以及覆盖的默认配置选项。
-
log4j.properties
HBase 日志打印配置
-
regionservers
一个普通的文本文件,列举了集群中运行了 HRegionServer 进程实例的主机名或 ip 地址,默认情况下,此文件的内容是 localhost。
1.2 HBase 基本知识
-
打开文件数和进程数的限制
HBase 是一个数据库,它可能需要一次性打开大量的文件,然而 linux 发行版本会限制单个用户一次性打开文件的个数为 1024(老版本是 256),可以使用命令 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,并且如果 Region 超负载情况下,可能会拥有 6 个以上的 StoreFile。而打开的文件个数是由 ColumnFamily 和 Region 的个数而决定的。**如下公式可以粗略计算下在一个 RegionServer 需要打开多少文件数:
(StoreFiles per ColumnFamily) x (regions per RegionServer)
例如,假设每个 Region 有 3 个 ColumnFamily,每个 ColumnFamily 有 3 个RegionFile,每个 RegionServer 有 100 个 Region,那么 JVM 将会打开 3 * 3 * 100 = 900 个文件描述符(file descriptor),这还是不考虑 jar 文件、配置文件和其他文件。打开文件并不会消耗很大资源,并且允许用户能够打开更多文件的风险也是非常小的。
另一个相关设置是允许用户一次运行的进程数。在 linux/unix 下可以使用命令 ulimit -u 查看限制用户一次运行的进程数。这不应与 nproc 命令混淆,后者控制给定用户可用的CPU数量。在高负载情况下,如果这个限制太低的话,可能会造成 OutOfMemoryError 异常。在 Ubuntu 系统下,可以编辑文件 /etc/security/limits.conf 配置。下面例子是设置 hadoop 用户可以打开 32768 个文件,可以开启 32000 个进程数。 hadoop - nofile 32768 hadoop - nproc 32000
1.2.1 hadoop
-
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>
没有配置这个可能会导致奇怪的故障。它的异常提示信息例如:
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...
-
HDFS 客户端配置
如果在 Hadoop 集群中改变了 HDFS 客户端的配置,那么对服务端来说,就必须使用下列方式使得 HBase 能够知道并且使用最新的配置选项。
- 在 hbase-evn.sh 文件配置 HBASE_CLASSPATH 的值为指向 HADOOP_CONF_DIR
- 在 ${HBASE_HOME}/conf 目录下添加一份 hdfs-site.xml 或 hadoop-site.xml 的拷贝,当然最好是符号链接。
- 如果只是对 hdfs 客户端的配置只是小部分修改,可以把它们配置在 hbase-site.xml 文件。