hbase基础知识课件_第1页
hbase基础知识课件_第2页
hbase基础知识课件_第3页
hbase基础知识课件_第4页
hbase基础知识课件_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程安排HBASE基础知识*HBASE的全分布的搭建*HBASEShell***HBASE的批量导入***HBASE的Java客户端***---------------------------加深拓展----------------------HBASE的集群的搭建*HBASE的表设计*HBASE的底层存储模型*HBASE基础知识HBase简介

HBase–HadoopDatabase,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PCServer上搭建起大规模结构化存储集群。HBase利用HadoopHDFS作为其文件存储系统,利用HadoopMapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。HBASEClustermember数据模型-行RowKeyTimeStampColumnContentsColumnAnchorColumn“mime”my.look.ca“n.www”T9CNNT8CNN.COMT6“<html>..“Text/htmlT5“<html>..“t3“<html>..“行键列列字符串、整数、二进制串甚至串行化的结构都可以作为行键表按照行键的“逐字节排序”顺序对行进行有序化处理表内数据非常‘稀疏’,不同的行的列的数完全目可以大不相同可以只对一行上“锁”对行的写操作是始终是“原子”的数据模型-列列必须用‘族’(family)来定义任意一列有如下形式“族:标签”其中,族和标签都可为任意形式的串物理上将同“族”数据存储在一起数据可通过时间戳区分版本RowKeyTimeStampColumnContentsColumnAnchorColumn“mime”my.look.ca“n.www”T9CNNT8CNN.COMT6“<html>..“Text/htmlT5“<html>..“t3“<html>..“族标签HBASE基础知识表是存放数据的。表由行和列组成数据模型

RowKey:行键,Table的主键,Table中的记录按照RowKey排序Timestamp:时间戳,每次数据操作对应的时间戳,可以看作是数据的versionnumberColumnFamily:列簇,Table在水平方向有一个或者多个ColumnFamily组成,一个ColumnFamily中可以有任意多个Column组成,即ColumnFamily支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。HBASE基础知识架构体系Client包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如regione的位置信息Zookeeper保证任何时候,集群中只有一个runningmaster存贮所有Region的寻址入口实时监控RegionServer的状态,将Regionserver的上线和下线信息,实时通知给Master存储Hbase的schema,包括有哪些table,每个table有哪些columnfamilyMaster可以启动多个HMaster,通过Zookeeper的MasterElection机制保证总有一个Master运行为Regionserver分配region负责regionserver的负载均衡,调整Region分布管理用户对table的CRUD操作在regionserver停机后负责失效的regionserver上的region迁移

HBASE基础知识HBASE基础知识架构体系RegionServer维护Master分配给它的region,处理对这些region的IO请求负责切分在运行过程中变得过大的region可以看出,client访问hbase上数据的过程并不需要master参与,寻址访问zookeeper和regionserver,数据读写访问regioneserver。HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。

系统架构

HBASE与相关软件hadoop.2.2hbase-0.98-hadoop2.tar.gzJDK7前提条件:本机或集群环境下hadoop.2.2已经安装成功HBASEShellhbase提供了一个shell的终端给用户交互名称命令表达式创建表create'表名称','列族名称1','列族名称2','列族名称N'添加记录put'表名称','行名称','列名称:','值'查看记录get'表名称','行名称'查看表中的记录总数count'表名称'删除记录delete'表名','行名称','列名称'删除一张表先要屏蔽该表,才能对该表进行删除,第一步disable'表名称'第二步drop'表名称'查看所有记录scan"表名称"查看某个表某个列中所有数据scan"表名称",{COLUMNS=>'列族名称:列名称'}更新记录就是重写一遍进行覆盖#$HBASE_HOME/bin/hbaseshellHBASEShell的DML操作添加记录获取一条记录1.取得一个id的所有数据>get'users','xiaoming'2.获取一个id,一个列族的所有数据>get'users','xiaoming','info'3.获取一个id,一个列族中一个列的所有数据get'users','xiaoming','info:age'put'users','xiaoming','info:age','24';put'users','xiaoming','info:birthday','1987-06-17';put'users','xiaoming','info:company','alibaba';put'users','xiaoming','address:contry','china';put'users','xiaoming','address:province','zhejiang';put'users','xiaoming','address:city','hangzhou';put'users','zhangyifei','info:birthday','1987-4-17';put'users','zhangyifei','info:favorite','movie';put'users','zhangyifei','info:company','alibaba';put'users','zhangyifei','address:contry','china';put'users','zhangyifei','address:province','guangdong';put'users','zhangyifei','address:city','jieyang';put'users','zhangyifei','address:town','xianqiao';HBASEShell的DML操作更新记录>put'users','xiaoming','info:age','29'>get'users','xiaoming','info:age'>put'users','xiaoming','info:age','30'>get'users','xiaoming','info:age'获取单元格数据的版本数据>get'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>1}>get'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>2}>get'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>3}获取单元格数据的某个版本数据〉get'users','xiaoming',{COLUMN=>'info:age',TIMESTAMP=>56}全表扫描>scan'users'HBASEShell的DML操作删除xiaoming值的'info:age'字段>delete'users','xiaoming','info:age'>get'users','xiaoming'删除整行>deleteall'users','xiaoming'统计表的行数>count'users'清空表>truncate'users'HBASE的Java_API(二)//创建一张表publicstaticvoidcreate(StringtableName,StringcolumnFamily)throwsIOException{

