HBase管理指南(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-26 16:27:44

点击下载

作者:蒋燚峰 著

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

HBase管理指南

HBase管理指南试读:

前言

作为一个开源、分布式的大数据存储系统,HBase可以处理记录数达几十亿条、字段数达数百万个的大数据,并且只需依靠一些由商品化硬件而构成的集群就可以运行。如果你正在寻找一种能够实时存储和访问海量数据的方法,那么你就必须研究一下HBase。《HBase管理指南》一书提供了一些实用的例子和一些简单详尽的操作步骤,使你可以轻松地管理HBase。本书的章节涵盖了在云计算环境中管理一个完全分布式的高可用HBase集群所需的各种过程。处理如此海量的数据意味着建立起一套有组织、可管理的过程至关重要,本书将帮助你做到这一点。

本书是一部实用性的操作指南,它首先会讲解如何建立一个完全分布式的HBase集群以及如何将数据转移到该集群中。你还将学到如何使用各种工具来完成日常管理工作,以及有效地管理和监控集群,以使集群达到最佳的性能。理解Hadoop与HBase之间的关系能帮你最好地利用HBase,因此本书也将讲解如何安装Hadoop集群,如何配置Hadoop使之可与HBase进行协作、以及如何调整它们的性能。1.本书内容

第1章HBase集群安装:本章将介绍HBase集群的安装方法,首先将介绍基本的单机运行模式的HBase实例的安装方法,然后介绍如何在Amazon EC2上安装完全分布式运行的高可靠性HBase集群。

第2章数据迁移:本章将从简单的任务开始,首先介绍如何使用Put AP将数据从MySQL导入到HBase中;然后,介绍如何使用importtsv和批量加载工具将TSV数据文件加载到HBase中。我们还将使一个MapReduce的例子来导入其他文件格式的数据。其中包括将数据直接放入到一张HBase表中,然后在将其写到HDFS(Hadoop分布式文件系统)文件系统内的HFile格式的文件中。本章的最后一节将介绍如何在将数据加载到HBase之前预创建一些区域。

本章附带有几个用Java编写的示例代码。我们假设你已具备了一些基本的Java知识,所以本章没有解释如何对各节中的Java示例代码进行编译和打包。

第3章使用管理工具:本章将介绍一些管理工具的用法,比如HBase的Web用户界面、HBase Shell、HBase hbck等。我们会解释这些工具的用途以及如何使用它们来完成特定的任务。

第4章HBase数据备份和恢复:在本章中,我们将介绍如何使用不同方法来对HBase的数据进行备份以及各种方法的优点和缺点,还会介绍如何根据你的数据集的规模、资源和需求来选择应该使用何种方法。

第5章监控及诊断:本章将介绍如何使用Ganglia、OpenTSDB、Nagios以及其他一些工具来对HBase集群进行监控和故障诊断。我们还是从一个简单的任务开始,首先介绍如何显示HBase表的磁盘利用率;然后,我们将安装和配置Ganglia来监控HBase的各项指标,并展示一个使用Ganglia图表的例子。我们还会安装OpenTSDB,它与Ganglia类似但更具可伸缩性,因为它构建在HBase之上。

我们将安装Nagios来检查一切我们想要检查的指标,包括HBase的相关守护进程的健康状况、Hadoop/HBase的日志、HBase的不一致问题、HDFS的健康状况和磁盘空间的利用率。

热点区域问题是一个频繁被人问及的问题,本章的最后一节将介绍一种诊断和修复它的方法。

第6章维护和安全:本章前6节的内容主要针对HBase的各种维护工作,比如发现并纠正故障点、改变集群的规模、进行配置修改等。

本章还将讨论安全性的问题。本章的后三节将介绍安装Kerberos并使用Kerberos来设置HDFS的安全机制,并且最终建立一种安全的HBase客户端访问方式。

第7章故障排查:本章将研究几个最常遇到的问题。我们将介绍这些问题的错误消息、发生原因以及如何使用故障排除工具来解决这些问题。

第8章基本性能调整:本章将介绍如何对HBase进行调优,以获得更好的性能。本章还将包括一些对其他调优点进行调优的内容,比如Hadoop的配置、JVM垃圾回收的设置以及操作系统的内核参数等。

第9章高级配置和调优:这是本书中又一个关于性能优化的章节。第8章介绍了一些通过调整Hadoop、操作系统设置、Java和HBase本身来改进HBase集群的整体性能的方法。这是可适用于很多场合的一般性改进方法。本章将介绍一些更具针对性的调优方法,其中有些适用于写密集的集群,而另一些则以提高集群的读性能为目的。2.阅读本书前的准备工作

本书的每一节都会列出你需要的所有东西。

本书所需软件的基本清单如下:● Debian 6.0.1 (squeeze)● Oracle JDK (Java Development Kit) SE 6● HBase 0.92.1● Hadoop 1.0.2● ZooKeeper 3.4.33.本书读者

本书的读者是HBase的管理员和开发人员,同时本书对Hadoop的管理员也有所帮助。读者并非一定要有HBase的使用经验,但应该对Hadoop和MapReduce有基本的了解。4.排版约定

本书使用了一些不同样式的文本来区分不同种类的信息。下面是这些不同样式的一些例子以及对于它们各自含义的解释。

正文中的代码将以这种方式显示:“可以使用stop-hbase.sh脚本来关闭Hbase”。

一段代码将以如下方式显示:nameserver 10.160.49.250 #private IP of nssearch hbase-admin-cookbook.com #domain name

当需要你注意一段代码的某一部分时,我们会把相关的行或项以粗体的方式显示出来:MAJOR_COMPACTION_KEY = \x00MAX_SEQ_ID_KEY = 96573TIMERANGE = 1323026325955....1323026325955hfile.AVG_KEY_LEN = 31hfile.AVG_VALUE_LEN = 4hfile.COMPARATOR = org.apache.hadoop.hbase.KeyValue$KeyComparator

所有命令行的输入或输出都以如下形式显示:$ bin/ycsb load hbase -P workloads/workloada -p columnfamily=f1 -precordcount=1000000 -p threadcount=4 -s | tee -a workloada.datYCSB Client 0.1Command line: -db com.yahoo.ycsb.db.HBaseClient -P workloads/workloada -pcolumnfamily=f1 -p recordcount=1000000 -p threadcount=4 -s -loadLoading workload...

新术语和重要的文字会以粗体显示。你在电脑屏幕上看到文字(比如在菜单或对话框中出现的文字)也将会以粗体显示,比如:“在AWS管理控制台中验证其已经启动”。警告或重要的说明将会显示在这样一个方框中。提示和技巧将会显示在这样一个方框中。5.读者反馈

我们随时欢迎来自本书读者的反馈。请让我们知道您的想法——您喜欢或可能不喜欢本书的哪些内容。读者的反馈非常重要,它能指引我们撰写出真正对读者有价值的书籍。

对于一般性的反馈,您只需将电子邮件发送至feedback@packtpub.com就可以了,请在您的邮件标题中注明本书的名字。

如果您具有某一领域的专长,并且有兴趣写一本书或者对某一本书作出些贡献,那么请您阅读一下我们的作者指南(www.packtpub.com/authors)。6.客户支持

我们还为您提供了如下一些东西来帮您从本次购买中获得最大的收益。

6.1 下载示例代码

您可以从您在http://www.packtpub.com的账户中下载到您所购买的所有Packt图书的示例代码文件。如果您是从其他地方购买的本书,那么您可以访问http://www. packtpub.com/support进行注册,然后我们会以电子邮件的方式直接将这些文件发送给您。

6.2 勘误

虽然我们已尽力确保本书内容的准确性,但错误依旧在所难免。如果你发现了书中的错误——无论是文字还是代码中的错误,都请报告给我们,我们将不胜感激。您这样做可以避免其他读者遭受挫折,并且能帮助我们改进本书的后续版本。如果您发现了错误,请以这种方式报告给我们:访问http://www.packtpub.com/support,选择您所购买的书,点击链接“errata submission form”,然后输入您勘误的详细内容。在验证完你所提交的勘误之后,我们将接受您的提交并将此勘误上传到我们的网站中或添加到该书勘误区的已有勘误列表中。

6.3 盗版行为

互联网上的盗版问题是所有媒体都在面临的一个将长期存在的问题。Packt出版公司非常重视保护自己的版权和许可权。如果您在互联网上遇到了本公司作品的任何形式的非法拷贝,都请您立即将其地址或网站名称提供给我们,以便于我们提出赔偿。

请将涉嫌盗版的链接发送至copyright@packtpub.com与我们联系。

我们非常感谢您在保护作者和出版公司方面所提供的帮助,这样我们才能继续为您提供一些更有价值的内容。

6.4 问题

无论您对本书有任何方面的问题,都可以通过questions@packtpub.com与我们联系,我们将尽最大努力来解决您的问题。第1章 HBase集群安装

本章内容:● 快速入门● Amazon EC2的安装及准备● Hadoop安装● ZooKeeper安装● 内核参数设置修改● HBase安装● Hadoop/ZooKeeper/HBase基本配置● 多个高可靠性(HA)主节点的安装1.1 简介

本章将介绍HBase集群的安装方法,首先将介绍基本的单机运行模式的HBase实例的安装方法,然后介绍如何在Amazon EC2上安装完全分布式运行的高可靠性HBase集群。

根据Apache HBase主页上的定义:

HBase是Hadoop上的数据库。它适合在需要对大数据进行随机且实时读写的情况下使用。其目标是在基于商品化硬件构建的集群之上存储那些非常大的表——比如那些有数百万个字段和数十亿条记录的大表。

HBase可以在任何文件系统上运行。比如说,无论是在EXT4本地文件系统、Amazon S3(Amazon Simple Storage Service),还是Hadoop分布式文件系统(HDFS)上,都可以运行HBase。 HDFS是Hadoop首选的分布式文件系统,因此大多数完全分布式的HBase集群都运行在HDFS文件系统上,所以我们将首先介绍一下如何安装Hadoop。

Apache ZooKeeper是一个开源软件,它能够提供一种具有高可靠性的分布式的协调服务。分布式的HBase需要运行一个ZooKeeper集群。

作为一种运行在Hadoop上的数据库,HBase需要同时打开很多个文件。 为了使HBase能够顺畅运行,我们需要修改一些Linux内核参数的设置。

一个完全分布式的HBase集群都有一个或多个主节点(HMaster)和许多从节点(RegionServer),其中主节点用于协调整个集群,从节点用于处理实际的数据存储和要求。图1-1显示的是一个典型的HBase集群结构。图1-1 典型的HBase集群结构

HBase可以同时运行多个主节点,它会使用Zookeeper来监控这些主节点和实现这些主节点之间的故障转移。不过,由于HBase在底层使用了HDFS来作为它的文件系统,所以如果HDFS宕机了,HBase也自然要宕机。HDFS的主节点(我们称之为NameNode)是HDFS的单点故障(SPOF,Single Point Of Failure),因此也是HBase集群的单一故障点。幸运的是,NameNode在软件方面非常健壮和稳定。此外,HDFS的研发团队也正在努力开发具有真正高可靠性的NameNode,Hadoop的下一个主要发布版本可能就会包含这一特性。

在1.2~1.8节中,我们将介绍如何让HBase与它所需要使用的那些软件一起工作,构建起一个完全分布式的HBase集群。最后一节将介绍一个较为高级的话题——如何避免集群的单点故障问题。

下面,我们就开始介绍如何安装一个单机运行的HBase实例,之后再来演示如何在Amazon EC2上安装一个分布式的HBase集群。1.2 快速入门

HBase有两种运行模式:单机运行(Standalone)模式和分布式运行(Distributed)模式。单机运行模式是HBase的默认模式。在单机模式中,HBase会使用一个本地文件系统来代替HDFS,并且在同一个JVM上运行所有的HBase守护进程和HBase管理的ZooKeeper实例。

本节将介绍单机HBase的安装。内容包括:安装HBase、以单机模式启动HBase、在HBase Shell中创建一张表、插入记录、清除记录以及关闭单机模式HBase实例。1.2.1 准备

你需要有一台Linux机器来运行这组软件栈。不建议在Windows系统之上运行HBase。本书将以Debian 6.0.1(Debian Squeeze)为例进行讲解,因为我所任职的Rakuten公司就有多个运行在Debian上的Hadoop/HBase集群,而6.0.1是目前最新一版的Amazon Machine Image(AMI)。你可以从http://wiki.debian.org/Cloud/AmazonEC2Image下载它。

HBase是用Java编写的,因此需要先安装Java。HBase只能运行在Oracle的JDK上,所以在安装时不要使用OpenJDK。尽管Java 7已经发布了,但我们并不建议使用,因为它还需要更多的时间来测试。可以从下列地址中下载到最新版的Java SE 6:http://www.oracle.com/technetwork/java/javase/downloads/index.html。

执行下载到的二进制文件,安装Java SE 6。本书将使用/usr/local/jdk1.6来作为JAVA_HOME。root# ln -s /your/java/install/directory /usr/local/jdk1.6

我们将新建一个名为Hadoop的用户,用来作为所有HBase/Hadoop守护进程和文件的所有者。我们还要把所有HBase文件和数据都存储在/usr/local/hbase目录下。root# useradd hadooproot# mkdir /usr/local/hbaseroot# chown hadoop:hadoop /usr/local/hbase1.2.2 操作步骤

从HBase官方网站(http://www.apache.org/dyn/closer.cgi/hbase/)上可以下载到HBase的最新稳定版本。

单机运行模式HBase实例的安装步骤如下。

1.下载HBase源码包,然后将其解压缩到我们为HBase准备的根目录中。为了使安装过程更为简单,我们还要设置一个HBASE_HOME环境变量。完成这两组操作的命令如下:root# su - hadoophadoop$ cd /usr/local/hbasehadoop$ tar xfvz hbase-0.92.1.tar.gzhadoop$ ln -s hbase-0.92.1 currenthadoop$ export HBASE_HOME=/usr/local/hbase/current

2.在HBase的环境设置文件中设定环境变量JAVA_HOME,命令如下:hadoop$ vi $HBASE_HOME/conf/hbase-env.sh # The java implementation to use. Java 1.6 required. export JAVA_HOME=/usr/local/jdk1.6

3.为HBase创建一个用于存储数据的目录,然后将该路径设置在HBase配置文件(hbase-site.xml)的 标签内。此步操作所使用的命令如下:hadoop$ mkdir -p /usr/local/hbase/var/hbasehadoop$ vi /usr/local/hbase/current/conf/hbase-site.xml hbase.rootdir file:///usr/local/hbase/var/hbase

4.使用如下命令以单机运行模式启动HBase:hadoop$ $HBASE_HOME/bin/start-hbase.shstarting master, logging to /usr/local/hbase/current/logs/hbase- hadoop- master-master1.out

5.使用如下命令通过HBase Shell连接到正在运行的HBase上:hadoop$ $HBASE_HOME/bin/hbase shell HBase Shell; enter 'help' for list of supported commands.Type "exit" to leave the HBase ShellVersion 0.92.1, r1298924, Fri Mar 9 16:58:34 UTC 2012

6.创建一张表并再插入一些值,以此来验证HBase是否安装正确。使用如下命令创建一张名为test的表,并为该表创建一个名为cf1的列族。hbase(main):001:0> create 'test', 'cf1'0 row(s) in 0.7600 seconds(1)使用如下命令列出新创建的这张表:hbase(main):002:0> listTABLEtest1 row(s) in 0.0440 seconds(2)使用如下命令在新创建的表中插入一些值:hbase(main):003:0> put 'test', 'row1', 'cf1:a', 'value1'0 row(s) in 0.0840 secondshbase(main):004:0> put 'test', 'row1', 'cf1:b', 'value2'0 row(s) in 0.0320 seconds

7.使用scan命令验证我们已将数据插入到了HBase中:hbase(main):003:0> scan 'test'ROW COLUMN+CELLrow1 column=cf1:a, timestamp=1320947312117, value=value1row1 column=cf1:b, timestamp=1320947363375, value=value21 row(s) in 0.2530 seconds

8.现在,使用disable和drop命令清除掉前面的操作。(1)使用如下命令禁用表 test:hbase(main):006:0> disable 'test'0 row(s) in 7.0770 seconds(2)使用如下命令删除表test:hbase(main):007:0> drop 'test'0 row(s) in 11.1290 seconds

9.使用如下命令退出HBase Shell:hbase(main):010:0> exit

10.执行stop脚本关闭HBase实例:hadoop$ /usr/local/hbase/current/bin/stop-hbase.shstopping hbase.......1.2.3 运行原理

通过上面的操作,我们在单台服务器上完成了HBase 0.92.1的安装工作。我们使用了一个名为current的符号链接来指向其安装包的解压缩目录,这样可以使将来的升级更为方便。

为了让HBase能够知道Java的安装位置,我们在HBase的环境设置脚本HBase-env.sh中设置了JAVA_HOME。该脚本中还有一些关于Java堆和HBase守护进程的设置。本书的8~9章将对这些设置进行深入的讨论。

在第1步中,我们在本地文件系统中创建了一个目录,用于存储HBase的数据。在安装完全分布式的HBase时,需要将HBase配置为使用HDFS(而非使用本地文件系统)的方式。当我们在一台服务器上执行了start-hbase.sh脚本时,在该服务器上将会启动一个HBase的主守护进程(HMaster)。因为这一次我们没有配置区域服务器,所以HBase也只是在同一个JVM中启动了一个从守护进程(HRegionServer)。

正如“1.1 简介”一节提到过的那样,HBase需要使用ZooKeeper来作为自己的协调服务。而你可能也已经注意到了,前面这些步骤中并没有启动ZooKeeper。这是因为HBase在默认情况下会启动和管理一个它自己的ZooKeeper仲裁团。

接下来,我们通过HBase Shell连接上了HBase。我们可以使用HBase Shell来管理HBase集群、访问HBase中的数据并完成很多其他的工作。这一次,我们创建了一张名为test的表,向HBase中插入了一些数据,对test表进行了扫描,然后禁用并删除了这张表,最后退出了shell。

我们可以使用HBase的stop-hbase.sh脚本来关闭HBase。该脚本会将HMaster和HRegionServer守护进程都关闭。1.3 Amazon EC2的安装及准备

Amazon EC2(Amazon Elastic Compute Cloud)是一种可在云计算环境中提供具有可伸缩行的计算能力的Web服务。通过使用Amazon EC2,我们只需用很低的成本就可以轻松地体验到完全分布式运行的HBase的运行模式。本书中用来展示HBase各种管理操作的所有服务器都运行在Amazon EC2上。

本节将介绍如何安装Amazon EC2环境,这是在EC2上安装HBase的准备工作。我们将建立在Amazon EC2上一个名称服务器和客户端。你也可以使用其他一些托管服务(比如Rackspace)或使用一些真正的服务器来建立HBase集群。1.3.1 准备

你需要在http://aws.amazon.com/上注册或创建一个Amazon Web Service(AWS)账户。

管理实例需要使用一些EC2命令行工具。你可以按照如下网页中的操作说明来下载并安装这些命令行工具。http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?SettingUp_CommandLine.html

为了能够登录到EC2实例上,你需要一个公钥/私钥对。你可以使用该网页中的操作指令来生成自己的密钥对,然后将你的公共密钥上传到EC2上。http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/generating-a-keypair.html

在你登录到一个实例上之前,你必须进行访问授权。下面这个链接中包含有如何向默认安全组添加规则的操作说明。http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/addingsecurity-group-rules.html

在完成上述这些步骤之后,请按照下面的清单进行一下检查,以确保一切都已准备就绪。● X.509证书:检查X.509证书是否已经上传。你可以在自己帐户的

Security Credentials(安全凭据)页中完成此项检查。● EC2密钥对:检查EC2密钥对是否已经上传。您可以在AWS

Management Console | Amazon EC2 | NETWORK & SECURITY |

Key Pairs中完成此项检查。● 访问权限:检查是否已授权可以进行访问。此项检查可在AWS

Management Console | Amazon EC2 | NETWORK & SECURITY |

Security Groups | Inbound中完成。● 环境变量设置:检查是否已完成了环境变量的设置。举例来说,

下面这段代码就可以显示出我所设置的环境变量;你要确保其中

所使用的EC2_URL正确地表明了你所属的地区。$ cat ~/.bashrcexport EC2_HOME=~/opt/ec2-api-tools-1.4.4.2export PATH=$PATH:$EC2_HOME/binexport EC2_PRIVATE_KEY=~/.ec2/pk-OWRHNWUG7UXIOPJXLOBC5UZTQBOBCVQY.pemexport EC2_CERT=~/.ec2/cert-OWRHNWUG7UXIOPJXLOBC5UZTQBOBCVQY.pemexport JAVA_HOME=/Library/Java/Homeexport EC2_URL=https://ec2.us-west-1.amazonaws.com

我们需要先通过EC2命令行工具来导入自己的EC2密钥对,然后才能管理这些EC2实例。$ ec2-import-keypair your-key-pair-name --public-key-file ~/.ssh/id_rsa.pub

键入如下这条命令来验证设置是否正确。$ ec2-describe-instances

如果上述这些设置都已正确完成,该命令将显示出各实例的设置信息,所显示的内容应与你在之前使用命令进行配置时的信息类似。下载示例代码您可以从您在http://www.packtpub.com的账户中下载到您所购买的所有Packt图书的示例代码文件。如果您是从其他地方购买的本书,您可以访问http://www.packtpub.com/support进行注册,然后我们会以电子邮件的方式直接将这些文件发送给您。

最后一项准备工作是找到一个合适的AMI。我们可以在http://wiki.debian.org/Cloud/AmazonEC2Image上找到一个已注册的Debian AMI。

如果只是为了体验一下HBase,那么使用以EBS为后端的32位AMI是最具成本效益的选择。要确保你所选择的是为你所属地区而提供的AMI。由于本书所使用的地区是US-West(us-west-1),所以对我们来说,该AMI的ID是ami-77287b32。这是一个32位的小EC2实例。小实例很便宜,因此适合用来在EC2中对HBase进行体验。如果是生产环境,建议你至少使用带EBS的高内存超大实例(High-Memory Extra Large Instance)或一个真正的服务器。1.3.2 操作步骤

请按照以下步骤操作你的EC2实例,以便为使用HBase做好准备。我们将启动两个EC2实例,一个作为DNS/NTP服务器,另一个作为DNS/NTP客户端。

1.启动一个微实例来作为DNS/NTP服务器。本书后面的章节将一直使用ns1.hbase-admin-cookbook.com(ns1)来作为该服务器的完全限定域名(FQDN)。$ ec2-run-instances ami-77287b32 -t t1.micro -k your-key-pair

2.启动一个小实例作为DNS/NTP客户端。本书后面的章节将一直使用client1. hbase-admin-cookbook.com(client1)作为该客户端的FQDN。$ ec2-run-instances ami-77287b32 -t m1.small -k your-key-pair

3.在AWS Management Console中验证这些实例是否都已启动,也可以通过键入以下命令进行验证。$ ec2-describe-instances

在该命令的输出中,应该能够看到两个实例。从ec2-describe-instances命令的输出结果或AWS Management Console中,可以看到这些已启动实例的公网DNS。它们的DNS应该是一些格式大致为ec2-xx-xx-xxx-xx.us-west-1.compute.amazonaws. com的值(如图1-2所示)。图1-2 EC2实例的公网DNS

4.使用如下命令通过SSH登录实例。$ ssh root@ec2-xx-xx-xxx-xx.us-west-1.compute.amazonaws.com

5.在为服务器安装软件包之前,先使用如下命令更新软件包索引文件。root# apt-get update

6.使用如下命令将实例所属时区修改为你所在的时区。root# dpkg-reconfigure tzdata

7.使用如下命令在DNS服务器上安装NTP服务器守护程序。root@ns# apt-get install ntp ntp-server ntpdate

8.使用如下命令在客户机/服务器上安装NTP客户端。root@client1# apt-get install ntp ntpdate

9.分别修改/etc/ntp.conf配置文件,让ns1作为NTP服务器运行,让client1作为一个以ns1为服务器的NTP客户端来运行。

因为在NTP设置中没有什么HBase特别要求的配置,所以这里就不对此进行详述了。在本书的示例源码中,可以找到服务器端和客户端不同ntp.conf文件的示范样本。

10.在ns1上安装BIND9作为DNS服务器。root@ns# apt-get install bind9

BIND9还需要进行一下配置,以使之成为内部域名查找时的首选主服务器和外部域名查找时的缓存服务器。DNS服务器也需要进行配置,以使其他EC2实例可以更新自己在DNS服务器上的记录。

这部分内容并不属于本书所要讲述的范畴,所以我们将不对此进行详述。BIND9配置文件的样本,请参阅本书所附带的示例源码。

11.对于client1,只需配置其把ns1作为自己的DNS服务器就可以了。root@client1# vi /etc/resolv.confnameserver 10.160.49.250 #private IP of nssearch hbase-admin-cookbook.com #domain name

12.自动更新DNS主机名。将客户端EC2实例的用户数据设为其主机名。打开AWS Management Console的My Instances页,在实例列表中选中client1并将其关闭,然后单击Instance Actions | View | Change User Data。在图1-3所示的弹出页面输入你想要给该实例使用的主机名(在本例中为client1)。图1-3 将用户数据设为客户端EC2实例的主机名

13.创建一个使用该用户数据来更新DNS服务器上该客户端的记录的脚本。root@client1# vi ec2-hostname.sh#!/bin/bash#you will need to set up your DNS server to allow update from this keyDNS_KEY=/root/etc/Kuser.hbase-admin-cookbook.com.+157+44141.privateDOMAIN=hbase-admin-cookbook.comUSER_DATA='/usr/bin/curl -s http://169.254.169.254/latest/userdata'HOSTNAME='echo $USER_DATA'#set also the hostname to the running instancehostname $HOSTNAME#we only need to update for local IPLOCIP='/usr/bin/curl -s http://169.254.169.254/latest/meta-data/local-ipv4'cat<

14.最后,在rc.local文件中添加下列脚本,以使ec2-hostname.sh可以在启动时由rc.local调用执行。root@client1# vi /etc/rc.localsh /root/bin/ec2-hostname.sh1.3.3 运行原理

首先,我们启动了两个实例,一个微实例作为DNS/NTP服务器,一个小实例作为其客户端。为了能给其他实例提供名称服务,DNS名称服务器必须一直保持运行。使用微实例可以降低你的EC2成本。

在第3步中,我们设置好了NTP服务器和客户端。我们让NTP服务器与DNS服务器运行在同一个实例上,然后在其他所有实例上运行NTP客户端。注意:请确保HBase集群中各成员的时钟上基本一致。

EC2实例可以按需启用和关闭,并且还无需为已关闭的实例付费。但重新启动EC2实例会使实例的IP地址发生改变,这会给HBase的运行带来麻烦。我们可以运行一个DNS服务器来为HBase集群中所有EC2实例提供名称服务,这样就可以解决IP地址变化的问题。我们可以让其他EC2实例在每次重新启动时都更新一下自己在DNS服务器上的名称记录。

这就是我们在第4步和第5步中做的事情。第4步是常规的DNS设置。在第5步中,我们把实例的名称保存在了该实例的用户数据属性中,这样做的目的是:在该实例重新启动后,我们仍可以使用EC2 API来找回它的名字。此外,我们还可以通过EC2 API来获得该实例的私有IP地址。有了这些数据,我们就可以在实例每次重启时向DNS服务器发送一个DNS update命令更新该实例名称对应的IP地址。这样,我们就可以始终使用一个固定主机名来访问该实例了。

只有DNS实例需要一直保持运行。在不需要运行HBase集群时,我们可以将其他所有实例都关掉。1.4 安装Hadoop

完全分布式的HBase要运行在HDFS之上。对于完全分布式的HBase集群来说,其主守护进程(HMaster)通常要运行在HDFS主节点所在的服务器(NameNode)上,而其从守护进程(HRegionServer)要运行在HDFS从节点所在的服务器(我们称之为DataNode)上。

HBase并不必须使用Hadoop MapReduce,所以我们也不需要启动MapReduce的守护进程。本节也会对MapReduce的安装进行介绍,因为你毕竟有可能要在HBase上运行MapReduce。对于一个小型的Hadoop集群来说,我们通常会在NameNode服务器上运行一个MapReduce主守护进程(JobTracker),在各Datanode服务器上运行MapReduce从守护进程(TaskTracker)。

本节将介绍Hadoop的安装。我们将用一个主节点(master1)来运行NameNode和JobTracker。另外,我们还将安装3个从节点(slave1到slave3),这三个节点将分别用来运行DataNode和TaskTracker。1.4.1 准备

你需要4个小EC2实例,你可以通过下面这条命令来获得4个小EC2实例。$ec2-run-instances ami-77287b32 -t m1.small -n 4 -k your-key-pair

对于所有这4个实例,必须如“1.3 Amazon EC2的安装及准备”一节所述的那样进行正确的设置。除了NTP和DNS的设置之外,所有服务器上还都必须安装Java。

我们将使用hadoop用户来作为所有Hadoop守护进程和文件的所有者。所有Hadoop文件和数据都将存储在/usr/local/hadoop目录下。因此,要预先在所有服务器上添加hadoop用户并创建/usr/local/hadoop目录。

我们还要安装一个Hadoop客户端节点。我们将使用前一节中已配置好的client1节点来作为客户端节点。因此,在client1上也要安装Java并准备好hadoop用户和目录。1.4.2 操作步骤

安装一个完全分布式运行的Hadoop集群的步骤如下。

1.为了能SSH登录到集群的所有节点上,需要在主节点上生成hadoop用户的公共密钥。hadoop@master1$ ssh-keygen -t rsa -N ""

这个命令将在主节点上为hadoop用户创建一个公共密钥:~/.ssh/id_rsa.pub。

2.在所有从节点和客户端节点中添加hadoop用户的公共密钥,以使我们可以从主节点对该节点进行SSH登录。hadoop@slave1$ mkdir ~/.sshhadoop@slave1$ chmod 700 ~/.sshhadoop@slave1$ cat >> ~/.ssh/authorized_keys

3.复制上一步生成的hadoop用户公共密钥的内容,将其粘贴到~/.ssh/ authorized_keys文件中。然后,使用如下命令修改该文件的权限。hadoop@slave1$ chmod 600 ~/.ssh/authorized_keys

4.从Hadoop的官方网站(http://www.apache.org/dyn/closer.cgi/hadoop/common/)获取最新、稳定且支持HBase的Hadoop版本。在写作本章时,支持HBase的Hadoop的最新稳定版本是1.0.2版。下载压缩包并将其解压到我们为Hadoop而设的root目录中,然后再添加一个符号链接和环境变量。hadoop@master1$ ln -s hadoop-1.0.2 currenthadoop@master1$ export HADOOP_HOME=/usr/local/hadoop/current

5.在主节点上创建如下几个目录。hadoop@master1$ mkdir -p /usr/local/hadoop/var/dfs/namehadoop@master1$ mkdir -p /usr/local/hadoop/var/dfs/datahadoop@master1$ mkdir -p /usr/local/hadoop/var/dfs/namesecondary

6.如果不使用MapReduce,可以跳过下面几个步骤。如果使用MapReduce,则需要为其创建一个目录。hadoop@master1$ mkdir -p /usr/local/hadoop/var/mapred

7.在Hadoop环境设置文件(hadoop-env.sh)中设置 JAVA_HOME。hadoop@master1$ vi $HADOOP_HOME/conf/hadoop-env.shexport JAVA_HOME=/usr/local/jdk1.6

8.在core-site.xml中添加hadoop.tmp.dir属性。hadoop@master1$ vi $HADOOP_HOME/conf/core-site.xml hadoop.tmp.dir /usr/local/hadoop/var

9.在core-site.xml中添加fs.default.name属性。hadoop@master1$ vi $HADOOP_HOME/conf/core-site.xml fs.default.name hdfs://master1:8020

10.如果你需要MapReduce,则需要在mapred-site.xml中添加mapred.job. tracker属性。hadoop@master1$ vi $HADOOP_HOME/conf/mapred-site.xml mapred.job.tracker master1:8021

11.添加一个从服务器列表文件slaves。hadoop@master1$ vi $HADOOP_HOME/conf/slavesslave1slave2slave3

12.将所有Hadoop文件从主节点同步到各客户端节点和从节点上。如果不是初次安装,则不需要同步${hadoop.tmp.dir}目录。hadoop@master1$ rsync -avz /usr/local/hadoop/ client1:/usr/local/hadoop/hadoop@master1$ for i in 1 2 3 do rsync -avz /usr/local/hadoop/ slave$i:/usr/local/hadoop/ sleep 1done

13.在启动Hadoop之前,你需要格式化NameNode节点。该操作仅在初始安装时执行。hadoop@master1$ $HADOOP_HOME/bin/hadoop namenode -format

14.在主节点上启动HDFS。hadoop@master1$ $HADOOP_HOME/bin/start-dfs.sh

15.键入如下命令可访问你的HDFS。hadoop@master1$ $HADOOP_HOME/bin/hadoop fs -ls /

你也可以通过浏览器来查看此HDFS的管理页面。请确保50070端口处于打开状态。访问http://master1:50070/dfshealth.jsp,便可看到图1-4所示的HDFS管理页面。图1-4 HDFS管理页面

16.如果需要的话,在主节点上启动MapReduce。hadoop@master1$ $HADOOP_HOME/bin/start-mapred.sh

现在,你就可以从浏览器中访问MapReduce的管理页面了。请确保50030端口处于打开状态。访问http://master1:50030/jobtracker.jsp,便可看到图1-5所示的MapReduce管理页面。图1-5 MapReduce管理页面

17.若要停止HDFS,请在主节点上执行如下命令。hadoop@master1$ $HADOOP_HOME/bin/stop-dfs.sh

18.要停止MapReduce,请在主节点上执行如下命令。hadoop@master1$ $HADOOP_HOME/bin/stop-mapred.sh1.4.3 运行原理

若要从主节点上启动/关闭远程从节点上的守护进程,必须用hadoop用户以无密码SSH登录的方式进行操作。这便是我们在第1步中做的事情。

HBase必须运行在一个支持持久化的sync实现的特殊HDFS上。如果在不支持持久化的sync实现的HDFS上运行HBase,那么在从服务器宕机时,HBase就有可能会丢失数据。在0.20.205以后的各版本(包括我们所选择的Hadoop1.0.2)中,Hadoop都支持此功能。

HDFS和MapReduce要使用本地文件系统来存储它们自己的数据。我们在第3步中创建了Hadoop所需要的目录,在第8步中将该路径设置在了Hadoop配置文件中。

在第9至11步中,我们对Hadoop进行了设置,以使它可以找到HDFS、JobTracker和从服务器。在启动Hadoop之前,需要将所有Hadoop目录和设置都同步到各个从服务器上。在第一次启动Hadoop(HDFS)时,需要对NameNode进行格式化。请注意,只需要在初始安装时做一次格式化就可以了。

执行到这一步,你就可以使用Hadoop的启动/停止脚本来启动/停止Hadoop了。在本例中,我们要将HDFS和MapReduce分开进行启动/停止,因为你有可能并不需要MapReduce。你也可以使用$HADOOP_HOME/bin/start-all.sh和stop-all.sh来同时启动/停止HDFS和MapReduce。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载