hbase_1
常见的RDBMS:(数据库排行)
** mysql --开源[社区版] 、收费[企业版]
--市场占有率高、web领域被广泛使用
** 2008年被oracle收购
** mysql主从架构[集群的一种]
** 端口:3306
** oracle
** oracle集群性能比较强
** mysql集群性能相对比较差一下
** 端口:1521
** sqlserver
** 微软公司[windows 2008\2012\2012R2]
** windows项目、微软平台下面的项目用得比较多
** 端口:1433 数据量增加,RMDBS的应对:
1 读写分离,主数据库用于写,其他用于读
2 增加缓存
3 垂直扩容和横向扩展
4 采用逆范式化结构
5 停用存储过程和放弃辅助索引 非关系型数据库 NoSQL(Not Only SQL):
** HBase、mongoDB、redis
** 没有sql语句
** 性能和效率较高
** 尤其是当单表数据量过大,又必需进行全表扫描,且不能分库分表时,可以考虑使用非关系型数据库
** 注意:非关系型数据库并非万能的,需要根据业务来选择使用何种数据库 ====HBase部署================================= 1、安装Apache Hadoop,并启动 2、启动zookeeper(未安装的需要安装)
$ bin/zkServer.sh start
----------------依赖zookeeper的原因是存储元数据,通过他找到对应的regionserver 3、解压HBase 4、配置hbase-env.sh:
export JAVA_HOME=/opt/modules/jdk1.7.0_67 # 关闭掉HBase自带的zookeeper
export HBASE_MANAGES_ZK=false //不使用自带的zookeeper 5、配置hbase-site.xml:
<!--用来存放HBase数据-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://blue01.mydomain:8020/hbase</value>
</property>
<!--启用集群模式,当前为伪分布式-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>blue01.mydomain</value>
</property> 6、regionservers文件:(替换localhost)
blue01.mydomain 7、替换lib目录中低版本的hadoop和zookeeper的jar包
$ rm -rf lib/hadoop-*
$ rm -rf lib/zookeeper-3.4.6.jar
拷贝对应的jar包到lib目录 8、启动服务
$ bin/hbase-daemon.sh start master
$ bin/hbase-daemon.sh start regionserver
** $ bin/start-hbase.sh
** $ bin/stop-hbase.sh 访问:http://192.168.122.128:60010/ PS:
HBase默认配置文件hbase-default.xml 在 hbase-common-0.98.6-hadoop2.jar ================================================================= 结构化与非结构化数据: 结构化(表)
name cardid age sex addr job1 job2 job3 edu1 edu2
张三 1 23 男 上海 谷歌 电信 北大 同济
李四 2 女 北京 清华 非结构化
rowkey:身份证cardid(相当于primary key) cardid: 1
name:张三
age: 23
sex:男
addr: 上海
job1:谷歌
job2:电信
edu1:同济 cardid: 2
name:李四
sex:女
addr: 北京 使用"键值对"进行查询(key-value): rowkey + Column family + column + timestamp----> value
如:cardid(2)+CF+name: 李四
cardid(2)+CF+sex : 女 HBase数据类型
** HBase不区分数据类型
** 数据存储读取时:字节数组 HBase中数据存储的重要术语
** rowkey:行键
用来唯一标识每一行数据,类似RDBMS中的主键
** Column Family[CF] : 列族
用来组织列, 一个列族里包含多个列
在实际环境中,从性能上考虑,列族个数<=2,最好是一个
** Column : 列
字段名,列名
** timestamp:
数据插入到表中的时间
** Cell : 单元格
最小或最基本的存储单元,列的实际值存储
** 版本
HBase中每个列的值可以有多个版本[副本]
默认情况下,有3个版本,通常显示最新版本
** 基于Key-Value对形式存取数据
rowkey + CF + Column + timestamp : value ====================================================================== PS: hbase默认不支持退格键,解决方案:
a) 使用Ctrl+Backspace
b) Xshell:
文件--属性--终端--键盘--两个都选择ASCII 127
c) secureCRT:(百度)
选项--会话选项--仿真--终端--选择Linux
选项--会话选项--映射键--勾上:backspace发送delete和delete发送backspace ----shell命令------------------- $ bin/hbase shell
hbase(main):001:0> > help
> list --显示所有数据表
> create 'emp','info' --表名,列族
> desc 'emp' --查看表信息
> describe 'emp' --同上
> create 't1',{NAME => 'f1'},{NAME => 'f2'},{NAME => 'f3'} --多个列族 > put 'emp','','info:name','zhangsan' --插入
> put 'emp','','info:name','aaa' --更新
> put 'emp','','info:age',''
......
> scan 'emp' --查看数据
> get 'emp',''
> get 'emp','','info'
> get 'emp','','info:name'
> get 'emp','', {COLUMN => ['info:name']} --同上
> get 'emp','','info:name','info:age'
> get 'emp','', {COLUMN => ['info:name', 'info:age']}
> get 'emp','', 'info:name', 'info:age', 'info:sex' --有不存在的列
> get 'emp','', {COLUMN => ['info:name', 'info:age', 'info:sex']} --scan(范围)
> put 'emp','','info:name','wangwu'
> scan 'emp'
> scan 'emp',{COLUMNS=>'info:name'}
> scan 'emp',{COLUMNS=>['info:name','info:age']} --多列,结果和列序无关
> scan 'emp',{STARTROW => ''}
> scan 'emp',{STOPROW => ''}
> scan 'emp',{COLUMNS=>['info:name','info:age'],STARTROW => '',STOPROW => ''} --[1002,1003)
> scan 'emp',{LIMIT => 3} --rowkey的上限,而非记录条数的上限 --删除数据
> delete 'emp','','info:age' --至少3个参数
> deleteall 'emp','' --至少2个参数,可以删除整行
> deleteall 'emp','','info:age' --也可以用来删除列
> truncate 'emp' --清空表数据 --删除表
> disable 'emp' --禁用
> scan 'emp'
> enable 'emp' --启用
> scan 'emp'
> drop 'emp' --需要先禁用 统计一张表有多少行数据
> count 'emp' --rowkey数 =================================================== HBase的几个角色:
master:是HBase的主节点,用来调度管理客户端应用程序和RegionServer,
管理分配region给regionserver服务器。---负责region的存储regionserver位置,保证负载均衡
regionserver:
是从节点,管理当前自己这台服务器上的region。region是HBase表
的基础单元组件,它存储了分布式表。所以HBase表和HBase集群
利用Master和RegionServer来协同工作。
ZooKeeper:
监控master和regionserver的状态--------管理元数据
HBase有内置zookeeper,但实际环境中我们通常会使用其他ZK集群 通常情况下:
1、Master和Hadoop的NameNode进程运行在同一台主机上,与DataNode通信以读写HDFS的数据
2、RegionServer跟Hadoop的DataNode运行在同一台主机上 HBase特点:
** 存储数据和检索数据
** 非严格的列式存储数据库,但它利用了磁盘上的列存储格式
** 分布式、非关系型数据库
** HBase源自于bigtable
** HBase通常是和Hadoop结合使用-------------上层一来于hadoop,将数据存储在hadoop上面
** 适合于【非结构化数据】存储的数据库
** 非结构化的字段数量可以根据用户的需求而定
** 以key-value的形式来存储数据
** 高可靠性、高性能、面向列、可伸缩的分布式存储系统
** 利用HBase技术可以在商用机上搭建出大规模的数据库系统 HBase数据存储目录
** /hbase/data/default
存储默认命名空间表文件,如果创建表时不指定命令空间,就属于默认命名空间
** /hbase/data/hbase
存储HBase元数据
默认情况下,有这两个命名空间,命名空间可以理解为数据库
=================================================== 面试题:
***** 理解、记住 *****
Hive和HBase的区别?
Hive
** 是一个数据仓库,不是数据库
** 一般用来做业务分析,不会直接接入业务
** hive实际上是把hql语句转换成MapReduce运行在yarn平台上
HBase
** 是一个分布式面向列的非关系型数据库
** 核心功能是用来存储和检索数据、可以直接接入业务系统
** 不依赖yarn和MapReduce ***** 理解、记住 *****
RDBMS和HBase的区别:
** HBase是分布式架构,支持服务器节点在线添加和移除
** RDBMS可以使用sql语句,HBase通常使用API来访问
** RDBMS是基于行存储,HBase是基于列存储,能更好地支持存储和压缩
** RDBMS适合存储结构化的数据,HBase适合结构化和非结构化的数据存储
** RDBMS支持比较好的事务,HBase不支持事务
** RDBMS支持多表Join,HBase不支持Join
** 通常HBase表的应用场景比较简单,不适合业务逻辑很复杂的查询环境
** HBase索引简单,RDBMS的索引强大而且完善
** HBase通常应用于单表数据量巨大,用关系型数据库无法满足,不适合分库分表的场景
hbase_1的更多相关文章
- [HBase_1] HBase安装与配置
0. 说明 1. 简介 1.1 简介 基于 HDFS 的大表软件(实时数据库) 十亿行 x 百万列 x 上千个版本 版本是通过 mvcc 技术控制:multiple version concurren ...
- hbase 单机+伪分布环境搭建学习-1
1.单机模式: (1)编辑hbase-env.sh user@EBJ1023.local:/usr/local/flume_kafka_stom/hbase_1.1.2> vim conf/hb ...
随机推荐
- 《Java》第五周学习总结20175301
https://gitee.com/ShengHuoZaiDaXue/20175301.git 本周我学习了第六章的内容接口 重要内容有 理解接口 接口参数 面向接口编程 abstract类与接口的比 ...
- [Luogu P1354]房间最短路问题
这是一道紫题,然而实际上我觉得也就蓝题难度甚至不到. and,这道题就是一道数学题,代码模拟计算过程. 求最短路嘛,肯定要考虑建图,只需要把中间的墙上每个口的边缘处的点作为图中的点就行.至于为什么,显 ...
- ArcGIS——使用符号级别区分重叠的面图层
1.有这样一个面图层shp文件(区域相重叠),需要做出如下右图的效果: 2.导入shp文件后,右键shp文件,属性->符号系统 3.高级->符号级别 将面积最大的图层的级别设为最小,面积最 ...
- python3 练手实例6 做一个简单日历
import calendar year = int(input('请输入要查询的年份:')) month = int (input('请输入要查询的月数:')) print (calendar.mo ...
- Spring AOP中 pointcut expression表达式解析
任意公共方法的执行: execution(public * *(..)) 任何一个以“set”开始的方法的执行: execution(* set*(..)) AccountService 接口的任意方 ...
- 查看文件状态与跟踪新文件(git status/add)
查看当前文件状态 使用git status查看文件状态,如果是空仓库,执行结果如下 $ git status On branch master No commits yet nothing to co ...
- centos7 nginx配置ssl证书实现https访问同时http访问
1,首先将你申请到的nginx 分类下的ssl证书上传到nginx的config下(可以新建一个目录叫ssl.) 2.修改nginx的config配置 server {listen 80;(监听80端 ...
- 集成方法 Bagging原理
1.Bagging方法思路 Bagging独立的.并行的生成多个基本分类器,然后通过投票方式决定分类的类别 Bagging使用了自助法确定每个基本分类器的训练数据集,初始样本集中63.2%的数据会被采 ...
- Virtual Machine
之前说到可以使用Assembly language来实现程序编写,把程序通过一个Assembler就可以得到计算机可以操作的二进制文件. 但是Assembly language依旧不适于编程,但怎么将 ...
- dataguard丢失归档日志处理
检查alert日志发现报错如下 Wed Mar 27 15:40:30 2019Managed Standby Recovery not using Real Time ApplyParallel M ...