实验4熟悉常用的HBase操作文档格式.docx
- 文档编号:4641898
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:18
- 大小:766.77KB
实验4熟悉常用的HBase操作文档格式.docx
《实验4熟悉常用的HBase操作文档格式.docx》由会员分享,可在线阅读,更多相关《实验4熟悉常用的HBase操作文档格式.docx(18页珍藏版)》请在冰点文库上搜索。
//建立连接
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 熟悉 常用 HBase 操作