分布式数据库HBase安装配置与实践.docx

上传人:b****2 文档编号:2153064 上传时间:2023-05-02 格式:DOCX 页数:27 大小:1.14MB
下载 相关 举报
分布式数据库HBase安装配置与实践.docx_第1页
第1页 / 共27页
分布式数据库HBase安装配置与实践.docx_第2页
第2页 / 共27页
分布式数据库HBase安装配置与实践.docx_第3页
第3页 / 共27页
分布式数据库HBase安装配置与实践.docx_第4页
第4页 / 共27页
分布式数据库HBase安装配置与实践.docx_第5页
第5页 / 共27页
分布式数据库HBase安装配置与实践.docx_第6页
第6页 / 共27页
分布式数据库HBase安装配置与实践.docx_第7页
第7页 / 共27页
分布式数据库HBase安装配置与实践.docx_第8页
第8页 / 共27页
分布式数据库HBase安装配置与实践.docx_第9页
第9页 / 共27页
分布式数据库HBase安装配置与实践.docx_第10页
第10页 / 共27页
分布式数据库HBase安装配置与实践.docx_第11页
第11页 / 共27页
分布式数据库HBase安装配置与实践.docx_第12页
第12页 / 共27页
分布式数据库HBase安装配置与实践.docx_第13页
第13页 / 共27页
分布式数据库HBase安装配置与实践.docx_第14页
第14页 / 共27页
分布式数据库HBase安装配置与实践.docx_第15页
第15页 / 共27页
分布式数据库HBase安装配置与实践.docx_第16页
第16页 / 共27页
分布式数据库HBase安装配置与实践.docx_第17页
第17页 / 共27页
分布式数据库HBase安装配置与实践.docx_第18页
第18页 / 共27页
分布式数据库HBase安装配置与实践.docx_第19页
第19页 / 共27页
分布式数据库HBase安装配置与实践.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

分布式数据库HBase安装配置与实践.docx

《分布式数据库HBase安装配置与实践.docx》由会员分享,可在线阅读,更多相关《分布式数据库HBase安装配置与实践.docx(27页珍藏版)》请在冰点文库上搜索。

分布式数据库HBase安装配置与实践.docx

分布式数据库HBase安装配置与实践

实验指导书

分布式数据库HBase安装配置与实践

1.1实验目的

HBase安装配置与实践

 

1.2实验环境

本教程运行环境是CentOS64位系统下,HBase版本为hbase-1.0.1.1-bin.tar.gz,这是目前已经发行的已经编译好的稳定的版本,带有src的文件是未编译的版本。

下载地址http:

//www.apache.org/dyn/closer.cgi/hbase/

1.3实验步骤

1.3.1安装并配置HBase

1.HBase安装

1.1解压安装包hbase-1.0.1.1-bin.tar.gz至路径/usr/local,命令如下:

cd/usr/local

sudotar-zxvfhbase-1.0.1.1-bin.tar.gz

1.2将解压的文件名hbase-1.0.1.1改为hbase,以方便使用,命令如下:

sudomvhbase-1.0.1.1hbase

1.3配置环境变量

将hbase下的bin目录添加到path中,这样,启动hbase就无需到/usr/local/hbase目录下,大大的方便了hbase的使用。

教程下面的部分还是切换到了/usr/local/hbase目录操作,有助于初学者理解运行过程,熟练之后可以不必切换。

编辑~/.bashrc文件

vi~/.bashrc

如果没有引入过PATH请在~/.bashrc文件尾行添加如下内容:

exportPATH=$PATH:

/usr/local/hbase/bin

如图1:

图1

编辑完成后,再执行source命令使上述配置在当前终端立即生效,命令如下:

source~/.bashrc

扩展阅读:

设置Linux环境变量的方法和区别(下附)

1.4添加HBase权限

sudochown-Rhadoop:

hadoop./hbase#将hbase下的所有文件的所有者以及用户组改为hadoop,hadoop是当前用户的用户名。

1.5查看HBase版本,确定hbase安装成功,命令如下:

hbaseversion

命令执行后,输出信息截图如图2:

图2

看到以上输出消息表示HBase已经安装成功,接下来将分别进行HBase单机模式和伪分布式模式的配置。

2.HBase配置

