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的稳定性和可用性。
hbase基础操作
hbase基础操作(最新版)目录1.HBase 简介2.HBase 基本操作2.1 创建表2.2 删除表2.3 插入数据2.4 查询数据2.5 更新数据2.6 删除数据正文【HBase 简介】HBase 是一个分布式、可扩展、高性能的列式存储系统,它基于 Google 的Bigtable 设计,是 Apache Hadoop 的一个子项目。
HBase 适用于海量数据的存储和实时读写操作,被广泛应用于大数据处理领域。
【HBase 基本操作】HBase 的基本操作主要包括创建表、删除表、插入数据、查询数据、更新数据和删除数据。
【创建表】在 HBase 中,表是由行和列组成的,表的结构是灵活可变的。
创建表时需要指定表名、列族和列。
例如,创建一个名为“user”的表,包含“id”、“name”和“age”三个列,可以使用如下命令:```create "user", "id", "name", "age"```【删除表】删除表时,需要使用“drop”命令,指定表名。
例如,删除名为“user”的表,可以使用如下命令:```drop "user"```【插入数据】在 HBase 中,数据以行形式存储,每行包含一个或多个列。
插入数据时,需要指定表名和行键。
例如,向名为“user”的表插入一条数据,行键为“1”,列族为“name”,列值为“张三”,可以使用如下命令:```put "user", "1", "name", "张三"```【查询数据】HBase 提供了多种查询数据的方法,如 get、scan 和 range 扫查等。
例如,查询名为“user”的表中行键为“1”的数据,可以使用如下命令:```get "user", "1"```【更新数据】在 HBase 中,可以通过 put 命令更新数据。
hbase常用命令及使用方法
hbase常用命令及使用方法一、HBase简介HBase是一个基于Hadoop的分布式列存储系统,可以用来存储海量的结构化数据。
它是一个开源的、高可靠性、高性能、可伸缩的分布式数据库,具有强大的数据处理能力和卓越的扩展性。
二、HBase常用命令1.启动和停止HBase服务启动HBase服务:在终端输入start-hbase.sh命令即可启动HBase 服务。
停止HBase服务:在终端输入stop-hbase.sh命令即可停止HBase 服务。
2.创建表创建表:在HBase shell中使用create命令来创建表,语法如下:create 'table_name', 'column_family'3.删除表删除表:在HBase shell中使用disable和drop命令来删除表,语法如下:disable 'table_name'drop 'table_name'4.添加数据添加数据:在HBase shell中使用put命令来添加数据,语法如下:put 'table_name', 'row_key', 'column_family:column_qualifier','value'5.查询数据查询数据:在HBase shell中使用get命令来查询数据,语法如下:get 'table_name', 'row_key'6.扫描全表扫描全表:在HBase shell中使用scan命令来扫描全表,语法如下:scan 'table_name'7.删除数据删除数据:在HBase shell中使用delete命令来删除数据,语法如下:delete 'table_name', 'row_key', 'column_family:column_qualifier'8.修改表修改表:在HBase shell中使用alter命令来修改表,语法如下:alter 'table_name', {NAME => 'column_family', VERSIONS =>version_num}9.查看表结构查看表结构:在HBase shell中使用describe命令来查看表结构,语法如下:describe 'table_name'10.退出HBase shell退出HBase shell:在HBase shell中输入exit命令即可退出。
hbase基础命令
hbase基础命令HBase是一个开源的分布式列式存储系统,运行在Hadoop之上。
它提供了高可靠性、高性能、可伸缩性和高可靠性的存储能力,适用于对大规模数据进行随机实时读/写访问的应用。
HBase是在模拟Google的BigTable设计理念的基础上开发而成的,通过HDFS(Hadoop分布式文件系统)存储数据,并依赖ZooKeeper进行集群协调。
HBase的基本命令可以分为以下几类:集群管理命令、表管理命令、数据操作命令、数据查询命令等。
下面分别介绍这些命令及其相关参考内容。
1. 集群管理命令:- `start-hbase.sh`:启动HBase集群- `stop-hbase.sh`:停止HBase集群- `hbase-daemon.sh`:启动某个HBase守护进程- `hbck`:对集群的状态进行检查和修复- `hbase shell`:进入HBase的shell交互界面相关参考内容:- HBase官方文档:Apache HBase Reference Guide2. 表管理命令:- `create`:创建表- `disable`:禁用表- `enable`:启用表- `alter`:修改表的属性- `describe`:描述表的详细信息- `describe_namespace`:描述命名空间的详细信息- `list`:列出所有表格和命名空间- `delete`:删除表格或命名空间相关参考内容:- HBase官方文档:HBase Shell Commands- HBase权威指南:第4章创建、修改、删除表3. 数据操作命令:- `put`:向表格中插入一行数据- `get`:获取指定行的数据- `delete`:删除指定行的数据- `scan`:扫描指定行范围的数据- `count`:统计表中的行数- `increment`:原子性的增加某个cell的值相关参考内容:- HBase官方文档:HBase Shell Commands- HBase权威指南:第5章数据插入、修改和删除4. 数据查询命令:- `get`:获取指定行的数据- `scan`:扫描指定行范围的数据- `count`:统计表中的行数- `filter`:过滤器,用于按条件查询数据- `versions`:获取指定行的多个版本数据相关参考内容:- HBase官方文档:HBase Shell Commands- HBase权威指南:第6章数据查询和过滤器除了这些基本命令之外,HBase还提供了各种API,例如Java API、REST API和Thrift API等,可以通过编程的方式操作HBase。
Hbase的安装与基本操作
Hbase的安装与基本操作简介:1安装 HBase本节介绍HBase的安装⽅法,包括下载安装⽂件、配置环境变量、添加⽤户权限等。
1.1 下载安装⽂件HBase是Hadoop⽣态系统中的⼀个组件,但是,Hadoop安装以后,本⾝并不包含HBase,因此,需要单独安装HBase。
hbase-1.1.5-bin.tar.gz假设已经下载了HBase安装⽂件hbase-1.1.5-bin.tar.gz,被放到了Linux系统的“/home/hadoop/下载/”⽬录下。
进⼊下载⽬录,需要对⽂件进⾏解压。
按照Linux系统使⽤的默认规范,⽤户安装的软件⼀般都是存放在“/usr/local/”⽬录下。
$ cd ~/下载$ sudo tar -zxf ~/下载/hbase-1.1.5-bin.tar.gz -C /usr/local将解压的⽂件名hbase-1.1.5改为hbase,以⽅便使⽤,命令如下:$ sudo mv /usr/local/hbase-1.1.5 /usr/local/hbase1.2 配置环境变量将HBase安装⽬录下的bin⽬录(即/usr/local/hbase/bin)添加到系统的PATH环境变量中,这样,每次启动HBase时就不需要到“/usr/local/hbase”⽬录下执⾏启动命令,⽅便HBase的使⽤。
请使⽤vim编辑器打开“~/.bashrc”⽂件,命令如下:$ vim ~/.bashrc⽂件以后,添加添加PATH路径时只需要加上":路径"即可,下⾯这条命令是添加了三条路径,配置的是hadoop和hbasd的打开.bashrc⽂件以后,启动路径export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin:/usr/local/hbase/bin添加后,执⾏如下命令使设置⽣效:$ source ~/.bashrc1.3 添加⽤户权限需要为当前登录Linux系统的hadoop⽤户(我的⽤户是msq)添加访问HBase⽬录的权限,将HBase安装⽬录下的所有⽂件的所有者改为msq,命令如下:$ cd /usr/local$ sudo chown -R msq ./hbase1.4 查看HBase版本信息可以通过如下命令查看HBase版本信息,以确认HBase已经安装成功:$ /usr/local/hbase/bin/hbase version2 HBase的配置HBase有三种运⾏模式,即单机模式、伪分布式模式和分布式模式:单机模式:采⽤本地⽂件系统存储数据;伪分布式模式:采⽤伪分布式模式的HDFS存储数据;分布式模式:采⽤分布式模式的HDFS存储数据。
Hbase配置及客户端远程访问Hbase设置
Hbase(单机)配置及客户端运行设置一、安装Hbase本节详细描述Hbase伪分布模式的配置方法。
1、安装Java(1)、下载JDK软件包,bin格式(2)、将软件包拷到系统目录中,加上可执行权限,执行bin文件,解压java 文件(3)、把生成的文件夹复制到/usr/java/mkdir /usr/javacp –r jdk1.6.0_xx /usr/java(4)、修改/root/.bashrc 文件,在文件中添加如下代码:export JA V A_HOME=/usr/lib/java/jdk1.6.0_31exportCLASSPATH=.:$JA V A_HOME/lib/dt.jar:$JA V A_HOME/lib/tools.jarexport PATH=$JA V A_HOME/bin:$PATHexport JA V A_HOME CLASSPATH PATH(5)、source /root/.bashrc2、配置Hbase(1)、下载最新的Hbase程序包,解压到/usr/Apache目录下(2)、修改Hbase_Home下conf/hbase-site.xml文件,单机配置如下:<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property><name>hbase.rootdir</name><value>file:///<PATH>/hbase</value><description>数据文件存放位置,可以是本地文件系统,也可以是HDFS文件系统</ description ></property><property><name>hbase.zookeeper.quorum</name><value>222.204.248.111</value><description>ZooKeeper服务器设置,在分布式配置中,value中可以有多个IP地址,每个都是ZooKeeper的节点。
hbase数据库读取数据的流程
HBase数据库读取数据的流程1. 概述HBase是一个开源的分布式列式数据库,基于Hadoop的分布式文件系统HDFS,用于存储和处理大规模结构化数据。
在使用HBase读取数据时,需要经过一系列的步骤来完成数据的获取和处理。
2. HBase读取数据的基本流程HBase读取数据的基本流程包括以下几个步骤:2.1 建立连接与获取表对象首先,需要建立与HBase集群的连接,并获取要读取数据的表对象。
在连接HBase 时,需指定HBase的主机地址和端口号,并配置相应的认证信息(如果有)。
获取表对象需要指定表的名称,并调用相应的API方法来获取表对象。
2.2 构造Scan对象接下来,需要构造一个Scan对象来描述要进行的读取操作。
Scan对象可以设置一系列参数来控制读取操作的行为,例如设置起始行键和结束行键、设置过滤器等。
2.3 执行读取操作然后,将构造好的Scan对象传递给表对象的getScanner方法,并调用next方法进行读取操作。
每次调用next方法会返回一个Result对象,其中包含了读取到的一行数据。
2.4 解析返回结果针对每次读取到的Result对象,可以通过调用相应的API方法来获取其中的各个列族和列的数据。
根据需要,可以进行适当的数据处理和转换操作。
2.5 处理下一行数据继续调用next方法读取下一行数据,直到数据读取完毕。
2.6 关闭连接数据读取完毕后,需要关闭与HBase集群的连接,释放资源。
3. 详细解析HBase数据读取流程3.1 建立连接与获取表对象在使用Java代码进行HBase数据读取时,需要首先建立与HBase集群的连接。
连接HBase集群的代码如下所示:Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "localhost");Connection connection = ConnectionFactory.createConnection(conf);其中,Configuration对象是HBase的配置对象,用于配置HBase连接的参数。
hbase replication操作
hbase replication操作
HBase复制操作涉及将数据从一个HBase集群复制到另一个HBase集群。
以下是进行HBase复制操作的基本步骤:
1. 配置HBase集群:首先,需要配置源HBase集群和目标HBase集群。
确保两个集群的HBase版本和Hadoop版本兼容,并且网络连接正常。
2. 配置复制集群:在目标HBase集群中配置复制集群。
这通
常包括指定源集群的IP地址和端口号,并为复制集群分配唯
一的ID。
3. 创建复制表:使用HBase shell或HBase API在源集群中创
建要复制的表。
在创建表时,可以指定表的复制策略,如同步复制或异步复制。
4. 启动复制:在源集群中启动复制操作。
可以使用HBase
shell命令`enable_table_replication`来启动复制。
5. 监控复制:使用HBase shell命令`list_peers`可以查看复制进
程的状态,并使用`get_peer_state <peerId>`命令来获取特定复
制进程的状态信息。
6. 处理复制错误:如果复制过程中发生错误,可以使用
`list_failed_peers`命令来查看故障的复制进程,并使用
`recover_failed_peer <peerId>`命令来恢复故障的复制进程。
7. 停止复制:如果需要停止复制操作,可以使用
`disable_table_replication`命令来停止复制。
需要注意的是,复制操作可能会对系统的性能产生一定的影响,并且必须确保源集群和目标集群之间的网络连接稳定。
简述hbase的写流程
简述hbase的写流程
HBase是一款基于Hadoop的分布式列式数据库,它的写流程如下:
1. 客户端向HBase中的一个RegionServer发送写请求。
2. RegionServer将请求发送给HMaster,HMaster负责管理所有的RegionServer。
3. HMaster将请求转发给相应的RegionServer,如果该RegionServer不是该数据表的负责者,则会将请求转发给负责该数据表的RegionServer。
4. 负责该数据表的RegionServer会将请求分配给相应的HRegion,HRegion是HBase中数据的最小单元,对应一个数据表的一部分。
5. HRegion将数据写入内存缓存,并返回写入成功的确认信息。
6. 当缓存数据达到一定阈值后,HRegion会将缓存中的数据持久化到HDFS中。
7. HBase会执行一些必要的数据复制和数据同步操作,以确保数据的一致性和可用性。
8. 写流程完成,客户端收到写入成功的确认信息。
以上即是HBase的写流程,其中还涉及到许多细节处理和优化策略,以保证HBase的高可靠性和高性能。
- 1 -。
Hadoop,HBase,hive安装步骤
Hadoop,ZooKeeper,HBase,hive(HQL) 安装步骤Hadoop安装:首先我们统一一下定义,在这里所提到的Hadoop是指Hadoop Common,主要提供DFS(分布式文件存储)与Map/Reduce的核心功能。
Hadoop在windows下还未经过很好的测试,所以推荐大家在linux(cent os 6.X)下安装使用。
准备安装Hadoop集群之前我们得先检验系统是否安装了如下的必备软件:ssh和Jdk1.6(因为Hadoop需要使用到Jdk中的编译工具,所以一般不直接使用Jre)。
可以使用yum install rsync来安装rsync。
一般来说ssh是默认安装到系统中的。
Jdk1.6的安装方法下载linux版本的java,#mkdir /usr/java#cd /usr/java#chmod a+x jdk-6u27-linux-i586.bin#./jdk-6u27-linux-i586.bin安装完成后,设臵环境变量:在etc/profile中设臵#export JAVA_HOME=/usr/java/jdk1.6.0_27#exportCLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOM E/lib/tools.jar#export PATH=$PATH:$JAVA_HOME/bin设臵完成后,使用reboot或者source /etc/profile确保以上准备工作完了之后我们就开始安装Hadoop软件,假设我们用三台机器做Hadoop集群,分别是:192.168.0.141、192.168.0.142和192.168.0.143(下文简称141,142和143),且都使用root用户。
这里有一点需要强调的就是,务必要确保每台机器的主机名和IP地址之间能正确解析。
Host配臵一个很简单的测试办法就是ping一下主机名,比如在ww-1上ping ww-2,如果能ping通就OK!若不能正确解析,可以修改/etc/hosts文件,如果该台机器作Namenode用,则需要在hosts文件中加上集群中所有机器的IP地址及其对应的主机名;如果该台机器作Datanode用,则只需要在hosts文件中加上本机IP地址和Namenode机器的IP地址。
hbase的读流程
hbase的读流程
HBase的读流程如下:
1. Client先访问Zookeeper,获取hbase:meta表位于哪个Region Server。
2. 访问对应的Region Server,获取hbase:meta表,根据读请求的namespace:table/rowkey,查询出目标数据位于哪个Region Server中的哪个Region中。
并将该table的region信息以及meta表的位置信息缓存在客户端的meta cache,方便下次访问。
3. 与目标Region Server进行通讯。
4. 分别在Block Cache(读缓存),MemStore和Store File(HFile)中查询目标数据,并将查到的所有数据进行合并。
此处所有数据是指同一条数据的不同版本(time stamp)或者不同的类型(Put/Delete)。
5. 将从文件中查询到的数据块(Block,HFile数据存储单元,默认大小为64KB)缓存到Block Cache。
以上内容仅供参考,建议查阅HBase官方文档或咨询专业技术人员以获取更准确的信息。
hbase分区拆分的几种方法
hbase分区拆分的几种方法
HBase是一种分布式的NoSQL数据库,它使用Hadoop分布式文件系统(HDFS)来存储数据,并采用分布式方式处理数据。
在处理大量数据时,为了提高性能和效率,可以对HBase进行分区拆分。
下面将介绍HBase分区拆分的几种方法。
1. 预分区拆分:在创建HBase表时,可以提前定义分区范围,将数据根据指定的范围进行分区。
这种方法需要提前了解数据的分布情况,并根据数据特点来定义合适的分区范围。
例如,对于按照时间进行存储的数据,可以根据时间范围来预分区。
2. 动态拆分:HBase支持动态拆分,可以根据数据量的变化自动进行分区。
当一个分区中的数据量达到设定的阈值时,HBase会自动触发拆分操作,将数据平均分布到多个子分区中。
这种方法适用于数据量无法预先确定或频繁变化的情况。
3. 增量拆分:当已有的分区无法容纳更多数据时,可以通过增量拆分的方式来进行分区扩展。
增量拆分是指在已有的分区上再进行细分,将原本的分区进一步拆分成多个子分区。
这种方法适用于数据量逐渐增加的情况,可以根据实际需求灵活调整分区结构。
无论采用哪种方法,分区拆分都可以提高HBase的读写性能和负载均衡能力。
通过合理的分区拆分策略,可以避免数据倾斜和热点问题,同时提高查询和写入数据的效率。
根据实际应用场景和数据特点来选择合适的分区拆分方法,有助于优化HBase的性能和可扩展性。
hbase数据库操作
hbase数据库操作.实验内容与完成情况:(实验具体步骤和实验截图说明)(⼀)编程实现以下指定功能,并⽤ Hadoop 提供的 HBase Shell 命令完成相同任务:(1)列出 HBase 所有的表的相关信息,例如表名;列出所有数据表:列出表的结构查询表是否存在查询表是否可⽤.hbase;import java.io.IOException;public class ListTables {public static Configuration configuration;public static Connection connection;public static Admin admin;public static void listTables() throws IOException {init();HTableDescriptor[] hTableDescriptors = admin.listTables();for (HTableDescriptor hTableDescriptor : hTableDescriptors) {System.out.println("table name:"+ hTableDescriptor.getNameAsString());}close();}public static void init() {configuration = HBaseConfiguration.create();configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");try {connection = ConnectionFactory.createConnection(configuration); admin = connection.getAdmin();} catch (IOException e) {e.printStackTrace();}}public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {try {listTables();} catch (IOException e) {e.printStackTrace();}}}(2)在终端打印出指定的表的所有记录数据;源代码:package .hbase;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.Cell;import org.apache.hadoop.hbase.CellUtil;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.client.*;import java.io.IOException;public class ListTableData {public static Configuration configuration;public static Connection connection;public static Admin admin;public static void getData(String tableName)throws IOException{init();Table table=connection.getTable(TableName.valueOf(tableName)); Scan scan=new Scan();ResultScanner scanner=table.getScanner(scan);for(Result result:scanner){printRecoder(result);}System.out.println(“finish!”);close();}public static void printRecoder(Result result)throws IOException{for(Cell cell:result.rawCells()){System.out.println("⾏键:"+new String(CellUtil.cloneRow(cell)));System.out.print("列簇: " + new String(CellUtil.cloneFamily(cell)));System.out.print(" 列: " + new String(CellUtil.cloneQualifier(cell)));System.out.print(" 值: " + new String(CellUtil.cloneValue(cell)));System.out.println("时间戳: " + cell.getTimestamp());}}public static void init() {configuration = HBaseConfiguration.create();configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");try {connection = ConnectionFactory.createConnection(configuration);admin = connection.getAdmin();} catch (IOException e) {e.printStackTrace();}}public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {try {getData("person");} catch (IOException e) {e.printStackTrace();}}}(3)向已经创建好的表添加和删除指定的列族或列;添加数据源代码:package .hbase;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.client.Admin;import org.apache.hadoop.hbase.client.Connection;import org.apache.hadoop.hbase.client.ConnectionFactory;import org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.client.Table;public class InsertRow {public static Configuration configuration;public static Connection connection;public static Admin admin;public static void insertRow(String tableName,String rowKey,String colFamily,String col,String val)throws IOException{ init();Table table=connection.getTable(TableName.valueOf(tableName));Put put=new Put(rowKey.getBytes());put.addColumn(colFamily.getBytes(),col.getBytes() ,val.getBytes());table.put(put);System.out.println("insert finish!");table.close();}public static void init() {configuration = HBaseConfiguration.create();configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");try {connection = ConnectionFactory.createConnection(configuration);admin = connection.getAdmin();} catch (IOException e) {e.printStackTrace();}}public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {try {insertRow("student","s002","score","math","100");} catch (IOException e) {e.printStackTrace();}}}删除数据源代码:package .hbase;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.client.*;import org.apache.hadoop.hbase.util.Bytes;public class DeleteRow {public static Configuration configuration;public static Connection connection;public static Admin admin;public static void deleteRow(String tableName, String rowKey, String colFamily, String col) throws IOException { init();Table table = connection.getTable(TableName.valueOf(tableName));Delete delete = new Delete(rowKey.getBytes());delete.addFamily(Bytes.toBytes(colFamily));delete.addColumn(Bytes.toBytes(colFamily), Bytes.toBytes(col));table.delete(delete);System.out.println("delete successful!");table.close();close();}public static void init() {configuration = HBaseConfiguration.create();configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");try {connection = ConnectionFactory.createConnection(configuration);admin = connection.getAdmin();} catch (IOException e) {e.printStackTrace();}}public static void close() {try {if (admin != null) {admin.close();}if (null != connection) {connection.close();}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {try {deleteRow("student", "s002", "score", "math");} catch (IOException e) {e.printStackTrace();}}}(3)清空指定的表的所有记录数据;源代码:package .hbase;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.client.Admin;import org.apache.hadoop.hbase.client.Connection;import org.apache.hadoop.hbase.client.ConnectionFactory;import java.io.IOException;public class TruncateTable {public static Configuration configuration;public static Connection connection;public static Admin admin;public static void clearRows(String tableName) throws IOException { init();TableName tablename = TableName.valueOf(tableName);admin.disableTable(tablename);admin.truncateTable(tablename, false);System.out.println("delete table successful!");close();}public static void init() {configuration = HBaseConfiguration.create();configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");try {connection = ConnectionFactory.createConnection(configuration); admin = connection.getAdmin();} catch (IOException e) {e.printStackTrace();}}public static void close() {try {if (admin != null) {admin.close();}if (null != connection) {connection.close();}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {try {clearRows("student");} catch (IOException e) {e.printStackTrace();}}}(5)统计表的⾏数。
- 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节点上。