HBase2.2.2安装和编程实践

如果你正在安装,请用hadoop用户

HBase介绍

HBase是一个分布式的、面向列的开源数据库,源于Google的一篇论文《BigTable:一个结构化数据的分布式存储系统》。HBase以表的形式存储数据,表有行和列组成,列划分为若干个列族/列簇(column family)。欲了解HBase的官方资讯,请访问(http://hbase.apache.org/)。
HBase的运行有三种模式:单机模式、伪分布式模式、分布式模式。
单机模式:在一台计算机上安装和使用HBase,不涉及数据的分布式存储;伪分布式模式:在一台计算机上模拟一个小的集群;分布式模式:使用多台计算机实现物理意义上的分布式存储。

前提

确保已安装Hadoop

1. HBase2.2.2安装

将hbase的安装包下载到虚拟机内

1.1 解压安装包hbase-2.2.2-bin.tar.gz至路径 /usr/local

cd ~
sudo tar -zxf ~/下载/hbase-2.2.2-bin.tar.gz -C /usr/local

安装包路径记得更改

1.2 将解压的文件名hbase-2.2.2改为hbase,以方便使用

cd /usr/local
sudo mv ./hbase-2.2.2 ./hbase

把hbase目录权限赋予给hadoop用户

cd /usr/local
sudo chown -R hadoop ./hbase

1.3 配置环境变量
将hbase下的bin目录添加到path中

vim ~/.bashrc
# 如果没有引入过PATH请在~/.bashrc文件尾行添加如下内容:
export PATH=$PATH:/usr/local/hbase/bin

HBase2.2.2安装和编程实践_第1张图片
编辑完成后,再执行source命令使上述配置在当前终端立即生效

source ~/.bashrc

1.4 添加HBase权限

cd /usr/local
sudo chown -R hadoop ./hbase

在这里插入图片描述

1.5 查看HBase版本,确定hbase安装成功

/usr/local/hbase/bin/hbase version

HBase2.2.2安装和编程实践_第2张图片

Error: JAVA_HOME is not set
Please download the latest Sun JDK from the Sun Java web site http://www.oracle.com/technetwork/java/javase/downloads
HBase requires Java 1.8 or later.

开始盘查漏洞!!!
HBase2.2.2安装和编程实践_第3张图片
之前在hadoop用户中安装,现在登录的是usr用户,在配置一遍。试试。
以下内容源于安装Hadoop教程:

在Linux命令行界面中,执行如下Shell命令(注意:当前登录用户名是hadoop):

cd /usr/lib
sudo mkdir jvm 
cd ~
cd Downloads  
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm 
cd /usr/lib/jvm
ls
cd ~
vim ~/.bashrc

上面命令使用vim编辑器(查看vim编辑器使用方法)打开了hadoop这个用户的环境变量配置文件,请在这个文件的开头位置,添加如下几行内容:

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

保存.bashrc文件并退出vim编辑器。然后,继续执行如下命令让.bashrc文件的配置立即生效:

source ~/.bashrc
java -version

装java之后,再次查询hbase版本

在这里插入图片描述

可知:要预先安装

  • jdk
  • Hadoop( 单机模式不需要,伪分布式模式和分布式模式需要)
  • SSH

2. HBase配置

2.1单机模式配置

  1. 配置/usr/local/hbase/conf/hbase-env.sh 。配置JAVA环境变量,并添加配置HBASE_MANAGES_ZK为true,用vi命令打开并编辑hbase-env.sh
vim /usr/local/hbase/conf/hbase-env.sh

HBase2.2.2安装和编程实践_第4张图片
发现文件只读,不可更改
解决方法,在命令前添加sudo

添加完成后保存退出即可。

  1. 配置/usr/local/hbase/conf/hbase-site.xml
    打开并编辑hbase-site.xml
vim /usr/local/hbase/conf/hbase-site.xml

在启动HBase前需要设置属性hbase.rootdir,用于指定HBase数据的存储位置,若不设置的话,hbase.rootdir默认为/tmp/hbase-${user.name},这意味着每次重启系统都会丢失数据。此处设置为HBase安装目录下的hbase-tmp文件夹即(/usr/local/hbase/hbase-tmp),添加配置如下:

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>file:///usr/local/hbase/hbase-tmp</value>
        </property>
</configuration>
  1. 接下来测试运行。首先切换目录至HBase安装目录/usr/local/hbase;再启动HBase。
cd /usr/local/hbase
sudo bin/start-hbase.sh
bin/hbase shell

HBase2.2.2安装和编程实践_第5张图片
成功启动HBase
HBase2.2.2安装和编程实践_第6张图片
停止HBase运行,命令如下:

bin/stop-hbase.sh

HBase2.2.2安装和编程实践_第7张图片

2.2 伪分布式模式配置

1.配置/usr/local/hbase/conf/hbase-env.sh

vim /usr/local/hbase/conf/hbase-env.sh

配置JAVA_HOME,HBASE_CLASSPATH,HBASE_MANAGES_ZK.
HBASE_CLASSPATH设置为本机HBase安装目录下的conf目录

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export HBASE_CLASSPATH=/usr/local/hbase/conf 
export HBASE_MANAGES_ZK=true

由于之前已经配置java和zookeeper,所以找到classpath添加路径即可。

2.配置/usr/local/hbase/conf/hbase-site.xml,用命令vi打开并编辑hbase-site.xml

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

修改hbase.rootdir,指定HBase数据在HDFS上的存储路径;将属性hbase.cluter.distributed设置为true。假设当前Hadoop集群运行在伪分布式模式下,在本机上运行,且NameNode运行在9000端口。

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://localhost:9000/hbase</value>
        </property>
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
</configuration>

注意:修改环境配置文件可能打开是只读文件,需要加上sudo

  1. 接下来测试运行HBase。
    第一步:首先登陆ssh,之前设置了无密码登陆,因此这里不需要密码;再切换目录至/usr/local/hadoop ;再启动hadoop,如果已经启动hadoop请跳过此步骤。
ssh localhost
cd /usr/local/hadoop
./sbin/start-dfs.sh

ssh登录开始报错。。。HBase2.2.2安装和编程实践_第8张图片
HBase2.2.2安装和编程实践_第9张图片
不知启动是否成功
jps试试。
在这里插入图片描述
很明显失败了,节点完全没启动。

报错:localhost: usrp@localhost: Permission denied (publickey,password).

回到登录ssh那一步,可能是免密登录的问题
无法启动hadoop,得用hadoop用户运行,重启进入hadoop用户

在hadoop上快速配置一下hbase
HBase2.2.2安装和编程实践_第10张图片
运行一下单机模式
HBase2.2.2安装和编程实践_第11张图片
运行一下伪分布式,运行成功!!!
HBase2.2.2安装和编程实践_第12张图片

所以,第一次运行失败问题并不出于localhost,而是hadoop启动的root不是对应用户。

第二步:切换目录至/usr/local/hbase;再启动HBase.HBase2.2.2安装和编程实践_第13张图片
进入shell界面,然后退出,停止HBase运行

bin/hbase shell
exit
bin/stop-hbase.sh

HBase2.2.2安装和编程实践_第14张图片

三、 编程实践

1. 利用Shell命令

1.1 HBase中创建表

HBase中用create命令创建表
(启动hbase,进入shell先)

  create 'student','Sname','Ssex','Sage','Sdept','course'

在这里插入图片描述

describe 'student'

HBase2.2.2安装和编程实践_第15张图片

1.2 HBase数据库基本操作

1.2.1 添加数据
put 键,值
HBase2.2.2安装和编程实践_第16张图片
1.2.2 查找数据
get 表名,行名
scan 表名

1.2.3 删除数据
delete 表名,行,列 //删除具体行列中的数据
deleteall 表名,行 //删除整个行的数据
HBase2.2.2安装和编程实践_第17张图片

*删除数学列的内容

1.2.4 删除表

disable 'student'  
drop 'student'

在这里插入图片描述

1.3 查询表历史数据

1、在创建表的时候,指定保存的版本数(假设指定为5)

2、插入数据然后更新数据,使其产生历史版本数据,注意:这里插入数据和更新数据都是用put命令

3、查询时,指定查询的历史版本数。默认会查询出最新的数据。(有效取值为1到5)
HBase2.2.2安装和编程实践_第18张图片

HBase Java API编程实践

先装个eclipse,类似安装hbase的步骤,但是不用重命名下载过的安装包,不用修改环境变量,然后再桌面加个快捷方式
在这里插入图片描述
到/usr/local/eclipse目录下 ./eclipse 启动软件

新建一个java项目
导入lib

/usr/local/hbase/lib下所有的jar包
/usr/local/hbase/lib/client-facing-thirdparty下所有的jar包

新建类,输入代码

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(); 
    }
}

启动HDFS和HBase,run as java application
程序运行成功以后,会在运行结果中出现“69”
HBase2.2.2安装和编程实践_第19张图片
到HBase Shell交互式环境中,使用如下命令查看student表是否创建成功:
HBase2.2.2安装和编程实践_第20张图片
查看student表中的数据
HBase2.2.2安装和编程实践_第21张图片

你可能感兴趣的:(bug挖掘机,hbase,hadoop,大数据)