常见的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、解压HBase4、配置hbase-env.sh:export JAVA_HOME=/opt/modules/jdk1.7.0_67# 关闭掉HBase自带的zookeeperexport HBASE_MANAGES_ZK=false //不使用自带的zookeeper5、配置hbase-site.xml:hbase.rootdir hdfs://blue01.mydomain:8020/hbase hbase.cluster.distributed true 6、regionservers文件:(替换localhost)blue01.mydomain7、替换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: 1name:张三age: 23sex:男 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+Backspaceb) Xshell: 文件--属性--终端--键盘--两个都选择ASCII 127c) secureCRT:(百度) 选项--会话选项--仿真--终端--选择Linux 选项--会话选项--映射键--勾上:backspace发送delete和delete发送backspace ----shell命令-------------------$ bin/hbase shellhbase(main):001:0> > help> list --显示所有数据表> create 'emp','info' --表名,列族> desc 'emp' --查看表信息> describe 'emp' --同上> create 't1',{NAME => 'f1'},{NAME => 'f2'},{NAME => 'f3'} --多个列族> put 'emp','1001','info:name','zhangsan' --插入> put 'emp','1001','info:name','aaa' --更新> put 'emp','1001','info:age','25'......> scan 'emp'--查看数据> get 'emp','1001'> get 'emp','1001','info'> get 'emp','1001','info:name'> get 'emp','1001', { COLUMN => ['info:name']} --同上> get 'emp','1001','info:name','info:age'> get 'emp','1001', { COLUMN => ['info:name', 'info:age']}> get 'emp','1001', 'info:name', 'info:age', 'info:sex' --有不存在的列> get 'emp','1001', { COLUMN => ['info:name', 'info:age', 'info:sex']} --scan(范围)> put 'emp','1003','info:name','wangwu'> scan 'emp'> scan 'emp',{COLUMNS=>'info:name'}> scan 'emp',{COLUMNS=>['info:name','info:age']} --多列,结果和列序无关> scan 'emp',{STARTROW => '1002'}> scan 'emp',{STOPROW => '1003'}> scan 'emp',{COLUMNS=>['info:name','info:age'],STARTROW => '1002',STOPROW => '1003'} --[1002,1003)> scan 'emp',{LIMIT => 3} --rowkey的上限,而非记录条数的上限 --删除数据> delete 'emp','1001','info:age' --至少3个参数> deleteall 'emp','1001' --至少2个参数,可以删除整行> deleteall 'emp','1001','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.zookeeper.quorum blue01.mydomain