Day26_20180604_分布式列存储NoSQL数据库HBase(一)

一、回顾

 -》Hadoop
        -》数据存储:hdfs
        -》数据计算:MapReduce
-》Hive
	>> 作用:构建数据仓库进行数据管理
	>>hive对比Hadoop就是将文件映射成表,底层还是文件,只是加上映射关系,让文件变成了表 
        -》数据管理:hdfs,映射
        -》提供SQL化的数据计算
    -》Hbase:
		-》Google三篇论文:
			-》GFS
			-》MapReduce
			-》bigtable
				-》chubby
		-》bigdata
			-》HDFS
			-》MapReduce
			-》Hbase
				-》zookeeper
	21世纪大数据的前三辆马车 GFSHDFS  MapReduce   bigtableHbase
	Spark已经替代了Hadhoop中的MapReduce,但是目前大数据框架还没有哪个
    框架可以替代HBase		

      hdfs可以做到海量数据存储,但是实时查询hdfs是做不到的。这也促进了HBase的诞生
	  Sqoop:局限性很大,只能将MySql的数据写到hive\HBase中去 

二、Hbase的介绍

-》应用:对于大数据快速读写存储
  hdfs:起初hdfs能解决大数据存储问题但是效率极其低下,HBase可以显示快速读写存储
	     hive:添加了映射表文件,读数据方面得到了改善
         但是写的方面还是MapReduce,这样的效率还是很慢
		-》大数据的存储必然依赖于分布式存储文件系统:HDFS(底层还是HDFS)
		-》实时查询业务
		-》海量数据存储
		-》金融、游戏、电商、广告、电信、政府
			-》消费记录存储、查询
			-》订单、用户日志、用户等级、实时读取
			-》订单
			-》分类:
				当前短期的数据:mysql、oracle
				历史数据存储:nosql

例如京东读取2019年的全部订单,如果是关系型数据库用户并发读取,这样数据库读取的效率
会极其低下,所以历史数据都是存放在NoSql中。
大数据分析和传统数据库分析?
    传统数据库:抽样方式对某一部分的数据进行分析得出结论
	大数据分析:将所有数据进行分析
			-》全文检索引擎
				-》Lucene
				-》solr+Hbase
				-》ElasticSearcch+Logstash+Kibana
	我们在淘宝上查询我们的订单,如果只用关系型数据库的话估计需要一两分钟,
    这时候的用户体验就会非常差。所以查询不会只依赖关系型数据库。
 	这时候就诞生了全文搜索引擎,这就解决了大数据查询问题。
分布式列存储NoSQL数据库
    -》分布式:主从架构
			主:Master				-》 NameNode
				Backup Master 
			从:RegionServer		-》DataNode
		-》列存储
			rdbms:行存储
				对于一行来说,每一列都是有的,即使某些列没有值为null值,该列也存在
			hbase:列存储
				对于一行来说,列有值,才有该列,如果该列没有值,则该行没有该列
		-》NoSQL:Not Only SQL
			-》不支持SQL
			-》有自己的语言
		-》数据库:
			RDBMS:
				数据库、表、行、列
			NoSQL:
				key:列的名称
				value:列的值
				
		MySQL:
			Database:student
				Table:stu_info
				id			name		age		sex			address		phone
				110			laoda		18		male		shanghai	110
				120			laoer		20		female					120
				119			laodan		22					beijing		119
				
				select id,sex,address from stu_info where id=120 or id = 119;
	
				120		female		null
				119		null		beijing
关系型数据库缺陷:存储慢、查询效率低
企业中的开发模式:NOSQL缓存,最终存储是关系型数据。快速存储和查询用NOSQL做中转(中间层),
然后将数据写入到关系型数据库中(底层)。
Hbase:
	 NameSpace:student
		Table:stu_info
		rowkey:行健,等同于rdbms中的主键
		主键是单独的,不属于任何列簇
		column family:列簇
			   将拥有相似属性的列进行分组
			   所有的列不允许单独存在,必须属于某个列簇下,每张表至少要有一个列簇
               列簇下面可以没有列
rowkey:110
				cf1:basic_info
					name		laoda
					age			18
					sex			male
				cf2:family_info
					address		shanghai
					phone		110
					
					
				rowkey:120
				cf1:basic_info
					name		laoer
					age			20
					sex			female
				cf2:family_info
					phone		120
					
				rowkey:119
				cf1:basic_info
					name		laosan
					age			22
				cf2:family_info
					address		beijing
					phone		119
-》如果Hbase支持SQL语句
				select id,sex,address from stu_info where id=120 or id = 119;
				error:120的记录中没有address这一列,119的记录中没有sex这一列
特殊概念
    -》namespace:相当于mysql中的database
		-》rowkey:行健、相当于mysql中的主键,是hbase中数据读写的唯一索引
		-》列簇:列的分组,将拥有相似读写属性的列放入同一个列簇
			至少一个一般两个,但不要超过3个 原因:随着数据的增加,HBase的查询 
            性能会很慢
			名称任意,只要进行分组即可
		-》version:多版本,hbase可以将之前存储过的值继续保留,而不被覆盖
			查询时可以通过指定版本查询对应的数据
			一般来说,通过每条记录的timestamp来区分版本
		-》列标签:相当于mysql中的列
		-》keyvalue格式:hbase底层存储将每一列变成keyvalue 进行存储
			key:rowkey+cf+column+timestamp
			value:该列某个版本的值
		-》创建表时:表名+列簇
			 >>不需要给列,列是动态的不是固定的(这也是与关系型数据库不同的地方)
		-》hbase中没有数据类型之分,全部是字节数组类型
			写入:将其他类型转换成字节数组
			读出:将字节数组转换为可读类型

