【大数据技术基础】 课程 第5章 HBase的安装和基础编程 大数据基础编程、实验和案例教程(第2版)

embedded/2024/11/30 14:44:03/

第5章 HBase的安装和基础编程

5.1 安装HBase

5.1.1 下载安装文件

访问HBase官网下载安装文件hbase-2.2.2-bin.tar.gz文件。

下载完安装文件以后,需要对文件进行解压。按照Linux系统使用的默认规范,用户安装的软件一般都是存放在“/usr/local/”目录下。请使用hadoop用户登录Linux系统,打开一个终端,执行如下命令:

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

 将解压的文件名hbase-2.2.2改为hbase,以方便使用,命令如下:

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

5.1.2 配置环境变量

将HBase安装目录下的bin目录(即/usr/local/hbase/bin)添加到系统的PATH环境变量中,这样,每次启动HBase时就不需要到“/usr/local/hbase”目录下执行启动命令,方便HBase的使用。请使用vim编辑器打开“~/.bashrc”文件,命令如下:

vim ~/.bashrc

打开.bashrc文件以后,可以看到,已经存在如下所示的PATH环境变量的配置信息,因为,之前在第3章安装配置Hadoop时,我们已经为Hadoop添加了PATH环境变量的配置信息:

export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

这里,需要把HBase的bin目录“/usr/local/hbase/bin”追加到PATH中。当要在PATH中继续加入新的路径时,只要用英文冒号“:”隔开,把新的路径加到后面即可,追加后的结果如下:

export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin: /usr/local/hbase/bin

 添加后,执行如下命令使设置生效:

source ~/.bashrc

5.1.3 添加用户权限

需要为当前登录Linux系统的hadoop用户添加访问HBase目录的权限,将HBase安装目录下的所有文件的所有者改为hadoop,命令如下:

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

 

5.1.4 查看HBase版本信息

可以通过如下命令查看HBase版本信息,以确认HBase已经安装成功:

/usr/local/hbase/bin/hbase version

 

5.2 HBase的配置

5.2.1 单机模式配置

1. 配置hbase-env.sh文件

使用vim编辑器打开“/usr/local/hbase/conf/hbase-env.sh”,命令如下:

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

打开hbase-env.sh文件以后,需要在hbase-env.sh文件中配置JAVA_HOME、HBASE_CLASSPATH和HBASE_MANAGES_ZK。

其中,HBASE_CLASSPATH设置为本机Hadoop安装目录下的conf目录(即/usr/local/hadoop/conf)。

JAVA_HOME和HBASE_MANAGES_ZK的配置方法和上面单机模式的配置方法相同。修改后的hbase-env.sh文件应该包含如下三行信息:

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

2. 配置hbase-site.xml文件

使用vim编辑器打开并编辑“/usr/local/hbase/conf/hbase-site.xml”文件,命令如下:

vim /usr/local/hbase/conf/hbase-site.xml
<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>

 

3. 启动运行HBase

首先登陆SSH,由于之前在“第3章 Hadoop的安装和使用”中已经设置了无密码登录,因此这里不需要密码。然后,切换至“/usr/local/hadoop”,启动Hadoop,让HDFS进入运行状态,从而可以为HBase存储数据,具体命令如下:

ssh localhost
cd /usr/local/hadoop
./sbin/start-dfs.sh

 然后,启动HBase,命令如下:

cd /usr/local/hbase
./bin/start-hbase.sh

输入命令jps,如果出现以下进程,则说明HBase启动成功:

  1. HMaster:HBase 的主节点进程,负责管理集群元数据和协调各种操作。
  2. HRegionServer:HBase 的区域服务器进程,负责存储和管理表数据。
  3. HQuorumPeer 或 ZooKeeper:HBase 使用 ZooKeeper 进行分布式协调,所以你会看到 ZooKeeper 的进程。

现在就可以进入HBase Shell命令行模式,命令如下:

./bin/hbase shell

4. 停止运行HBase