HBase有三种运行模式,单机模式、伪分布式模式、分布式模式。

作为学习,我们重点讨论单机模式和伪分布式模式。

以下先决条件很重要,比如没有配置JAVA_HOME环境变量,就会报错。

-jdk

-Hadoop(单机模式不需要,伪分布式模式和分布式模式需要)

-SSH

以上三者如果没有安装,请回到第二章的实验指导参考如何安装。

2.1伪分布式模式配置

1.配置/usr/local/hbase/conf/hbase-env.sh。

命令如下:

vi/usr/local/hbase/conf/hbase-env.sh

配置JAVA_HOME,HBASE_CLASSPATH,HBASE_MANAGES_ZK.

HBASE_CLASSPATH设置为本机Hadoop安装目录下的conf目录(即/usr/local/hadoop/conf)

exportJAVA_HOME=/usr/lib/jvm/java-1.7.0_67

exportHBASE_CLASSPATH=/usr/local/hadoop/conf

exportHBASE_MANAGES_ZK=true

截图如图5:

图5

2.配置/usr/local/hbase/conf/hbase-site.xml

用命令vi打开并编辑hbase-site.xml,命令如下:

vi/usr/local/hbase/conf/hbase-site.xml

修改hbase.rootdir,指定HBase数据在HDFS上的存储路径;将属性hbase.cluter.distributed设置为true。

假设当前Hadoop集群运行在伪分布式模式下,在本机上运行,且NameNode运行在9000端口。

hbase.rootdir

hdfs:

//etc03:

9000/hbase

hbase.cluster.distributed

true

hbase.zookeeper.quorum

127.0.0.1

hbase.rootdir指定HBase的存储目录;hbase.cluster.distributed设置集群处于分布式模式.

截图如图6:

图6

3.接下来测试运行HBase。

第一步:

首先登陆ssh,之前设置了无密码登陆,因此这里不需要密码;再切换目录至/usr/local/hadoop;再启动hadoop,如果已经启动hadoop请跳过此步骤。

命令如下:

cd/usr/local/hadoop

./sbin/start-all.sh

输入命令jps,能看到NameNode,DataNode和SecondaryNameNode都已经成功启动,表示hadoop启动成功,截图如图7:

图7

第二步:

切换目录至/usr/local/hbase;再启动HBase.命令如下:

cd/usr/local/hbase

bin/start-hbase.sh

启动成功,输入命令jps,看到图8界面说明hbase启动成功

图8

进入shell界面:

bin/hbaseshell

截图如图9:

图9

4.停止HBase运行,命令如下:

bin/stop-hbase.sh

注意:

如果在操作HBase的过程中发生错误,可以通过{HBASE_HOME}目录(/usr/local/hbase)下的logs子目录中的日志文件查看错误原因。

这里启动关闭Hadoop和HBase的顺序一定是:

启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop

1.3.2编程实践

1.利用Shell命令

1.1HBase中创建表

HBase中用create命令创建表,具体如下:

create'student','Sname','Ssex','Sage','Sdept','course'

命令执行截图如图10:

图10

此时,即创建了一个“student”表,属性有:

Sname,Ssex,Sage,Sdept,course。

因为HBase的表中会有一个系统默认的属性作为行键,无需自行创建,默认为put命令操作中表名后第一个数据。

创建完“student”表后,可通过describe命令查看“student”表的基本信息。

命令执行截图如图11:

图11

1.2HBase数据库基本操作

本小节主要介绍HBase的增、删、改、查操作。

在添加数据时,HBase会自动为添加的数据添加一个时间戳,故在需要修改数据时,只需直接添加数据,HBase即会生成一个新的版本,从而完成“改”操作,旧的版本依旧保留,系统会定时回收垃圾数据,只留下最新的几个版本,保存的版本数可以在创建表的时候指定。

添加数据

HBase中用put命令添加数据,注意:

一次只能为一个表的一行数据的一个列,也就是一个单元格添加一个数据,所以直接用shell命令插入数据效率很低,在实际应用中,一般都是利用编程操作数据。

当运行命令:

put‘student’,’95001’,’Sname’,’LiYing’时,即为student表添加了学号为95001,名字为LiYing的一行数据,其行键为95001。

put'student','95001','Sname','LiYing'

