热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ApacheHadoop(1)---概述

早在上古时代(那时候我大概正在读小学吧),大数据这个词还没那么火,业界对于海量数据的存储和处理相对来

早在上古时代(那时候我大概正在读小学吧),大数据这个词还没那么火,业界对于海量数据的存储和处理相对来说比较粗糙,还在追求容量更大的硬盘、性能更强的服务器。当然了,分布式处理是有的,那时候应该是叫 网格计算 吧,就是很多的节点,然后存储是集中存放,通过SAN(storage area network)挂载到每一个计算节点上,各个节点之间通过MPI(Message Passing Interface)进行通信。

MPI 可以解决大规模的数据处理任务,但是它有着很多缺点,开发者需要自己去考虑节点间通信、节点故障检测与处理等容错、任务划分等等很细节的东西,利用MPI来处理大规模数据,可能大部分时间不是在对数据本身进行分析和处理,而是在解决层出不穷的bug。对于SAN来说,尽管有raid机制可以提升存储的可靠性,但是它没有解决节点故障带来的数据丢失问题,以及很难应付更大规模的数据存储问题,网络吞吐也往往容易成为瓶颈。

对于大数据处理,我们首先要能够存储如此大规模的数据量,其次是如何对这海量的数据进行处理,再然后是尽可能快的处理。

2003年开始Google发出的三篇论文 Google File SystemMapReduceBigTable 给大数据领域带来了曙光,分别解决了大数据存储、大数据处理,以及高效的结构化大数据存取,这三篇论文算是奠定了现代大数据处理的基石,说它是现代大数据处理的鼻祖也不为过。

诞生

不过Google并不热衷于开源(毕竟人家的工程师吊打一切,根本看不上社区的力量),只是给出了具体的设计和思路,所以当时大家也只能望梅止渴了。(现在Google也算是积极拥抱开源吧,推出了 TensorflowKubernetes 等等powerful的项目,不过这是后话了)

尽管Google并没有开源代码,但是论文写的很详细,足够让外人按图索骥了。Nutch(一个搜索引擎,搜索引擎对于大数据处理的需求很强)的工程师 Doug Cutting 在看到这几篇论文之后开始按照论文里的设计思路来重构自己的系统,他们成功的将Hadoop部署到了数十台节点上并稳定的运行。

后来,负责人跳槽到了Yahoo!,领导一个独立的团队专门开发Hadoop系统,集群规模也开始扩大到数百个节点,并且剥离了与业务强相关的内容,逐渐成为一个通用系统。

在2008年,Hadoop成为了apache基金会的顶级开源项目,世人得以一睹Hadoop的强大,同时开源社区也逐渐成长。同年,Hadoop用时209秒完成了1T数据的 排序 任务,打破了当时的记录,并且随着不断调优,处理时间越来越短,数据量也越来越大。

蓬勃发展

相比较于MPI,Hadoop 具有可靠的大数据存储,通过冗余、容错等机制,即便是普通的服务器也能够很好的运行大数据处理任务。同时,Hadoop自带的task容错机制也使得用户能够专心数据分析任务,很少需要去关注容错。此外,MapReduce也大大简化了数据处理的复杂性,简化操作的同时也带来了可靠性。

学术界和业界都开始向Hadoop转移,贡献了很多的新功能、优化细节、bug修复,并以Hadoop为基础推出了更多的大数据处理平台,如列式存储HBase、数据仓库Hive等等,一些传统的单机算法也开始通过Hadoop走向分布式(那大概是大数据方向最好水论文的时代吧)。

Apache Hadoop(1)---概述

Hadoop 1 版本中资源分配与任务调度框架是跟mapredice等紧耦合的,随着Hadoop的成熟,在2.0版本时,这一套被独立出来,成为了一个通用的调度框架(YARN)供其他大数据平台使用,如Spark就支持使用YARN来做资源分配和任务调度。

老当益壮

从 2003 年到现在已经经过了16年的时光,在计算机这个飞速发展的领域,16年足以让一门技术从呱呱坠地到流行再到逐步淘汰的过程了。这么算的话,Hadoop现在也算是垂垂老矣,虽然Hadoop的热度减少,风头都被 SparkFlink 等等后来者抢去了,但是依旧没有淡出人们的视线。一方面,虽然现在有了更加快、更加好用的工具,但是他们底层大多仍然依赖HDFS(一部分原因是足够好用,另一个是企业的数据迁移不便);另一方面,Hadoop也还远没有到被淘汰的地位,仍然有很多的任务用Hadoop运行,也一直在随着需求变迁而进步。我们实验室年初的一篇A会论文的实验就是在Hadoop上跑的( BENU: Distributed Subgraph Enumeration with Backtracking-based Framework )。

如果要说说Hadoop的不足之处,恐怕又能写满整整一张A4纸了:它的编程模型太过简单难以实现复杂需求、HDFS对小文件的处理能力太差、map和reduce的频繁落盘操作带来了很大的性能损失、namenode虽然支持HA但是依旧是瓶颈、基于批处理的模式使得延迟非常高、对于迭代型任务支持不好等等等等。但是Hadoop依旧有着很高的可用性,基于HDFS构建的HBase列式存储能够提供毫秒级的响应而且拓展能力很强。

现在我们说Hadoop,不仅仅是在只MapReduce、YARN这些东西,更多的是在指这个生态,从Hadoop诞生以来,有太多的组件/系统在此之上被构建,它的设计理念仍然会被新的系统所参考、借鉴。

总结

作为一个划时代的系统,Hadoop将大数据处理带上了一个新的高度。不再需要追击极致的单机性能,它的容错机制使得普通服务器就能提供可靠的服务;不再需要考虑那么多的节点协调、容错,用户只需要通过简单的接口就能完成海量数据的存储和处理工作,就像是在单机上处理这些任务一样,不需要去考虑太多的硬件故障、网络故障等;针对日益膨胀的数据,只需要简单的增加节点就可以,系统性能可以接近水平拓展。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 短暂的人生中,IT和技术只是其中的一部分。无论换工作还是换行业,最终的目标是成功、荣誉和收获。本文探讨了技术人员如何跳出纯技术的局限,实现更大的职业发展。 ... [详细]
  • 本文介绍了Spring 2.0引入的TaskExecutor接口及其多种实现,包括同步和异步执行任务的方式。文章详细解释了如何在Spring应用中配置和使用这些线程池实现,以提高应用的性能和可管理性。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 在Windows命令行中,通过Conda工具可以高效地管理和操作虚拟环境。具体步骤包括:1. 列出现有虚拟环境:`conda env list`;2. 创建新虚拟环境:`conda create --name 环境名`;3. 删除虚拟环境:`conda env remove --name 环境名`。这些命令不仅简化了环境管理流程,还提高了开发效率。此外,Conda还支持环境文件导出和导入,方便在不同机器间迁移配置。 ... [详细]
  • 如何在Linux系统中部署TensorFlow的详细指南
    本文详细介绍了在Linux系统中部署TensorFlow的过程。作者基于北京大学曹建教授的MOOC课程进行学习,但由于课程内容较旧,环境配置方面遇到了不少挑战。经过多次尝试,最终成功解决了这些问题,并总结了一套详细的安装指南,帮助初学者快速上手TensorFlow。 ... [详细]
  • 如何在Linux中配置环境变量:命令与脚本详解
    请关注本头条号,每天坚持更新原创干货技术文章。当您在Linux命令行上键入命令时,您实际是在告诉shell运行指定名称的可执行文件。在Linux中,这些可执行程序通常位于系统上的几 ... [详细]
author-avatar
唯爱WE创丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有