最后,可以使用如下命令停止HBase运行:

./bin/stop-hbase.sh

 关闭HBase以后,如果不再使用Hadoop,就可以运行如下命令关闭Hadoop:

cd /usr/local/hadoop
./sbin/stop-dfs.sh

在使用具体的Shell命令操作HBase数据之前,需要首先启动Hadoop,然后再启动HBase,并且启动HBase Shell,进入Shell命令提示符状态,具体命令如下:

cd /usr/local/hadoop
./sbin/start-dfs.sh
cd /usr/local/hbase
./bin/start-hbase.sh
./bin/hbase shell

5.2.2 伪分布式配置

5.3 HBase常用Shell命令

5.3.1 在HBase中创建表

        假设这里要创建一个表student,该表包含Sname、Ssex、Sage、Sdept、course等字段。需要注意的是,在关系型数据库(比如MySQL)中,需要首先创建数据库,然后再创建表,但是,在HBase数据库中,不需要创建数据库,只要直接创建表就可以。在HBase中创建student表的Shell命令如下:

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

5.3.2 添加数据

可以用Shell命令手工插入数据,命令如下:

put 'student','95001','Sname','LiYing'

下面继续添加4个单元格的数据,用来记录LiYing同学的相关信息,命令如下:

put 'student','95001','Ssex','male'
put 'student','95001','Sage','22'
put 'student','95001','Sdept','CS'
put 'student','95001','course:math','80'

5.3.3 查看数据

HBase中有两个用于查看数据的命令:

get命令:用于查看表的某一个单元格数据;

scan命令:用于查看某个表的全部数据。

比如,可以使用如下命令返回student表中95001行的数据:

下面使用scan命令查询student表的全部数据:

5.3.4 删除数据

首先,使用delete命令删除student表中95001这行中的Ssex列的所有数据:

然后,使用deleteall命令删除student表中的95001行的全部数据,命令如下:

deleteall 'student','95001'

5.3.5 删除表

删除表需要分两步操作,第一步先让该表不可用,第二步删除表。比如,要删除student表,可以使用如下命令:

disable 'student'  
drop 'student'

5.3.6 查询历史数据

为了查询历史数据,这里创建一个teacher表,首先,在创建表的时候,需要指定保存的版本数(假设指定为5),命令如下:

create 'teacher',{NAME=>'username',VERSIONS=>5}

然后,插入数据,并更新数据,使其产生历史版本数据,需要注意的是,这里插入数据和更新数据都是使用put命令,具体如下:

put 'teacher','91001','username','Mary'
put 'teacher','91001','username','Mary1'
put 'teacher','91001','username','Mary2'
put 'teacher','91001','username','Mary3'
put 'teacher','91001','username','Mary4'  
put 'teacher','91001','username','Mary5'

查询时,默认情况下回显示当前最新版本的数据,如果要查询历史数据,需要指定查询的历史版本数,由于上面设置了保存版本数为5,所以,在查询时制定的历史版本数的有效取值为1到5,具体命令如下:

5.3.7 退出HBase数据库

最后退出数据库操作,输入exit命令即可退出,命令如下:

exit

注意,这里退出HBase数据库是退出HBase Shell,而不是停止HBase数据库后台运行,执行exit后,HBase仍然在后台运行,如果要停止HBase运行,需要使用如下命令:

./bin/stop-hbase.sh

5.4 HBase编程实践

5.4.1 在Eclipse中创建项目

5.4.2为项目添加需要用到的JAR包

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

5.4.4 编译运行程序

现在可以在Linux的终端中启动HBase Shell,来查看生成的表,启动HBase Shell的命令如下:

cd /usr/local/hbase
./bin/hbase shell

进入HBase Shell以后,可以使用list命令查看HBase数据库中是否存在名称为student的表。

list

再在HBase Shell交互式环境中,使用如下命令查看student表中的数据:

