hadoop HBASE安装 使用
下载安装版本支持:http://hbase.apache.org/book.html#configurationhttp://hbase.apache.org/downloads.html对应版本下载上传到虚拟机sudo cp hbase-2.4.2-bin.tar.gz /usr/local/sudo tar -xzvf hbase-2.4.2-bin.tar.gzsudo mv hbase-2
下载安装
版本支持:
http://hbase.apache.org/book.html#configuration
http://hbase.apache.org/downloads.html
对应版本下载
上传到虚拟机
sudo cp hbase-2.4.2-bin.tar.gz /usr/local/
sudo tar -xzvf hbase-2.4.2-bin.tar.gz
sudo mv hbase-2.4.2 hbase
sudo chown -R hadoop:hadoop hbase
配置
cd /usr/local/hbase/conf
sudo vim hbase-env.sh
添加或修改成:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export HBASE_CLASSPATH=/usr/local/hbase/conf #这个有教程说不要添加 设置为本机HBase安装目录下的conf目录(即/usr/local/hbase/conf)
export HBASE_MANAGES_ZK=true #为true,表示由hbase自己管理zookeeper,不需要单独的zookeeper。
配置hbase-site.xml
sudo vim 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>
建议使用伪分布式配:
<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>
其中localhost改成虚拟机的名称或者虚拟机IP(cat /etc/hosts 查看IP时候绑定为0.0.0.0)
hbase.rootdir指定HBase的存储目录;hbase.cluster.distributed设置集群处于分布式模式.
配置环境变量
export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HBASE_HOME/bin
运行
先启动hadoop节点
/usr/local/hadoop/sbin/stop-all.sh #关闭
/usr/local/hadoop/sbin/start-all.sh
打开HBase:
/usr/local/hbase/bin/start-hbase.sh
JPS检查是否启动
打开HBASE shell:
./bin/hbase shell
habse shell内操作:
列出 HBase 所有的表的相关信息,例如表名;
List
创建表:
create 'student','Sname','Ssex','Sage','Sdept','course'
向已经创建好的表添加和删除指定的列族或列
put 'student','95003','Sname','wangjinxuan'
查看数据
HBase中有两个用于查看数据的命令:1. get命令,用于查看表的某一行数据;2. scan命令用于查看某个表的全部数据
在终端打印出指定的表的所有记录数据;
scan 'student'
get 'student','95001'
删除数据
删除列族,因为hbase中没有删除shell命令直接删除指定行的列族信息(包括其中的列的信息),所以需要先将所有指定行的列族信息的所有信息,然后使用delete一个一个作删除。
delete 'student' ,’95003’,’Sname:123’
delete 'student' ,’95003’,’Sname’
student为表名,95003为行键,Sname为列族名,123为列名
删除表有两步,第一步先让该表不可用,第二步删除表。
disable 'student'
drop 'student'
查询表历史数据
查询表的历史版本,需要两步。
1、在创建表的时候,指定保存的版本数(假设指定为5)
create 'teacher',{NAME=>'username',VERSIONS=>5}
2、插入数据然后更新数据,使其产生历史版本数据,注意:这里插入数据和更新数据都是用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'
3、查询时,指定查询的历史版本数。默认会查询出最新的数据。(有效取值为1到5)
get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}
退出HBase数据库表操作
exit
JAVA API
配置环境
复制/usr/local/hbase/lib出来,IDEA导入client-facing-thirdparty文件夹下的包和根目录下的所有包。 导入lib下的所有包。
org.apache.hadoop.conf.Configuration
org.apache.hadoop.hbase.HBaseConfiguration
实验代码
错误
1
java.lang.NoClassDefFoundError: com/ctc/wstx/io/InputBootstrapper
还是导入包的问题 把hadoop/common/lib下的包导入
2
Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
删除低版本的guava.jar 其中一个在hbase的lib里
hive中guava.jar位置/hive/lib/ hadoop中guava.jar位置/hadoop/share/hadoop/common/lib/
3
java.lang.NoSuchMethodError: org.apache.hadoop.security.HadoopKerberosName.setRuleMechanism(Ljava/lang/String;)V
删除hbase里的这个包 hadoop-auth,保留hadoop里的。
4
zookeeper.ReadOnlyZKClient (ReadOnlyZKClient.java:exec(192)) - 0x436813f3 to 127.0.0.1:2181 failed for get of /hbase/hbaseid, code = CONNECTIONLOSS, retries = 4
5
这个错误是因为hbase是单机配置,要改成分布式配置,并且配置里的hbase.rootdir 里的ip使用虚拟机的名称(对用host里的本机IP)
修改后还是有问题 尝试端口转发 没用
问题所在是配置zookeeper的配置
java本地连接远程Hbase可是返回zookeeper的地址是localhost
https://blog.csdn.net/qq_39161804/article/details/109438529
最终加一句
configuration.set("hbase.zookeeper.quorum", "192.168.2.128:2181");
用户是先访问zookeeper俩获取-ROOT-表的位置信息,然后再访问-ROOT-表,获得.META.表信息,接着访问.META.表,找到所需要的Region具体位置…
这里没有设置指定IP,默认访问了本地IP上的zookeeper,访问不了所以出错。
6
16020端口没有开放,端口在本地。
查JAVA/PID
查官方文档
https://hbase.apache.org/book.html#configuration
16020是hbase的region服务器开放的端口。
解决1 改配置hbase-env.xml
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.2.128:2181</value>
</property>
解决2 端口转发16020端口
更多推荐
所有评论(0)