[官网]: http://hadoop.apache.org/[下载]: https://hadoop.apache.org/releases.html// hadoop-2.10.0// https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz// https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.10.0/hadoop-2.10.0-src.tar.gz[文档]: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html// https://www.cnblogs.com/binarylei/p/8903601.html// https://www.w3cschool.cn/hadoop/// https://www.yiibai.com/hadoop/// https://www.aboutyun.com/forum-53-1.html// https://www.cnblogs.com/TiePiHeTao/p/11503927.html// https://www.zhihu.com/topic/19563390/hot
Hadoop 是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。
其有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。其放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
其起源于Apache Nutch项目,始于2002年,是Apache Lucene的子项目之一。
2004年,Google在 <操作系统设计与实现 Operating System Design and Implementation,OSDI> 会议上公开发表了题为 <MapReduce:Simplified Data Processing on Large Clusters ,Mapreduce:简化大规模集群上的数据处理> 的论文之后,受到启发的Doug Cutting等人开始尝试实现MapReduce计算框架,并将它与NDFS(Nutch Distributed File System)结合,用以支持Nutch引擎的主要算法。
由于NDFS和MapReduce在Nutch引擎中有着良好的应用,所以它们于2006年2月被分离出来,成为一套完整而独立的软件,并被命名为Hadoop。
Hadoop就是存储海量数据和分析海量数据的工具,由java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部件是HDFS与MapReduce。
HDFS是一个分布式文件系统,引入存放文件元数据信息的服务器Namenode和实际存放数据的服务器 Datanode,对数据进行分布式储存和读取。
MapReduce是一个计算框架,MapReduce的核心思想是把计算任务分配给集群内的服务器里执行。通过对计算任务的拆分 (Map计算/Reduce计算) 再根据任务调度器 (JobTracker) 对任务进行分布式计算。
优点
Hadoop是一个能够对大量数据进行分布式处理的软件框架。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。
Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。
Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。
Hadoop 还是可伸缩的,能够处理 PB 级数据。
Hadoop 依赖于社区服务,因此它的成本比较低,任何人都可以使用。
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。
其,高可靠性,Hadoop按位存储和处理数据的能力值得人们信赖;高扩展性,Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中;高效性,Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快;高容错性,Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配;低成本,与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低;
[优点]
: 支持超大文件。HDFS存储的文件可以支持TB和PB级别的数据。
: 检测和快速应对硬件故障。数据备份机制,NameNode通过心跳机制来检测DataNode是否还存在。
: 高扩展性。可建构在廉价机上,实现线性(横向)扩展,当集群增加新节点之后,NameNode也可以感知,将数据分发和备份到相应的节点上。
: 成熟的生态圈。借助开源的力量,围绕Hadoop衍生的一些小工具。
[缺点]
: 不能做到低延迟。高数据吞吐量做了优化,牺牲了获取数据的延迟。
: 不适合大量的小文件存储。
: 文件修改效率低。HDFS适合一次写入,多次读取的场景。
架构

其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。
上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。
在Hadoop 出现之前,高性能计算和网格计算一直是处理大数据问题主要的使用方法和工具,它们主要采用消息传递接口(Message Passing Interface,MPI)提供的API 来处理大数据。
网格计算通常是指通过现有的互联网,利用大量来自不同地域、资源异构的计算机空闲的CPU 和磁盘来进行分布式存储和计算。
这些参与计算的计算机具有分处不同地域、资源异构(基于不同平台,使用不同的硬件体系结构等)等特征,从而使网格计算和Hadoop 这种基于集群的计算相区别开。Hadoop 集群一般构建在通过高速网络连接的单一数据中心内,集群计算机都具有体系结构、平台一致的特点,而网格计算需要在互联网接入环境下使用,网络带宽等都没有保证。
[实时日志处理分析]
: Flume + Logstash + Kafka + Spark Streaming

酷狗音乐的大数据平台
HDFS ,Hadoop Distributed File System, 分布式文件系统
HDFS是 Master和 Slave的主从结构。主要由 Name-Node、Secondary NameNode、DataNode构成。

