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 ...
随机推荐
- apue——读目录操作
头文件: #define _POSIX_C_SOURCE 200809L #include <sys/types.h> #include <sys/stat.h> #inclu ...
- Jupyter Notebook 的安装使用以及 tree 路径变更
由于最近开始学习 Python,进而接触到一个十分强大的交互式编辑器 — Jupyter Notebook,用起来也非常顺手,于是记录一下相关的使用过程. 一.安装 Python: ①首先前往 pyt ...
- 第一节. .Net Core环境的安装和常用指令
一. 环境介绍和安装 1. 环境介绍 .Net FrameWork框架:BCL(基础类库 system.dll).CLR(运行时 仅支持:Windows).FCL(一些框架,比如:MVC.WPF) . ...
- 罗技M185鼠标飘
不用鼠标垫会好很多,艹.今天买了个树脂鼠标垫解决问题.
- python的socket解析
1.实现一对一的进行沟通交流 (1).服务端代码如下: import socket server = socket.socket() server.bind(("localhost" ...
- XGBoost参数调优完全指南
简介 如果你的预测模型表现得有些不尽如人意,那就用XGBoost吧.XGBoost算法现在已经成为很多数据工程师的重要武器.它是一种十分精致的算法,可以处理各种不规则的数据.构造一个使用XGBoost ...
- postgresql设置主键
replace(((uuid_generate_v4())::character varying)::text, '-'::text, ''::text)
- 解决本地SqlServer无法连接远程服务器数据库,错误10060
本地SqlServer 连不上服务器的数据库环境,错误信息如下图,折腾来折腾去,最终还是解决了 第一步 查看服务器本地端口是否已经打开,查看方法:首先向C:\Windows\System32文件夹添加 ...
- ES7的async/await
async 表示这是一个async函数,await只能用在这个函数里面. await 表示在这里等待promise返回结果了,再继续执行. await 后面跟着的应该是一个promise对象 awai ...
- github 远程库
一.在 Github 创建 django 项目时:先在本地创建项目,然后设置为本地仓库,再与远程仓库关联 在 Git Bash 进入django项目目录,输入命令git init,此时这个目录变成Gi ...