实验4熟悉常用的HBase操作文档格式.docx

上传人:wj 文档编号:4641898 上传时间:2023-05-03 格式:DOCX 页数:18 大小:766.77KB
下载 相关 举报
实验4熟悉常用的HBase操作文档格式.docx_第1页
第1页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第2页
第2页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第3页
第3页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第4页
第4页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第5页
第5页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第6页
第6页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第7页
第7页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第8页
第8页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第9页
第9页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第10页
第10页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第11页
第11页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第12页
第12页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第13页
第13页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第14页
第14页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第15页
第15页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第16页
第16页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第17页
第17页 / 共18页
实验4熟悉常用的HBase操作文档格式.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验4熟悉常用的HBase操作文档格式.docx

《实验4熟悉常用的HBase操作文档格式.docx》由会员分享,可在线阅读,更多相关《实验4熟悉常用的HBase操作文档格式.docx(18页珍藏版)》请在冰点文库上搜索。

实验4熟悉常用的HBase操作文档格式.docx

//建立连接

HTableDescriptorhTableDescriptors[]=admin.listTables();

for(HTableDescriptorhTableDescriptor:

hTableDescriptors){

System.out.println("

表名:

"

+hTableDescriptor.getNameAsString());

}

close();

//关闭连接

}

(2)在终端打印出指定的表的所有记录数据;

scan'

s1'

图2打印指定表的所有记录数据

//

(2)在终端打印出指定的表的所有记录数据

publicstaticvoidgetData(StringtableName)throwsIOException{

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

Scanscan=newScan();

ResultScannerscanner=table.getScanner(scan);

for(Resultresult:

scanner){

printRecoder(result);

//打印一条记录的详情

publicstaticvoidprintRecoder(Resultresult)throwsIOException{

for(Cellcell:

result.rawCells()){

System.out.print("

行健:

"

+newString(CellUtil.cloneRow(cell)));

列簇:

+newString(CellUtil.cloneFamily(cell)));

列:

+newString(CellUtil.cloneQualifier(cell)));

值:

+newString(CellUtil.cloneValue(cell)));

时间戳:

+cell.getTimestamp());

(3)向已经创建好的表添加和删除指定的列族或列;

p.s:

此题请先在Shell中创建s1作为示例表:

create'

'

score'

a) 在s1表,添加数据:

put'

zhangsan'

score:

Math'

69'

图3给s1添加数据

//向表添加数据

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

Putput=newPut(rowKey.getBytes());

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

table.put(put);

table.close();

insertRow("

s1"

b) 在s1表,删除指定的列:

delete'

图4删除数据

//删除数据

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

Deletedelete=newDelete(rowKey.getBytes());

//删除指定列族

delete.addFamily(Bytes.toBytes(colFamily));

//删除指定列

delete.addColumn(Bytes.toBytes(colFamily),Bytes.toBytes(col));

table.delete(delete);

