Hbase安装及基本DDL DML操作

Hbase
注意事项
  1. hbase会启动自带zk端口, 注意与zk集群错开服务器, 或者调整端口
  2. doc目录可删
  3. 安装hadoop
standalone安装
  1. 下载, 上传, 解压
mkdir -p /opt/software
#上传 hbase-2.0.5-bin.tar.gz
#解压
tar -zxf hbase-2.0.5-bin.tar.gz -C /opt/software
cd /opt/software/hbase-2.0.5
mv docs /tmp && rm -rf /tmp/docs
  1. 配置环境变量
#修改
vim /etc/profile

#参考 hbase 部分 begin
# java environment begin
JAVA_HOME=/opt/software/jdk/jdk1.8.0_192
CLASSPATH=${JAVA_HOME}/lib
PATH=$PATH:${JAVA_HOME}/bin
# java environment end

# hadoop environment begin
HADOOP_HOME=/opt/software/hadoop-2.6.5
PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
export HADOOP_HOME
# hadoop environment end

# hbase environment begin
HBASE_HOME=/opt/software/hbase-2.0.5
PATH=$PATH:${HBASE_HOME}/bin
export HBASE_HOME
# hbase environment end

export PATH JAVA_HOME CLASSPATH HADOOP_HOME HBASE_HOME
#参考 hbase 部分 end

#生效
source /etc/profile && echo $HBASE_HOME

  1. 修改 conf/hbase-env.sh
#配置ssh用的JAVA_HOME
cd /opt/software/hbase-2.0.5/conf && vim hbase-env.sh
#查找 JAVA_HOME, 打开 export JAVA_HOME 的注释
#使用 冒号(:)模式 查看并复制系统jdk环境变量
#命令如下    :! echo $JAVA_HOME
#修改 JAVA_HOME 值为环境变量中的值:
export JAVA_HOME=/opt/software/jdk/jdk1.8.0_192
  1. 修改 conf/hbase-site.xml
#备份
cp hbase-site.xml hbase-site.xml.bak
#然后修改源文件
cat > hbase-site.xml << EOF
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///tmp/test/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/tmp/test/zookeeper</value>
  </property>
  <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
  </property>
</configuration>

EOF

  1. 启动测试
#启动
start-hbase.sh
#查看进程
jps |grep HMaster
#查看页面
# http://node01:16010/
  1. 注意
#注意这里可能会存在jar包版本问题
#直接启动会报 Unhandled Java exception: java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
#需要将hadoop中 /opt/software/hadoop-2.6.5/share/hadoop/yarn/lib 下的 jline-0.9.94.jar 替换成 jline-2.12.jar
#https://repo1.maven.org/maven2/jline/jline/2.12/jline-2.12.jar
#备份jar
cd /opt/software/hadoop-2.6.5/share/hadoop/yarn/lib
mv jline-0.9.94.jar jline-0.9.94.jar.bak
#上传 jline-2.12.jar 版本到对应目录
cluster安装

注意

  1. 集群中的所有节点的hosts文件配置完成
  2. 集群中的所有节点的防火墙关闭
  3. 集群中的所有节点的时间设置一致
###规划
###         Master  regionserver
### node01  *
### node02          *
### node03          *
### node04  *       *

#解压
tar xzvf hbase-2.0.5-bin.tar.gz -C /opt/bigdata

#环境变量
HBASE_HOME=/opt/software/hbase-2.0.5
PATH=$PATH:${HBASE_HOME}/bin
export HBASE_HOME

#进入到/opt/bigdata/hbase-2.0.5/conf目录中, 在 hbase-env.sh 放开注释 JAVA_HOME  HBASE_MANAGES_ZK并修改
cd /opt/software/hbase-2.0.5/conf
vim hbase-env.sh
#配置为本机
JAVA_HOME=/opt/software/jdk/jdk1.8.0_192
#设置是否使用自己的zookeeper实例
HBASE_MANAGES_ZK=false

#修改 hbase-site.xml
cd /opt/software/hbase-2.0.5/conf
cat > hbase-site.xml << EOF
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <!-- hdfs集群HA模式的cluster名称, 对应hadoop的core-site.xml -->
    <value>hdfs://mycluster/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
  <name>hbase.zookeeper.quorum</name>
    <!-- zk集群的主机名 -->
    <value>node02,node03,node04</value>
  </property>
    <property>
    <!-- 定期检查是否需要执行compaction 10000表示10秒 -->
    <name>hbase.server.thread.wakefrequency</name>
    <value>10000</value>
  </property>
  <property>
    <!-- 与上面的时间间隔配合使用,当前为乘数因子:10秒*1倍=10秒 -->
    <name>hbase.server.compactchecker.interval.multiplier</name>
    <value>1</value>
  </property>
