大数据,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的用户
sudo tar -xzvf hbase-2.2.2-bin.tar.gz -C /usr/local # 解压到/usr/local/目录下
cd /usr/local
sudo mv ./hbase-2.2.2 ./hbase # 重命名,方便使用
sudo chown -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
sudo vim /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
sudo source ./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行位置
export JAVA_HOME=/usr/local/java/jdk1.8.0_271
# 第31行位置
export HBASE_CLASSPATH=/usr/local/hbase/conf
# 第126行位置
# HBASE_MANAGES_ZK设置为true,表示由hbase自己管理zookeeper,不需要单独的zookeeper。HBASE_MANAGES_ZK == hbase_manages_ZK(ZK==zookeeper)
export HBASE_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行位置
export JAVA_HOME=/usr/local/java/jdk1.8.0_271
# 第126行位置。
# HBASE_MANAGES_ZK设置为true,表示由hbase自己管理zookeeper,不需要单独的zookeeper。
export HBASE_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用户
sudo service ssh 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的Classs
export HBASE_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文件中追加如下内容:
export LD_LIBRARY_PATH=/usr/local/hadoop/lib/native:$LD_LIBRARY_PATH
注:
如果你的 Hadoop没法加载本地库,则需要把下面的内容追加到 /usr/local/hadoop/etc/hadoop/hadoop-env.sh 或者 ~/.bashrc 中:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
五、使用
打开上面说的Hbase shell,可以进行Hbase数据库操作。
例1.
要创建如下图的表:
id | info | ||
---|---|---|---|
name | gender | age | |
1 | zhangsan | F | 25 |
2 | lisi | M | 26 |
可在HBase Shell中执行如下命令:文章来源:https://www.toymoban.com/news/detail-470020.html
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'
结果如下:
文章来源地址https://www.toymoban.com/news/detail-470020.html
4)删除student
表:
hbase> disable 'student'
hbase> drop 'student'
到了这里,关于大数据:HBase安装、配置及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!