【头歌】HBase综合测试

这篇具有很好参考价值的文章主要介绍了【头歌】HBase综合测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一关:HBase-shell命令

任务描述

使用 HBase shell 命令创建表: exam_tb1 ,向表中添加数据,表的数据与结构如下:
【头歌】HBase综合测试

相关知识

编程要求
根据右侧窗口命令行内的提示,在 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

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

代码如下:文章来源地址https://www.toymoban.com/news/detail-509926.html

在命令行依次输入以下命令:

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'


第2关:HBase Java API

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

【头歌】HBase综合测试

相关知识

编程要求
请仔细阅读右侧代码,根据方法内的提示,在 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 *********/
	}
}

第三关:HBase扫描

任务描述
本关任务:在右侧 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 *********/

	}
		
}

第四关:HBase过滤器

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

  • 查询行健大于等于 row20data: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 *********/
	}

}

到了这里,关于【头歌】HBase综合测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hbase 王者荣耀数据表 HBase常用Shell命令

     大数据课本:    HBase常用Shell命令 在使用具体的Shell命令操作HBase数据之前,需要首先启动Hadoop,然后再启动HBase,并且启动HBase Shell,进入Shell命令提示符状态,具体命令如下: 1 在HBase中创建表 假设这里要创建一个表student,该表包含 Sname 、 Ssex 、 Sage 、 Sdept 、 course 等字

    2024年04月22日
    浏览(38)
  • ERROR: KeeperErrorCode = NoNode for /hbase/master,hbase在shell命令行中查看表时报错解决方案

    修改了hbase的配置文件hbase-site.xml伪分布式环境,会导致文件的不完整,hadoop上文件与本地文件不一致,所以进入hbase时list搜索不到之前的一整个文件。简而言之,之前时分布式存储的,3个机器,1个存储1块构成完整的文件,现去掉2个,再次查询时就会报错。 1.退出hbase shel

    2024年02月03日
    浏览(40)
  • 【Linux操作系统】【综合实验二 vi应用与shell脚本编辑】【浅试编辑命令】

    要求进一步掌握Linux基础操作,掌握全屏幕编辑命令vi的高级应用,熟悉shell脚本编辑与命令行编辑。 通过这个第二阶段实验,要求掌握以下操作与相关知识: (1)进一步掌握Linux系统的 文件类、目录类、进程管理类与磁盘操作类常用命令 ; (2)了解或掌握Linux系统支持的

    2023年04月22日
    浏览(66)
  • 【头歌】Sqoop 操作 HBase - 详解

    【提示】 点击每一关 参考答案 可以快速复制。 目录 第1关:Sqoop 在HBase中导入 任务描述 相关知识 编程要求 测试说明 参考答案 第2关:Sqoop 在HBase中导出 任务描述 相关知识 编程要求 测试说明 参考答案 本关任务:在右侧命令行中,导入 sql 文件至 MySQL 中并使用 Sqoop 工具将

    2024年02月06日
    浏览(30)
  • 头歌|HBase的安装与简单操作

    第1关:Hbase数据库的安装  第2关:创建表 需要在第一关运行成功的条件下进行 第3关:添加数据、删除数据、删除表 需要在第一、二关运行成功的条件下进行  

    2024年04月25日
    浏览(26)
  • HBase 伪分布式环境搭建 - 头歌

    mkdir /app cd /opt tar -zxvf hbase-2.1.1-bin.tar.gz -C /app cd /app cd hbase-2.1.1 cd conf echo $JAVA_HOME /usr/lib/jvm/jdk1.8.0_111 vim hbase-env.sh 进入文件,找到下图中红色框框内的路径,将#去掉,把=号后面的路径改成/usr/lib/jvm/jdk1.8.0_111。注意:记得先按A,才能改。 按esc键,输入  :wq  ,回车。 vim hb

    2024年04月28日
    浏览(41)
  • 头歌 HBase 性能优化:优化拆分和合并

    1. source /etc/profile 2. 3. start - all . sh zkServer . sh start start - hbase.sh    进入终端界面 hbase shell create \\\'stu\\\' ,{ NAME = \\\'info\\\' },{ NAME = \\\'desc\\\' }, SPLITS =   [ \\\'1000\\\' , \\\'2000\\\' , \\\'3000\\\' , \\\'4000\\\' , \\\'5000\\\'] put \\\'stu\\\' , \\\'15653216541\\\' , \\\'info:num\\\' , \\\'14561235651\\\' put \\\'stu\\\' , \\\'15653216541\\\' , \\\'info:s_name\\\' , \\\'cg\\\' put \\\'stu\\\' , \\\'15653216541\\\' ,

    2024年04月14日
    浏览(62)
  • 【Linux | Shell】结构化命令2 - test命令、方括号测试条件、case命令

    上篇文章 介绍了 if 语句相关知识。但 if 语句只能执行命令,判断该命令的结果,但在编程中,我们多数情况需要判断一个变量的值是否为空?判断两个变量的值谁更大?判断变量的字符串是否相等?这些判断条件,使用 if 语句无法直接判断。这篇文章介绍 if 语句中只能执

    2024年02月16日
    浏览(45)
  • 头歌大数据——HBase 伪分布式环境搭建

    第1关:HBASE伪分布式环境搭建 编程要求 好了,到你啦,你需要先按照上次实训——HBase单节点安装的方式将 HBase 安装在 /app 目录下,然后根据本关知识配置好伪分布式的 HBase ,最后点击测评即可通关。 测试说明 程序会检测你的 HBase 服务和 Hadoop 服务是否启动,以及伪分布

    2024年02月08日
    浏览(74)
  • shell脚本利用telnet命令批量测试IP和端口的连通性

    IP和端用写在一个文件里面,每行一个IP+端口,中间和冒号分隔,如下的方式: 192.168.1.1:80 192.168.1.2:8080 ...... 脚本如下:

    2024年02月04日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包