Hadoop基础 1、搜索引擎中所存储的数据是海量数据,传统的存储系统无法处理这种海量数据。因此可以使用分布式存储系统对海量数据进行存储。 传统的共享存储例如NAS、SAN等系统面临海量数据时,无法突破磁盘IO和网络IO。 2、发展历史 2003年,Google 以论文的形式发布:(The Google File System)。 -----> GFS 文件系统。高效存储海量数据的分布式系统,存储节 点可以扩展到上万个。[提供分布式存储解决方案] 2004年,Google 发布 MapReduce(Simplified Date Processing On Large Cluster),阐述编程模型和系统模型。[能够将某个处理 任务分割成任务单元,并行的在集群中的各节点上运行处理,直到得到结果] 2006年,Google 发布 BigTable(A Distributed Storage System for Structure Data)。支持随机读写。利用键值对的形式存储数据。 3、Hadoop介绍 Hadoop由JAVA语言开发,利用了Google发布的论文思想。以Apache 2.0许可协议发布的开源软体框架。 HDFS 分布式存储文件系统 (有中心节点的分布式存储系统:有存储元数据的节点) HDFS(海量存储) + MapReduce(提供计算) = Hadoop (作者儿子的玩具{大象},他儿子起名为Hadoop) 当用户要处理存储在分布式文件系统的数据时,需要自行调用MapReduce的开发库API,编写处理程序,进而调用MapReduce的开发框架在 节点上运行。程序在数据所在的节点上运行,然后进行 map 和 Reduce 的过程。 4、分布式存储架构 NN:NameNode 存储元数据的节点 SNN:Seconary NameNode 第二名称节点。 DN:DataNode 存储数据的节点 由于元数据是存储在内存中的,且存储元数据的节点是单点,因此需要对元数据节点进行高可用,同时要对元数据进行持久化存储。 为了保证磁盘上持久化存储的数据和内存中的数据的一致性,NameNode节点采用事务的方式保证数据的一致性。第二名称节点的作用 是将事务日志中的数据进行持久化,即将数据同步到磁盘中。当NameNode宕机时,第二名称节点会将数据同步到自己的内存中接管管 理元数据的工作,但依然需要检测元数据和磁盘上的数据的一致性,这就带来了大量的时间损耗。存在的另外一个问题就是,当数据 量非常大时,NameNode也将成为性能瓶颈,为了解决上述问题,可以使用智能客户端将负载均衡的分散到NameNode和Seconary NameNnode 节点。 HDFS 2.0版本之后,可以对元数据节点进行高可用。 控制分布式计算的的节点叫JobTracker,负责计算处理的节点成为TaskTracker 两类集群的集合:存储数据的集群、计算处理数据的集群 传统的系统中,是将数据加载到程序运行的地方,而在Hadoop集群中,是将程序移动到数据所在的地方。 5、MapReduce介绍 .............................. 是一个API 程序员需要利用已有的MapReduce(API)开发框架进行开发针对需要处理数据的程序。 6、版本比较 Hadoop v2版本中,MapReduce被分割为:YARN、MRv2 YARN负责Cluster resource manager ,集群资源管理器 MRv2负责Data processing ,数据处理 7、Hive MapReduce之上的程序。HiveQL语句操作数据,转换为MapReduce处理的任务。 8、pig 脚本编程语言接口。 9、HBase 列式存储,NoSQL数据库。按列存储。 10、不建议Hadoop部署在虚拟机上,因为Hadoop对IO性能要求非常高。 11、Hadoop生态组件 Hadoop Common:支持其他Hadoop模块的常用工具。 Hadoop分布式文件系统(HDFS{Hadoop Distributed File System}):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。 Hadoop YARN:作业调度和集群资源管理的框架。 Hadoop MapReduce:一种用于并行处理大型数据集的基于YARN的系统。 Apache的其他Hadoop相关项目包括: Ambari:一种用于供应,管理和监控Apache Hadoop集群的基于Web的工具,其中包括对Hadoop HDFS,Hadoop MapReduce,Hive,HCatalog, HBase,ZooKeeper,Oozie,Pig和Sqoop的支持。Ambari还提供了一个用于查看群集运行状况的仪表板,例如热图和可以直观地查 看MapReduce,Pig和Hive应用程序的功能,以及以用户友好的方式诊断其性能特征的功能。 Avro:数据序列化系统。 Cassandra:无单点故障的可扩展多主数据库。 Chukwa:管理大型分布式系统的数据收集系统。 HBase:可扩展的分布式数据库,支持大型表格的结构化数据存储。 Hive:提供数据汇总和即席查询的数据仓库基础架构。 Mahout:可扩展的机器学习和数据挖掘库。 Pig:用于并行计算的高级数据流语言和执行框架。 Spark:用于Hadoop数据的快速和通用计算引擎。Spark提供了一个简单而富有表现力的编程模型,支持广泛的应用程序,包括ETL,机器学习, 流处理和图计算。 Tez:一种基于Hadoop YARN的通用数据流编程框架,它提供了一个强大且灵活的引擎,可执行任意DAG任务来处理批处理和交互式用例的数据。 Hado生态系统中的Hive,Pig和其他框架以及其他商业软件(例如ETL工具)正在采用Tez,以取代Hadoop MapReduce作为基础执行引擎。 ZooKeeper:分布式应用程序的高性能协调服务。 12、Hadoop Distribution 两个分发版 Cloudera:CDH Hortonworks:HDP Interl:IDH MapR 13、Hadoop 分布式文件系统 架构原理 NameNode 作为Master节点。单独的NameNode节点,作为处理用户访问数据的入口,此节点保存着数据的元数据:文件系统的具体信息、block块信息等。 NameNode负责管理block块的复制,它周期性地接收集群中所有DataNode的心跳数据包和Blockreport。 Namespace(INode Tree),存储在此节点的内存中。对每个Inode的增删改都会记录一条edit logs日志。 hadoop2.0版本中,由多个Namenode存储inode tree Secondary Namenode 因为NameNode繁忙于记录日志、处理客户端请求、合并Inode Tree,因此Namenode容易成为性能瓶颈。引入Secondary Namenode 会从name负责 从namenode中下载edit logs,并负责合并Inode tree和记录edit logs,并写成fsimage,之后上传给Namenode,从而避免了logs爆照现象。 DataNode 作为Slave节点。在集群中存在多个这样的节点,负责管理存储的数据,同时周期性的将数据元数据报告给NameNode节点 YARN Yet Another Resource Negotiator 14、原理 1、任务的分解(Map)与结果的汇总(Reduce)是其主要思想。 2、hadoop分布式存储系统中,存储由HDFS负责完成,计算由yarn开发框架完成,在yarn之上可以运行MapReduce、Spark、Hive。 3、比喻。namenode像是是一个牢头负责看管datanode中的数据。namenode中存放着filename、numReplicas、block-ids 4、hadoop1.0版本中namenode无法高可用,只有一个节点。2.0版本中可以对namenode进行高可用,可以有多个namenode节点。 5、datanode周期性的将数据元数据报告给NameNode节点。 6、客户端访问datanode中的数据时需要hadoop程序员自己开发客户端程序来对数据进行读写