HBase2.2.2安装和编程实践

这篇具有很好参考价值的文章主要介绍了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安装和编程实践
编辑完成后,再执行source命令使上述配置在当前终端立即生效

source ~/.bashrc

1.4 添加HBase权限

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

HBase2.2.2安装和编程实践

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

/usr/local/hbase/bin/hbase version

HBase2.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安装和编程实践
之前在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版本

HBase2.2.2安装和编程实践

可知:要预先安装

  • 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安装和编程实践
发现文件只读,不可更改
解决方法,在命令前添加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安装和编程实践
成功启动HBase
HBase2.2.2安装和编程实践
停止HBase运行,命令如下:

bin/stop-hbase.sh

HBase2.2.2安装和编程实践

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安装和编程实践
HBase2.2.2安装和编程实践
不知启动是否成功
jps试试。
HBase2.2.2安装和编程实践
很明显失败了,节点完全没启动。

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

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

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

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

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

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

HBase2.2.2安装和编程实践

三、 编程实践

1. 利用Shell命令

1.1 HBase中创建表

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

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

HBase2.2.2安装和编程实践

describe 'student'

HBase2.2.2安装和编程实践

1.2 HBase数据库基本操作

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

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

*删除数学列的内容

1.2.4 删除表

disable 'student'  
drop 'student'

HBase2.2.2安装和编程实践

1.3 查询表历史数据

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

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

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

HBase Java API编程实践

先装个eclipse,类似安装hbase的步骤,但是不用重命名下载过的安装包,不用修改环境变量,然后再桌面加个快捷方式
HBase2.2.2安装和编程实践
到/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安装和编程实践
到HBase Shell交互式环境中,使用如下命令查看student表是否创建成功:
HBase2.2.2安装和编程实践
查看student表中的数据
HBase2.2.2安装和编程实践文章来源地址https://www.toymoban.com/news/detail-442422.html

到了这里,关于HBase2.2.2安装和编程实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 大数据实验三-HBase编程实践

    目录 一.实验内容 二.实验目的 三.实验过程截图及说明 1、安装HBase 2、配置伪分布式模式: 3、使用hbase的shell命令来操作表: 4、使用hbase提供的javaAPI来编程实现类似操作: 5、实验总结及心得体会 6、完整报告在文章开头,挂载。 HBase编程实践: 1)在Hadoop基础上安装H

    2024年04月12日
    浏览(64)
  • HBase Java API编程实践

    本实例采用Eclipse开发工具。 启动Eclipse,启动以后,出现如下图所示界面,点击ok按钮。 启动进入Eclipse以后的程序开发界面如下图所示。 点击界面顶部的“File”菜单,在弹出的子菜单(如下图所示)中选择“New”,再选择子菜单中的“Project”。 这时会弹出一个Java工程创建

    2024年02月05日
    浏览(38)
  • HBase的编程实践(实验3_熟悉常用的HBase操作)

    一、Hbase中使用Shell命令: ① HBase中创建表:(create 命令:第一个变量是表名,然后是列族名) 语法:create \\\'表名称\\\',\\\'列族名称1\\\',\\\'列族名称2\\\',\\\'列族名称N\\\' 通过命令 describe \\\'student\\\'  进行查看表的结构: (desc ‘表名’,查看表的结构) ✿ 增加数据 ② put: (put 命令:第一

    2024年02月01日
    浏览(45)
  • 大数据开源框架之HBase编程实践

    HBase的安装部署请看: (30条消息) 大数据开源框架环境搭建(五)——Hbase完全分布式集群的安装部署_木子一个Lee的博客-CSDN博客 目录 任务1:用HBase提供的HBase Shell命令实现以下指定功能: 1.列出HBase所有的表的相关信息 2.在终端打印出指定的表的所有记录数据; 3.向已经创建好

    2024年02月01日
    浏览(41)
  • 大数据技术原理与应用实验指南——HBase编程实践

    一、 实验目的 (1) 熟练使用HBase操作常用的Shell命令。 (2) 熟悉HBase操作常用的Java API。 二、 实验内容 (1) 安装HBase软件。 (2) 编程实现指定功能,并利用Hadoop提供的Shell命令完成相同的任务(实现增、删、改、查基本操作,统计表的行数,打印表的记录等操作)。

    2024年02月21日
    浏览(40)
  • hbase2.x hbck2处理region方案(长期opening\closing\offline,Report Region Holes,report Unkown server)等

    hbase2.x RIT(region in transition)背景知识 在hbase1.x中transition是令广大大数据运维人员头疼的一个话题,因为,region 的状态转移涉及到了三个核心组件,分别为:hbase master,zookeeper和hbase 的regionserver,这三个组件中的某一个region的状态都是一致的情况下,这个region 才算是正常,

    2024年02月03日
    浏览(42)
  • 同个线程里,如果线程正在忙过程中,定时器时间到了会被延迟触发吗?

    在同一线程中,如果线程正在忙过程中,定时器的触发事件会被延迟,直到线程空闲下来才会被触发。这是因为在QT中,线程和定时器的处理都是通过事件循环来完成的。当线程处于忙碌状态时,事件循环将会被阻塞,直到线程执行完当前的工作才会继续运行事件循环,处理

    2024年03月10日
    浏览(45)
  • 云计算技术 实验五 Hbase的安装和基础编程

    参考资料为: 教材代码-林子雨编著《大数据基础编程、实验和案例教程(第2版)》教材所有章节代码_厦大数据库实验室博客 1 . 实验学时 4学时 2 . 实验目的 熟悉Hbase的安装和配置。 熟悉Hbase的相关命令。 实现Hbase的Java编程调用。 3.实验内容 (一) 安装Hbase,能够查询Hba

    2024年02月11日
    浏览(47)
  • ros中常见问题处理:延迟问题解决方法、订阅的数据感觉比发布的数据要多;如果没有正在接收消息,那么状态如何获取?

    在ROS中,消息的发布和订阅是异步的,也就是说,当你调用pub.publish(output_msg)发布消息时,该函数会立即返回,并不会等待所有订阅者接收消息。因此,如果你的程序出现延迟,可能是由于某些原因导致消息被堵塞或丢失。 以下是几种可能导致延迟的原因和解决方法: 1,消

    2024年02月06日
    浏览(40)
  • 计算机网络开荒2.2-Socket编程

    应用编程接口API :就是应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口 Berkeley UNIX 操作系统定义了标准API,称为 套接字接口(socket interface) 简称套接字Socket,Linux也是用此标准接口 Windows用的是在Socket interface之上封装的API:Windows Socket Interface(WINSOCK) ATT 为其

    2024年02月08日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包