云计算技术 实验五 Hbase的安装和基础编程

参考资料为:

教材代码-林子雨编著《大数据基础编程、实验和案例教程(第2版)》教材所有章节代码_厦大数据库实验室博客

1.实验学时

4学时

2.实验目的

  • 熟悉Hbase的安装和配置。
  • 熟悉Hbase的相关命令。
  • 实现Hbase的Java编程调用。

3.实验内容

(一)安装Hbase,能够查询Hbase的版本。

首先将压缩包传入linux中进行压缩:

后面把文件名改了,将hbash目录的权限赋值给hadoop用户:

        

然后在hbash路径下修改文件,配置环境变量:

先改变路径到hbash文件夹:

然后vim编译文件,加入路径名字:

然后使修改立刻生效:

然后添加用户权限:

将HBase安装目录下的所有文件所有者改成hadoop

然后查看版本号:

安装成功。

(二)单机运行Hbase系统。

先配置环境:(单机环境)

先配置java环境变量:

使用命令进入hbse-env.sh文件(vim进入):路径为/usr/local/hbase/conf/hbase-env.sh

找到这两行修改:

修改成:

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162

export HBASE_MANAGES_ZK=true

然后修改hbase-site.xml,使用下面指令进入文件。

vim /usr/local/hbase/conf/hbase-site.xml

添加配置:

然后测试运行hbase

先打开目录,然后再启动Hbase

启动成功:

然后可以停止运行hBase:

(三)实现Hbase的伪分布式启动。

进入要修改的文件

先配置hbase-env.sh文件,修改路径

然后再配置hbase-site.xml

然后启动hbase :

先登录ssh

然后启动hadoop :

输入jps命令,然后发现进程namenode、secondarynamenode、datanode都启动了

切换目录之后再启动hbase

出现以下进程说明启动成功:

进入hbase 的shell命令,

然后关闭hbase :

(四)运行Hbase相关的Shell命令,实现表的创建,数据插入,数据删除,以及数据查看等操作。

先启动hadoop:

然后启动hbase:

然后进入hbase的shell命令

1.创建表:

然后可以查看建完的表的信息:

2.然后是添加数据

3.添加多组数据

4.查看数据,这里返回95001行的数据;

这里使用get命令

使用scan命令

5.删除数据:

已经删除了这个信息:

删除全部信息:

6.然后是删除表的操作:

先让表不可使用

删除student表

7.查询历史信息:

先建立一个teacher表保存信息

插入数据后更新数据:

然后指定查询信息:

退出数据库,完成操作。

(五)实现Hbase的Java编程,在eclipse中创建项目,ExampleForHbase。java代码。

先启动hadoop,然后启动hbase

然后启动eclipse:

创建新的项目:

然后next之后在下一个界面点击libraries,之后选择add external jars

然后在usr/local/hbase/lib目录下选择要导入的jar包

然后进入最上面的目录导入剩下的jar包

完成之后点击finsh

之后右键新创建的hbaseexmaple创建一个新的class

然后输入代码:下面为java代码

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
 
import java.io.IOException;
public class ExampleForHBase {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;
    public static void main(String[] args)throws IOException{
        init();
        createTable("student",new String[]{"score"});
        insertData("student","zhangsan","score","English","69");
        insertData("student","zhangsan","score","Math","86");
        insertData("student","zhangsan","score","Computer","77");
        getData("student", "zhangsan", "score","English");
        close();
    }
 
