HadoopHBase使用指南
Hadoop+Zookeeper+HBase部署指南

Hadoop+Zookeeper+HBase安装指南RUC DB-IIR 卞昊穹/bhq2010bianhaoqiong@2012.07.28-Version1集群情况:4个节点,IP分别为:node0: 192.168.181.136(NameNode/JobTracker/SecondaryNameNode/HMaster)node1: 192.168.181.132(DataNode/TaskTracker/HRegionServer/QuorumPeerMain)node2: 192.168.181.133(DataNode/TaskTracker/HRegionServer/QuorumPeerMain)node3: 192.168.181.134(DataNode/TaskTracker/HRegionServer/QuorumPeerMain)软件版本:CentOS Linux 6.2 x86_64(2.6.32)OpenJDK-1.6.0_24Hadoop-1.0.2Zookeeper-3.4.3HBase-0.94.0目录1. hosts和hostname设置 (2)2. SSH设置 (2)3. Hadoop配置安装 (3)4. Zookeeper配置安装 (5)5. HBase配置安装 (6)1. hosts和hostname设置安装分布式的Hadoop和HBase集群需要在每一个节点上都设置网络中的hosts和本机的hostname。
首先将/etc/hosts文件中127.0.0.1这一行的中间一段改为本机的主机名,并在文件末尾添加hosts配置,每行为一个ip地址和对应的主机名,以空格分隔。
以node0为例,修改后的hosts 文件如下:再将/etc/sysconfig/network文件中HOSTNAME=一行中“=”之后内容改为主机名,如:2. SSH设置之后,在node0生成ssh公钥,添加到node1/2/3的~/.ssh/authorized_keys文件中以实现node0无密码登录node1/2/3,参考:/bhq2010/article/details/6845985此处node0是ssh客户端,node1/2/3是ssh服务器端。
HBASE安装及客户端编程配置

HBASE 安装一、安装指南二、常见问题一、安装指南Hadoop+Hbase安装配置实录2010-10-12 22:53生产环境:3台机器:master(192.168.0.61),slave1(192.168.0.62),slave2(192.168.0.63) 注意:hostname设置为master/slave1/slave2操作系统:rhel5.4 x86_64master做为namenonde,将slave1和slave2做为datanode1.在master:(在slave1和slave2上操作和以下相同)vi /etc/hosts192.168.0.61 master192.168.0.62 slave1192.168.0.63 slave22.用root操作3.免密码登录#ssh-keygen -t rsa #建立ssh目录,敲回车到底 ,这一步需要先在每台机器上执行。
在master上#scp ~/.ssh/id_rsa.pub root@slave1:/root/.ssh/id_rsa.pub_m将master 上的密钥传到slave1的/home/hadoop下在slave1上#cat /root/.ssh/id_rsa.pub_m >> ~/.ssh/authorized_keys#chmod 644 ~/.ssh/authorized_keys反复操作第3步,完成master<-->slave1 master<-->slave2的免密码登录这样主节点和从节点之间就可以不用密码直接ssh访问,另外,在启动hadoop 时需要master ssh master,因此,在master的~/.ssh下,也执行下cat id_rsa.pub >> authorized_keys 即可。
4.安装JDK到/usr/local下命名为jdk6然后:编辑三台机器的/etc/profile,增加如下内容export JAVA_HOME=/usr/local/jdk6export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport HADOOP_HOME=/hadoop/hadoopexport HBASE_HOME=/hadoop/hbasePATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin#vi /root/.bashrc增加export HADOOP_CONF_DIR=/hadoop/hadoop-configexport HBASE_CONF_DIR=/hadoop/hbase-config5、防火墙各机器加入iptables策略:#iptables -I INPUT -s 192.168.0.0/255.255.255.0 -j ACCPET#service iptables save-----------------------------------------hadoop配置:1.下载安装#cd /hadoop#wget/apache-mirror//hadoop/core/hadoop-0.20.2/hadoo p-0.20.2.tar.gz#tar -zxvf hadoop-0.20.2.tar.gz#ln -s hadoop-0.20.2 hadoop由于上述目录中hadoop的配置文件和hadoop的安装目录是放在一起的,这样一旦日后升级hadoop版本的时候所有的配置文件都会被覆盖,因此将配置文件与安装目录分离,一种比较好的方法就是建立一个存放配置文件的目录,/hadoop/hadoop-config/,然后将 /hadoop/hadoop/conf/目录中的core-site.xml,slaves,hadoop-env.sh,masters, hdfs-site.xml,mapred-site.xml,这6个文件拷贝到 /hadoop/hadoop-config/目录中,并指定环境变量$HADOOP_CONF_DIR指向该目录。
hbase使用场景和成功案例

