实验4熟悉常用的HBase操作.docx

上传人:牧羊曲112 文档编号:4554721 上传时间:2023-04-27 格式:DOCX 页数:18 大小:766.14KB
返回 下载 相关 举报
实验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》由会员分享,可在线阅读,更多相关《实验4熟悉常用的HBase操作.docx(18页珍藏版)》请在三一办公上搜索。

1、实验4熟悉常用的HBas操作姓名:包生友 专业年级:软件14 学号:01012691. 实验目的1. 理解Hase在Hadoop体系结构中的角色; 熟练使用HBs操作常用的Shl命令;3. 熟悉HBase操作常用的Java P。2. 实验环境操作系统:LnuxHadoop版本:26.0或以上版本ase版本:1.1.2或以上版本DK版本:1.6或以上版本Java IDE:Elipse3. 实验内容和完成情况. 编程实现以下指定功能,并用adoop提供的Hase Sl命令完成相同任务:(完整可执行代码见 代码/QuestioOe.jva)(1)列出HBase所有的表的相关信息,例如表名;Sel:L

2、is图1 列出HBas所有表的相关信息编程:(1)列出Bae所有的表的相关信息,例如表名、创建时间等publc t oid itabes() throsOxception i();/建立连接 Taeesciptor hTablescitors= admin.listTbles(); fr(HTableDespor hTbeDeriptor :hTablDscripto) ystem.out.ntn(表名:TbleDsrptor.getamAstring(); close();/关闭连接(2)在终端打印出指定的表的所有记录数据;l:scns图2 打印指定表的所有记录数据编程:/()在终端打印出指

3、定的表的所有记录数据uic statc void geDat(Srin abNm)thows IExption iit(); Tabe table = concin.getTab(TableaevaluO(aeName); an scan = nw Sca(); esutScnnr scanner = tabl.getScaner(sca); fr (eult result:scanner) rintRecoder(result); loe();打印一条记录的详情pulic staic void pntRecoder(Resutreslt)trwsIptio or(Cell cell:reut

4、.rCells()) ysm.ut.print(行健: new String(CelilcloneRow(cl); Systemout.rint(列簇: +ew String(CellUtlclnFamiy(cell); se.ou.prin( 列: +new String(ltlcleulir(ell); Sste.ut.print( 值:new Stig(Celil.loVau(cell))); Sstemut.println(时间戳: +cel.getTimesp()); ()向已经创建好的表添加和删除指定的列族或列;s:此题请先在hel中创建1作为示例表:ete s1,scora)在s

5、表,添加数据:Shll: puts,zansan,scor:ath,69图 给1添加数据编程:/向表添加数据pbic sat o seo(trngtabeae,Sting rowKey,nglFamly,Strig cl,String vl) rw OExtion init(); ale table = conecton.getTabl(TableName.vlueOf(taleName); Pt put= w Put(rowKey.getBytes(); ut.ddColumn(colFail.getByts(), l.getByes(), vl.getyes(); ale.t(ut); t

6、abl.cloe(); close();insertRow(s1,zhagsn,sore,Math,69)b)在s表,删除指定的列:Shell:dt s,zanga,scor:Mah图4 删除数据编程:/删除数据pubic stticvidleteRw(rigtablNae,Sring rwKey,Srng colamly,Stricol) trows OExcetn iit(); able table = conecin.etTble(TableNameaeOf(taleame); Detedlete =nwDeet(rowKey.getBytes(); /删除指定列族 deadFaiy(B

7、s.toytes(colFamily)); /删除指定列 elet.addCumn(yes.yes(clmly),Bytes.toyts(col); table.delet(elete); table.clse(); lose();deleeRw(1,san,sore,Math)(4)清空指定的表的所有记录数据;hel:ua s1图5 清空指定表的所有记录数据编程:/(4)清空指定的表的所有记录数据publc stat void ceao(trng alNme)thro OExcepton ini(); Tableae tableme= ableName.aleOf(abName); din.

8、sableTble(ableae); amin.eetTabl(able); HableDscrithTabeDeripor nw HableDescrptr(ableName); adin.raeTabe(hTableDescrto); clse();(5)统计表的行数。Shel:ont 图6 统计表的行数编程:()统计表的行数pubicsatic vid ctRows(String taeNam)throws IOEception init(); Tabl table = conction.gtTale(TaeNamevaluef(aleNme); Scan scan wScan(); R

9、esutSanerscan = te.getScnn(s); int num 0; or (Result rult=scane.ne();rsut!=nul;result=() num+; Systemout.println(行数:+ um); sanr.os(); lose();2. 现有以下关系型数据库中的表和数据,要求将其转换为适合于HBas存储的表并插入数据:学生表(tdent)学号(_No)姓名(SName)性别(S_e)年龄(S_Age)201501Zhanganmle232015003aryfmale2220153Lisml24课程表(Cos)课程号(CNo)课程名(_Name)

10、学分(Crdi)1300ath2.1232Couter cine5.303nglish3. 选课表()学号(SC_Sn)课程号(SC_no)成绩(S_Scr)2015001230018620151123036950021302705002230992010031230019820003230095 学生Sten表s:主键的列名是随机分配的,因此无需创建主键列创建表:ceatStuent,S_o,_Nam,SSex,S_Age图7 创建Studet表插入数据:插入数据ell命令第一行数据put tt,s00,_No,050put Sen,001,S_Name,Zhangsanut Studet,

11、s01,_ex,maleputStun,s00,Sge,2第二行数据pt Stunt,s00,S_No,20502put Studnt,s002,_Ne,Marypu uent,02,SSe,emut Sudent,s02,_Age,2第三行数据uttudent,s03,S_N,2015003puten,s03,_ame,LiputStude,003,S_Se,alput Stuent,s003,S_ge,24图8 添加数据并查看图9 添加3个学生 课程Cuse表创建表:creat ours,C_No,_a,C_redi图1创建ourse表插入数据:插入数据hell命令第一行数据puos,c1

12、,_No,1231put Cus,0,C_Nam,Math Coure,001,C_Credt,20第二行数据puCourse,00,N,202put urse,c02,C_Name,ouerput our,c002,Creit,50第三行数据pu ure,,C_N,12303ut Curse,003,Cae,Englhut Cour,c003,C_Credit,3.图11添加数据图12 添加个课程 选课表创建表:crete SC,SC_n,SC_Cno,SCScre图13 创建表SC插入数据:插入数据sel命令第一行数据ut SC,sc001,SSno,215pt C,sc01,C_Co,2

13、3001utSC,1,SC_Score,86第二行数据pt SC,sc00,S_So,20500put S,sc002,SCCo,1003pt S,sc02,SCcor,6第三行数据put S,sc00,SC_no,21502pu ,sc003,SCno,1302put SC,sc3,SC_Score,77第四行数据putSC,sc004,SC_Sno,201502u SC,c004,SC_Cno,13003ut ,sc004,SC_Scor,99第五行数据putSC,sc05,SC_So,2503u SC,sc05,C_Co,13001putC,sc00,SC_Soe,98第六行数据put

14、SC,sc006,S_So,015003ut S,sc006,S_Co,13002pu SC,c006,SCScoe,95图14 插入数据图数据显示图16 QuesionOe运行后控制台消息同时,请编程完成以下指定功能:(完整可执行代码见 代码QestonTwoja)(1)craTable(Strng tablNae, ring ields)创建表,参数taleNme为表的名称,字符串数组fils为存储记录各个域名称的数组。要求当HBse已经存在名为tbleame的表的时候,先删除原有的表,然后再创建新的表。代码:pulc stcvoid ceaeabe(Srig tableNae,Stig

15、ied) throws IException ni(); TbleNa tabename = TbleNme.vle(ableName); (adn.taleExss(tblena)) Systm.t.pntln(able is xists!); admiialeale(tenae); am.eteabl(tbena);/删除原来的表 TablDecrptr hTalescriptor = new HTeDecripo(tlname); fo(Strn str:fieds) HolumnDescriptr hColumnDeripor= new Holumnescriptor(sr); haD

16、escrtr.addi(ColunDsciptor); inceateTable(haescrpto); clos();(2)addRecod(Sringtableame, Srg w, Str filds, String alus)向表talea、行row(用S_ame表示)和字符串数组file指定的单元格中添加对应的数据lues。其中els中每个元素如果对应的列族下还有相应的列限定符的话,用“colunFaml:column”表示。例如,同时向“Math”、“Coputer Scec”、“Englh”三列添加成绩时,字符串数组l为“Scr:Mah”,”Scoe;Comut Scince”,

17、”Scr:English”,数组values存储这三门课的成绩。代码:plic statc void ddRecord(StrinableNe,Strng row,Strngfield,trgle) throwsIOExction int(); Tble tabe = cct.tTable(TableNam.aluf(taeName); for(i = ;i!fiels.lenth;i+) tput ew Put(rwgBye()); trgcls fieldiplit(:); pt.ddlum(cols0.getBytes(), col.getBytes(), vales.gtyte());

18、 tabeput(ut); be.co(); cose();()sanColumn(tng tblName, Sringolumn)浏览表tableNam某一列的数据,如果某一行记录中该列数据不存在,则返回ull。要求当参数olun为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;当参数column为某一列具体名称(例如“Score:ath”)时,只需要列出该列的数据。代码:ublic staticvodcanlumn(Strg aleName,Sring lumn)trw Oxcepin it(); Tbeale =oetion.etTabl(TbeNa.val

19、uf(tbNam); n n= ew San(); scan.dFamily(BytsoByts(olum); RslScaer scner= tabegtSanner(can); f (Relt reul= canner.nex(); el != null; rsult = scannrnxt() soCll(rest); te.close(); close();/格式化输出public stvoidshowll(Resultreslt) Ce clls = reslt.aCls(); for(elcel:lls) Sytem.out.prinn(RwName:n tring(CellUti

20、lconeRow(cell); Syste.u.pintl(Timeam:+cll.getestamp()+); System.o.println(olumn Fmly:+new String(CelUloeamil(cell))+ ); ystemu.prt(rwName:ne Sing(lltil.cloneQliir(c))+ ); Sstemout.prnn(value:+ne Sng(Celil.loneau(cel))+ ); (4)modifData(StringtabeName, Strg ow, Strig column)修改表aeame,行o(可以用学生姓名S_Nam表示)

21、,列coun指定的单元格的数据。代码:publi ttcvoi modifyDta(Sring tableme,String o,Strigolumn,Sringal)tw IOxcepio init(); Tl tle = connection.etTbe(TalNe.valueO(tabeName)); utut =new t(ro.getBte(); utaddColumn(con.geyes(),nl,val.geBys(); tbe.ut(put); table.lose(); cose();(5)dleteow(String tabNam, String ro)删除表tablame

22、中rw指定的行的记录。public static oid eletew(Strig abeName,Strig o)throIEcepin iit(); abetb =connecongetTabe(Talem.auOf(ablme)); Dlte delete= ew Delte(rowgtBye(); /删除指定列族 /de.dFamil(yte.toBtes(coFil)); /删除指定列 /deete.adoumn(Byte.oByts(colFamily),Bytes.toyts(cl); t.elee(dlete); tble.cls(); cle();图17 Quesionwo运

23、行后控制台消息3利用HBe和MRde完成如下任务:假设HBse有2张表,表的逻辑视图及部分数据如下所示:表 逻辑视图及部分数据书名(oName)价格(pce)Dtbae Sst cp3$hinkin n a60$Data Mining2要求:从ase读出上述两张表的数据,对“pric”的排序,并将结果存储到HBae中。操作方法如下:reate book,bookNameut ook,va_6$,bokName:,Thinkingin Java pbook,val_0$,bookme:,Datbase SystemConceptutook,val_30$,bokNae:,DaaMiningsca

24、n #此处查询所有的数据,就会把按照owK自动排序图8 创建book表图19 查看ook中详情(已排序)4. 出现问题1. 输入代码时,有许多报错。2. Delee后lst发现还是为1ow,以为无法删除。3. 给表中输入数据时,没有注意格式,导致错误。5. 解决方案1. 需要导入相应的jar包。2. “lis”为列出Hase中表格的命令,查看表中的详情需要用“scan”命令。3. 添加数据需要一项一项添加,而且要注意空格以及符号的使用。6. 实验心得通过此次实验,使我我理解HBse在Haop体系结构中的角色,能够使用Has操作常用的Shell命令,也熟悉了HBase操作常用的JavaI。在一定程度上达到了实验目的。

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号