HBaseAdminadmin=newHBaseAdmin(getConfiguration()); if(admin.tableExists(tableName)){ System.out.println("tableexists!"); }else{

HTableDescriptortableDesc=newHTableDescriptor(tableName); tableDesc.addFamily(newHColumnDescriptor(columnFamily));

admin.createTable(tableDesc); System.out.println("createtablesuccess!"); }}HBASE的Java_API(三)//添加一条记录publicstaticvoidput(StringtableName,Stringrow,StringcolumnFamily,Stringcolumn,Stringdata)throwsIOException{ HTabletable=newHTable(getConfiguration(),tableName);

Putp1=newPut(Bytes.toBytes(row)); p1.add(Bytes.toBytes(columnFamily),Bytes.toBytes(column), Bytes.toBytes(data)); table.put(p1); System.out.println("put'"+row+"',"+columnFamily+":"+column+"','"+data+"'");}HBASE的Java_API(四)//读取一条记录publicstaticvoidget(StringtableName,Stringrow)throwsIOException{ HTabletable=newHTable(getConfiguration(),tableName);

Getget=newGet(Bytes.toBytes(row)); Resultresult=table.get(get); System.out.println("Get:"+result);}HBASE的Java_API(六)//删除表publicstaticvoiddelete(StringtableName)throwsIOException{ HBaseAdminadmin=newHBaseAdmin(getConfiguration()); if(admin.tableExists(tableName)){ try{

admin.disableTable(tableName); admin.deleteTable(tableName); }catch(IOExceptione){ e.printStackTrace(); System.out.println("Delete"+tableName+"失败"); } } System.out.println("Delete"+tableName+"成功");}HBASE的Java_API(七)publicstaticvoidmain(String[]args)throwsIOException{ StringtableName="hbase_tb"; StringcolumnFamily="cf";

HBaseTestCase.create(tableName,columnFamily); HBaseTestCase.put(tableName,"row1",columnFamily,"cl1","data"); HBaseTestCase.get(tableName,"row1"); HBaseTestCase.scan(tableName); HBaseTestCase.delete(tableName);}HBASE结合MapReduce批量导入staticclassBatchImportReducerextendsTableReducer<LongWritable,Text,NullWritable>{ protectedvoidreduce(LongWritablekey,java.lang.Iterable<Text>values, Contextcontext)throwsjava.io.IOException,InterruptedException{ for(Texttext:values){ finalString[]splited=text.toString().split("\t");

finalPutput=newPut(Bytes.toBytes(splited[0])); put.add(Bytes.toBytes("cf"),Bytes.toBytes("date"),Bytes.toBytes(splited[1])); //省略其他字段,调用put.add(....)即可 context.write(NullWritable.get(),put); } };}HBASE结合MapReduce批量导入 publicstaticvoidmain(String[]args)throwsException{ finalConfigurationconfiguration=newConfiguration(); //设置zookeeper configuration.set("hbase.zookeeper.quorum","hadoop0"); //设置hbase表名称 configuration.set(TableOutputFormat.OUTPUT_TABLE,"wlan_log"); //将该值改大,防止hbase超时退出 configuration.set("dfs.socket.timeout","180000");

finalJobjob=newJob(configuration,"HBaseBatchImport");

job.setMapperClass(BatchImportMapper.class); job.setReducerClass(BatchImportReducer.class); //设置map的输出,不设置reduce的输出类型 job.setMapOutputKeyClass(LongWritable.class); job.setMapOutputValueClass(Text.class);

job.setInputFormatClass(TextInputFormat.class); //不再设置输出路径,而是设置输出格式类型 job.setOutputFormatClass(TableOutputFormat.class);

(job,"hdfs://hadoop0:9000/input");

job.waitForCompletion(true); }HBASE的Java_API练习查询按RowKey查询按手机号码查询按手机号码的区域查询HBASE的Java_API练习查询手机的所有上网记录 publicstaticvoidscan(StringtableName)throwsIOExcep

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论