hbase使用场景和成功案例HBase是一个高可靠性、高性能、分布式的NoSQL数据库,它建立在Hadoop 分布式文件系统(HDFS)之上,提供了对大规模数据的存储和处理能力。
HBase 的设计目标是面向大数据,并且能够处理海量数据的读写操作。
在现实世界中,HBase被广泛应用于许多不同的场景中,取得了很多成功的案例。
1. 社交网络社交网络是大规模数据的重要来源之一,HBase在处理社交网络数据方面非常有优势。
HBase的高可扩展性和快速读写能力使得它成为存储用户信息、关系网络和社交媒体数据的理想选择。
Facebook就是一个成功使用HBase的案例。
Facebook使用HBase存储海量的用户数据、社交关系和用户活动日志,以支持其庞大的用户群体。
2. 实时分析HBase的快速读写能力使得它非常适合用于实时分析场景。
实时分析通常需要快速获取大量的数据,并对其进行实时计算和统计分析。
HBase的分布式架构和列式存储模式允许并行读写,能够满足实时分析的性能需求。
Twitter使用HBase来存储和分析大规模的实时数据流,以便快速检索和分析用户的发帖信息。
3. 日志处理日志处理是另一个适合使用HBase的场景。
日志数据通常具有高度的结构化,而且需要进行强大的查询和分析。
HBase提供的强大的列式存储和快速的读取能力使得它成为处理大量日志数据的理想选择。
雅虎是一个成功使用HBase进行日志处理的案例。
雅虎使用HBase来存储和分析来自其各种网站和应用程序的日志数据,以便进行用户行为分析和广告定位。
4. 物联网物联网是一个快速发展且数据量庞大的领域。
HBase的高可扩展性和分布式架构能够很好地适应物联网场景的需求。
物联网设备产生的大数据需要被高效地收集、存储和查询,而HBase能够提供低延迟的读写操作,以满足物联网应用对实时性和可扩展性的要求。
中国移动是一个成功使用HBase来管理物联网设备数据的案例,他们使用HBase来存储和查询数十亿个物联网设备的数据。
hbase运维参考手册(项目实战)

1Hbase日常运维aA1.1监控Hbase运行状况1.1.1操作系统1.1.1.1IOa.群集网络IO,磁盘IO,HDFS IOIO越大说明文件读写操作越多。
当IO突然增加时,有可能:pact队列较大,集群正在进行大量压缩操作。
2.正在执行mapreduce作业可以通过CDH前台查看整个集群综合的数据或进入指定机器的前台查看单台机器的数据:b.Io wait磁盘IO对集群的影响比较大,如果io wait时间过长需检查系统或磁盘是否有异常。
通常IO增加时io wait也会增加,现在FMS的机器正常情况io wait在50ms以下跟主机相关的指标可以在CDH前台左上角先点“主机”选项卡然后选要查看的主机:1.1.1.2CPU如果CPU占用过高有可能是异常情况引起集群资源消耗,可以通过其他指标和日志来查看集群正在做什么。
1.1.1.3内存1.1.2JAVAGC 情况regionserver长时间GC会影响集群性能并且有可能会造成假死的情况1.1.3重要的hbase指标1.1.3.1region情况需要检查1.region的数量(总数和每台regionserver上的region数)2.region的大小如果发现异常可以通过手动merge region和手动分配region来调整从CDH前台和master前台以及regionServer的前台都可以看到region数量,如master前台:在region server前台可以看到storeFile大小:1.1.3.2缓存命中率缓存命中率对hbase的读有很大的影响,可以观察这个指标来调整blockcache的大小。
从regionserver web页面可以看到block cache的情况:1.1.3.3读写请求数通过读写请求数可以大概看出每台regionServer的压力,如果压力分布不均匀,应该检查regionServer上的region以及其它指标master web上可以看到所以regionServer的读写请求数regionServer上可以看到每个region的读写请求数1.1.3.4压缩队列压缩队列存放的是正在压缩的storefile,compact操作对hbase的读写影响较大通过cdh的hbase图表库可以看到集群总的压缩队列大小:可以通过CDH的hbase主页查询compact日志:点击“压缩”进入:1.1.3.5刷新队列单个region的memstore写满(128M)或regionServer上所有region的memstore大小总合达到门限时会进行flush操作,flush 操作会产生新的storeFile同样可以通过CDH的hbase前台查看flush日志:1.1.3.6rpc调用队列没有及时处理的rpc操作会放入rpc操作队列,从rpc队列可以看出服务器处理请求的情况1.1.3.7文件块保存在本地的百分比datanode和regionserver一般都部署在同一台机器上,所以region server管理的region会优先存储在本地,以节省网络开销。
hbase连接参数

