Hadoop实战之一~Hadoop概述

前言

对技术,我还是抱有敬畏之心的。

Hadoop概述

Hadoop是一个开源分布式云计算平台,基于Map/Reduce模型的,处理海量数据的离线分析工具。基于Java开发,建立在HDFS上,最早由Google提出,有兴趣的同学可以从Google三驾马车: GFS,mapreduce,Bigtable开始了解起,这里我不详细介绍了,因为网上的资料实在是太多了。

Hadoop项目的结构如下:

Hadoop中最重要的应该就是HDFS和Mapreduce了,从HDFS讲起:

HDFS主要由以下优点: 
        1)、支持超大文件,一般来说,一个Hadoop文件系统可以轻松的存储TB、PB级别的数据。 
        2)、检测和快速应对硬件故障,在大量通用的廉价硬件构建的集群上,特别是硬件故障很常见,一班的HDFS系统由成百上千台存储着数据文件的服务器组成,越多的服务器也就意味着高故障率,因此故障检测和制动恢复就是HDFS的一个设计目标。 
        3)、流式数据访问方式,HDFS要处理的数据规模都比较大,应用程序一次需要访问大量数据,适用于批量处理而非用户交互式处理数据,HDFS以流式方式访问数据,注重的是数据的高吞吐量而非访问速度。 HDFS是建立在最有效的数据处理模式是一次写多次读(write-once,read-many-times)的模式的概念之上的,当写入操作被关闭后,想要往文件里面更新一些内容是不受支持。HDFS存储的数据集作为hadoop的分析对象。在数据集生成后,长时间在此数据集上进行各种分析。每次分析都将设计该数据集的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。(流式读取最小化了硬盘的寻址开销,只需要寻址一次,然后就一直读啊读。毕竟每一个文件块都被划分为64M大小了。硬盘的物理构造导致寻址开销的优化跟不上读取开销。所以流式读取更加适合硬盘的本身特性。当然大文件的特点也更适合流式读取。与流数据访问对应的是随机数据访问,它要求定位、查询或修改数据的延迟较小,传统关系型数据库很符合这一点)

4)、简化的一致性模型,大部分的HDFS的数据操纵文件都是一次写入,多次读取,一个文件一旦经过创建、写入和关闭后,一半就不需要修改了,这样简单的一致性模型,有利于提供高吞吐量的数据访问模型。 
对于上述设计目标,我们会发现,这些在一些场景中是优势,但是在默写情况下,会成为其局限性,主要有以下几点: 
        1)、不适合低延迟的数据访问,HDFS是为处理大规模的数据而生的,主要是为达到高的数据吞吐量而设计的,HDFS为了高吞吐量,可以牺牲低延迟,因此我们不能奢望能够快速的读出HDFS里的数据。
        如果想在Hadoop上对数据做低延迟或实时的数据访问,在其上HBase是一个很好的解决方案。但是Hbase是一个NOSQL,即面向列的数据库。
        2)、不能搞笑的存储大量小文件,在HDFS中,有NameNode(Master)节点来管理文件系统的元数据,已相应客户端请求返回文件位置等,因此文件数量大小的限制就由NameNode(具体的来说是由其内存大小)来决定;另外,在一次数据访问中,更多的小文件也意味着更多的磁盘寻址操作,以及更多的文件的打开与关闭的开销,这会大大降低数据的吞吐量,这都有违HDFS的设计目标,也会给NameNode带来更大的工作压力。    
        3)、不支持多用户的数据写入和随机访问与修改文件,在一个HDFS写操作中只能有一个用户对一个文件写操作,并且自能通过追加的方式将数据写到文件末尾,在读一个文件的时候也只能从文件头部顺序读取文件数据。
        目前HDFS还不支持多个用户对同一个文件的并发写操作、随机访问和修改数据。 

HDFS的架构如下:

Hive的数据管理

好了,说完了上面,说说主线了,Hive,这次预研的主要对象就是它了。前图已经说明,hive是Hadoop上的数据仓库基础架构,这么绕口的东西怎么说比较形象呢?说白了就是:

1  它不是存储数据的,真正的数据存储在HDFS上

2  它提供一个类SQL的语言,可以对外提供数据存储、查询和分析的接口,总之就是比起直接查Hadoop上的数据,要舒服得多了

如图:

接下来,从三方面来对Hive的数据管理进行分析:

1  元数据存储

Hive将元数据存储在RDBMS中,所以通常你在网上会查到安装hive需要安装Mysql数据库或者其它RDBMS数据库,就是这么回事,对于元数据不太能理解的朋友可以将它理解成数据的基本信息,但是不包含实际数据。

2 数据存储

Hive没有专门的数据存储格式,也没有为数据建立索引,其所有数据都存在HDFS中,由于Hadoop是批处理系统,任务是高延迟的,在任务提交和处理过程中也会消耗一些时间成本,所以即时Hive处理的数据集非常小,在执行过程中也会出现延迟现象,这样,Hive的性能就不能和传统的Oracle相比了 。另外,Hive不提供数据排序和查询cache功能,不提供在线事物处理,换句话说,不支持与用户直接对接,而是适合离线处理。当然也不提供实时的查询和记录级的更新。Hive适合的是处理不变的大规模数据集(例如网络日志)上的批量任务,最大的价值是可扩展性、可延展性、良好的容错率和低约束的数据输入格式。

