Hadoop/Hive简介
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hadoop是一个存储计算框架,主要由两部分组成:
1,存储(Hadoop分布式文件系统-HDFS)
2,计算(MapReduce计算框架)
1,Hadoop分布式文件系统
这是一种文件系统实现,类似于NTFS,ext3,ext4等等,不过它是建立在更高的层次之上的。在HDFS上存储的文件被分成块(每块默认未64M,比一般的文件系统块大小大的多,可调)分布在多台机器上,其中的每块又会有多块的冗余备份(默认为3),以增强文件系统的容错能力。这种存储模式与后面将要说明的MapReduce计算模型相得益彰。HDFS在具体实现中主要有以下几个部分:
一、名称节点(NameNode):它的职责在于存储整个文件系统的元数据,这是个非常重要的角色。元数据在集群启动时会加载到内存中,元数据的改变也会写到磁盘上的一个文件系统映像文件中(同时还会维护一个对元数据的编辑日志)。目前名称节点还是一个单点。因为HDFS存储文件的时候是将文件划分成逻辑上的块来存储的,模个文件对应那些块都存储在名称节点上,所以如果它有损坏整个集群的数据将不可用。当然我们可以采取一些措施来备份名称节点的元数据(文件系统映像文件),比如可以将名称节点目录同时设置到本地目录和一个NFS目录,这样任何元数据的改变将写入到两个位置做冗余备份,向两个目录冗余写的过程是原子的。这样,在使用中的名称节点宕机之后,我们可以使用NFS上的备份文件来恢复文件系统。
二、第二名称节点(SecondaryNameNode):这个角色的作用就是定期通过编辑日志合并命名空间映像,防止编辑日志过大。不过第二名称节点的状态是滞后于主名称节点的,所以如果主名称节点挂掉,也必定会有一些文件损失。
三、数据节点(DataNode):这是HDFS中具体存储数据的地方,一般有多台机器。除了提供存储服务,它们还定时向名称节点发送它们存储的块的列表,所以名称节点没有必要永久保存每个文件的每个块所在的数据节点,这些信息会在系统启动后由数据节点重建。
2,MapReduce计算框架
这是一种分布式计算模型,其核心就是将任务分解成小任务由不同的计算者同时参与计算,并将各个计算者的计算结果合并得出最终的结果。模型本身非常简单,一般只需要实现两个接口即可;问题的关键在于怎样将实际问题转化为MapReduce任务。Hadoop的MapReduce部分主要由以下几部分组成:
一、作业跟踪节点(JobTracker):负责任务的调度(可以设置不同的调度策略)、状态跟踪。它的角色有点类似于HDFS中的名称节点,JobTracker也是一个单点,在未来的版本中可能会有所改进。
二、任务跟踪节点(TaskTracker):负责具体的任务的执行。它通过“心跳”的方式告知JobTracker其状态,并由JobTracker根据其报告的状态为其分配任务,TaskTracker会启动一个新的JVM来运行一个任务,当然JVM实例也可以被重用。
以上就是对于Hadoop最重要的两个部分的简介,Hadoop存在的理由就是它适应于大数据的存储计算。一个Hadoop集群可以看成是一个存储、计算“数据”的“库”。
Hive是一个构建于Hadoop集群之上的“数据仓库”应用
Hive是Facebook开发的构建于Hadoop集群之上的数据仓库应用,它提供了类似于SQL语法的HQL语句作为数据访问接口,这使得普通分析人员的应用Hadoop的学习曲线变缓。至于Facebook为什么使用Hadoop和Hive组建其数据仓库,其内部人员分享了他们的一些经历,大致的过程是如下的:
1,Facebook的数据仓库一开始是构建于MySQL之上的,但是随着数据量的增加某些查询需要几个小时甚至几天的时间才能完成。
2,当数据量接近1T的时候,mysqld后台进程宕掉,这时他们决定将他们数据仓库转移到Oracle。当然这次转移的过程也是付出了很大的代价的,比如支持的SQL方言不同,修改以前的运行脚本等等。
3,Oracle应付几T的数据还是没有问题的,但是在开始收集用户点击流的数据(每天大约400G)之后,Oracle也开始撑不住了,由此又要考虑新的数据仓库方案。
4,内部开发人员花了几周的时间建立了一个并行日志处理系统Cheetah,这样的话勉强可以在24小时之内处理完一天的点击流数据。
5,Cheetah也存在许多缺点。后来发现了Hadoop项目,并开始试着将日志数据同时载入Cheetah和Hadoop做对比,Hadoop在处理大规模数据时更具优势,后来将所有的工作流都从Cheetah转移到了Hadoop,并基于Hadoop做了很多有价值的分析。
6,后来为了使组织中的多数人能够使用Hadoop,开发了Hive,Hive提供了类似于SQL的查询接口,非常方便。与此同时还开发了一些其它工具。
7,现在集群存储2.5PB的数据,并且以每天15TB的数据在增长,每天提交3000个以上的作业,大约处理55TB的数据...
现在很多大的互联网公司出于成本考虑都在研究、使用Hadoop;数据的价值正得到越来越多的人的重视,而这种重视,又体现出Hadoop存在的巨大价值。