8. Hadoop Hbase服务

接上文————>
基于 centos7 hadoop2.7.3 hbase2.3.7 jdk1.8

一.安装

要下载与hadoop对应版本的Hbase 自行baidu

1.新建文件夹上传到相应位置
在这里插入图片描述
2.解压缩
进入对应文件夹:

cd /opt/hbase/

解压:
tar.gz解压命令

tar -zxvf 文件名

zip文件解压命令

unzip hbase-2.3.7.zip 

3.编辑 hbase-env.sh 文件
在这里插入图片描述
查看Linux JDK安装路径

echo $JAVA_HOME

取消注释,且修改文件中的JDK路径
在这里插入图片描述
取消注释:
在这里插入图片描述

4.编辑 hbase-site.xml 文件
如下图:直接复制即可

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  
  <property>
    <name>hbase.root.dir</name>
    <value>/hbase-data</value>
  </property>
  <property>
    <name>hbase.master.info.port</name>
    <value>60010</value>
  </property>
  
  
</configuration>

在这里插入图片描述
5.创建 hbase-data 目录文件在这里插入图片描述
6.配置环境变量
Linux内进入文件:

vi /etc/profile

新增:

#hbase,注意hbase安装路径
export HBASE_HOME=/opt/hbase/hbase-2.3.7
export PATH=$PATH:$HBASE_HOME/bin

立即生效:

source /etc/profile

在这里插入图片描述
7.测试

hbase version

在这里插入图片描述
8.启动(先启动hadoop,再启动hbase)
进入目录bin目录:

cd /opt/hbase/hbase-2.3.1/bin

启动:

./start-hbase.sh

9.通过本机web的ui页面来访问 IP:60010 (英文冒号)
在这里插入图片描述

二.命令行操作

1.启动命令行

进入hbase的bin目录:

cd /opt/hbase/hbase-2.3.1/bin/

启动:

hbase shell

在这里插入图片描述

2.查看帮助命令:

help

3.查看服务器状态

status

4.查看版本信息

version

5.关于表的操作

(1)查看当前数据库表:

list

(2)创建表
命令格式: create ‘表名称’, ‘列族名称1’,‘列族名称2’,‘列名称N’

# 创建一张名为Student的表,包含基本信息(baseInfo)、学校信息(schoolInfo)两个列族
create 'Student','baseInfo','schoolInfo'

(3) 查看表的基本信息
命令格式:describe ‘表名’

describe 'Student'

(4)表的启用/禁用
enable和disable可以启用/禁用这个表,is_enabled和is_disabled来检查表是否被禁用

# 禁用表
disable 'Student'
# 检查表是否被禁用
is_disabled 'Student'
# 启用表
enable 'Student'
# 检查表是否被启用
is_enabled 'Student'

(5)检查表是否存在

exists 'Student'

(6)删除表

# 删除表前需要先禁用表
disable 'Student'
# 删除表
drop 'Student'

三.idea API操作

1、创建Maven项目
–不在赘述- -

2、配置maven仓库
在这里插入图片描述
在这里插入图片描述
3、导入依赖

<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.5.0</version>
        </dependency>

在这里插入图片描述
刷新一下依赖:
在这里插入图片描述

4.新建log4j.propeities
在这里插入图片描述

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=firestorm.log

log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

log4j.logger.com.codefutures=DEBUG

5.创建包和类
在这里插入图片描述
6.建立连接

