拿一张比较老的图来说,自己画太费劲了:

hive hadoop hbase区别 hadoop,spark,hive,hbase_hdfs

        谷歌google有三篇论文gfs、mapreduce、bigtable,这三篇论文不是纯讲空话的应付之作,而是确确实实提出来了新的思想,也因为这三篇论文,才对应的有了hdfs、mapreduce、hbase。

        数据,海量的数据拿来做什么?首先要考虑如何存储这些海量的数据,hdfs解决了数据的存储,hdfs:hadoop  file  system。

        有了存储,其次才能谈到数据的计算,mapreduce(mr),分布式计算框架,用于离线计算,什么叫离线计算,你可以这样认为,不是实时展现结果的计算就叫离线计算。另外,还有其他的计算框架,比如storm是流式计算框架,适合实时计算。而spark是内存计算框架,适合做快速得到结果的计算。

        Pig跟hive差不多,都是用来写sql分析存储里面的数据的,但是hive依然活跃,而pig已经淘汰了。

两个工具:

            sqoop用于hdfs和关系型数据库之间数据的互相导入导出,阿里也有个类似的工具叫做datax,跟sqoop实现的功能是差不多,比如可以把oracle数据库的表里面的数据导入到hive的某个表中,只需要简单的配置就能实现。

            flume:主要用来做数据收集,多用于离线分析

            mahout: 将机器学习做了开源实现,可以通过hive分析,提高了效率

            Hbase:hadoop database。大数据分析的数据一般在pb级别以上

            Hbase高可靠(数据可以存放在hdfs)、高性能(pb)、面向列(关系型是行式数据库)、实时读写、可伸缩的分布式nosql数据库,利用hdfs存储,利用MapReduce处理hbase中的海量数据,利用zk作为其分布式协同服务。

            hive:hive这个东西使不会写mapreduce程序的人使用mapreduce成为了可能,hive可以让你写sql,就像关系型数据库那样写sql,之后这些sql又被翻译成了mapreduce程序,去分析hdfs或者hbase上存储的数据。

大数据对生产环境的配置要求

平常在虚拟机上玩大数据,玩的溜不溜不说,总归是自嗨,在真正的生产环境上可不是跟虚拟机上一个概念,如果别人让你出一套hadoop平台搭建机器要求的最低配置,你难道去说"这个没要求,我1个g的内存,1核的cpu,20g的硬盘"就可以搭建?那真是"无知限制了你的想象力"啊,我就曾这样说自己。下面列一个生产环境下大数据平台的机器硬件配置,以警后来者。

编号

配置

1

8核16G内存1T硬盘

2

8核16G内存1T硬盘

3

16核32G内存2T硬盘

4

16核32G内存2T硬盘

5

16核32G内存2T硬盘

6

8核16G内存1T硬盘

7

8核16G内存1T硬盘

每台机器在大数据平台扮演的角色不同,这个看情况自己分配,另外,有些术语也要知道,比如8核16G内存1T硬盘一般写为8C16G1T,C就是机器核数的意思。

前边的文章已经介绍了hdfs和mapreduce以及hive,现在我们再来看看hbase。

HBase简单介绍

-- HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。

高可靠性:HBase集群基于hadoop集群,hadoop平台副本的机制保证了数据的可靠性。

高性能:HBASE采用分布式计算,性能那是没的说

面向列:这是hbase和传统关系型数据库大相庭径的地方,hbase之所以被称为“列式数据库”,也正是基于这个原因

可伸缩:hbase集群中节点个数可以改变,而且hbase的列族个数也可以改变扩展

-- 利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce或者hive来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务,zookeeper在hbase里面不止是用作高可用,hbase的信息还存放在zk里面,因此少了zk,hbase就无法运行。

-- 主要用来存储非结构化和半结构化的松散数据

--hbase是列式 NoSQL 数据库

hbase的结构

学习hbase的同学都知道下面的这张图:

hive hadoop hbase区别 hadoop,spark,hive,hbase_大数据_02

这张hbase的体系结构图展示了hbase有哪些组成部分以及他们之间的关系。

我们从里往外看。

hfile和storefile

       这两者可以视为是同一个东西,之所以有不同的名字是因为站的角度不同,在hbase这个角度来看,叫storefile,在hdfs的角度来看,就叫hfile。顾名思义,他们都是指的确确实实存在于磁盘的文件,存储的东西就是真正的数据。它是怎么来的呢?是有memStore溢写而来。

何为MemStore?

        MemStore就是memoryStore,是内存里面存储的数据,当客户端执行命令插入数据的时候,hbase会先写到MemStore里面,而不是直接写入磁盘,这样就减少了与磁盘的io交互,极大的提高了效率。当MemStore达到一定的阈值之后,hbase将启动flushcache进程将MemStore里面的数据写入storefile。因此,MemStore是一个用来缓存写入数据的内存区域。

store的引出

        从名字上来看,MemStore和storefile这两个单词里面都有store,果不其然,他们俩还真个store有着不解之缘。你可以把sotre看做一个文件夹,它里面存放着0-n个由MemStore溢写而来的storefile,而这个文件夹的名字是和之后介绍的hbase的列族对应的,文件夹的名字就是列族的名字。一个hbase表里面有n个列族,那么就有n个store文件夹。

要继续介绍先的概念,我还要引入一张图,hbase存储结构示意图:

 

row key

timestamp

cf1

cf2

cf3

1

4

cf1:name=zhao

 

 

3

 

cf2:friends=a,b,c

cf3:assets=house,car

2

 

cf2:friends=a,b

 

1

 

 

cf3:assets=1000块钱

hregion是什么?

        hregion包含了0-n行,上面的表格里面的数据是几行?答案是一行,hbase里面判断有几行,只有一个标准,那就是row key是否一致。

HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据;每个表一开始只有一个region,随着数据不断插入表,这一个region不断增大,当增大到一个阀值的时候(table中的行不断增多),region就会尽可能等分出两个新的region(裂变),每个hregion中包含若干行;这里要注意的是一个rowkey肯定只在一个region里面,比如现在总共有101行,可能裂变出2个region,一个是50行,一个是51行,同一个rowkey是不会位于不同的hregion里面的。

hregionserver的概念

        hregion因为行的增大而越来越多,hregion是被hregionserver来管理的,所有的请求都要分发到一个hregionserver上,hregionserver的压力是不是很大,是不是会影响性能?因此当hregion越来越多的时候,太多的hregion就被一个名字叫做hmaster的东西分配到若干个HRegionserver上了。概括的说,hregionserver的作用:

    1.hRegion server维护region,处理对这些region的IO请求

    2.hRegion server负责切分在运行过程中变得过大的region

HMaster的作用

    1.为HRegionserver分配region

    2.负责HRegionserver的负载均衡

    3.发现失效的HRegionserver并重新分配其上的region到其他HRegionserver上

    4.管理用户对table的增删改操作

Zookeeper在hbase中的作用

    •保证任何时候,集群中只有一个master

    •存贮所有HRegion的寻址入口。

    •实时监控HRegionserver的上线和下线信息。并实时通知Master

    •存储HBase的schema和table元数据

Client

    通过rpc协议对HBase进行访问