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

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的实例介绍。

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

  1. hadoop基础----hadoop实战(七)-----hadoop管理工具---使用Cloudera Manager安装Hadoop---Cloudera Manager和CDH5.8离线安装

    hadoop基础----hadoop实战(六)-----hadoop管理工具---Cloudera Manager---CDH介绍 简介 我们在上篇文章中已经了解了CDH,为了后续的学习,我们本章就来 ...

  2. Hadoop实战:Hadoop分布式集群部署(一)

    一.系统参数优化配置 1.1 系统内核参数优化配置 修改文件/etc/sysctl.conf,使用sysctl -p命令即时生效.   1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  3. hadoop基础----hadoop实战(九)-----hadoop管理工具---CDH的错误排查(持续更新)

    在CDH安装完成后或者CDH使用过程中经常会有错误或者警报,需要我们去解决,积累如下: 解决红色警报 时钟偏差 这是因为我们的NTP服务不起作用导致的,几台机子之间有几秒钟的时间偏差. 这种情况下一是 ...

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

    这篇文章将接着上一篇wordcount的例子,抽象出最简单的过程,一探MapReduce的运算过程中,其系统调度到底是如何运作的. 情况一:数据和运算分开的情况 wordcount这个例子的是hado ...

  5. Hadoop实战实例

    Hadoop实战实例        Hadoop实战实例        Hadoop 是Google MapReduce的一个Java实现.MapReduce是一种简化的分布式编程模式,让程序自动分布 ...

  6. Hadoop实战课程

    Hadoop生态系统配置Hadoop运行环境Hadoop系统架构HDFS分布式文件系统MapReduce分布式计算(MapReduce项目实战)使用脚本语言Pig(Pig项目实战)数据仓库工具Hive ...

  7. 王家林的“云计算分布式大数据Hadoop实战高手之路---从零开始”的第十一讲Hadoop图文训练课程:MapReduce的原理机制和流程图剖析

    这一讲我们主要剖析MapReduce的原理机制和流程. “云计算分布式大数据Hadoop实战高手之路”之完整发布目录 云计算分布式大数据实战技术Hadoop交流群:312494188,每天都会在群中发 ...

  8. 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程

    这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试repl ...

  9. Hadoop on Mac with IntelliJ IDEA - 10 陆喜恒. Hadoop实战(第2版)6.4.1(Shuffle和排序)Map端 内容整理

    下午对着源码看陆喜恒. Hadoop实战(第2版)6.4.1  (Shuffle和排序)Map端,发现与Hadoop 1.2.1的源码有些出入.下面作个简单的记录,方便起见,引用自书本的语句都用斜体表 ...

随机推荐

  1. UI Automator Viewer的使用

    uiautomatorviewer是android SDK自带的工具.通过截屏并分析XML布局文件的方式,为用户提供控件信息查看服务.该工具位于SDK目录下的tools\bin子目录下.可以看到,它是 ...

  2. linux kvm虚拟机安装

    1.上传ISO文件,这里采用OEL5.8x64iso 2.开始安装OEL5.8 (1)raw格式磁盘 virt- --vcpus= --disk path=/data/test02.img,size= ...

  3. [ActionScript 3.0] 自定义右键菜单

    将自定义右键菜单的一些属性和方法归纳到AddRightMenu.as,通过实例化此类,调用相关方法即可测试! package { import flash.display.Sprite; import ...

  4. Linux CentOs 下 安装 mysql nginx redis

    SCP 的使用 来源于: https://blog.csdn.net/qq_30968657/article/details/72912070 scp [参数] <源地址(用户名@IP地址或主机 ...

  5. mysql基础操作学习笔记(一)

    1前期准备: SQL语言包涵以下4个部分: (1)数据定义语言(DDL):包括DROP, CREATE, ALTER等语句 (2)数据操纵语言(DML):包括INSERT, UPDATE, DELET ...

  6. PHP开发微信公众号(二)消息接受与推送

    上一篇文章我们知道怎么获取二维码,这样别人就可以扫描二维码来关注我们,但是别人关注后,发送消息,我们怎么进行相关处理? 这里我们就来学习下怎么处理处理这些消息,以及推送消息. 学习之前首先你需要有一个 ...

  7. P1642 规划 01分数规划+树形DP

    $ \color{#0066ff}{ 题目描述 }$ 某地方有N个工厂,有N-1条路连接它们,且它们两两都可达.每个工厂都有一个产量值和一个污染值.现在工厂要进行规划,拆除其中的M个工厂,使得剩下的工 ...

  8. [转] iOS 在UILabel显示不同的字体和颜色

    在项目开发中,我们经常会遇到在这样一种情形:在一个UILabel 使用不同的颜色或不同的字体来体现字符串,在iOS 6 以后我们可以很轻松的实现这一点,官方的API 为我们提供了UILabel类的at ...

  9. USART列子

    #include "stm32f10x.h" void USART_INit(void) { GPIO_InitTypeDef GPIO_Initstructe; USART_In ...

  10. [CH3803] 扑克牌 (期望DP+记忆化搜索)

    [题目链接] [CH3803] 扑克牌 [题面描述] \(54\)张牌,每次随机摸一张,求得到 A张黑桃 B张红桃 C张梅花 D张方块 的期望步数.特别地,大王和小王可以当做任意一种花色,当然,会选择 ...