Hbase是一种数据库:Hadoop分布式数据库。总体上来说,它是一个随机访问存储和检索数据的平台。Hbase作用不适合处理实时数据,它适合处理海量数据,这与Hbase的极易扩展性息息相关。 Hbase是Google Bigtable的开源实现,但是也有很多不同之处。比如:Google Bigtable利用GFS作为其文件存储系统,Hbase利用Hadoop HDFS作为其文件存储系统;Google运行MAPREDUCE来处理Bigtable中的海量数据,Hbase同样利用Hadoop MapReduce来处理Hbase中的海量数据;Google Bigtable利用Chubby作为协同服务,Hbase利用Zookeeper作为对应。Hbase背景
关系型数据库(RDBMS), mysql/oracle/sqlserver/db2,在这几十年里取得了巨大的成功。联机式事务处理(OLTP)系统使用RDBMS,来实时记录交易信息 还一个系统(OLAP)用来分析查询所存储的数据,一般来说都是按天、周、月生成销售报表, 按地域从不同的角度分析信息。OLAP和OLTP的区别 Hbase单机节点安装
准备
# 解压Hbase到指定目录: [root@tianqinglong101 software]# tar -zxvf hbase-1.3.1-bin.tar.gz -C /opt/apps [root@tianqinglong101 software]# cd apps [root@tianqinglong101 apps]# cd hbase-1.3.1 # 配置环境变量 [root@tianqinglong101 hbase-1.3.1]# vi /etc/profile export Hbase_HOME=/opt/apps/hbase-1.3.1 export PATH=$HABSE_HOME/bin :wq [root@tianqinglong101 hbase-1.3.1]# source /etc/profile [root@tianqinglong101 hbase-1.3.1]# cd conf [root@tianqinglong101 conf]# vi hbase-env.sh export JAVA_HOME=/opt/module/jdk1.8.0_144 export Hbase_MANAGES_ZK=true #ture是用自己的zookeeper [root@tianqinglong101 conf]# vi hbase-site.xmlHbase伪分布式安装:wq #启动hbase服务 [root@tianqinglong101 conf]# start-hbase.sh [root@tianqinglong101 conf]# stop-hbase.sh # 停止 [root@tianqinglong101 conf]# hbase shell hbase(main):001:0 > hbase.rootdir file:///opt/apps/hbase-1.3.1/tmp hbase.zookeeper.property.dataDir opt/apps/hbase-1.3.1/zkData
# 修改 hbase-site.xmlzookeeper安装#启动测试 [root@tianqinglong101 conf]# start-hbase.sh #测试webui http://tianqinglong101:16010/master-status hbase.rootdir hdfs://tianqinglong101:9000/hbase hbase.cluster.distributed true hbase.zookeeper.property.dataDir opt/apps/hbase-1.3.1/zkData
[root@tianqinglong101 hbase-1.3.1]# rm -rf *.txt zkData/ tmp/ [root@tianqinglong101 hbase-1.3.1]# cd .. [root@tianqinglong101 apps]# cd .. [root@tianqinglong101 opt]# cd software/ # 解压 [root@tianqinglong101 software]# tar -zxvf zookeeper-3.4.5.tar.gz -C /opt/apps/ # 配置环境变量 [root@tianqinglong101 zookeeper-3.4.5]# vi etc/profile export ZOOKEEPER_HOME=/opt/apps/zookeeper-3.4.5 export PATH=$ZOOKEEPER_HOME/bin [root@tianqinglong101 zookeeper-3.4.5]# source etc/profile [root@tianqinglong101 zookeeper-3.4.5]# echo "1" > myid [root@tianqinglong101 zookeeper-3.4.5]# cd conf/ [root@tianqinglong101 conf]# mv zoo_sample.cfg zoo.cfg [root@tianqinglong101 conf]# vi zoo.cfg dataDir=/opt/apps/zookeeper-3.4.5 server.1=tianqinglong101:2888:3888 server.2=tianqinglong102:2888:3888 server.3=tianqinglong103:2888:3888 :wq #分发 [root@tianqinglong101 zookeeper-3.4.5]# cd .. [root@tianqinglong101 apps]# scp -r zookeeper-3.4.5/ tianqinglong102:/opt/apps/ [root@tianqinglong101 apps]# scp -r zookeeper-3.4.5/ tianqinglong103:/opt/apps/ [root@tianqinglong101 apps]# scp /etc/pofile tianqinglong102:/etc/pofile [root@tianqinglong101 ~]# zkServer.sh start scp /etc/pofile tianqinglong103:/etc/pofile ## 修改每一个myid tianqinglong102 2 source /etc/pofile tianqinglong103 3 source /etc/pofile #启动zookeeper(每台都启动) [root@tianqinglong101 ~]# zkServer.sh start [root@tianqinglong101 ~]# zkServer.sh status # 查看Hbase全分布式式安装
# 修改hbase-env.sh [root@tianqinglong101 conf]# vi hbase-env.sh export Hbase_MANAGES_ZK=false # 配置hbase-site.xml [root@tianqinglong101 conf]# vi hbase-site.xmlHbase特性 Hbase与RDBMS# regionservers [root@tianqinglong101 conf]# vi regionservers tianqinglong101 tianqinglong102 tianqinglong103 注意映射(/etc/hosts) # 配置从机 [root@tianqinglong101 conf]# vi backup-masters tianqinglong102 :wq # 时间同步 [root@tianqinglong101 conf]# ntpdate ntp1.aliyun.com # 分发 [root@tianqinglong101 app]# scp -r hbase-1.3.1/ tianqinglong102:/opt/apps/ [root@tianqinglong101 app]# scp -r hbase-1.3.1/ tianqinglong103:/opt/apps/ #启动并且测试 [root@tianqinglong101 conf]# start-dfs.sh [root@tianqinglong101 conf]# start-hbase.sh [root@tianqinglong101 conf]# hbase shell hbase.rootdir hdfs://tianqinglong101:9000/hbase hbase.cluster.distributed true hbase.master.port 16000 hbase.zookeeper.quorum tianqinglong101:2181,tianqinglong102:2181,tianqinglong103:2181 hbase.zookeeper.property.dataDir /opt/module/zookeeper-3.4.10/zkData
Hbase 表模型 Hbase表与mysql表对比 Hbase工作机制NoSql与RDBMS区别
从图中可以看出Hbase是由Client、Zookeeper、Master、HRegionServer、HDFS等几个组件组成,下面来介绍一下几个组件的相关功能:
client :客户端。访问hbase的组件都可以是客户端。she11、java.python zookeeper : 监控hmaster,保证一个集群中有且仅有一台hmaster. 存储所有region的寻址入口 实时监控regionserver的状态,感知regionserver上下线,并实时的通知hmaster 存储hbase的部分的元数据信息 hmaster :整个hbase的主机 为regionserver分配region。 负责regionserver的负载均衡。 负责region的重新分配 hdfs上的垃圾回收 处理schema的更新请求 regionserver :整个hbase的从机节点之一 维护hmaster分配给他的region。 负责处理c1ient对这些region的读写请求,并和hdfs进行交互 负责具体的region的切分 hlog :日志 对hbase所有的 *** 作进行记录,当我们有插入 *** 作的时候,先将 *** 作写入到日志,然后再写元数据库。 region :表的一部分 hbhase中分布式存储和负载均衡的最小单元 store : 列簇 memstore : 内存缓冲区,用于将数据批量刷新的hdfs,默认为128M HFile 这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以Hfile的形式存储在HDFS的。Hbase命令 通用命令
help help 'status' #查询指定命令的帮助文档 Commands: status version whoami table_help命名空间命令(Namespace)
list_namespace # 展示hbase中所有的namespace list_namespace_table # 展示hbase下所有的表 create_namespace # 创建命名空间 create_namespace 'ns1' create_namespace 'ns2',{'name'=>'lixi'} describe_namespace # 查询指定的namespace的详细信息 describe_namespace 'ns1' describe_namespace 'ns2' alter_namespace # 修改 (很少用) alter_namespace 'ns1',{METHOD=>'set','name'='rock'} drop_namespace # 删除 drop_namespace 'ns2'常用DDL命令
create # 建表 不写就是默认 create '[default:]student','Sname','Ssex','Sage','Sdept','course' create 'teacher',{NAME=>'username',VERSIONS=>5} create 'ns1:teacher',{NAME=>'f1',VERSIONS=>5} list # 查看所有的表 describe # 查询表结构 describe 'teacher' alter # 修改表 alter 'ns1:t1',{NAME=>'f2'} #增加一个列簇 alter 'ns1:t1','delete'=>'f2' #删除一个列簇 # 删除表 disable 'ns1:t1' #先让表失效 drop 'ns1:t1' #才能删除DML命令
put # 插入数据/修改(如果有) put 't1','001','f1:name','lixi' put 't1','001','f1:sex','man' scan # 扫描表中的信息 scan 't1' # 查询指定版本数据 (历史版本) scan 't1',{RAW=>true,VERSION=>10} # 查询指定列 scan 't1',{COLUMNS=>'f1:name'} #分页查询 scan 't1',{COLUMNS=>['f1'],LIMIT=>3,STARTROW=>'001'} #查了4行 #get 查询 一般查询指定列簇的信息 get 't1','001','f1:name' get 't1','001' incr 插入一条数据,但是它的数据类型就不是string incr 't1','005','f1:age' # 默认从1开始 再执行递增 delete # 删除 delete 't1','005','f1:age' # 删一个kv键值对 deleteall 't1','005' # 删一行 # 判断表是否存在 exists 't1'; count 't1' #看有几行 #清空表 truncate 't1'复习一波
# 1.创建表 hbase(main):002:0> create 'student','info' # 2.插入数据到表 hbase(main):003:0> put 'student','1001','info:sex','male' hbase(main):004:0> put 'student','1001','info:age','18' hbase(main):005:0> put 'student','1002','info:name','Janna' hbase(main):006:0> put 'student','1002','info:sex','female' hbase(main):007:0> put 'student','1002','info:age','20' # 3.扫描查看表数据 hbase(main):008:0> scan 'student' hbase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW => '1001'} hbase(main):010:0> scan 'student',{STARTROW => '1001'} # 4.查看表结构 hbase(main):011:0> describe ‘student’ # 5.更新指定字段的数据 hbase(main):012:0> put 'student','1001','info:name','Nick' hbase(main):013:0> put 'student','1001','info:age','100' # 6.查看“指定行”或“指定列族:列”的数据 hbase(main):014:0> get 'student','1001' hbase(main):015:0> get 'student','1001','info:name' # 7.统计表数据行数 hbase(main):021:0> count 'student' # 8.删除数据 # 删除某rowkey的全部数据: hbase(main):016:0> deleteall 'student','1001' # 删除某rowkey的某一列数据: hbase(main):017:0> delete 'student','1002','info:sex' # 9.清空表数据 hbase(main):018:0> truncate 'student' # 提示:清空表的 *** 作顺序为先disable,然后再truncate。 # 10.删除表 # 首先需要先让该表为disable状态: hbase(main):019:0> disable 'student' # 然后才能drop这个表: hbase(main):020:0> drop 'student' # 提示:如果直接drop表,会报错:ERROR: Table student is enabled. Disable it first. # 11.变更表信息 # 将info列族中的数据存放3个版本: hbase(main):022:0> alter 'student',{NAME=>'info',VERSIONS=>3} hbase(main):022:0> get 'student','1001',{COLUMN=>'info:name',VERSIONS=>3}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)