0


大数据:HBase安装、配置及使用

大数据

大数据,HBase,python

大数据:HBase安装、配置及使用

一、下载

HBase官网:http://archive.apache.org/dist/hbase/ 下载 hbase-2.2.2-bin.tar.gz。

二、安装和配置

1. 搭建hadoop环境

首先确保安装好了Hadoop3.1.3,因为HBase对Hadoop具有版本依赖性,并且所有操作是在新建的名为hadoop的用户下执行的。可参考我的另一篇博文https://blog.csdn.net/Acegem/article/details/122880274?spm=1001.2014.3001.5502。

2. 安装

然后进行如下操作:

su hadoop # 切换到名为hadoop的用户sudotar -xzvf hbase-2.2.2-bin.tar.gz -C /usr/local  # 解压到/usr/local/目录下cd /usr/local
sudomv ./hbase-2.2.2 ./hbase  # 重命名,方便使用sudochown -R hadoop ./hbase # 把hbase目录权限赋予给hadoop用户

配置环境变量:
打开终端输入

sudo vim ~/.bashrc

,将

/usr/local/hbase/bin

添加到环境变量中:

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

可参考我的另一篇Spark的博文https://blog.csdn.net/Acegem/article/details/122878998?spm=1001.2014.3001.5502,这里有所有大数据相关的环境变量配置。
记得输入

source ~/.bashrc

使环境变量生效!
配置hbase变量
输入

cd /usr/local/hbase
sudovim /usr/local/hbase/bin/hbase

将/usr/local/hbase/bin/hbase文件的162行处的

CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar

修改为:

CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar:/usr/local/hbase/lib/*

如下图:
请添加图片描述
有的时候还需要再输入一下

cd /usr/local/hase
sudosource ./bin/hbase  # 一定要有sudo

使hbase配置生效。

:如果不进行这一步

/usr/local/hbase/bin/hbase

文件的配置,下面输入

./bin/hbase version

进行版本验证会报错:

Error: Could not find or load main class org.apache.hadoop.hbase.util.GetJavaProperty

。当然hbase shell也启动不了。
在这里插入图片描述

3. 验证

输入

cd /usr/local/hbase
./bin/hbase version

或直接输入

/usr/local/hbase/bin/hbase version

进行验证。如果看到输出版本消息则表示安装成功,如下:
在这里插入图片描述
如果这一步出现“无效的变量名”类似的警告信息:

/usr/local/hadoop/libexec/hadoop-functions.sh: 行 2360: HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_USER:无效的变量名
/usr/local/hadoop/libexec/hadoop-functions.sh: 行 2455: HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_OPTS:无效的变量名

在这里插入图片描述这是因为Hbase找不到Hadoop的Classs,可以参考本文后面章节的

## 四、配置文件的一些其他配置
### (一)配置`/usr/local/hbase/conf/hbase-env.sh` 文件
#### 1. 禁止Hbase查找Hadoop的Classs

内容,将其注释掉。

4. 安装模式配置

HBase的安装运行有三种模式:单机模式、伪分布式模式、分布式模式。
我选择HBase伪分布式模式配置,后面的单机模式配置参考即可。

1) 伪分布式模式配置

伪分布式模式即结合HDFS,将Hbase数据存储到HDFS中,可在下面的第(2)步 hbase-site.xml 配置文件中进行HBase在HDFS中的存储目录设置。我们不妨将存储位置设为:HDFS中的 “/hbase” 目录(其中"/"表示HDFS的根目录),这个目录不需要事先新建好,会在配置完成以后通过启动HBase再关闭HBase就能自动生成这个

/bbase

目录。下面的

三、启动(iv)

中会有讲到。

(1)编辑
/usr/local/hbase/conf/hbase-env.sh

文件

修改内容如下:

# 第28行位置exportJAVA_HOME=/usr/local/java/jdk1.8.0_271
# 第31行位置exportHBASE_CLASSPATH=/usr/local/hbase/conf
# 第126行位置# HBASE_MANAGES_ZK设置为true,表示由hbase自己管理zookeeper,不需要单独的zookeeper。HBASE_MANAGES_ZK == hbase_manages_ZK(ZK==zookeeper)exportHBASE_MANAGES_ZK=true

(这些都是已经存在的注释,将注释去掉再修改下即可,可以在vim模式下输入

:
  • /
    
    来检索定位位置,使用
    n
    
    来进行Next翻页。)
(2)编辑
/usr/local/hbase/conf/hbase-site.xml

文件

假设当前Hadoop集群在本机上运行在伪分布式模式下,其NameNode运行在9000端口。

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

文件的内容由:

<configuration></configuration>

改为:

<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>

上面配置解释如下:

<configuration><property><!--指定HBase数据在HDFS上的存储路径,即HDFS中的 "/hbase" 目录(其中"/"表示HDFS的根目录),这个目录不需要事先新建好,会在配置完成以后通过启动HBase再关闭HBase就能自动生成这个/bbase目录。下面的三、启动(iv)中会有讲到。这个目录是region server的共享目录,用来持久化HBase --><name>hbase.rootdir</name><!--,--><value>hdfs://localhost:9000/hbase</value></property><property><!--true表示设置hbase集群处于分布式模式--><name>hbase.cluster.distributed</name><value>true</value></property><property><!--hbase.unsafe.stream.capability.enforce这个属性设置成false,是为了避免出现启动错误。--><name>hbase.unsafe.stream.capability.enforce</name><value>false</value></property></configuration>

  • hbase.rootdir:HBase数据的存储目录。 默认HBase数据是存储在本地/tmp中的。如果不改这个配置,数据会在重启的时候丢失。所以这个目录要么设置成HDFS目录,要么在下面单机配置模式下设置成本地目录。
  • hbase.unsafe.stream.capability.enforce:控制HBase是否检查流功能(hflush / hsync)。 如果您打算在rootdir表示的LocalFileSystem上运行,那就禁用此选项。如果没有设置hbase.unsafe.stream.capability.enforce为false,那么,在启动HBase以后,会出现无法找到HMaster进程的错误,启动后查看系统启动日志(/usr/local/hbase/logs/hbase-hadoop-master-ubuntu.log),会发现如下错误:
2020-01-25 15:04:56,916 ERROR [master/localhost:16000:becomeActiveMaster] master.HMaster: Failed to become active master
java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper operation during component failures, but the underlying filesystem does not support doing so. Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that can provide it.

2) 单机模式配置

(1)编辑
/usr/local/hbase/conf/hbase-env.sh

文件

修改内容如下:

# 第28行位置exportJAVA_HOME=/usr/local/java/jdk1.8.0_271
# 第126行位置。# HBASE_MANAGES_ZK设置为true,表示由hbase自己管理zookeeper,不需要单独的zookeeper。exportHBASE_MANAGES_ZK=true

(这些都是已经存在的注释,将注释去掉再修改下即可,可以在vim模式下输入

:
  • /
    
    来检索定位位置,使用
    n
    
    来进行Next翻页。)
(2)编辑
/usr/local/hbase/conf/hbase-site.xml

文件

因为是单机模式配置,要先在本地新建一个目录来保存HBase数据,如在/usr/local/hbase/目录下新建myHBaseData目录,即在/usr/local/hbase/myHBaseData目录下存放HBase数据,并将其属性设置在配置文件中。如下:

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

文件的内容由:

<configuration></configuration>

改为:

<configuration><property><!--指定HBase数据在本地上的存储路径,即上面新建的/usr/local/hbase/myHBaseData目录 --><name>hbase.rootdir</name><value>file:///usr/local/hbase/myHBaseData</value></property></configuration>

三、启动

(i)先启动hadoop

su hadoop # 切换hadoop用户sudoservicessh start
ssh localhost
cd /usr/local/hadoop
./sbin/start-dfs.sh

输入

jps

,可以看到

NameNode

,

DataNode

SecondaryNameNode

都已经成功启动,表示hadoop启动成功。

(ii)再启动Hbase

输入

cd /usr/local/hbase
# 启动Hbase
./bin/start-hbase.sh

如下图(伪分布式模式为例):
在这里插入图片描述
输入

jps

可以看到

HMaster

HRegionServer

HQuorumPeer

都已经成功启动,表示Hbase也启动成功。
综合(i)(ii),此时应该出现的进程列表:

Jps

# Hadoop进程
NameNode
DataNode
SecondaryNameNode

# HBase进程
Hmaster
HregionServer
HQuorumPeer

(iii)进入HBase shell界面:

输入

cd /usr/local/hbase
# 启动Hbase shell
./bin/hbase shell

成功进入,如下:
在这里插入图片描述

(iv)停止Hbase运行:

输入

cd /usr/local/hbase
# 停止Hbase运行
./bin/stop-hbase.sh

停止需要耐心等待一会,如下为停止成功:
在这里插入图片描述

附:此时,我们还可以查看上面自定义的HDFS中的/hbase目录,如下:

cd /usr/local/hadoop
# 查看HDFS的根目录“/”
./bin/hdfs dfs -ls /

结果:
在这里插入图片描述
可看到会在HDFS根目录"/"下自动生成了

/hbase

目录和

/tmp

目录。
顺便再查看一下里面的内容:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

(v)停止Hadoop运行:---- 一定要先关闭停止Hbase才能关闭Hadoop

cd /usr/local/hadoop
# 停止hadoop运行
./sbin/stop-dfs.sh

在这里插入图片描述

注意:如果在操作HBase的过程中发生错误,可以通过{HBASE_HOME}目录(/usr/local/hbase)下的logs子目录中的日志文件查看错误原因。

注意:这里启动关闭Hadoop和HBase的顺序一定是:启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop

四、配置文件的一些其他配置

(一)配置

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

文件

1. 禁止Hbase查找Hadoop的Classs

当在启动hbase时出现警告:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
...

要想让这些警告不显示,可以修改

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

文件来禁止Hbase查找Hadoop的Classs,修改内容如下:

# 第139行位置# 禁止Hbase查找Hadoop的ClasssexportHBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"

2. 关闭启动Hbase shell出现的警告

当启动Hbase Shell时,出现警告:

WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... 
using builtin-java classes where applicable

跳出警告的原因就是Hbase没有识别到native-hadoop librarys这个库。当然这条警告是不影响 Hbase 运行的。如果想去掉这个警告,可以设置让Hbase识别到native-hadoop librarys这个库,而且这个库文件有助于提高 Hbase 的运行速度:
这里参考官方的解决方案:http://hbase.apache.org/book.html#hadoop.native.lib
其操作是在/usr/local/hbase/conf/hbase-env.sh文件中追加如下内容:

exportLD_LIBRARY_PATH=/usr/local/hadoop/lib/native:$LD_LIBRARY_PATH


如果你的 Hadoop没法加载本地库,则需要把下面的内容追加到 /usr/local/hadoop/etc/hadoop/hadoop-env.sh 或者 ~/.bashrc 中:

exportHADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
exportHADOOP_HOME=/usr/local/hadoop
exportHADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

五、使用

打开上面说的Hbase shell,可以进行Hbase数据库操作。

例1.

要创建如下图的表:
idinfonamegenderage1zhangsanF252lisiM26
可在HBase Shell中执行如下命令:

1)创建

student

表:

hbase>create'student','info'

2)插入数据到

student

表:

// 插入第1个学生的信息。
hbase> put 'student','1','info:name','zhangsan'
hbase> put 'student','1','info:gender','F'
hbase> put 'student','1','info:age','25'// 插入第2个学生的信息。
hbase> put 'student','2','info:name','lisi'
hbase> put 'student','2','info:gender','M'
hbase> put 'student','2','info:age','26'

3)查询

student

表:

# 查询id=2的学生信息。相当于mysql: select * ... where id = 1
hbase> get 'student','2'# 查询所有数据(扫描全表)。相当于mysql: select * ...
hbase> scan 'student'

结果如下:
在这里插入图片描述
在这里插入图片描述

4)删除

student

表:

hbase>disable'student'
hbase>drop'student'
标签: hbase big data hadoop

本文转载自: https://blog.csdn.net/Acegem/article/details/123189212
版权归原作者 Acegem 所有, 如有侵权,请联系我们删除。

“大数据:HBase安装、配置及使用”的评论:

还没有评论