hadoop (1)

来源:互联网 发布:linux断电日志 编辑:程序博客网 时间:2024/06/11 08:07

 1  。hadoop的运用场景

  • 大数据量存储:分布式存储
  • 日志处理: Hadoop擅长这个
  • 海量计算: 并行计算
  • ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库
  • 使用HBase做数据分析: 用扩展性应对大量的写操作—Facebook构建了基于HBase的实时数据分析系统
  • 机器学习: 比如Apache Mahout项目
  • 搜索引擎:hadoop + lucene实现
  • 数据挖掘:目前比较流行的广告推荐
  • 大量地从文件中顺序读。HDFS对顺序读进行了优化,代价是对于随机的访问负载较高。
  • 数据支持一次写入,多次读取。对于已经形成的数据的更新不支持。
  • 数据不进行本地缓存(文件很大,且顺序读没有局部性)
  • 任何一台服务器都有可能失效,需要通过大量的数据复制使得性能不会受到大的影响。
  • 用户细分特征建模
  • 个性化广告推荐
  • 智能仪器推荐

    2.hadoop生态圈

    我们经常一提到hadoop,就会听别人说到Hive, Pig, HBase, Sqoop, Mahout, Zookeeper等等。
    其实这些项目都是hadoop的一些相关项目。
    它们有些是hadoop的组件,有些是新的hadoop框架(基于hadoop原理的架构)。
    尽管Hadoop因MapReduce及其分布式文件系统(HDFS,由NDFS改名而来)而出名,但Hadoop这个名字也用于一组相关项目的统称,这些相关项目都使用这个基础平台进行分布式计算和海量数据处理。

    下面是一些常用的组件:
    还有一些新的组件框架可查看
    http://blog.cloudera.com/blog/2013/01/apache-hadoop-in-2013-the-state-of-the-platform/
    Common
        一组分布式文件系统和通用I/O的组件与接口(序列化、Java RPC和持久化数据结构)。

    Avro
        一种支持高效、跨语言的RPC以及永久存储数据的序列化系统。

    MapReduce
        分布式数据处理模型和执行环境,运行于大型商用机集群。

    HDFS
        分布式文件系统,运行于大型商用机集群。

    Pig
       一种数据流语言和运行环境,用以检索非常大的数据集。Pig运行在MapReduce和HDFS的集群上。     
                       
    Hive
       一个分布式、按列存储的数据仓库。Hive管理HDFS中存储的数据,并提供基于SQL的查询语言(由运行时引擎翻译成MapReduce作业)用以查询数据。

    HBase
        一个分布式、按列存储数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询(随机读取)。

    ZooKeeper
        一个分布式、可用性高的协调服务。ZooKeeper提供分布式锁之类的基本服务用于构建分布式应用。

    Sqoop
        在数据库和HDFS之间高效传输数据的工具。
  • 3.hadoop的框架演化

    大数据本质也是数据,但是又有了新的特征,包括数据来源广、数据格式多样化(结构化数据、非结构化数据、Excel文件、文本文件等)、数据量大(最少也是TB级别的、甚至可能是PB级别)、数据增长速度快等。

    针对以上主要的4个特征我们需要考虑以下问题:
    数据来源广,该如何采集汇总?,对应出现了Sqoop,Cammel,Datax等工具。
    数据采集之后,该如何存储?,对应出现了GFS,HDFS,TFS等分布式文件存储系统。
    由于数据增长速度快,数据存储就必须可以水平扩展。
    数据存储之后,该如何通过运算快速转化成一致的格式,该如何快速运算出自己想要的结果?
    对应的MapReduce这样的分布式运算框架解决了这个问题;但是写MapReduce需要Java代码量很大,所以出现了Hive,Pig等将SQL转化成MapReduce的解析引擎;
    普通的MapReduce处理数据只能一批一批地处理,时间延迟太长,为了实现每输入一条数据就能得到结果,于是出现了Storm/JStorm这样的低时延的流式计算框架;
    但是如果同时需要批处理和流处理,按照如上就得搭两个集群,Hadoop集群(包括HDFS+MapReduce+Yarn)和Storm集群,不易于管理,所以出现了Spark这样的一站式的计算框架,既可以进行批处理,又可以进行流处理(实质上是微批处理)。
    而后Lambda架构,Kappa架构的出现,又提供了一种业务处理的通用架构。
    为了提高工作效率,加快运速度,出现了一些辅助工具:
    Ozzie,azkaban:定时任务调度的工具。
    Hue,Zepplin:图形化任务执行管理,结果查看工具。
    Scala语言:编写Spark程序的最佳语言,当然也可以选择用Python。
    Python语言:编写一些脚本时会用到。
    Allluxio,Kylin等:通过对存储的数据进行预处理,加快运算速度的工具。



    图片来源:http://blog.csdn.net/GitChat/article/details/78341484