zoukankan      html  css  js  c++  java
  • 初识Hadoop

    • Hadoop是什么

    Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。Hadoop框架中最核心设计就是:HDFS和MapReduce。HDFS提供了海量数据的存储,MapReduce提供了对数据的计算。

    • Hadoop生态圈

    • HDFS

    HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(large data set)的应用程序。

    HDFS的设计特点是:

    1、大数据文件,非常适合上T级别的大文件或者一堆大数据文件的存储,如果文件只有几个G甚至更小就没啥意思了。

    2、文件分块存储,HDFS会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多得都。

    3、流式数据访问,一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。

    4、廉价硬件,HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。

    5、硬件故障,HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。

    HDFS的关键元素:

    Block:将一个文件进行分块,通常是64M。

    NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在Hadoop2.*开始支持activity-standy模式----如果主NameNode失效,启动备用主机运行NameNode。

    DataNode:分布在廉价的计算机上,用于存储Block块文件。

    • MapReduce

    通俗说MapReduce是一套从海量·源数据提取分析元素最后返回结果集的编程模型,将文件分布式存储到硬盘是第一步,而从海量数据中提取分析我们需要的内容就是MapReduce做的事了。

    下面以一个计算海量数据最大值为例:一个银行有上亿储户,银行希望找到存储金额最高的金额是多少,按照传统的计算方式,我们会这样:

    1 Long moneys[] ...  
    2 Long max = 0L;  
    3 for(int i=0;i<moneys.length;i++){  
    4   if(moneys[i]>max){  
    5     max = moneys[i];  
    6   }  
    7 }  

    如果计算的数组长度少的话,这样实现是不会有问题的,还是面对海量数据的时候就会有问题。

    MapReduce会这样做:首先数字是分布存储在不同块中的,以某几个块为一个Map,计算出Map中最大的值,然后将每个Map中的最大值做Reduce操作,Reduce再取最大值给用户。

    MapReduce的基本原理就是:将大的数据分析分成小块逐个分析,最后再将提取出来的数据汇总分析,最终获得我们想要的内容。当然怎么分块分析,怎么做Reduce操作非常复杂,Hadoop已经提供了数据分析的实现,我们只需要编写简单的需求命令即可达成我们想要的数据。

    • Hbase
    Hbase源自Google的Bigtable论文,HBase是一个分布式的、面向列的开源数据库,采用了BigTable的数据模型——键/值存储。Hbase擅长大规模数据的随机、实时读写访问。
    • Hive

    Hive最早是由Facebook开发并使用,是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,提供简单的sql查询,并将sql语句转换为MapReduce作业运行。

    • Impala

    Impala是由Cloudera公司开发,可以对存储在HDFS、Hbase的数据提供sql查询功能,Impala的特点是对中等数据量的查询非常迅速,其性能大幅领先于Hive,原因在于Impala并没有使用MapReduce的计算框架。

    • Sqoop

    Sqoop是Apache的顶级项目,主要用来在Hadoop和关系数据库中传递数据,使用Sqoop,我们可以方便的将数据从关系数据库导入HDFS,或者将数据从HDFS导出到关系数据库。 

    参考:

    《hadoop海量数据处理技术详解与项目实战》

    http://blessht.iteye.com/blog/2095675

  • 相关阅读:
    短视频不为人知的素材来源 以及平台推荐的黑盒机制
    说什么月入几万 我是不是应该一头撞死?
    Python 3 进阶 —— 使用 PyMySQL 操作 MySQL
    CentOS安装Subversion 1.9.*版本客户端
    [算法]PHP随机合并数组并保持原排序
    CentOS安装Memcached
    Git Windows客户端保存用户名和密码
    ApiGen 4.0配置项
    ApiGen安装
    SQL服务器模式
  • 原文地址:https://www.cnblogs.com/Jason-Xiang/p/6120896.html
Copyright © 2011-2022 走看看