    public static void init(){
        configuration  = HBaseConfiguration.create();
        configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
        try{
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
 
    public static void close(){
        try{
            if(admin != null){
                admin.close();
            }
            if(null != connection){
                connection.close();
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
 
    public static void createTable(String myTableName,String[] colFamily) throws IOException {
        TableName tableName = TableName.valueOf(myTableName);
        if(admin.tableExists(tableName)){
            System.out.println("talbe is exists!");
        }else {
            TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
            for(String str:colFamily){
                ColumnFamilyDescriptor family = 
ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(str)).build();
                tableDescriptor.setColumnFamily(family);
            }
            admin.createTable(tableDescriptor.build());
        } 
    }
 
    public static void insertData(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 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);
        System.out.println(new String(result.getValue(colFamily.getBytes(),col==null?null:col.getBytes())));
        table.close(); 
    }
}

然后运行代码:

程序运行成功:

在新的终端中启动hbase的shell命令之后查看list

发现有student的表

然后再查看student表中的数据

完成编译。

4.思考题

(一)Hbase和传统的关系型数据库相比,有哪些特点?

1.Hbase的容量十分大,它里面的表可以存储很多行和列组成的数据。

2.Hbase的版本十分的多,它表中的每一个列的数据都有多个版本,一般来说,每一个列对应着一条数据,可能有的数据会对应着多个版本。每个版本对应的查看相对方便。

3.Hbase中的表中的列可以是空的,对于空列,它不会占用空间,对于表的设计可以相对随意。

4.对于Hbase当存储空间不够的时候,由于Hbase底层使用HDFS,可以动态增加机器解决空间问题。

5.Hbase的可靠性更高,由于底层使用HDFS,所以HDFS具有备份的机制,当Spark集群发生严重的问题的时候,Hbase中的机制可以保证数据不会发生丢失或者损毁。

(二)Hbase创建的应用程序,需要导入哪些安装包,这些安装包里面有什么功能?

1.在单机配置的时候,需要导入java的jdk文件,用于后面调用eclipse进行java项目的编写,配置hbase-env.sh文件还需要加上对应的路径。

2.在使用eclipse的时候,导入的jar包用于实现java项目的编写,对应的有向Hbase中输入数据的jar包,连接Hbase数据库的包,使用shell命令的包等。

3.在配置伪分布式模式的时候,需要设置好对应的访问路径用于使用hadoop等,这些访问路径对应的包是已经安装好的。

5.实验结论或体会

1.在添加用户权限的时候,需要注意对应的文件夹不要配置错误权限。

2.Hbase中使用Shell命令的时候,需要注意退出之后,要重新使用对应的进入命令才能继续使用Shell命令操作Hbase

3.退出数据库的时候,需要注意路径的问题可能导致退出失败。

4.在操作eclipse的时候,导入jar包的时候,对应的包需要全部导入,路径不要错了。

5.操作eclipse之前,一定要运行hadoopHbase之后,运行代码才会有结果,对应的Hbase中才会出现数据。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HBase是一个高可靠性、高性能、面向列的NoSQL数据库。它是建立在Hadoop文件系统(HDFS)之上的,可以处理海量数据,并支持随机实时读/写访问。在这里,我将向您介绍HBase的API编程HBase API编程主要涉及以下三个方面: 1. 创建表和删除表 创建表: ```java Configuration config = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(config); HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("mytable")); tableDescriptor.addFamily(new HColumnDescriptor("mycf")); admin.createTable(tableDescriptor); ``` 删除表: ```java Configuration config = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(config); admin.disableTable("mytable"); admin.deleteTable("mytable"); ``` 2. 插入数据和查询数据 插入数据: ```java Configuration config = HBaseConfiguration.create(); HTable table = new HTable(config, "mytable"); Put put = new Put(Bytes.toBytes("row1")); put.add(Bytes.toBytes("mycf"), Bytes.toBytes("mycolumn"), Bytes.toBytes("myvalue")); table.put(put); ``` 查询数据: ```java Configuration config = HBaseConfiguration.create(); HTable table = new HTable(config, "mytable"); Get get = new Get(Bytes.toBytes("row1")); Result result = table.get(get); byte[] value = result.getValue(Bytes.toBytes("mycf"), Bytes.toBytes("mycolumn")); System.out.println(Bytes.toString(value)); ``` 3. 扫描表和删除数据 扫描表: ```java Configuration config = HBaseConfiguration.create(); HTable table = new HTable(config, "mytable"); Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { byte[] value = result.getValue(Bytes.toBytes("mycf"), Bytes.toBytes("mycolumn")); System.out.println(Bytes.toString(value)); } scanner.close(); ``` 删除数据: ```java Configuration config = HBaseConfiguration.create(); HTable table = new HTable(config, "mytable"); Delete delete = new Delete(Bytes.toBytes("row1")); delete.deleteColumn(Bytes.toBytes("mycf"), Bytes.toBytes("mycolumn")); table.delete(delete); ``` 以上是HBase API编程的基本操作。希望这些示例可以帮助你更好地了解如何使用HBase API编程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stearm210

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值