</configuration>

EOF

#修改regionservers文件,设置regionserver分布在哪几台节点
cat > regionservers << EOF
node02
node03
node04
EOF

#需要配置Master的高可用,需要在conf目录下创建backup-masters文件,并添加如下内容:

cat > backup-masters << EOF
node04
EOF

#拷贝hdfs-site.xml文件到conf目录下
cp /opt/software/hadoop-2.6.5/etc/hadoop/hdfs-site.xml /opt/software/hbase-2.0.5/conf/

#分发至其他服务器
cd /opt/software
scp -r hbase-2.0.5 node02:`pwd`
scp -r hbase-2.0.5 node03:`pwd`
scp -r hbase-2.0.5 node04:`pwd`

#配置 node02 node03 node04的环境变量

#注意:需要清理hdfs对应hbase的目录
hdfs dfs -rm -r -f /hbase

#启动集群, 在node01
start-hbase.sh

#注意, HMaster可以启动多态备份用
#比如在node03服务器上也启动一台 master
hbase-daemon.sh start master

#页面查看
http://node01:16010/master-status
http://node03:16010/master-status
http://node04:16010/master-status

#命令行
hbase shell
hbase(main):003:0> create 'psn' , 'cf'
hbase(main):005:0> put 'psn', '1', 'cf:name', 'gin'
hbase(main):006:0> put 'psn', '2', 'cf:name', 'soul'
hbase(main):007:0> put 'psn', '11', 'cf:name', 'gin_soul'

#查看hdfs目录
http://node01:50070/explorer.html#/hbase/data/default/psn



命令行操作
#进入命令行
hbase shell
#帮助命令
help

通用命令

#展示regionserver的task列表
hbase(main):000:0> processlist
#展示集群的状态
hbase(main):000:0> status
#table命令的帮助手册
hbase(main):000:0> table_help
#显示hbase的版本(目前 2.0.5)
hbase(main):000:0> version
#展示当前hbase的用户
hbase(main):000:0> whoami

namespace操作

#创建命名空间
hbase(main):000:0> create_namespace 'my_ns'
#修改命名空间的属性
hbase(main):000:0> alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
#展示所有的命名空间
#默认使用 default 空间, hbase空间为系统用
hbase(main):000:0> list_namespace
#获取命名空间的描述信息
hbase(main):000:0> describe_namespace 'my_ns'
#展示某个命名空间下的所有表
hbase(main):000:0> list_namespace_tables 'my_ns'
#删除命名空间
hbase(main):000:0> drop_namespace 'my_ns'

DDL操作

#创建表(表名:test, 必须指定至少一个列族:cf)
hbase(main):000:0> create 'test', 'cf'
hbase(main):000:0> create 'test2', 'cf1', 'cf2'
#查看表
hbase(main):000:0> list
#查看表描述,只会展示列族的详细信息(可以使用Tab键补全命令)
hbase(main):000:0> describe 'test'
#修改表的属性
hbase(main):000:0> alter 'test', NAME => 'cf3', VERSIONS => 2
#查看修改
hbase(main):000:0> describe 'test'

#禁用表(删除表之前必须先禁用)
hbase(main):000:0> disable 'test'
#禁用所有表
hbase(main):000:0> disable_all
#删除表
hbase(main):000:0> drop 'test'
#删除所有表
hbase(main):000:0> drop_all
#启用表
hbase(main):000:0> enable 'test'
#启用所有表
hbase(main):000:0> enable_all
#判断表是否存在
hbase(main):000:0> exists 'test'
#获取表
hbase(main):000:0> get_table 'test'
#判断表是否被禁用
hbase(main):000:0> is_disabled 'test'
#判断表是否被启用
hbase(main):000:0> is_enabled 'test'
#展示所有表
hbase(main):000:0> list
#展示表占用的region
hbase(main):000:0> list_regions
#定位某个rowkey所在的行在哪一个region
hbase(main):000:0> locate_region
#展示所有的过滤器
hbase(main):000:0> show_filters

dml操作