HBase是一种分布式的、可伸缩的、大数据存储服务,使用Hadoop的HDFS作为底层存储。
要连接HBase,需要配置一些参数,以下是一些常见的连接参数:
1.hbase.zookeeper.quorum: 指定ZooKeeper集群的地址,HBase通过
ZooKeeper进行协调。
2.hbase.zookeeper.property.clientPort: 指定ZooKeeper的端口号,默认
为2181。
3.hbase.master: 指定HBase主服务器的地址和端口号,格式为
hostname:port。
4.hbase.zookeeper.session.timeout: 指定ZooKeeper的会话超时时间,单
位为毫秒。
5.hbase.client.scanner.caching: 指定扫描器缓存大小,可以提高扫描性
能。
6.hbase.client.keyvalue.maxsize: 指定单个键值对的最大大小,超过此大
小的键值对将不会被存储。
7.hbase.client.retries.number: 指定客户端重试次数,当与HBase服务器
通信失败时可以尝试重新连接。
这些参数可以在连接HBase时进行配置,以便更好地控制连接和通信的行为。
具体的参数值取决于实际需求和环境配置。
hbase连接参数

HBase连接参数是用于连接HBase数据库的配置参数,涵盖了定义、用法、重点、难点和注意事项等方面。
下面将详细介绍这些参数,并结合应用案例进行说明。
1.定义HBase连接参数是指在客户端连接HBase时需要配置的参数,用于建立与HBase服务器的连接,并指定客户端与服务器之间的通信方式。
2.用法HBase连接参数通常在客户端应用程序中设置,用于指定HBase服务器的地址、端口号以及其他连接相关的配置。
例如,在Java中使用HBase客户端连接HBase时,需要创建一个Configuration对象,并通过set方法设置各个连接参数。
3.重点HBase连接参数的重点包括以下几个方面:●HBase服务器的地址和端口号:这是连接HBase服务器的必要参数,用于指定HBase服务器的网络地址和监听端口。
●客户端的线程池大小:该参数用于设置客户端连接池的大小,以控制并发连接的数量。
●连接超时时间:指定客户端与服务器之间的连接超时时间,以防止长时间等待无响应的服务器。
●其他高级配置:如心跳检测、压缩等,可根据实际需求进行配置。
4.难点HBase连接参数的难点主要包括以下几点:●客户端与服务器的网络通信问题:需要确保客户端与服务器之间的网络通信正常,避免出现连接超时、丢包等问题。
●参数配置的合理性和性能优化:需要根据实际应用场景和性能需求,合理配置连接参数,并对其进行性能优化,以充分发挥HBase的性能优势。
●HBase的安全性配置:HBase支持Kerberos认证和SASL加密通信,需要正确配置相关参数以确保数据的安全性。
5.注意事项在使用HBase连接参数时,需要注意以下几点:●正确设置HBase服务器的地址和端口号,确保连接的可用性。
●根据实际需求配置线程池大小,避免资源浪费或连接不足的问题。
●根据实际网络状况设置合适的连接超时时间,以避免长时间等待无响应的服务器。
●注意配置安全性相关的参数,如Kerberos认证和SASL加密通信等,以确保数据的安全性。
HBase原理及实例

