第一关:HBase-shell命令

任务描述

使用 HBase shell 命令创建表: exam_tb1 ,向表中添加数据,表的数据与结构如下:

相关知识

编程要求
根据右侧窗口命令行内的提示,在 Begin - End 区域内进行命令行语句补充。

测试说明
本关需要你在命令行中启动 hbase ,并使用 hbase shell 操作命令行,操作完之后点击测评即可,平台会使用脚本通过表名获取你创建的表,并输出其中数据。

预期输出:

row-1class_info:class_id 201801class_info:class_name softwareuser_info:age 32user_info:name jack
row-2class_info:class_id 201802class_info:class_name hardwareuser_info:age 28user_info:name rose

开始你的任务吧,祝你成功!

代码如下:

在命令行依次输入以下命令:start-hbase.shhbase shellcreate 'exam_tb1',  {NAME=>'user_info'},{NAME=>'class_info'}put 'exam_tb1','row-1','user_info:name','jack'
put 'exam_tb1','row-1','user_info:age','32'
put 'exam_tb1','row-1','class_info:class_name','software'
put 'exam_tb1','row-1','class_info:class_id','201801'put 'exam_tb1','row-2','user_info:name','rose'
put 'exam_tb1','row-2','user_info:age','28'
put 'exam_tb1','row-2','class_info:class_name','hardware'
put 'exam_tb1','row-2','class_info:class_id','201802'

第2关:HBase Java API

任务描述
本关任务:在右侧编写代码,禁用表 step2_tb0 ,删除表 step2_tb1 ,创建表 emp_tb1emp_tb1 表结构与数据如下图:

相关知识

编程要求
请仔细阅读右侧代码,根据方法内的提示,在 Begin - End 区域内进行代码补充。

测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

预期输出:

表step2_tb0已禁用
step2_tb1已删除
201101dept_info:dept_id 2001dept_info:dept_name financedept_info:gender manemp_info:emp_id 1emp_info:emp_name lucy
201102dept_info:dept_id 2003dept_info:dept_name techenologydept_info:gender womanemp_info:emp_id 2emp_info:emp_name alpha
201103dept_info:dept_id 3002dept_info:dept_name logisticsdept_info:gender manemp_info:emp_id 3emp_info:emp_name linus

开始你的任务吧,祝你成功!

代码如下:

package step2;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import org.apache.hadoop.conf.*;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.io.compress.Compression;
import org.apache.hadoop.hbase.util.*;public class Task {public void operatorTables()throws Exception{/********* Begin *********/Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象TableName tableName = TableName.valueOf("emp_tb1");//定义表名HTableDescriptor htd = new HTableDescriptor(tableName);//定义表对象HColumnDescriptor hcd1 = new HColumnDescriptor("emp_info");//定义列族对象HColumnDescriptor hcd2 = new HColumnDescriptor("dept_info");//定义列族对象htd.addFamily(hcd1); //添加htd.addFamily(hcd2); //添加admin.createTable(htd);//创建表// 停用表admin.disableTable(TableName.valueOf("step2_tb0"));// 停用表admin.disableTable(TableName.valueOf("step2_tb1"));// 删除表admin.deleteTable(TableName.valueOf("step2_tb1"));// 获取一个操作指定表的table对象,进行DML操作Table table = conn.getTable(TableName.valueOf("emp_tb1"));// 构造要插入的数据为一个Put类型(一个put对象只能对应一个rowkey)的对象Put put = new Put(Bytes.toBytes("201101"));put.addColumn(Bytes.toBytes("emp_info"), Bytes.toBytes("emp_name"), Bytes.toBytes("lucy"));put.addColumn(Bytes.toBytes("emp_info"), Bytes.toBytes("emp_id"), Bytes.toBytes("1"));put.addColumn(Bytes.toBytes("dept_info"), Bytes.toBytes("gender"), Bytes.toBytes("man"));put.addColumn(Bytes.toBytes("dept_info"), Bytes.toBytes("dept_id"), Bytes.toBytes("2001"));put.addColumn(Bytes.toBytes("dept_info"), Bytes.toBytes("dept_name"), Bytes.toBytes("finance"));Put put2 = new Put(Bytes.toBytes("201102"));put2.addColumn(Bytes.toBytes("emp_info"), Bytes.toBytes("emp_name"), Bytes.toBytes("alpha"));put2.addColumn(Bytes.toBytes("emp_info"), Bytes.toBytes("emp_id"), Bytes.toBytes("2"));put2.addColumn(Bytes.toBytes("dept_info"), Bytes.toBytes("gender"), Bytes.toBytes("woman"));put2.addColumn(Bytes.toBytes("dept_info"), Bytes.toBytes("dept_id"), Bytes.toBytes("2003"));put2.addColumn(Bytes.toBytes("dept_info"), Bytes.toBytes("dept_name"), Bytes.toBytes("techenology"));     Put put3 = new Put(Bytes.toBytes("201103"));put3.addColumn(Bytes.toBytes("emp_info"), Bytes.toBytes("emp_name"), Bytes.toBytes("linus"));put3.addColumn(Bytes.toBytes("emp_info"), Bytes.toBytes("emp_id"), Bytes.toBytes("3"));put3.addColumn(Bytes.toBytes("dept_info"), Bytes.toBytes("gender"), Bytes.toBytes("man"));put3.addColumn(Bytes.toBytes("dept_info"), Bytes.toBytes("dept_id"), Bytes.toBytes("3002"));put3.addColumn(Bytes.toBytes("dept_info"), Bytes.toBytes("dept_name"), Bytes.toBytes("logistics"));ArrayList<Put> puts = new ArrayList<>();puts.add(put);puts.add(put2);puts.add(put3);// 插进去table.put(puts);table.close();conn.close();/********* End *********/}
}

第三关:HBase扫描

任务描述
本关任务:在右侧 sanTable(String tablename) 方法中扫描表中的数据并输出( tablename 为要扫描的表名),扫描起止行要求从 row-10 开始至 row-50 ,且只扫描 info:name 列。

相关知识

编程要求
请仔细阅读右侧代码,根据方法内的提示,在 Begin - End 区域内进行代码补充。

测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
表名将作为方法的参数传入;

测试输入:
scan_tb1

预期输出:

row-11info:name lucy
row-21info:name alpha

开始挑战吧,祝你成功!

代码如下:

package step3;import java.io.IOException;import org.apache.hadoop.conf.*;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.*;public class Task {public void scanTable(String tableName)throws Exception{/********* Begin *********/
Configuration config = new Configuration();
Connection conn = ConnectionFactory.createConnection(config);
Admin admin = conn.getAdmin();
TableName tablename = TableName.valueOf(tableName);
Table table = conn.getTable(tablename);
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"));
scan.setStartRow(Bytes.toBytes("row-10"));//设置从...开始扫描
scan.setStopRow(Bytes.toBytes("row-50"));//设置到...结束
ResultScanner scanner = table.getScanner(scan);
for(Result res : scanner){System.out.println(Bytes.toString(res.getRow()));for(Cell cell : res.listCells()){String family = Bytes.toString(CellUtil.cloneFamily(cell));String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell));String value = Bytes.toString(CellUtil.cloneValue(cell));System.out.println("\t" + family + ":" + qualifier + " " + value);}
}
/********* End *********/}}

