赞
踩
任务描述
使用 HBase shell
命令创建表: exam_tb1
,向表中添加数据,表的数据与结构如下:
相关知识
略
编程要求
根据右侧窗口命令行内的提示,在 Begin - End
区域内进行命令行语句补充。
测试说明
本关需要你在命令行中启动 hbase
,并使用 hbase shell
操作命令行,操作完之后点击测评即可,平台会使用脚本通过表名获取你创建的表,并输出其中数据。
预期输出:
row-1
class_info:class_id 201801
class_info:class_name software
user_info:age 32
user_info:name jack
row-2
class_info:class_id 201802
class_info:class_name hardware
user_info:age 28
user_info:name rose
开始你的任务吧,祝你成功!
代码如下:
在命令行依次输入以下命令: start-hbase.sh hbase shell create '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'
任务描述
本关任务:在右侧编写代码,禁用表 step2_tb0
,删除表 step2_tb1
,创建表 emp_tb1
, emp_tb1
表结构与数据如下图:
相关知识
略
编程要求
请仔细阅读右侧代码,根据方法内的提示,在 Begin - End
区域内进行代码补充。
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
预期输出:
表step2_tb0已禁用 step2_tb1已删除 201101 dept_info:dept_id 2001 dept_info:dept_name finance dept_info:gender man emp_info:emp_id 1 emp_info:emp_name lucy 201102 dept_info:dept_id 2003 dept_info:dept_name techenology dept_info:gender woman emp_info:emp_id 2 emp_info:emp_name alpha 201103 dept_info:dept_id 3002 dept_info:dept_name logistics dept_info:gender man emp_info:emp_id 3 emp_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 *********/ } }
任务描述
本关任务:在右侧 sanTable(String tablename)
方法中扫描表中的数据并输出( tablename
为要扫描的表名),扫描起止行要求从 row-10
开始至 row-50
,且只扫描 info:name
列。
相关知识
略
编程要求
请仔细阅读右侧代码,根据方法内的提示,在 Begin - End
区域内进行代码补充。
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
表名将作为方法的参数传入;
测试输入:
scan_tb1
预期输出:
row-11
info:name lucy
row-21
info: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 *********/ } }
任务描述
在右侧 query(String tName)
中编写代码,使用过滤器查询出如下数据:
row20
且 data:phone
列的值是正确的手机号码的数据并输出该行的所有数据;1
开头,第二位是[ 3
, 4
, 5
, 7
, 8
]中的任意一位,第三位到十一位都为 0-9
的数字。编程要求
请仔细阅读右侧代码,根据方法内的提示,在 Begin - End
区域内进行代码补充。
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
表名将作为方法的参数传入;
测试输入:
test_tb4
预期输出:
row20
data:name lisi
data:phone 18701101126
row30
data:name wangwu
data:phone 13974036666
row40
data:name zhaoliu
data: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); //行键大于20 Filter 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 *********/ } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。