logo资料库

Hadoop官方文档.pdf

第1页 / 共114页
第2页 / 共114页
第3页 / 共114页
第4页 / 共114页
第5页 / 共114页
第6页 / 共114页
第7页 / 共114页
第8页 / 共114页
资料共114页,剩余部分请下载后查看
Apache HBase™ 参考指南 HBase 官方文档中文版 Copyright © 2012 Apache Software Foundation。保留所有权利。 Apache Hadoop, Hadoop, MapReduce, HDFS, Zookeeper, HBase 及 HBase项目 logo 是Apache Software Foundation的商标。 Revision History Revision 0.97.0-SNAPSHOT 中文版翻译整理 周海汉 2013-04-07T14:59 译者:HBase新版 0.97 文档和0.90版相比,变化较大,文档补充更新了很多内容,章节调整较大。本翻译文档的部分工作基 于颜开工作。英文原文地址在此处。旧版0.90版由颜开翻译文档在此处。0.97版翻译最后更新请到此处( http://abloz.com/hbase/book.html )浏览。反馈和参与请到此处 (https://github.com/ablozhou/hbasedoc_cn/)或访问我 的blog(http://abloz.com),或给我发email。 可以通过浏览器直接存储为pdf或本地文件。 贡献者: 周海汉邮箱:ablozhou@gmail.com, QQ:7268188 网址:http://abloz.com/ 颜开邮箱: yankaycom@gmail.com, 网址:http://www.yankay.com/ 摘要 这是 Apache HBase (TM)的官方文档。 HBase是一个分布式,版本化,面向列的数据库,构建在 Apache Hadoop和 Apache ZooKeeper之上。   目录 序 1. 入门 1.1. 介绍 1.2. 快速开始 2. Apache HBase (TM)配置 2.1. 基础条件 2.2. HBase 运行模式: 独立和分布式 2.3. 配置文件 2.4. 配置示例 2.5. 重要配置   3. 升级 3.1. 从 0.94.x 升级到 0.96.x 3.2. 从 0.92.x 升级到 0.94.x 3.3. 从 0.90.x 升级到 0.92.x 3.4. 从0.20x或0.89x升级到0.90.x   4. HBase Shell 4.1. 使用脚本 4.2. Shell 技巧 5. 数据模型 5.1. 概念视图 5.2. 物理视图 5.3. 表 5.4. 行 5.5. 列族 5.6. Cells 5.7. Data Model Operations 5.8. 版本 5.9. 排序 5.10. 列元数据 5.11. Joins 5.12. ACID 6. HBase 和 Schema 设计 6.1. Schema 创建
6.2. column families的数量 6.3. Rowkey 设计 6.4. 版本数量 6.5. 支持的数据类型 6.6. Joins 6.7. 生存时间 (TTL) 6.8. 保留删除的单元 6.9. 第二索引和替代查询路径 6.10. 限制 6.11. 模式设计用例 6.12. 操作和性能配置选项   7. HBase 和 MapReduce 7.1. Map-Task 分割 7.2. HBase MapReduce 示例 7.3. 在MapReduce工作中访问其他 HBase 表 7.4. 推测执行 8. HBase安全 8.1. 安全客户端访问 HBase 8.2. 访问控制 8.3. 安全批量加载 9. 架构 9.1. 概述 9.2. 目录表 9.3. 客户端 9.4. 客户请求过滤器 9.5. Master 9.6. RegionServer 9.7. 分区(Regions) 9.8. 批量加载 9.9. HDFS 10. 外部 APIs 10.1. 非Java语言和 JVM交互 10.2. REST 10.3. Thrift 10.4. C/C++ Apache HBase Client 11. 性能调优 11.1. 操作系统 11.2. 网络 11.3. Java 11.4. HBase 配置 11.5. ZooKeeper 11.6. Schema 设计 11.7. HBase General Patterns 11.8. 写到 HBase 11.9. 从 HBase读取 11.10. 从 HBase删除 11.11. HDFS 11.12. Amazon EC2 11.13. 案例 12. 故障排除和调试 HBase 12.1. 通用指引 12.2. Logs 12.3. 资源 12.4. 工具 12.5. 客户端 12.6. MapReduce 12.7. NameNode 12.8. 网络 12.9. RegionServer 12.10. Master 12.11. ZooKeeper 12.12. Amazon EC2 12.13. HBase 和 Hadoop 版本相关 12.14. 案例 13. 案例研究 13.1. 概要 13.2. Schema 设计 13.3. 性能/故障排除 14. HBase 运维管理 14.1. HBase 工具和实用程序
14.2. 分区管理 14.3. 节点管理 14.4. HBase 度量(Metrics) 14.5. HBase 监控 14.6. Cluster 复制 14.7. HBase 备份 14.8. 容量规划 15. 创建和开发 HBase 15.1. HBase 仓库 15.2. IDEs 15.3. 创建 HBase 15.4. 添加 Apache HBase 发行版到Apache的 Maven Repository 15.5. 生成HBase 参考指南 15.6. 更新 hbase.apache.org 15.7. 测试 15.8. Maven 创建命令 15.9. 加入 15.10. 开发 15.11. 提交补丁 16. ZooKeeper 16.1. 和已有的ZooKeeper一起使用 16.2. 通过ZooKeeper 的SASL 认证 17. 社区 17.1. 决策 17.2. 社区角色 A. FAQ B. 深入hbck B.1. 运行 hbck 以查找不一致 B.2. 不一致(Inconsistencies) B.3. 局部修补 B.4. 分区重叠修补 C. HBase中的压缩 C.1. CompressionTest 工具 C.2. hbase.regionserver.codecs C.3. LZO C.4. GZIP C.5. SNAPPY C.6. 修改压缩 Schemes D. YCSB: Yahoo! 云服务评估和 HBase   E. HFile 格式版本 2 E.1. Motivation E.2. HFile 格式版本 1 概览 E.3. HBase 文件格式带 inline blocks (version 2) F. HBase的其他信息 F.1. HBase 视频 F.2. HBase 展示 (Slides) F.3. HBase 论文 F.4. HBase 网站 F.5. HBase 书籍 F.6. Hadoop 书籍 G. HBase 历史   H. HBase 和 Apache 软件基金会(ASF) H.1. ASF开发进程 H.2. ASF 报告板 I. Enabling Dapper-like Tracing in HBase I.1. SpanReceivers I.2. Client Modifications J. 0.95 RPC Specification J.1. Goals J.2. TODO J.3. RPC J.4. Notes 词汇表 表索引 2.1. Hadoop version support matrix
5.1. Table webtable 5.2. ColumnFamily anchor 5.3. ColumnFamily contents 8.1. Operation To Permission Mapping   序 这本书是 HBase 的官方指南。 版本为 0.95-SNAPSHOT 。可以在HBase官网上找到它。也可以在 javadoc, JIRA 和 wiki 找 到更多的资料。 此书正在编辑中。 可以向 HBase 官方提供补丁JIRA. 这个版本系译者水平限制,没有理解清楚或不需要翻译的地方保留英文原文。 最前面的话 若这是你第一次踏入分布式计算的精彩世界,你会感到这是一个有趣的年代。分布式计算是很难的,做一个分布 式系统需要很多软硬件和网络的技能。你的集群可以会因为各式各样的错误发生故障。比如HBase本身的Bug,错 误的配置(包括操作系统),硬件的故障(网卡和磁盘甚至内存) 如果你一直在写单机程序的话,你需要重新开始 学习。这里就是一个好的起点: 分布式计算的谬论. Chapter 1. 入门 Table of Contents 1.1. 介绍 1.2. 快速开始 1.2.1. 下载解压最新版本 1.2.2. 启动 HBase 1.2.3. Shell 练习 1.2.4. 停止 HBase 1.2.5. 下一步该做什么   1.1. 介绍 Section 1.2, “快速开始”会介绍如何运行一个单机版的HBase.他运行在本地磁盘上。 Section 2, “配置” 会介绍如何 运行一个分布式的HBase。他运行在HDFS上 1.2. 快速开始 本指南介绍了在单机安装HBase的方法。会引导你通过shell创建一个表,插入一行,然后删除它,最后停止HBase。只要10分 钟就可以完成以下的操作。 1.2.1. 下载解压最新版本 选择一个 Apache 下载镜像,下载 HBase Releases. 点击 stable目录,然后下载后缀为 .tar.gz 的文件; 例如 hbase-0.95- SNAPSHOT.tar.gz. 解压缩,然后进入到那个要解压的目录. $ tar xfz hbase-0.95-SNAPSHOT.tar.gz $ cd hbase-0.95-SNAPSHOT 现在你已经可以启动HBase了。但是你可能需要先编辑 conf/hbase-site.xml 去配置hbase.rootdir,来选择HBase将数据写到哪个目 录 . hbase.rootdir file:///DIRECTORY/hbase 将 DIRECTORY 替换成你期望写文件的目录. 默认 hbase.rootdir 是指向 /tmp/hbase-${user.name} ,也就说你会在重启后丢失数据 (重启的时候操作系统会清理/tmp目录) 1.2.2. 启动 HBase 现在启动HBase: $ ./bin/start-hbase.sh starting Master, logging to logs/hbase-user-master-example.org.out 现在你运行的是单机模式的Hbaes。所有的服务都运行在一个JVM上,包括HBase和Zookeeper。HBase的日志放在logs目录,当你 启动出问题的时候,可以检查这个日志。 是否安装了 java ?
你需要确认安装了Oracle的1.6 版本的java.如果你在命令行键入java有反应说明你安装了Java。如果没有装, 你需要先安装,然后编辑conf/hbase-env.sh,将其中的JAVA_HOME指向到你Java的安装目录。 1.2.3. Shell 练习 用shell连接你的HBase $ ./bin/hbase shell HBase Shell; enter 'help' for list of supported commands. Type "exit" to leave the HBase Shell Version: 0.90.0, r1001068, Fri Sep 24 13:55:42 PDT 2010 hbase(main):001:0> 输入 help 然后 可以看到一列shell命令。这里的帮助很详细,要注意的是表名,行和列需要加引号。 创建一个名为 test 的表,这个表只有一个 列族 为 cf。可以列出所有的表来检查创建情况,然后插入些值。 hbase(main):003:0> create 'test', 'cf' 0 row(s) in 1.2200 seconds hbase(main):003:0> list 'table' test 1 row(s) in 0.0550 seconds hbase(main):004:0> put 'test', 'row1', 'cf:a', 'value1' 0 row(s) in 0.0560 seconds hbase(main):005:0> put 'test', 'row2', 'cf:b', 'value2' 0 row(s) in 0.0370 seconds hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value3' 0 row(s) in 0.0450 seconds 以上我们分别插入了3行。第一个行key为row1, 列为 cf:a, 值是 value1。HBase中的列是由 列族前缀和列的名字组成的,以 冒号间隔。例如这一行的列名就是a. 检查插入情况. Scan这个表,操作如下 hbase(main):007:0> scan 'test' ROW COLUMN+CELL row1 column=cf:a, timestamp=1288380727188, value=value1 row2 column=cf:b, timestamp=1288380738440, value=value2 row3 column=cf:c, timestamp=1288380747365, value=value3 3 row(s) in 0.0590 seconds Get一行,操作如下 hbase(main):008:0> get 'test', 'row1' COLUMN CELL cf:a timestamp=1288380727188, value=value1 1 row(s) in 0.0400 seconds disable 再 drop 这张表,可以清除你刚刚的操作 hbase(main):012:0> disable 'test' 0 row(s) in 1.0930 seconds hbase(main):013:0> drop 'test' 0 row(s) in 0.0770 seconds 关闭shell hbase(main):014:0> exit 1.2.4. 停止 HBase 运行停止脚本来停止HBase. $ ./bin/stop-hbase.sh stopping hbase............... 1.2.5. 下一步该做什么 以上步骤仅仅适用于实验和测试。接下来你可以看 Section 2., “配置” ,我们会介绍不同的HBase运行模式,运行分布式 HBase中需要的软件 和如何配置。 2. 配置   本章是慢速开始配置指导。 HBase有如下需要,请仔细阅读本章节以确保所有的需要都被满足。如果需求没有能满足,就有可能遇到莫名其妙的错误甚至 丢失数据。 HBase使用和Hadoop一样配置系统。要配置部署,编辑conf/hbase-env.sh文件中的环境变量——该配置文件主要启动脚本用于 获取已启动的集群——然后增加配置到XML文件,如同覆盖HBase缺省配置,告诉HBase用什么文件系统, 全部ZooKeeper位 置 [1] 。 在分布模式下运行时,在编辑HBase配置文件之后,确认将conf目录复制到集群中的每个节点。HBase不会自动同步。使 用rsync.
[1] 小心编辑XML。确认关闭所有元素。采用 xmllint 或类似工具确认文档编辑后是良好格式化的。 2.1. 基础条件 This section lists required services and some required system configuration. 2.1.1 java 和Hadoop一样,HBase需要Oracle版本的Java6.除了那个有问题的u18版本其他的都可以用,最好用最新的。 2.1. 操作系统 2.1.2.1. ssh 必须安装ssh , sshd 也必须运行,这样Hadoop的脚本才可以远程操控其他的Hadoop和HBase进程。ssh之间必须都打通,不用 密码都可以登录,详细方法可以Google一下 ("ssh passwordless login"). 2.1.2.2. DNS HBase使用本地 hostname 才获得IP地址. 正反向的DNS都是可以的. 如果你的机器有多个接口,HBase会使用hostname指向的主接口. 如果还不够,你可以设置 hbase.regionserver.dns.interface 来指定主接口。当然你的整个集群的配置文件都必须一致,每个主机 都使用相同的网络接口 还有一种方法是设置 hbase.regionserver.dns.nameserver来指定nameserver,不使用系统带的. 2.1.2.3. Loopback IP HBase expects the loopback IP address to be 127.0.0.1. Ubuntu and some other distributions, for example, will default to 127.0.1.1 and this will cause problems for you. /etc/hosts should look something like this: 127.0.0.1 localhost 127.0.0.1 ubuntu.ubuntu-domain ubuntu 2.1.2.4. NTP 集群的时钟要保证基本的一致。稍有不一致是可以容忍的,但是很大的不一致会造成奇怪的行为。 运行 NTP 或者其他什么东 西来同步你的时间. 如果你查询的时候或者是遇到奇怪的故障,可以检查一下系统时间是否正确! 2.1.2.5.  ulimit 和 nproc HBase是数据库,会在同一时间使用很多的文件句柄。大多数linux系统使用的默认值1024是不能满足的,会导致FAQ: Why do I see "java.io.IOException...(Too many open files)" in my logs?异常。还可能会发生这样的异常 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 所以你需要修改你的最大文件句柄限制。可以设置到10k。大致的数学运算如下:每列族至少有1个存储文件(StoreFile) 可能 达到5-6个如果区域有压力。将每列族的存储文件平均数目和每区域服务器的平均区域数目相乘。例如:假设一个模式有3个列 族,每个列族有3个存储文件,每个区域服务器有100个区域,JVM 将打开3 * 3 * 100 = 900 个文件描述符(不包含打开的jar 文件,配置文件等) 你还需要修改 hbase 用户的 nproc,在压力下,如果过低会造成 OutOfMemoryError异常[3] [4]。 需要澄清的,这两个设置是针对操作系统的,不是HBase本身的。有一个常见的错误是HBase运行的用户,和设置最大值的用户 不是一个用户。在HBase启动的时候,第一行日志会现在ulimit信息,确保其正确。[5] 2.1.2.5.1. 在Ubuntu上设置ulimit 如果你使用的是Ubuntu,你可以这样设置: 在文件 /etc/security/limits.conf 添加一行,如: hadoop - nofile 32768 可以把 hadoop 替换成你运行HBase和Hadoop的用户。如果你用两个用户,你就需要配两个。还有配nproc hard 和 soft limits. 如: hadoop soft/hard nproc 32000 . 在 /etc/pam.d/common-session 加上这一行: session required pam_limits.so 否则在 /etc/security/limits.conf上的配置不会生效.
还有注销再登录,这些配置才能生效! 2.1.2.6. Windows HBase没有怎么在Windows下测试过。所以不推荐在Windows下运行. 如果你实在是想运行,需要安装Cygwin 并虚拟一个unix环境.详情请看 Windows 安装指导 . 或者 搜索邮件列表找找最近的 关于windows的注意点 2.1.3. hadoop 选择 Hadoop 版本对HBase部署很关键。下表显示不同HBase支持的Hadoop版本信息。基于HBase版本,应该选择合适的Hadoop 版本。我们没有绑定 Hadoop 发行版选择。可以从Apache使用 Hadoop 发行版,或了解一下Hadoop发行商产 品: http://wiki.apache.org/hadoop/Distributions%20and%20Commercial%20Support Table 2.1. Hadoop version support matrix HBase-0.92.x HBase-0.94.x HBase-0.96 Hadoop-0.20.205 Hadoop-0.22.x Hadoop-1.0.x Hadoop-1.1.x Hadoop-0.23.x Hadoop-2.x S S S NT X X X X S S S S X X S S NT S S = supported and tested,支持 X = not supported,不支持 NT = not tested enough.可以运行但测试不充分 由于 HBase 依赖 Hadoop,它配套发布了一个Hadoop jar 文件在它的 lib 下。该套装jar仅用于独立模式。在分布式模式 下,Hadoop版本必须和HBase下的版本一致。用你运行的分布式Hadoop版本jar文件替换HBase lib目录下的Hadoop jar文件, 以避免版本不匹配问题。确认替换了集群中所有HBase下的jar文件。Hadoop版本不匹配问题有不同表现,但看起来都像挂掉 了。 2.1.3.1. Apache HBase 0.92 and 0.94 HBase 0.92 and 0.94 versions can work with Hadoop versions, 0.20.205, 0.22.x, 1.0.x, and 1.1.x. HBase-0.94 can additionally work with Hadoop-0.23.x and 2.x, but you may have to recompile the code using the specific maven profile (see top level pom.xml) 2.1.3.2. Apache HBase 0.96 Apache HBase 0.96.0 requires Apache Hadoop 1.x at a minimum, and it can run equally well on hadoop-2.0. As of Apache HBase 0.96.x, Apache Hadoop 1.0.x at least is required. We will no longer run properly on older Hadoops such as 0.20.205 or branch-0.20-append. Do not move to Apache HBase 0.96.x if you cannot upgrade your Hadoop[6]. 2.1.3.3. Hadoop versions 0.20.x - 1.x HBase will lose data unless it is running on an HDFS that has a durable sync implementation. DO NOT use Hadoop 0.20.2, Hadoop 0.20.203.0, and Hadoop 0.20.204.0 which DO NOT have this attribute. Currently only Hadoop versions 0.20.205.x or any release in excess of this version -- this includes hadoop-1.0.0 -- have a working, durable sync[7]. Sync has to be explicitly enabled by setting dfs.support.append equal to true on both the client side -- in hbase-site.xml -- and on the serverside in hdfs-site.xml (The sync facility HBase needs is a subset of the append code path). dfs.support.append true You will have to restart your cluster after making this edit. Ignore the chicken-little comment you'll find in the hdfs-default.xml in the description for thedfs.support.append configuration. 2.1.3.4. Hadoop 安全性 HBase运行在Hadoop 0.20.x上,就可以使用其中的安全特性 -- 只要你用这两个版本0.20S 和CDH3B3,然后把hadoop.jar替换 掉就可以了. 2.1.3.5. dfs.datanode.max.xcievers 一个 Hadoop HDFS Datanode 有一个同时处理文件的上限. 这个参数叫 xcievers (Hadoop的作者把这个单词拼错了). 在你加 载之前,先确认下你有没有配置这个文件conf/hdfs-site.xml里面的xceivers参数,至少要有4096: dfs.datanode.max.xcievers 4096 对于HDFS修改配置要记得重启. 如果没有这一项配置,你可能会遇到奇怪的失败。你会在Datanode的日志中看到xcievers exceeded,但是运行起来会报 missing blocks错误。例如: 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... [5] See also Section 13.3.4, “Case Study #4 (xcievers Config)” 2.2. HBase运行模式:单机和分布式 HBase有两个运行模式: Section 2.4.1, “单机模式” 和 Section 2.4.2, “分布式模式”. 默认是单机模式,如果要分 布式模式你需要编辑 conf 文件夹中的配置文件. 不管是什么模式,你都需要编辑 conf/hbase-env.sh来告知HBase java的安装路径.在这个文件里你还可以设置HBase的运行环 境,诸如 heapsize和其他 JVM有关的选项, 还有Log文件地址,等等. 设置 JAVA_HOME指向 java安装的路径. 2.21. 单机模式 这是默认的模式,在 Section 1.2, “快速开始” 一章中介绍的就是这个模式. 在单机模式中,HBase使用本地文件系统, 而不是HDFS ,所有的服务和zooKeeper都运作在一个JVM中。zookeep监听一个端口,这样客户端就可以连接HBase了。 2.2.2. 分布式模式 分布式模式分两种。伪分布式模式是把进程运行在一台机器上,但不是一个JVM.而完全分布式模式就是把整个服务被分布在各 个节点上了 [6]. 分布式模式需要使用 Hadoop Distributed File System (HDFS).可以参见 HDFS需求和指导来获得关于安装HDFS的指导。在操 作HBase之前,你要确认HDFS可以正常运作。 在我们安装之后,你需要确认你的伪分布式模式或者 完全分布式模式的配置是否正确。这两个模式可以使用同一个验证脚本 Section 2.2.3, “运行和确认你的安装”。 2.2.2.1. 伪分布式模式 伪分布式模式是一个相对简单的分布式模式。这个模式是用来测试的。不能把这个模式用于生产环节,也不能用于测试性能。 你确认HDFS安装成功之后,就可以先编辑 conf/hbase-site.xml。在这个文件你可以加入自己的配置,这个配置会覆盖 Section 2.6.1.1, “HBase 默认配置” and Section 2.2.2.2.3, “HDFS客户端配置”. 运行HBase需要设置hbase.rootdir 属性.该属性是指HBase在HDFS中使用的目录的位置。例如,要想 /hbase 目录,让namenode 监听locahost的9000端口,只有一 份数据拷贝(HDFS默认是3份拷贝)。可以在 hbase-site.xml 写上如下内容 ... hbase.rootdir hdfs://localhost:9000/hbase The directory shared by RegionServers. dfs.replication 1 The replication count for HLog & HFile storage. Should not be greater than HDFS datanode count. ... Note 让HBase自己创建 hbase.rootdir Note 上面我们绑定到 localhost. 也就是说除了本机,其他机器连不上HBase。所以你需要设置成别的,才能使用它。 现在可以跳到 Section 2.2.3, “运行和确认你的安装” 来运行和确认你的伪分布式模式安装了。 [7] 2.2.2.1.1. 伪分布模式配置文件 下面是伪分布模式设置的配置文件示例。 hdfs-site.xml ... dfs.name.dir /Users/local/user.name/hdfs-data-name dfs.data.dir /Users/local/user.name/hdfs-data dfs.replication 1 ... hbase-site.xml ... hbase.rootdir hdfs://localhost:8020/hbase hbase.zookeeper.quorum localhost hbase.cluster.distributed true ... 2.2.2.1.2. 伪分布模式附加 2.2.2.1.2.1. 启动 启动初始 HBase 集群... % bin/start-hbase.sh 在同一服务器启动额外备份主服务器 % bin/local-master-backup.sh start 1 ... '1' 表示使用端口 60001 & 60011, 该备份主服务器及其log文件放在logs/hbase-${USER}-1-master-${HOSTNAME}.log. 启动多个备份主服务器... % bin/local-master-backup.sh start 2 3
分享到:
收藏