deleteRow("

(4)清空指定的表的所有记录数据;

truncate'

图5清空指定表的所有记录数据

编程:

//(4)清空指定的表的所有记录数据

publicstaticvoidclearRows(StringtableName)throwsIOException{

TableNametablename=TableName.valueOf(tableName);

admin.disableTable(tablename);

admin.deleteTable(tablename);

HTableDescriptorhTableDescriptor=newHTableDescriptor(tableName);

admin.createTable(hTableDescriptor);

(5)统计表的行数。

count'

图6统计表的行数

//(5)统计表的行数

publicstaticvoidcountRows(StringtableName)throwsIOException{

intnum=0;

for(Resultresult=scanner.next();

result!

=null;

result=scanner.next()){

num++;

System.out.println("

行数:

+num);

scanner.close();

2.现有以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:

学生表(Student)

学号(S_No)

姓名(S_Name)

性别(S_Sex)

年龄(S_Age)

2015001

Zhangsan

male

23

2015003

Mary

female

22

Lisi

24

课程表(Course)

课程号(C_No)

课程名(C_Name)

学分(C_Credit)

123001

Math

2.0

123002

ComputerScience

5.0

123003

English

3.0

选课表(SC)

学号(SC_Sno)

课程号(SC_Cno)

成绩(SC_Score)

86

69

2015002

77

99

98

95

①学生Student表

主键的列名是随机分配的,因此无需创建主键列

创建表:

create'

Student'

S_No'

S_Name'

S_Sex'

S_Age'

图7创建Student表

插入数据:

插入数据shell命令

第一行数据

put'

s001'

2015001'

Zhangsan'

male'

23'

第二行数据

s002'

2015002'

Mary'

female'

22'

第三行数据

s003'

2015003'

Lisi'

24'

图8添加数据并查看

图9添加3个学生

②课程Course表

Course'

C_No'

C_Name'

C_Credit'

图10创建Course表

插入数据:

c001'

123001'

2.0'

c002'

123002'

Computer'

5.0'

c003'

123003'

English'

3.0'

图11添加数据

图12添加3个课程

③选课表

SC'

SC_Sno'

SC_Cno'

SC_Score'

图13创建表SC

sc001'

86'

sc002'

sc003'

77'

第四行数据

sc004'

99'

第五行数据

sc005'

98'

第六行数据

sc006'

95'

图14插入数据

图15数据显示

图16QuestionOne运行后控制台消息

同时,请编程完成以下指定功能:

(完整可执行代码见代码/QuestionTwo.java)

(1)createTable(StringtableName,String[]fields)

创建表,参数tableName为表的名称,字符串数组fields为存储记录各个域名称的数组。

要求当HBase已经存在名为tableName的表的时候,先删除原有的表,然后再创建新的表。

代码:

publicstaticvoidcreateTable(StringtableName,String[]fields)throwsIOException{

if(admin.tableExists(tablename)){

tableisexists!

);

admin.disableTable(tablename);

admin.deleteTable(tablename);

//删除原来的表

HTableDescriptorhTableDescriptor=newHTableDescriptor(tablename);

for(Stringstr:

fields){

HColumnDescriptorhColumnDescriptor=newHColumnDescriptor(str);

hTableDescriptor.addFamily(hColumnDescriptor);

(2)addRecord(StringtableName,Stringrow,String[]fields,String[]values)

向表tableName、行row(用S_Name表示)和字符串数组files指定的单元格中添加对应的数据values。

其中fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:

column”表示。

例如,同时向“Math”、“ComputerScience”、“English”三列添加成绩时,字符串数组fields为{“Score:

Math”,”Score;

ComputerScience”,”Score:

English”},数组values存储这三门课的成绩。

publicstaticvoidaddRecord(StringtableName,Stringrow,String[]fields,String[]values)throwsIOException{

for(inti=0;

i!

=fields.length;

i++){

Putput=newPut(row.getBytes());

String[]cols=fields[i].split("

:

put.addColumn(cols[0].getBytes(),cols[1].getBytes(),values[i].getBytes());

table.put(put);

(3)scanColumn(StringtableName,Stringcolumn)

浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。

要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;

当参数column为某一列具体名称(例如“Score:

Math”)时,只需要列出该列的数据。

publicstaticvoidscanColumn(StringtableName,Stringcolumn)throwsIOException{

scan.addFamily(Bytes.toBytes(column));

result!

=null;

result=scanner.next()){

showCell(result);

//格式化输出

publicstaticvoidshowCell(Resultresult){

Cell[]cells=result.rawCells();

cells){

RowName:

+newString(CellUtil.cloneRow(cell))+"

Timetamp:

+cell.getTimestamp()+"

columnFamily:

+newString(CellUtil.cloneFamily(cell))+"

rowName:

+newString(CellUtil.cloneQualifier(cell))+"

value:

+newString(CellUtil.cloneValue(cell))+"

(4)modifyData(StringtableName,Stringrow,Stringcolumn)

修改表tableName,行row(可以用学生姓名S_Name表示),列column指定的单元格的数据。

publicstaticvoidmodifyData(StringtableName,Stringrow,Stringcolumn,Stringval)throwsIOException{

Putput=newPut(row.getBytes());

put.addColumn(column.getBytes(),null,val.getBytes());

(5)deleteRow(StringtableName,Stringrow)

删除表tableName中row指定的行的记录。

publicstaticvoiddeleteRow(StringtableName,Stringrow)throwsIOException{

Deletedelete=newDelete(row.getBytes());

//delete.addFamily(Bytes.toBytes(colFamily));

//delete.addColumn(Bytes.toBytes(colFamily),Bytes.toBytes(col));

图17Qu

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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