第四关:HBase过滤器

任务描述
在右侧 query(String tName) 中编写代码,使用过滤器查询出如下数据:

  • 查询行健大于等于 row20data:phone 列的值是正确的手机号码的数据并输出该行的所有数据;
    手机号的规则为: 1 开头,第二位是[ 3 , 4 , 5 , 7 , 8 ]中的任意一位,第三位到十一位都为 0-9 的数字。

编程要求
请仔细阅读右侧代码,根据方法内的提示,在 Begin - End 区域内进行代码补充。

测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
表名将作为方法的参数传入;

测试输入:

test_tb4

预期输出:

row20data:name lisidata:phone 18701101126
row30data:name wangwudata:phone 13974036666
row40data:name zhaoliudata:phone 15897395896

开始你的任务吧,祝你成功!

代码如下:

package step4;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import org.apache.hadoop.cli.util.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.filter.SubstringComparator;
import org.apache.hadoop.hbase.util.*;public class Task {public void query(String tName) throws Exception {/********* Begin *********/Configuration conf = HBaseConfiguration.create();Connection connection = ConnectionFactory.createConnection(conf);Admin admin = connection.getAdmin();TableName tablename = TableName.valueOf(tName);Table table = connection.getTable(tablename);//行键大于20Filter equalFilter1 = new RowFilter(CompareOperator.GREATER_OR_EQUAL,new BinaryComparator(Bytes.toBytes("row20")));//单列值过滤器 电话号码SingleColumnValueFilter valueFilter =new SingleColumnValueFilter(Bytes.toBytes("data"),Bytes.toBytes("phone"),CompareOperator.EQUAL,new RegexStringComparator("^1[3|4|5|7|8][0-9]{9}$"));List<Filter> list =new ArrayList<>();list.add(valueFilter);list.add(equalFilter1);FilterList filterList1 =new FilterList(FilterList.Operator.MUST_PASS_ALL,list);Scan scan1 = new Scan();scan1.setFilter(filterList1);ResultScanner scanner1 = table.getScanner(scan1);for (Result result : scanner1) {System.out.println(Bytes.toString(result.getRow()));for(Cell cell : result.listCells()){String family = Bytes.toString(CellUtil.cloneFamily(cell));String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell));String value = Bytes.toString(CellUtil.cloneValue(cell));System.out.println("\t" + family + ":" + qualifier + " " + value);}}scanner1.close();connection.close();/********* End *********/}}

【头歌】HBase综合测试相关推荐

  1. HBase综合测试(头歌实践教学项目)

    HBase综合测试 第一关:HBase-shell命令 在命令行依次输入以下命令:start-hbase.shhbase shellcreate 'exam_tb1', {NAME=>'user ...

  2. 数据采集与清洗基础习题(二)Python爬虫常用模块,头歌参考答案

    数据采集习题参考答案,会持续更新,点个关注防丢失.为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Python爬虫常用模块. 创作不易,一键三连给博主一个支持呗. 文章目录 ...

  3. 两万字详细爬虫知识储备,数据采集与清洗基础习题(一)头歌参考答案

    数据采集习题参考答案,会持续更新,点个关注防丢失.为了方便寻找,按照头歌的门类从新整理了实训的分类,朋友们记得看标题哦,按标题寻找! 该篇为爬虫知识储备! 文章目录 实训一:HTML基础 第一关:初识 ...

  4. linux操作系统中的shell编程----基于头歌实践教学编写shell脚本测试结果

    一.前言 今天,又要使用我的大学技能-写实验报告.linux操作系统课程实验课到了尾声,这是最后一次linux操作系统实验报告,我喜极而泣. 行了,废话不多说,我直接开始肝!!本实验是基于基于头歌实践 ...

  5. 头歌 初识Redis

    头歌 初识Redis 第一关 redis-cli set hello redis lpush educoder-list hello rpush educoder-list educoder rpus ...

  6. 数据结构实验头歌 第1关:求图的最短路径

    任务描述 本关任务:编程实现求图的最短路径 相关知识 最短路径的Dijkstra算法: 求最短路径就是求图中的每一个点到图中某一个给定点(认为编号为0的点)的最短距离. 具体算法就是初始有一个旧图,一 ...

  7. 头歌c语言实训作业题解

    头歌c语言实训作业题解 持续更新 C语言程序设计编辑与调试环境 1.打印输出 Hello World 2.打印输出图形 3.求三个数的最大值 4.熟悉C语言调试环境 C语言中最基本的输入输出 1.看看 ...

  8. 头歌——c++单向链表

    #include <iostream> using namespace std; struct Linked {/********* Begin *********///结构体的成员变量 ...

  9. 头歌HTML实训笔录

    头歌实训笔录 HTML前端基础 第2关 创建 - 标签 HTML前端基础 因学校Java 前端等写代码的作业都在头哥平台上操作,就记录一下每一关的代码吧.. ##第1关 创建第一个 HTML 标签 / ...

  10. 如何下载头歌平台在线实验闯关中的文件到本地进行查看

    如何下载头歌平台在线实验闯关中的文件到本地进行查看 文章目录 如何下载头歌平台在线实验闯关中的文件到本地进行查看 一.前言 二.进入在线实验 三.使用SSH工具连接实验所属服务器 四.下载需要的文件到 ...

最新文章

  1. Python:使用ctypes库调用外部DLL 数据类型对应
  2. ssd_detected.cpp代码 head.h代码
  3. float类型转integer_Java基础(一)之数据类型——全面,浅显易懂
  4. akshare写etf动量滚动策略
  5. 提高网站性能之 —— 减少图片HTTP 请求的方案
  6. 趣味项目—MyQQ机器人(二)关于python的pandas根据索引读写指定数据的方法实现签到功能
  7. mysql 5.6 插入表情符
  8. Android Arcgis入门、Callout气泡的显示
  9. 安卓结构能转换成苹果借口吗_在外面开着手机WiFi有多危险你知道吗?
  10. 全国12315平台网上投诉与举报提示“含有不规范用语”的应对方法
  11. 竟可监控员工离职倾向!一系统引发大争议
  12. shell入门基础知识
  13. 视频剪辑,大师珍藏的素材都在这里!
  14. 2000个工作汇报PPT模板免费下载
  15. 小生云服务器,HobitLab#2--云服务器的有效利用之搭建tiny tiny RSS
  16. 综述:基于图学习的推荐系统;论文笔记
  17. 什么是api应用程序接口?
  18. 腾讯QQ2006 Fianl 海峰实用版(0114)┊
  19. r6220 虚拟服务器,网件r6220设置页面打不开 其实很简单
  20. 【Azkaban报错解决】FAILED SemanticException Failed to get a spark session

热门文章

  1. 使用OIDC和Ionic for JHipster保护您的移动应用程序
  2. 2264: sequence
  3. Redis主从同步(详解+图)
  4. java基础选择判断题_java基础试题3(选择) | 学步园
  5. 各大公司电子类招聘题目精选
  6. Andorid开发环境搭建
  7. 天猫店群是什么意思?天猫店群和传统模式相比有什么优势?
  8. linux服务篇-HTTP服务
  9. [转]解读油画——搓麻将的女人
  10. python中complex函数的用法_​Python中complex函数有什么用