HBase使用例子(中文翻译)通过编码(java)的形式对HBase进行一系列的管理涉及到对表的管理、数据的操作等。
1、对表的创建、删除、显示以及修改等,可以用HBaseAdmin,一旦创建了表,那么可以通过HTable的实例来访问表,每次可以往表里增加数据。
2、插入数据创建一个Put对象,在这个Put对象里可以指定要给哪个列增加数据,以及当前的时间戳等值,然后通过调用HTable.put(Put)来提交操作,子猴在这里提请注意的是:在创建Put对象的时候,你必须指定一个行(Row)值,在构造Put对象的时候作为参数传入。
3、获取数据要获取数据,使用Get对象,Get对象同Put对象一样有好几个构造函数,通常在构造的时候传入行值,表示取第几行的数据,通过HTable.get(Get)来调用。
4、浏览每一行通过Scan可以对表中的行进行浏览,得到每一行的信息,比如列名,时间戳等,Scan相当于一个游标,通过next()来浏览下一个,通过调用HTable.getScanner(Scan)来返回一个ResultScanner对象。
HTable.get(Get)和HTable.getScanner(Scan)都是返回一个Result。
Result是一个KeyValue的链表,5、删除使用Delete来删除记录,通过调用HTable.delete(Delete)来执行删除操作。
(注:删除这里有些特别,也就是删除并不是马上将数据从表中删除。
)6、锁7、新增、获取、删除在操作过程中会对所操作的行加一个锁,而浏览却不会。
8、簇(cluster)的访问客户端代码通过ZooKeeper来访问找到簇,也就是说ZooKeeper quorum将被使用,那么相关的类(包)应该在客户端的类(classes)目录下,即客户端一定要找到文件hbase- site.xml。
下面是一个例子,假定你已经创建了一个表:myTable,还有一个column family(这个找不到合适的翻译词语):myColumnFamily:HBase是Hadoop的一个子项目,HBase采用了Google BigTable的稀疏的,面向列的数据库实现方式的理论,建立在hadoop的hdfs上,一方面里用了hdfs的高可靠性和可伸缩行,另外一方面里用了BigTable的高效数据组织形式.可以说HBase为海量数据的real-time相应提供了很好的一个开源解决方案.据说在某运营商中使用类似于BigTable(个人猜测应该就是HBase)的技术可以在两秒时间内从2TB数据中查找到某条话费记录.而这是原来该运营商使用Oracle数据库所无法解决的问题.对于HBase使用的类似与BigTable的技术我们这里就不仔细描述,可以参考google的论文以及网上的一些相关资料.另外,HBase的配置在HBase的官方文档中有很详细的描述.可以参见相关文档.HBase提供了一个类似于mysql等关系型数据库的shell.通过该shell我们可以对HBase的内的相关表以及列族进行控制和处理.HBase shell的help命令比较详细的列出了HBase所支持的命令.具体使用方法可以参见其文档.这里我们用一个学生成绩表作为例子,对HBase的基本操作和基本概念进行讲解:下面是学生的成绩表:name grad course:math course:artTom 1 87 97Jerry 2 100 80这里grad对于表来说是一个列,course对于表来说是一个列族,这个列族由两个列组成:math和art,当然我们可以根据我们的需要在course中建立更多的列族,如computer,physics等相应的列添加入course列族.有了上面的想法和需求,我们就可以在HBase中建立相应的数据表啦!1, 建立一个表格 scores 具有两个列族grad 和couresehbase(main):002:0> create 'scores', 'grade', 'course'0 row(s) in 4.1610 seconds2,查看当先HBase中具有哪些表hbase(main):003:0> listscores1 row(s) in 0.0210 seconds3,查看表的构造hbase(main):004:0> describe 'scores'{NAME => 'scores', IS_ROOT => 'false', IS_META => 'false', FAMILIES => [{NAME => 'course', BLOOMFILTER => 'false',IN_MEMORY => 'false', LENGTH => '2147483647', BLOCKCACHE => 'false', VERSIONS => '3', TTL => '-1', COMPRESSION => 'NONE'}, {NAME => 'grade', BLOOMFILTER => 'false', IN_MEMORY => 'false', LENGTH => '2147483647', BLOCKCACHE => 'false', VERSIONS => '3', TTL => '-1', COMPRESSION => 'NONE'}]}1 row(s) in 0.0130 seconds4, 加入一行数据,行名称为 Tom 列族grad的列名为””值位1hbase(main):005:0> put 'scores', 'Tom', 'grade:', '1'0 row(s) in 0.0070 seconds5,给Tom这一行的数据的列族添加一列 <math,87>hbase(main):006:0> put 'scores', 'Tom', 'course:math', '87'0 row(s) in 0.0040 seconds6,给Tom这一行的数据的列族添加一列 <art,97>hbase(main):007:0> put 'scores', 'Tom', 'course:art', '97'0 row(s) in 0.0030 seconds7, 加入一行数据,行名称为 Jerry 列族grad的列名为””值位2hbase(main):008:0> put 'scores', 'Jerry', 'grade:', '2'0 row(s) in 0.0040 seconds8,给Jerry这一行的数据的列族添加一列 <math,100>hbase(main):009:0> put 'scores', 'Jerry', 'course:math', '100'0 row(s) in 0.0030 seconds9,给Jerry这一行的数据的列族添加一列 <art,80>hbase(main):010:0> put 'scores', 'Jerry', 'course:art', '80' 0 row(s) in 0.0050 seconds10,查看scores表中Tom的相关数据hbase(main):011:0> get 'scores', 'Tom'COLUMN CELLcourse:art timestamp=1224726394286,value=97course:math timestamp=1224726377027,value=87grade: timestamp=1224726360727,value=13 row(s) in 0.0070 seconds11,查看scores表中所有数据hbase(main):012:0> scan 'scores'ROW COLUMN+CELLTom column=course:art,timestamp=1224726394286, value=97Tom column=course:math,timestamp=1224726377027, value=87Tom column=grade:,timestamp=1224726360727, value=1Jerry column=course:art,timestamp=1224726424967, value=80Jerry column=course:math,timestamp=1224726416145, value=100Jerry column=grade:,timestamp=1224726404965, value=26 row(s) in 0.0410 seconds12,查看scores表中所有数据courses列族的所有数据hbase(main):013:0> scan 'scores', ['course:']ROW COLUMN+CELLTom column=course:art,timestamp=1224726394286, value=97Tom column=course:math,timestamp=1224726377027, value=87Jerry column=course:art,timestamp=1224726424967, value=80Jerry column=course:math,timestamp=1224726416145, value=1004 row(s) in 0.0200 seconds上面就是HBase的基本shell操作的一个例子,可以看出,hbase的shell还是比较简单易用的,从中也可以看出HBase shell缺少很多传统sql 中的一些类似于like等相关操作,当然,HBase作为BigTable的一个开源实现,而BigTable是作为google业务的支持模型,很多sql语句中的一些东西可能还真的不需要.当然,通过程序我们也可以对HBase进行相关的操作.下面的程序就完成了上面shell操作的内容:import java.io.IOException;import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.ByteArrayInputStream;import java.io.DataInputStream;import java.util.Map;import org.apache.hadoop.io.Writable;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.client.HBaseAdmin;import org.apache.hadoop.hbase.client.HTable;import org.apache.hadoop.hbase.io.BatchUpdate;import org.apache.hadoop.hbase.io.RowResult;import org.apache.hadoop.hbase.io.Cell;import org.apache.hadoop.hbase.util.Writables;public class HBaseBasic {public static void main(String[] args) throws Exception {HBaseConfiguration config = new HBaseConfiguration();HBaseAdmin admin = new HBaseAdmin(config);if (admin.tableExists("scores")) {System.out.println("drop table");admin.disableTable("scores");admin.deleteTable("scores");}System.out.println("create table");HTableDescriptor tableDescripter= newHTableDescriptor("scores".getBytes());tableDescripter.addFamily(newHColumnDescriptor("grade:")); tableDescripter.addFamily(newHColumnDescriptor("course:")) ;admin.createTable(tableDescripter);HTable table = new HTable(config, "scores");System.out.println("add Tom's data");BatchUpdate tomUpdate = new BatchUpdate("Tom");tomUpdate.put("grade:",Writables.getBytes(newIntWritable(1)));tomUpdate.put("course:math",Writables.getBytes(newIntWritable(87)));tomUpdate.put("course:art",Writables.getBytes(newIntWritable(97)));mit(tomUpdate);System.out.println("add Jerry's data");BatchUpdate jerryUpdate = new BatchUpdate("Jerry");jerryUpdate.put("grade:",Writables.getBytes(newIntWritable(2)));jerryUpdate.put("course:math",Writables.getBytes(newIntWritable(100)));jerryUpdate.put("course:art",Writables.getBytes(newIntWritable(80)));mit(jerryUpdate);for (RowResult row : table.getScanner(new String[] {"course:" })) {System.out.format("ROW\t%s\n", newString(row.getRow()) );for (Map.Entry<byte[], Cell> entry : row.entrySet()) { String column = new String(entry.getKey());Cell cell = entry.getValue();IntWritable value = new IntWritable();Writables.copyWritable(cell.getValue(), value);System.out.format(" COLUMN\t%s\t%d\n", column, value.get());}}}}输出如下:drop table09/07/11 08:51:59 INFO client.HBaseAdmin: Disabled scores 09/07/11 08:51:59 INFO client.HBaseAdmin: Deleted scores create tableadd Tom's dataadd Jerry's dataROW TomCOLUMN course:art 97COLUMN course:math 87ROW JerryCOLUMN course:art 80COLUMN course:math 100。
hbase读写数据的流程

