大数据Hbase入门

举报
俺想吃蜂蜜 发表于 2022/04/13 08:27:34 2022/04/13
【摘要】 目的熟练使用HBase操作常用的Shell命令;熟悉HBase操作常用的Java API。 平台操作系统:LinuxHadoop版本:2.6.0或以上版本HBase版本:1.1.2或以上版本JDK版本:1.6或以上版本Java IDE:Eclipse 内容和要求 Hbase数据库练习Shell练习根据下面给出的表格,用Hbase Shell模式设计学生表格,表名用自己姓名全拼。namesc...

目的

  1. 熟练使用HBase操作常用的Shell命令;

  2. 熟悉HBase操作常用的Java API。

平台

操作系统:Linux

Hadoop版本:2.6.0或以上版本

HBase版本:1.1.2或以上版本

JDK版本:1.6或以上版本

Java IDE:Eclipse

内容和要求

Hbase数据库练习

Shell练习

根据下面给出的表格,用Hbase Shell模式设计学生表格,表名用自己姓名全拼。

name score
English Math Computer
zhangsan 69 86 77
lisi 55 100 88

首先设计表格
image.png

image.png

<1>设计完后,用scan指令浏览表的相关信息,给出截图。

image.png

<2>查询行键为zhangsan的各科成绩信息。给出截图。

image.png
<3>查询zhangsan 的Computer成绩。给出截图。

image.png
<4>插入一条新的学生数据(wangwu,100,90,90)

image.png

image.png
<5>修改lisi的Math成绩,改为95。给出截图。

image.png

<6>删除zhangsan的信息。给出截图。

image.png

Java API编程实例

基于Hbase shell进阶练习中已经设计出的学生表的基础上,用Hbase API编程完成下列两问。

<1>添加数据:Json,English:45 Math:89 Computer:100

name score
English Math Computer
Json 45 89 100

代码如下:

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.TableName;

import org.apache.hadoop.hbase.client.Admin;

import org.apache.hadoop.hbase.client.Connection;

import org.apache.hadoop.hbase.client.ConnectionFactory;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.client.Table;


public class ExampleForHbase { 

/**

 * @lizhuolang

 */

      //三个静态成员对象

  public static Configuration configuration;//管理HBase的配置信息

      public static Connection connection;//管理HBase的连接

      public static Admin admin;  //管理HBase数据库的表信息

public static void main(String[] args) {

// TODO Auto-generated method stub

 configuration  = HBaseConfiguration.create();//使用默认的HBase配置文件创建configuration          configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");//连接hbase

         try{

             connection = ConnectionFactory.createConnection(configuration);

             admin = connection.getAdmin();

         }catch (IOException e){

             e.printStackTrace();

         }

         try {//插入的信息

insertRow("lizhuolang","Json","score","English","45");

insertRow("lizhuolang","Json","score","Math","89");

insertRow("lizhuolang","Json","score","Computer","100");

} catch (IOException e) {//异常处理

// TODO Auto-generated catch block

e.printStackTrace();

}

         close();

}

 public static void insertRow(String tableName,String rowKey,String colFamily,

 String col,String val) throws IOException {

         Table table = connection.getTable(TableName.valueOf(tableName));

         Put put = new Put(rowKey.getBytes());

         put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());

         table.put(put);

         table.close();

     }

      //关闭连接

  public static void close(){

            try{

                if(admin != null){

                    admin.close();

                }

                if(null != connection){

                    connection.close();

                }

            }catch (IOException e){

                e.printStackTrace();

            }
            }
        }

查看数据表的变化
image.png

<2>取Json的English成绩信息

代码如下:


import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.Cell;

import org.apache.hadoop.hbase.CellUtil;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.TableName;

import org.apache.hadoop.hbase.client.Admin;

import org.apache.hadoop.hbase.client.Connection;

import org.apache.hadoop.hbase.client.ConnectionFactory;

import org.apache.hadoop.hbase.client.Get;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.Table;


public class hbase_query {
 

/**

 * @lizhuolang

 */

  //三个静态成员对象

  public static Configuration configuration;//管理HBase的配置信息

      public static Connection connection;//管理HBase的连接

      public static Admin admin;  //管理HBase数据库的表信息

public static void main(String[] args) {

// TODO Auto-generated method stub

configuration  = HBaseConfiguration.create();//使用默认的HBase配置文件创建configuration   

configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");//连接hbase         

try{

             connection = ConnectionFactory.createConnection(configuration);//连接hbase

             admin = connection.getAdmin();

         }catch (IOException e){

             e.printStackTrace();

         }

         try {

getData("lizhuolang","Json","score","English");//获取scofield的English成绩信息

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

         close();

}

  public static void getData(String tableName,String rowKey,String colFamily,

  String col)throws  IOException{

          Table table = connection.getTable(TableName.valueOf(tableName));

          Get get = new Get(rowKey.getBytes());

          get.addColumn(colFamily.getBytes(),col.getBytes());

          Result result = table.get(get);//从指定的行的某些单元格中取出相应的值

          showCell(result);

          table.close();

      }

  public static void showCell(Result result){//显示结果信息函数

          Cell[] cells = result.rawCells();

          for(Cell cell:cells){

              System.out.println("RowName:"+new String(CellUtil.cloneRow(cell))+" ");

              System.out.println("Timetamp:"+cell.getTimestamp()+" ");

              System.out.println("column Family:"+new String(CellUtil.cloneFamily(cell))+" ");

              System.out.println("row Name:"+new String(CellUtil.cloneQualifier(cell))+" ");

              System.out.println("value:"+new String(CellUtil.cloneValue(cell))+" ");

          }

      }

//关闭连接

  public static void close(){

            try{

                if(admin != null){

                    admin.close();

                }

                if(null != connection){

                    connection.close();                }

            }catch (IOException e){

                e.printStackTrace();

            }

        }

}

结果如下:
image.png

Hbase创建表失败

今天创建table的时候总是报以下错误:

image.png
从网上找到几种方法:

<1>

停止hbase、hadoop;

删除datanode节点中的临时文件,;重新格式化namenode;

重起hadoop、hbase集群;

<2>

修改hbase配置文件hbase-site.xml,hbase.rootdir改成了hbase.root.dir

image.png

<3>

底层采用的不是hdfs协议,这个可以通过查看hbase-site.xml中参数hbase.rootdir的值来群定,一些其它的协议比如file协议等等,HBase也是支持的
image.png

<4>

用date命令看一下每个机器 如果时间差距大 说明确实有问题

<5>

先启动regionserver,在启动HMaster。

在regionServer上./hbase-daemon.sh start regionserver

在master上执行:./bin/hbase-daemon.sh start master

最后前四种方法都还是报错,只有最后一种成功

解决问题!

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。