版本: 2.0.0
HBase的配置文件在conf/目录下。
主要配置文件描述:
- backup-masters : 默认没有,需要自建。是个普通的文本文件,它保存将要启动backup master的列表。一个host 一行。
- hadoop-metrics2-hbase.properties: 用于连接Hadoop’s Metrics2 framework 。
See the Hadoop Wiki entry for more information on Metrics2. Contains only commented-out examples by default. - hbase-env.cmd and hbase-env.sh : 配置环境变量等。
- hbase-policy.xml : RPC服务器用来认证客户端的默认规则配置文件。 只有当使用HBase security 时开启。
- hbase-site.xml : Hbase的主配置文件。 该配置属性将覆盖hbase的默认配置属性。 可以参考docs/hbase-default.xml中的配置属性。 可以在web ui上查看全量的配置文件属性。
- log4j.properties : 配置日志内容。
- regionservers : 文本配置文件, 用于配置集群中的RegionServers列表。 默认情况下该文件只包含一行localhost 。建议使用ip地址或主机名。
在分布式模式下, 当修改类hbase的配置文件后, 需要同步到集群中的其他节点上。HBase不会自动同步。 可以使用 rsync 、scp 等工具进行同步。 对于大部分配置,需要重启使之生效。 动态参数例外。
基本依赖
- Java , 建议jdk8 。 需要配置JAVA_HOME环境变量。
- ssh : 集群中的节点需要支持ssh连接。 需要支持无密码ssh 连接。
- DNS: The hadoop-dns-checker tool can be used to verify DNS is working correctly on the cluster. The project
README
file provides detailed instructions on usage. - Loopback IP : hbase使用127.0.0.1 表示localhost ,不用配置。
- NTP: 集群中的节点时间应该同步。 小时差是可以忍受的, 但是大的时差可能会引发不确定的结果。 推荐运行NTP服务 或其他时钟同步机制。
- ulimit: hbase需要能打开大量的文件, 大多数linux系统会限制打开文件的数量为1024. 可以使用ulimit -n 检查之。 建议将此值设置为10240 。
每个列族至少有一个StoreFile ,有可能多达6个。需要打开的文件数量依赖于列族数和region数。下面是个公式用来计算一个RegionServers上可能打开的文件数量:
(StoreFiles per ColumnFamily) x (regions per RegionServer)
例如: 一个schema 每个region 有3个列族, 平均每个列族有3个StoreFile , 一个RegionServers 有100个regions , JVM将打开 33100 = 900 个文件描述符, 这不包括打开的JAR文件、配置文件和其他文件。 打开一个文件不会消耗很多资源,风险在于可打开的文件数量。
另外一个相关的设置是允许一个用户一次运行的进程数量。 linux系统的进程数量使用ulimit -u 设置。 这与nproc命令不同, nproc控制可以分配给一个用户的cpus数量。在有负载的情况下, ulimit -u 设置太低会导致OutOfMemoryError 异常。 See Jack Levin’s major HDFS issues thread on the hbase-users mailing list, from 2011.
hadoop 版本
支持的版本情况如下:
图片.png
-
Hadoop Pre-2.6.1 and JDK 1.8 Kerberos
当使用pre-2.6.1版本和jdk1.8 kerboeros环境时, hbase服务会因kerberos keytab 重登陆错误而失败和中断。 jdk1.7 同样有这个问。 参考 HADOOP-10786 查看更多信息。 这种情况下考虑升级为2.6.1. -
Hadoop 2.6.x
如果准备在hdfs Encryption Zone 运行hbase , 2.6.x版本线必须应用补丁 HADOOP-11710 . 否则可能导致集群失败和数据丢失. 该补丁已经打在了 Apache Hadoop releases 2.6.1+.
-
Hadoop 2.7.x
Hadoop版本2.7.0未经测试或不受支持,因为Hadoop PMC明确将该版本标记为不稳定。 (reference the announcement of Apache Hadoop 2.7.0.) -
Hadoop 2.8.x
Hadoop版本2.8.0 and 2.8.1 未经测试或不受支持,因为Hadoop PMC明确将该版本标记为不稳定。 (reference the announcement of Apache Hadoop 2.8.0 and announcement of Apache Hadoop 2.8.1.)
替换Hadoop 依赖jar包
Hbase 依赖hadoop, 它依赖lib目录下的hadoop jar包。 在分布式模式下, hbase依赖的jar包与hadoop集群使用的jar包保持一致非常重要。 为避免版本错误,请使用hadoop集群的jar替换hbase下的hadoop jar 。 确保整个hbase集群上的jar都被替换。 hadoop 版本不匹配会引发各种问题,大部分看起来像程序挂起了。
配置 dfs.datanode.max.transfer.threads
DataNode 有个文件上限, 需要配置hdfs-site.xml 的该属性如下:
<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...
或其他错误,参见, See also casestudies.max.transfer.threads and note that this property was previously known as dfs.datanode.max.xcievers
(e.g. Hadoop HDFS: Deceived by Xciever).
Zookeeper 要求
ZooKeeper 3.4.x 版本及以上。 Hbase使用 multi 功能, 该功能从zk的3.4.0版本开始提供。
hbase.zookeeper.useMulti 属性默认为true 。
参见: HBASE-12241 (The crash of regionServer when taking deadserver’s replication queue breaks replication) and HBASE-6775 (Use ZK.multi when available for HBASE-6710 0.92/0.94 compatibility fix) for background.
对于2.0版本, 该属性已经废弃, 并且useMulti 总是开启的。
网友评论