命令执行截图如图12,即为student表添加了学号为95001,名字为LiYing的一行数据,其行键为95001。

图12

put'student','95001','course:

math','80'

命令执行截图如图13,即为95001行下的course列族的math列添加了一个数据。

图13

删除数据

在HBase中用delete以及deleteall命令进行删除数据操作,它们的区别是:

1.delete用于删除一个数据,是put的反向操作;2.deleteall操作用于删除一行数据。

1.delete命令

delete'student','95001','Ssex'

命令执行截图如图14,即删除了student表中95001行下的Ssex列的所有数据。

图14

2.deleteall命令

deleteall'student','95001'

命令执行截图如图15,即删除了student表中的95001行的全部数据。

图15

查看数据

HBase中有两个用于查看数据的命令:

1.get命令,用于查看表的某一个单元格数据;2.scan命令用于查看某个表的全部数据

1.get命令

get'student','95001'

命令执行截图如图16,返回的是‘student’表‘95001’行的数据。

图16

2.scan命令

scan'student'

命令执行截图如图17,返回的是‘student’表的全部数据。

图17

删除表

删除表有两步,第一步先让该表不可用,第二步删除表。

disable'student'

drop'student'

命令执行截图如图18:

图18

1.3查询表历史数据

查询表的历史版本,需要两步。

1、在创建表的时候,指定保存的版本数(假设指定为5)

create'teacher',{NAME=>'username',VERSIONS=>5}

2、插入数据然后更新数据,使其产生历史版本数据,注意:

这里插入数据和更新数据都是用put命令

put'teacher','91001','username','Mary'

put'teacher','91001','username','Mary1'

put'teacher','91001','username','Mary2'

put'teacher','91001','username','Mary3'

put'teacher','91001','username','Mary4'

put'teacher','91001','username','Mary5'

3、查询时,指定查询的历史版本数。

默认会查询出最新的数据。

(有效取值为1到5)

get'teacher','91001',{COLUMN=>'username',VERSIONS=>5}

查询结果截图如图19:

图19

1.4退出HBase数据库表操作

最后退出数据库操作,输入exit命令即可退出,注意:

这里退出HBase数据库是退出对数据库表的操作,而不是停止启动HBase数据库后台运行。

exit

2.JavaAPI编程实例

本实例使用Eclipse编写java程序,来对HBase数据库进行增删改查等操作,Eclipse可以在Ubuntu软件中心搜索下载并安装。

第一步:

启动hadoop,启动hbase

cd/usr/local/hadoop

./sbin/start-dfs.sh

cd/usr/local/hbase

./bin/start-hbase.sh

第二步,新建JavaProject——>新建Class(图20,图21)

图20

图21

第三步:

在工程中导入外部jar包:

这里只需要导入hbase安装目录中的lib文件中的所有jar包。

新版的Hbase1.1.2的javaapi已经发生变化,旧版的部分api已经停止使用,教材上第四章编程实例部分,请以本教程为准(图22)。

图22

这里给出一个编程实例,,以下是源代码:

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.hbase.*;

importorg.apache.hadoop.hbase.client.*;

importjava.io.IOException;

 