hbase的基本架构
		-》主从架构:server
			master:管理
			regionserver:存储读写
		-》zookeeper:
			-》存储hbase的元数据
		-》client

三、Hbase安装部署

-》Hadoop:安装启动
-》zookeeper:存储元数据

安装Zookeeper

五个框架都在用Zookeeper:hadoop、hive、HBase、sqoop、Spark Streaming
[root@bigdata-training01 tools]# tar -zxvf zookeeper-3.4.5-cdh5.7.6.tar.gz -C /opt/cdh-5.7.6/

    

[root@bigdata-training01 zookeeper-3.4.5-cdh5.7.6]# mkdir datas 
[root@bigdata-training01 datas]# cd datas/
[root@bigdata-training01 datas]# pwd 
[root@bigdata-training01 datas]# cd ../conf
[root@bigdata-training01 datas]#ll

修改zoo.cfg

修改Zookeeper的存储目录

dataDir=/opt/cdh-5.7.6/zookeeper-3.4.5-cdh5.7.6/datas

[root@bigdata-training01 zookeeper-3.4.5-cdh5.7.6]# bin/zkServer.sh
[root@bigdata-training01 zookeeper-3.4.5-cdh5.7.6]# bin/zkServer.sh start
[root@bigdata-training01 zookeeper-3.4.5-cdh5.7.6]# jps
[root@bigdata-training01 zookeeper-3.4.5-cdh5.7.6]# bin/zkServer.sh status

单节点模式:
	原因:这里练习使用所以装的是伪分布式,不是分布式。所以就是单节点模式,不是主从架构。

安装hbase

如何找到hdfs-default文件:
/opt/cdh-5.7.6/hbase-1.2.0-cdh5.7.6/lib/hbase-common-1.2.0-cdh5.7.6.jar
tar -zxvf /opt/tools/hbase-1.2.0-cdh5.7.6.tar.gz -C /opt/cdh-5.7.6/

修改配置

hbase-env.sh
修改环境变量
export JAVA_HOME=/opt/modules/jdk1.8.0_91
#hbase管理我们的zk(默认ture,改为flase表示不希望HBASE管理我们的zk)
export HBASE_MANAGES_ZK=false

hbase-site.xml
[root@bigdata-training01 hbase-1.2.0-cdh5.7.6]# mkdir datas
[root@bigdata-training01 hbase-1.2.0-cdh5.7.6]# pwd

是否是分布式应用:

配置zookeeper地址:

客户端只有访问Zookeeper才能读取元数据

regionservers:配置所有从节点的地址

bigdata-training01.erongda.com

启动服务

启动主节点:
bin/hbase-daemon.sh start master

启动从节点:
bin/hbase-daemon.sh start regionserver

如果配置了SSH免秘钥登录,就可以使用下面命令启动:

测试

-》web端:60010
		 apache hbase1.x: 16010
		 http://192.168.134.222:60010/master-status
-》客户端
		 bin/hbase shell

四、实现hbase的DDL与DML

在MySql中执行db_order.sql文件

创建namespace

	help 'create_namespace'
	create_namespace 'ns1'
	list_namespace

创建表

语法:create 'namespace:tablename','cf_name'
create 'ns1:order', 'info'

查看表

插入数据

Mysql中数据:

help 'put'
put 'ns1:t1', 'r1', 'c1', 'value'
put 'namespace:tablename','rowkey','columnfamily:column','value'

一次put只能插入一行中的一列
put 'ns1:order','40419271_2015-04-21:00:00:21_314295453511152','info:date','2015-04-21 00:00:21'
put 'ns1:order','40419271_2015-04-21:00:00:21_314295453511152','info:order_id','314295453511152'
put 'ns1:order','40419271_2015-04-21:00:00:21_314295453511152','info:user_id','17291404'
put 'ns1:order','40419271_2015-04-21:00:00:21_314295453511152','info:order_amt','55'
put 'ns1:order','40419271_2015-04-21:00:00:21_314295453511152','info:order_id_new','251115354592413'
注意:必须要给出列簇

查询数据

get:自己回去看语法
语法:scan 'hbase:meta':扫描查询整张表
help 'scan'

scan 'ns1:order'

注意:这是MySql中的一条数据,一列对应一行,行键和列簇都是冗余的
HBase注意事项:
注意:这里每一行存每一个字段都是用key-value的格式
 	  这里的keys是由row,column,timestamp组成的,这里会有冗余。
			注意:
				1-语法中不要有分号结尾
				2-删除时请按住Ctrl键
				3-hbase中没有use,不能切换数据库
					想要使用数据库,在表名前面加上ns的名称即可
					
			退出hbase shell
				exit

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值