NameNode
管理HDFS的 名称空间和数据块映射信存储元数据 与 文件到数据块映射的地方。
配置成HA即高可用集群,集群中有两个NameNode节点,一台active主节点,另一台stan-dby备用节点,两者数据时刻保持一致。
Secondary NameNode,辅助NameNode,分担NameNode工作,紧急情况下可辅助恢复NameNode。
DataNode
Slave节点,实际存储数据、执行数据块的读写并汇报存储信息给NameNode。
文件按照数据块的方式进行存储在DataNode上,数据块是抽象块,作为存储和传输单元,而并非整个文件。
数据分块,屏蔽了文件的概念,简化存储系统的设计,比如100T的文件大于磁盘的存储,需要把文件分成多个数据块进而存储到多个磁盘;为了保证数据的安全,需要备份的,而数据块非常适用于数据的备份,进而提升数据的容错能力和可用性。


HDFS文件读流程
向NameNode通信查询元数据(block所在的DataNode节点),找到文件块所在的DataNode服务器。
挑选一台DataNode(就近原则,然后随机)服务器,请求建立socket流。
DataNode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)。
客户端已packet为单位接收,现在本地缓存,然后写入目标文件,后面的block块就相当于是append到前面的block块最后合成最终需要的文件。

HDFS文件写流程
向NameNode通信请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。
NameNode返回确认可以上传。
client会先对文件进行切分,比如一个block块128m,文件有300m就会被切分成3个块,一个128m、一个128m、一个44m。请求第一个block该传输到哪些DataNode服务器上。
NameNode返回DataNode的服务器。
client请求一台DataNode上传数据,第一个DataNode收到请求会继续调用第二个DataNode,然后第二个调用第三个DataNode,将整个通道建立完成,逐级返回客户端。
client开始往A上传第一个block,当然在写入的时候DataNode会进行数据校验,第一台DataNode收到后就会传给第二台,第二台传给第三台。
当一个block传输完成之后,client再次请求NameNode上传第二个block的服务器。
MapReduce 分布式运算框架
MapReduce是一种编程模型,是一种编程方法,是抽象的理论,采用了分而治之的思想。
MapReduce框架的核心步骤主要分两部分,分别是Map和Reduce。每个文件分片由单独的机器去处理,这就是Map的方法,将各个机器计算的结果汇总并得到最终的结果,这就是Reduce的方法。

YARN ,Yet Another Resource Negotiator 资源管理调度系统
大数据相关职业介绍
大数据的不同背景以及发展职业可分为Hadoop开发人员,Hadoop管理员,Hadoop架构师,Hadoop测试人员和大数据分析师。
Hadoop开发人员
工作职责是根据系统设计编写程序,并且必须对编码和编程有充分的了解。任务与软件开发人员相似,但属于大数据领域。还包括理解和致力于解决问题的解决方案,设计和架构以及强大的文档编制能力。
定义工作流程,管理和查看Hadoop日志文件,通过Zookeeper进行 集群协调服务,通过调度程序管理Hadoop作业,支持在Hadoop集群上运行的MapReduce程序。
擅长编写Pig Latin Scripts和HiveQL,经过验证的工作流程/调度程序(如Oozie) 知识,能够处理Flume和Sqoop等数据加载工具。
Hadoop架构师
工作职责是设计系统的工作方式,然后管理Hadoop解决方案的整个生命周期。具有在Cloudera,HortonWorks和MapR 等流行的Hadoop发行平台上工作的专业知识和交付经验。
设计技术架构和应用程序定制,进行必要的需求分析,进行提议的解决方案设计的部署
深入了解Hadoop体系结构和HDFS (包括YARN),Hive,Pig,MapReduce,HBase
Hadoop管理员
管理作业职责与系统管理员作业相似,管理员的角色和职责包括设Hadoop集群,对其进行备份,恢复和维护。Hadoop管 理员需要对硬件系统和Hadoop体系结构有充分的了解。
HDFS维护和支持,集群规划和筛选,跟踪所有连接性和安全性问题
对Hbase的深入了解,亲身体验Oozie,HCatalog和Hive,在Linux环境中强大的脚本编写能力
Hadoop测试
职责是确保设计的流程与组织所需的流程同步。他的主要职责是查找并修复Hadoop应用程序中的错误。主要职责包括故障排除和发现程序中的缺陷,并将其报告给Hadoop开发人员以采取纠正措施,报告Hadoop/ Pig/ Hive组件中的所有肯定和否定测试用例。
测试JUnit,MRUnit框架的知识,Java知识以测试MapReduce作业,掌握Hive, Pig的知识