publicclassExampleForHbase{

publicstaticConfigurationconfiguration;

publicstaticConnectionconnection;

publicstaticAdminadmin;

 

//主函数中的语句请逐句执行,只需删除其前的//即可,如:

执行insertRow时请将其他语句注释

publicstaticvoidmain(String[]args)throwsIOException{

//创建一个表,表名为Score,列族为sname,course

createTable("Score",newString[]{"sname","course"});

 

//在Score表中插入一条数据,其行键为95001,sname为Mary(因为sname列族下没有子列所以第四个参数为空)

//等价命令:

put'Score','95001','sname','Mary'

//insertRow("Score","95001","sname","","Mary");

//在Score表中插入一条数据,其行键为95001,course:

Math为88(course为列族,Math为course下的子列)

//等价命令:

put'Score','95001','score:

Math','88'

//insertRow("Score","95001","course","Math","88");

//在Score表中插入一条数据,其行键为95001,course:

English为85(course为列族,English为course下的子列)

//等价命令:

put'Score','95001','score:

English','85'

//insertRow("Score","95001","course","English","85");

 

//1、删除Score表中指定列数据,其行键为95001,列族为course,列为Math

//执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码取消注释注释,将删除制定列族的代码注释

//等价命令:

delete'Score','95001','score:

Math'

//deleteRow("Score","95001","course","Math");

 

//2、删除Score表中指定列族数据,其行键为95001,列族为course(95001的Math和English的值都会被删除)

//执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码注释,将删除制定列族的代码取消注释

//等价命令:

delete'Score','95001','score'

//deleteRow("Score","95001","course","");

 

//3、删除Score表中指定行数据,其行键为95001

//执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码注释,以及将删除制定列族的代码注释

//等价命令:

deleteall'Score','95001'

//deleteRow("Score","95001","","");

 

//查询Score表中,行键为95001,列族为course,列为Math的值

//getData("Score","95001","course","Math");

//查询Score表中,行键为95001,列族为sname的值(因为sname列族下没有子列所以第四个参数为空)

//getData("Score","95001","sname","");

 

//删除Score表

//deleteTable("Score");

}

 

//建立连接

publicstaticvoidinit(){

configuration=HBaseConfiguration.create();

configuration.set("hbase.rootdir","hdfs:

//localhost:

9000/hbase");

try{

connection=ConnectionFactory.createConnection(configuration);

admin=connection.getAdmin();

}catch(IOExceptione){

e.printStackTrace();

}

}

//关闭连接

publicstaticvoidclose(){

try{

if(admin!

=null){

admin.close();

}

if(null!

=connection){

connection.close();

}

}catch(IOExceptione){

e.printStackTrace();

}

}

 

/**

*建表。

HBase的表中会有一个系统默认的属性作为主键,主键无需自行创建,默认为put命令操作中表名后第一个数据,因此此处无需创建id列

*@parammyTableName表名

*@paramcolFamily列族名

*@throwsIOException

*/

publicstaticvoidcreateTable(StringmyTableName,String[]colFamily)throwsIOException{

 

init();

TableNametableName=TableName.valueOf(myTableName);

 

if(admin.tableExists(tableName)){

System.out.println("talbeisexists!

");

}else{

HTableDescriptorhTableDescriptor=newHTableDescriptor(tableName);

for(Stringstr:

colFamily){

HColumnDescriptorhColumnDescriptor=newHColumnDescriptor(str);

hTableDescriptor.addFamily(hColumnDescriptor);

}

admin.createTable(hTableDescriptor);

System.out.println("createtablesuccess");

}

close();

}

/**

*删除指定表

*@paramtableName表名

*@throwsIOException

*/

publicstaticvoiddeleteTable(StringtableName)throwsIOException{

init();

TableNametn=TableName.valueOf(tableName);

if(admin.tableExists(tn)){

admin.disableTable(tn);

admin.deleteTable(tn);

}

close();

}

 

/**

*查看已有表

*@throwsIOException

*/

publicstaticvoidlistTables()throwsIOException{

init();

HTableDescriptorhTableDescriptors[]=admin.listTables();

for(HTableDescriptorhTableDescriptor:

hTableDescriptors){

System.out.println(hTableDescriptor.getNameAsString());

}

close();

}

/**

*向某一行的某一列插入数据

*@paramtableName表名

*@paramrowKey行键

*@paramcolFamily列族名

*@paramcol列名(如果其列族下没有子列,此参数可为空)

*@paramval值

*@throwsIOException

*/

publicstaticvoidinsertRow(StringtableName,StringrowKey,StringcolFamily,Stringcol,Stringval)throwsIOException{

init();

Tabletable=connection.getTable(TableName.valueOf(tableName));

Putput=newPut(rowKey.getBytes());

put.addColumn(colFamily.getBytes(),col.getBytes(),val.getBytes());

table.put(put);

table.close();

close();

}

 

/**

*删除数据

*@paramtableName表名

*@paramrowKey行键

*@paramcolFamily列族名

*@paramcol列名

*@throwsIOException

*/

publicstaticvoiddeleteRow(StringtableName,StringrowKey,StringcolFamily,Stringcol)throwsIOException{

init();

Tabletable=connection.getTable(TableName.valueOf(tableName));

Deletedelete=newDelete(rowKey.getBytes());

//删除指定列族的所有数据

//delete.addFamily(colFamily.getByte

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2