hbase读写数据的流程HBase读写数据的流程HBase是一个分布式的、面向列的开源数据库,它基于Hadoop的分布式文件系统HDFS进行存储,并利用Hadoop的MapReduce 进行计算。
HBase的读写数据流程包括数据写入和数据读取两个主要过程。
下面将分别介绍这两个过程的流程及关键步骤。
一、数据写入流程1. 创建表:在HBase中,需要先创建表才能进行数据的写入。
表由表名、列族和列组成。
表名在HBase中是唯一的,列族是逻辑上的概念,用于组织数据,列是列族中的具体字段。
2. 创建连接:使用HBase提供的Java API,通过配置HBase的连接信息,建立与HBase的连接。
3. 创建表实例:通过连接对象,创建表的实例,用于后续的操作。
4. 创建Put对象:Put对象用于封装待插入的数据,包括行键、列族、列和值等。
5. 添加数据:将Put对象添加到表实例中,实现数据的插入。
6. 提交数据:提交数据到HBase中,触发数据写入操作。
7. 关闭连接:释放资源,关闭与HBase的连接。
二、数据读取流程1. 创建连接:同样需要创建与HBase的连接。
2. 创建表实例:通过连接对象,创建表的实例,用于后续的操作。
3. 创建Get对象:Get对象用于封装待读取的数据信息,包括行键、列族和列等。
4. 查询数据:使用Get对象从表实例中查询数据。
5. 处理结果:根据查询结果,进行相应的处理,如打印输出或进一步的计算操作。
6. 关闭连接:释放资源,关闭与HBase的连接。
总结:HBase的读写数据流程相对简单明了。
数据写入时,需要先创建表和连接,然后创建Put对象,添加数据并提交到HBase中,最后关闭连接。
数据读取时,同样需要创建连接和表实例,然后创建Get 对象,查询数据并进行处理,最后关闭连接。
这两个过程的关键步骤都需要通过HBase的Java API来实现。
需要注意的是,HBase是一个分布式的数据库,数据存储在HDFS中,因此在进行数据读写操作时,需要保证HDFS的稳定性和可用性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第1章集群的搭建1.1集群的结构实验环境中共有6台服务器,搭建完全分布式HDFS与HBase环境,采用的Hadoop与HBase版本为hadoop0.20.2HBase0.92.0,其中一台节点做为NameNode 和Master,另一台做为Master备份节点(可以不要备份Master节点),剩余四台则做为DataNode和RegionServer节点,并且在其上运行Zookeeper服务,整个实验环境结构如图 1-1所示。
图 1-1 HBase 集群结构1.2基础环境整个系统要能正常的运行,在各机器上安装需要的程序软件之前,也要正确的配置好网络连接、程序参数和系统设置等,主要包括:操作系统Ubuntu10.04、sun-java-6和OpenSSH。
分别在每台服务器上安装上述的系统和程序,过程中要注意:根据Hadoop和HBase的系统兼容性要求Linux系统的版本可以不一致,不影响HDFS和HBase的运行。
JDK的版本、安装位置和环境变量的设置都应保持一致。
OpenSSH要设置为无密码访问,确保各服务器之间能正常通信。
各服务器配置如表 1-1所示。
表 1-1服务器的配置信息主机名IP地址(在同一网段内)备注Master1 Master2 Slave1 Slave2 Slave3 Slave4 192.168.1.100192.168.1.99192.168.1.101192.168.1.102192.168.1.103192.168.1.104NameNode和Master节点Master备份节点DataNode和RegionServerDataNode和RegionServerDataNode和RegionServerDataNode和RegionServer1.3软件的安装集群中Hadoop和HBase的版本要保持一致,并确保Hadoop和HBase版本相互之间兼容。
1.3.1SSH设置1.3.1.1免密码SSH设置。
生成密钥对,执行如下命令:$ ssh-keygen -t rsa然后一直按<Enter>键,就会按照默认的选项将生成的密钥对保存在.ssh/id_rsa文件中,如图1-9所示。
图1-9 将密钥对保存在.ssh/id.rsa文件中进入.ssh目录,执行如下命令:$ cp id_rsa.pub authorized_keys此后执行$ ssh localhost,可以实现用SSH 连接并且不需要输入密码。
1.3.1.2SSH配置。
该配置主要是为了实现在机器之间执行指令时不需要输入密码。
在所有机器上建立.ssh目录,执行:$ mkdir .ssh在ubuntunamenode上生成密钥对,执行:$ ssh-keygen -t rsa然后一直按<Enter>键,就会按照默认的选项将生成的密钥对保存在.ssh/id_rsa文件中。
接着执行如下命令:$cd ~/.ssh$cp id_rsa.pub authorized_keys$scp authorized_keys ubuntudata1:/home/grid/.ssh$scp authorized_keys ubuntudata2:/home/grid/.ssh最后进入所有机器的.ssh目录,改变authorized_keys文件的许可权限:$chmod 644 authorized_keys这时从ubuntunamenode向其他机器发起SSH连接,只有在第一次登录时需要输入密码,以后则不再需要。
1.3.2JDK安装实验使用jdk-6u24-linux-x86.bin,软件放在共享文件夹下。
把Java安装到目录/usr/ java/jdk1.6.0_24,使用如下命令:$ cd /usr/java/$ /mnt/hgfs/share/jdk-6u24-linux-x86.bin1.3.2.1JDK设置编辑系统文件/etc/profile ,在文件最后添加JDK的环境变量。
#set java environmentJAVA_HOME=/usr/ java/jdk1.6.0_24CLASSPATH=.:$JAVA_HOME/bin:$PATHPATH=$JAVA_HOME/bin:$PATHExport JAVA_HOME CLASSPATH PATH实验使用的是Hadoop-0.20.2.tar.gz安装包,包括HDFS和MapReduce,安装过程如下:首先把Hadoop-0.20.2.tar.gz安装包解压到Linux /home/UserName目录下,命令为:$tar -zxvf /~/ Hadoop-0.20.2.tar.gz /home/UserName解压文件之后需要对Hadoop进行配置,Hadoop的配置文件存放在/home/UserName/hadoop-0.20.2/conf目录之下,其中包括一个环境配置文件Hadoop-env.sh、核心配置文件core-site.xml、分布式文件系统HDFS配置文件hdfs-site.xml、MapReduce计算框架配置文件mapred-site.xml、主节点配置文件masters和从节点配置文件slaves,需要对各文件进行表 1-2所示配置。
表 1-2 Hadoop配置文件文件名注释Hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml mastersslaves 配置Java环境变量:JAVA_HOME=/usr/java/jdk1.6.0_21 HDFS服务端口:=hdfs://localhost:9000 配置HDFS的参数:如数据副本数目等MapReduce服务端口:mapred.job.tracker=localhost:9001设置NameNode,添加NameNode主机名设置Slaves,所有DataNode主机名在一台服务器上安装完之后,可以把Hadoop目录下的所有文件Copy到集群中其它服务器上来完成整个集群的安装,其命令为:$scp -rf /home/UserName/hadoop-0.20.2/ slave1://home/Username/ 运行Hadoop前要对NameNode的命名空间进行初始化,在Hadoop目录下运行:$bin/hadoop NameNode -format然后启动Hadoop的守护进程:$bin/start-all.sh系统成功运行之后master之上将会运行NameNode、Secondary NameNode 和JobTracker三个进程,slave节点之上会运行DataNode和TaskTracker二个进程。
通过命令:$bin/hadoop dfsadmin -report可以查看整个系统的运行状态信息。
HBase的安装包hbase-0.92.0.tar.gz包含分布式数据库HBase和Zookeeper,将其解压到目录/home/UserName/下。
HBase的配置文件在conf目录下,包含环境配置文件hbase-env.sh、HBase数据库运行参数配置文件hbase-site.xml和Region服务器列表文件regionservers,需要对文件进行如表 1-3所示配置:表 1-3 HBase配置文件文件名注释hbase-env.sh hbase-site.xmlregionservers 设置由HBase管理Zookeeper:HBASE_MANAGES=true 设置HBase的参数:hbase:rootdir=hdfs://UbuntuMaster:9000/hbase hbase.cluster.distributed=trueRegion服务器列表HBase是运行在HDFS之上的,所以必须确保HDFS处于正常运行状态。
同时因为存在版本兼容性问题,在启动HBase之前必须让HBase确定集群中所使用的Hadoop的版本,需要把Hadoop目录下的hadoop-0.20.2-core.jar替换掉HBase/lib目录下的hadoop-core-1.0.0.jar。
最后确保集群中每台服务器的系统时间保持相对一致(误差小于30秒),进入HBase目录输入命令以启动HBase:$bin/start-hbase.sh接着启动HBase的外壳程序,命令如下:$bin/hbase shell在shell模式下可以对HBase进行创建表、添加数据、读取数据和删除表等操作。
第2章实验中常见的问题和解决方法2.1问题1:节点不能正常启动1.Datanode,RegionServer 进程可以启动但是系统不能正常使用-----节点系统时间不同步。
解决方法:修改集群各个节点的系统时间,把时间误差控制在30秒之内,命令为:$Sudo Date –s time$hwclock –systohc2.Datanode 进程启动后不久,自动结束----系统命名空间出错解决方法:由于namenode和datanode空间版本不匹配,需要把所有Datanode节点存储的内容删除,然后重新formate命名空间,在重新启动Hadoop,可以解决这个问题2.2问题2:节点能够正常启动,但是某些datanode不能访问。
1.如果是在版本较新的桌面linux系统中,可能是IP配置出现问题,要把IPV6的配置清空,禁用IPV6服务。
2.长时间运行之后,也会出现个别节点不提供服务的情况,这是需要把该节点的服务关闭后重新启动。
$HBase regionserver start2.3问题3:HMaster不能启动错误 Address already in use9000端口已经被占用,可以查看系统占用9000端口的服务,很有可能是多吃启动HBase并且没有正常结束的原因,可以重新启动计算机。
如果9000端口被其他服务占用可以为HBase重新配置其他端口2.4问题4:数据备份和数据库切换问题HBase数据库是在HDFS的文件系统上创建一个存储目录,所以要备份HBase 数据只需要在HDFS的shell中,在HBase目录copy到本地即可。
如果要更换数据库,需要修改HBase的配置文件,改变HBase指向的文件目录即可。
2.5问题5:Call to master:9000 failed on local exception主要解决方法:关闭Master的防火墙2.6为题6:WebServer访问HBase数据连接问题解决方法:在所有的集群节点上面运行zookeeper服务,特别是Master节点上。