#向表中追加一个具体的值
hbase(main):000:0> append 't1', 'r1', 'c1', 'value', ATTRIBUTES=>{'mykey'=>'myvalue'}
#统计表的记录条数,默认一千条输出一次
hbase(main):000:0> count 'test'
#删除表的某一个值
hbase(main):000:0> delete 't1', 'r1', 'c1', ts1
#删除表的某一个列的所有值
hbase(main):000:0> deleteall 't1', 'r1', 'c1'
#获取表的一行记录
hbase(main):000:0> get 't1', 'r1'
#获取表的一个列的值的个数
hbase(main):000:0> get_counter 't1', 'r1', 'c1'
#获取表的切片
hbase(main):000:0> get_splits 't1'
#增加一个cell对象的值
hbase(main):000:0> incr 't1', 'r1', 'c1'
#向表中的某一个列插入值
hbase(main):000:0> put 't1', 'r1', 'c1', 'value’, ts1
#扫描表的全部数据
hbase(main):000:0> scan 't1'
#清空表的所有数据
hbase(main):000:0> truncate

测试查看文件

#进入命令行
hbase shell
hbase(main):011:0> create 'test', 'cf1', 'cf2'
hbase(main):012:0> put 'test', '1','cf1:name','nier'
hbase(main):013:0> put 'test', '1','cf2:vip','1'
hbase(main):014:0> put 'test', '1','cf1:age','18'
hbase(main):015:0> scan 'test'
hbase(main):016:0> put 'test', '2','cf1:name', 'lisi'
#ROW                        COLUMN+CELL
# 1                         column=cf1:age, timestamp=1612718814186, value=18
# 1                         column=cf1:name, timestamp=1612718783836, value=neir
# 1                         column=cf2:vip, timestamp=1612718803153, value=1
# 2                         column=cf1:name, timestamp=1612719045885, value=lisi
#2 row(s)

#触发写入内存溢写(默认满64M)
flush 'test'

#然后再开一个shell, 切换到hbase的
cd /tmp/test/hbase/data/default/test
#查看 region ID
ll
#目前生成的regionId号是: 236276d5c60a15e9ad2c1e80a28612d3
#进入 region
cd 236276d5c60a15e9ad2c1e80a28612d3 && ll
#可以看到是按每个列族一个文件进行存储
#drwxrwxrwx 2 root root 6 Feb  7 12:25 cf1
#drwxrwxrwx 2 root root 6 Feb  7 12:25 cf2

#进入cf1列族
cd cf1
#查看文件内容(需要触发溢写: 可通过 flush 'test' 命令)
#注意: -f 后面需要接绝对路径
hbase hfile -p -f file:/tmp/test/hbase/data/default/test/236276d5c60a15e9ad2c1e80a28612d3/cf1/86c2160dc7cf4742b1b8343692c8923f
#可以看到如下信息
#K: 1/cf1:age/1612718814186/Put/vlen=2/seqid=6 V: 18
#K: 1/cf1:name/1612718783836/Put/vlen=4/seqid=4 V: nier
#K: 2/cf1:name/1612719045885/Put/vlen=4/seqid=7 V: lisi
#Scanned kv count -> 3

#再到hbase的shell中
hbase(main):017:0> put 'test', '1','cf1:name', 'neir999'
hbase(main):018:0> scan 'test'
ROW                        COLUMN+CELL
# 1                         column=cf1:age, timestamp=1612718814186, value=18
# 1                         column=cf1:name, timestamp=1612719953209, value=neir999
# 1                         column=cf2:vip, timestamp=1612718803153, value=1
# 2                         column=cf1:name, timestamp=1612719045885, value=lisi
#2 row(s)
hbase(main):019:0> flush 'test'

#查看文件
cd /tmp/test/hbase/data/default/test/236276d5c60a15e9ad2c1e80a28612d3/cf1 && ll
#发现多了一个文件
#-rw-rw-rw- 1 root root 4834 Feb  7 12:47 167cb3cd6ca84f6ca90dc71c5303eab7
#-rw-rw-rw- 1 root root 4895 Feb  7 12:40 86c2160dc7cf4742b1b8343692c8923f
#再查看新增的文件
hbase hfile -p -f file:/tmp/test/hbase/data/default/test/236276d5c60a15e9ad2c1e80a28612d3/cf1/167cb3cd6ca84f6ca90dc71c5303eab7
#发现是新的操作的记录
#K: 1/cf1:name/1612719953209/Put/vlen=7/seqid=11 V: neir999
#Scanned kv count -> 1


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值