5.5 本章小结

        HBase属于列族数据库,是NoSQL数据库的一种,它是Hadoop生态系统中的重要一员,借助于Hadoop的力量,HBase获得很好的发展空间,得到了大量的应用。

        本章首先介绍了HBase的安装方法,包括下载安装文件、配置环境变量和添加用户权限等。然后,详细介绍了HBase的两种不同模式的配置方法,包括单机模式的配置和伪分布式模式的配置。在实际应用中,需要经常使用Shell命令操作HBase数据库,因此,本章详细介绍了一些常用的HBase Shell命令的使用方法,包括创建表、添加数据、查看数据、删除数据等。最后,本章详细介绍了HBase的Java应用程序开发方法。


http://www.ppmy.cn/embedded/141771.html

相关文章

python pycharm与cmd中制表符不一样

这个问题通常是因为PyCharm和命令行&#xff08;CMD&#xff09;使用的制表符&#xff08;tab&#xff09;的宽度不同导致的。在PyCharm中&#xff0c;制表符可能被展开为空格&#xff08;通常是4个&#xff09;&#xff0c;而在CMD中&#xff0c;制表符通常是8个空格宽。 如下…

【网络安全设备系列】12、态势感知

0x00 定义&#xff1a; 态势感知&#xff08;Situation Awareness&#xff0c;SA&#xff09;能够检测出超过20大类的云上安全风险&#xff0c;包括DDoS攻击、暴力破解、Web攻击、后门木马、僵尸主机、异常行为、漏洞攻击、命令与控制等。利用大数据分析技术&#xff0c;态势感…

Leetcode53. 最大子数组和(HOT100)

链接 我的解法&#xff1a; class Solution { public:int maxSubArray(vector<int>& nums) {int n nums.size();int res INT_MIN;vector<int> f(n1,0);for(int i 1;i<n;i){f[i] max(f[i-1]nums[i-1],nums[i-1]);res max(res,f[i]);}return res;} };f…

Python绘制太极八卦

文章目录 系列目录写在前面技术需求1. 图形绘制库的支持2. 图形绘制功能3. 参数化设计4. 绘制控制5. 数据处理6. 用户界面 完整代码代码分析1. rset() 函数2. offset() 函数3. taiji() 函数4. bagua() 函数5. 绘制过程6. 技术亮点 写在后面 系列目录 序号直达链接爱心系列1Pyth…

MySQL 查询 执行顺序

MySQL查询的执行顺序大致如下&#xff1a; FROM子句&#xff1a;确定要查询的表。 ON&#xff1a;对JOIN语句中的表进行关联条件指定。 JOIN&#xff1a;如果有的话&#xff0c;对表进行关联。 WHERE&#xff1a;对记录进行过滤。 GROUP BY&#xff1a;根据指定的列分组记录…

846 树的重心

题目&#xff1a; 给定一颗树&#xff0c;树中包含 n 个结点&#xff08;编号 1∼n&#xff09;和 n−1 条无向边。 请你找到树的重心&#xff0c;并输出将重心删除后&#xff0c;剩余各个连通块中点数的最大值。 重心定义&#xff1a;重心是指树中的一个结点&#xff0c;如果…

《Vue零基础入门教程》第十一课:事件绑定指令

往期内容 《Vue零基础入门教程》第一课&#xff1a;Vue简介 《Vue零基础入门教程》第二课&#xff1a;搭建开发环境 《Vue零基础入门教程》第三课&#xff1a;起步案例 《Vue零基础入门教程》第四课&#xff1a;应用实例 《Vue零基础入门教程》第五课&#xff1a;挂载 《…

音视频入门基础:MPEG2-TS专题(9)——FFmpeg源码中,解码TS Header的实现

一、引言 FFmpeg源码对MPEG2-TS传输流/TS文件解复用时&#xff0c;在通过read_packet函数读取出一个transport packet后&#xff0c;会调用handle_packet函数来处理该transport packet&#xff1a; static int handle_packets(MpegTSContext *ts, int64_t nb_packets) { //..…