hive架构体系如图:

其中Thrift是一个类似与ICE的通讯框架。

介绍完以上,相信大家对于Hadoop和hive所适用的场景已经一目了然了,具体用不用,取决于具体的业务场景吧~

如果有下一篇,将是Hadoop集群搭建和hive的实例介绍。

时间: 2024-11-07 06:16:28

Hadoop实战之一~Hadoop概述的相关文章

Hadoop实战之四~hadoop作业调度详解(2)

这篇文章将接着上一篇wordcount的例子,抽象出最简单的过程,一探MapReduce的运算过程中,其系统调度到底是如何运作的. 情况一:数据和运算分开的情况 wordcount这个例子的是hadoop的helloworld程序,作用就是统计每个单词出现的次数而已.其过程是: 现在我用文字再来描述下这个过程. 1 Client提交一个作业,将Mapreduce程序和数据到HDFS中 2 发起作业,Hadoop根据各机器空闲情况,调度一台(或者N台taskTracker机器,进行Map运算) 3

Hadoop实战实例

Hadoop实战实例 Hadoop 是Google MapReduce的一个Java实现.MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行.就如同java程序员可以不考虑内存泄露一样, MapReduce的run-time系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器的失效,并且管理机器之间的通讯请求.这样的模式允许程序员可以不需要有什么并发处理或者分布式系统的经验,就可以处理超大的分布式系统得资源. 一.概论 作为Hado

深入浅出Hadoop实战开发实例视频教程

Hadoop实例视频教程-深入浅出Hadoop实战开发Hadoop是什么,为什么要学习Hadoop?Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上.而且它提供高传输率(high throughput

Hadoop实战视频教程完整版 完整的Hadoop大数据视频教程

分享一套迪伦老师的完整的Hadoop实战视频教程,教程从学习Hadoop需要的数据库.Java和Linux基础讲起,非常适合零基础的学员,课程最后结合了实战项目演练,理论结合实战,深入浅出,绝对是当前最为完整.实战的Hadoop教程. <Hadoop大数据零基础高端实战培训系列配文本挖掘项目(七大亮点.十大目标)> 课程讲师:迪伦 课程分类:大数据 适合人群:初级 课时数量:230课时 用到技术:部署Hadoop集群 涉及项目:京东商城.百度.阿里巴巴 咨询QQ:1337192913(小公子)

升级版:深入浅出Hadoop实战开发(云存储、MapReduce、HBase实战微博、Hive应用、Storm应用)

      Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上.而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序

Hadoop实战 Hadoop Pipes运行C++程序问题解决

说明:我使用的是hadoop-1.2.1,开发环境是OpenSuSE12.3 x64. Hadoop安装在/usr/lib/hadoop下.并且我的hadoop的相关指令已经加入到了系统的path中. 下面四篇有我解决问题时,所主要参考的文档: 1.http://www.cnblogs.com/lanxuezaipiao/p/3648853.html 该博客指出64位的libhadooppipes.a和   libhadooputils.a这两个库应该由我们自己编译,官方提供的是32位的库. 2

Hadoop实战之三~ Hello World

前言 本文介绍的是在Ubuntu下安装用三台PC安装完成Hadoop集群并运行好第一个Hello World的过程,软硬件信息如下: Ubuntu:12.04 LTS Master: 1.5G RAM,奔腾处理器. Slave1.Slave2:4G RAM,I3处理器. 开始 1 安装Ubuntu : http://cdimage.ubuntu.com/releases/12.04/release/,Ubuntu的安装过程网上有很多,这里不再赘述了,安装之前一定要对Linux的目录树和Mount

Hadoop -YARN 应用程序设计概述

一概述 应用程序是用户编写的处理数据的统称,它从YARN中申请资源完成自己的计算任务.YARN自身对应用程序类型没有任何限制,它可以是处理短类型任务的MapReduce作业,也可以是部署长时间运行的服务的应用程序.应用程序可以向YARN申请资源完成各类计算任务. 在YARN上开发一个应用程序,通常而言,需要开发两个组件,分别是客户端和ApplicationMaster,其中客户端主要作用是将应用程序提交到YARN上,并与YARN 和Application Master进行交互,查询应用程序的状态

Hadoop实战视频教程下载

Hadoop大数据零基础高端实战培训系列配文本挖掘项目 大数据Hadoop实战视频教程就从最基础的Java语法.数据库.Linux讲起到深入Hadoop大数据技术所必须的所有知识,设计Hadoop生态圈所有常用组件,包括但不限于:Greenplum数据库.HBase.Hive.Pig.ZooKeeper.Chukwa.Hadoop 2.0架构.部署以及YARN.Spark.Storm和Tez.MapReduce和HBase.Sqoop.Flume.Avro.Mahout的Hadoop重要子项目以