package hbase;

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 HbaseCRUD {
    private static Configuration configuration;
    private static Connection connection;
    private static Admin admin;

    public HbaseCRUD() {
        init();
    }

//    建立连接
    public void init(){
        configuration=HBaseConfiguration.create();
        //        设置IP
        configuration.set("hbase.zookeeper.quorum","192.168.230.136"); // 换成你自己的IP
        //        设置端口
        configuration.set("hbase.zookeeper.property.clientPort","2181");
        //        连接
        try{
            connection=ConnectionFactory.createConnection(configuration);
            admin=connection.getAdmin();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

7.关闭连接

代码接上:

//    关闭连接
    public void close(){
        try{
            if(admin!=null)
                admin.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

8.创建表

代码接上:

/**
     * 创建表
     * @param myTableName 表名
     * @param colFamily 列族数组
     * @throws IOException
     */
    public void createTable(String myTableName,String[]colFamily)throws IOException{
        TableName tablename = TableName.valueOf(myTableName);
        if(admin.tableExists(tablename)){
            System.out.println("表已存在,删除旧表");
            admin.disableTable(tablename);//使表无效
            admin.deleteTable(tablename);//删表
        }
        HTableDescriptor hTableDescriptor = new HTableDescriptor(tablename);
        for(String str:colFamily){  //增加一列
            HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str);
            hTableDescriptor.addFamily(hColumnDescriptor);
        }
        admin.createTable(hTableDescriptor); //建表
        System.out.println("建表成功");
    }

9.插入数据

代码接上:

/**
     * 插入数据
     * @param tableName 表名
     * @param rowKey 行键
     * @param fields 列族(或列族:列限定符)
     * @param values  值
     * @throws IOException
     */
    public void addRecord(String tableName,String rowKey,String []fields,String [] values) throws IOException {
        Table table = connection.getTable(TableName.valueOf(tableName));
        for (int i = 0; i < fields.length; i++) {
            Put put = new Put(rowKey.getBytes());
            String [] cols = fields[i].split(":");
            if(cols.length == 1)
                put.addColumn(cols[0].getBytes(), "".getBytes(), values[i].getBytes());
            else
                put.addColumn(cols[0].getBytes(), cols[1].getBytes(), values[i].getBytes());
            table.put(put);
        }
        table.close();
    }

10.查询数据

代码接上:

/**
     * 查询数据
     * @param tableName 表名
     * @param column 列族(或列族:列限定符)
     * @throws IOException
     */
    public void scanColumn (String tableName,String column) throws IOException {
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();
        String [] cols = column.split(":");
        if(cols.length==1)
            scan.addFamily(column.getBytes());
        else
            scan.addColumn(Bytes.toBytes(cols[0]), cols[1].getBytes());
        ResultScanner scanner = table.getScanner(scan);
        for (Result result = scanner.next(); result !=null;result = scanner.next()) {
            for(Cell cell:result.rawCells()){
                System.out.print("列族:"+new String(CellUtil.cloneFamily(cell)));
                System.out.print(",行键:"+new String(CellUtil.cloneRow(cell)));
                System.out.print(",列名:"+new String(CellUtil.cloneQualifier(cell)));
                System.out.print(",值:"+new String(CellUtil.cloneValue(cell)));
                System.out.println();
            }
        }
        table.close();
    }

11.修改数据

代码接上:

/**
     * 修改数据
     * @param tableName 表名
     * @param rowKey 行键
     * @param column 列族(或列族:列限定符)
     * @param value 值
     * @throws IOException
     */
    public void modifyData(String tableName,String rowKey,String column,String value) throws IOException {
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(rowKey.getBytes());
        String [] cols = column.split(":");
        if(cols.length==1)
            put.addColumn(column.getBytes(),"".getBytes() , value.getBytes());
        else
            put.addColumn(cols[0].getBytes(),cols[1].getBytes() , value.getBytes());
        table.put(put);
        table.close();
    }

10.删除数据

代码接上:

    /**
     * 删除数据
     * @param tableName 表名
     * @param rowKey 行键
     * @throws IOException
     */
    public void deleteRow(String tableName,String rowKey) throws IOException {
        Table table = connection.getTable(TableName.valueOf(tableName));
        Delete delete = new Delete(rowKey.getBytes());
        table.delete(delete);
        table.close();
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_胡杨_

感谢打赏,会多多更新的。

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

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

打赏作者

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

抵扣说明:

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

余额充值