喻轩Blog - Hadoop
type: channel
link: https://blog.yuxuan.io/tags/hadoop
items: Hadoop 3.x新特性概述
items: Apache Hadoop核心源码剖析
items: Yarn资源调度
items: MapReduce编程框架
items: HDFS分布式文件系统
items: Apache Hadoop完全分布式集群搭建
items: Apache Hadoop的重要组成
items: Hadoop简介
items: 大数据简介

Hadoop 3.x新特性概述
type: item
date: 2020-09-21T00:44:01+08:00
description: Hadoop3.x中增强了很多特性，在Hadoop3.x中，不再允许使用jdk1.7，要求jdk1.8以上版本。这是因为Hadoop 2.0是基于JDK 1.7开发的，而JDK 1.7在2015年4月已停止更新，这直接迫使Hadoop社区基于JDK 1.8重新发布一个新的Hadoop版本，而这正是Hadoop3.x。Hadoop3.x以后将会调整方案架构，将Mapreduce 基于内存+io+磁盘，共同处理数据。Hadoop 3.x中引入了一些重要的功能和优化，包括HDFS 可擦除编码、多Namenode支持、MR Native Task优化、YARN基于cgroup的内存和磁盘IO隔离、YARN container resizing等。Hadoop3.x官方文档地址如下：http://hadoop.apache.org/docs/r3.0.1/Hadoop3.x新特性之Common改进Hadoop Common改进：精简Hadoop内核，包括剔除过期的API和实现，将默认组件实现替换成最高效的实现（比如将FileOutputCommitter缺省实现换为v2版本，废除hftp转由webhdfs替代，移除Hadoop子实现序列化库org.apache.hadoop.Recordslasspath isolation以防止不同版本jar包冲突，比如google Guava在混合使用Hadoop、HBase和Spark时，很容易产生冲突。（https://issues.apache.org/jira/browse/HADOOP-11656）Shell脚本重构。 Hadoop 3.0对Hadoop的管理脚本进行了重构，修复了大量bug，增加了新特性，支持动态命令等。使用方式上则和之前版本的一致。（https://issues.apache.org/jira/browse/HADOOP-9902）Hadoop3.x新特性之HDFS改进Hadoop3.x中最大改变的是HDFS，HDFS通过最近black块计算，根据最近计算原则，本地black块，加入到内存，先计算，通过IO，共享内存计算区域，最后快速形成计算结果。HDFS支持数据的擦除编码，这使得HDFS在不降低可靠性的前提下，节省一半存储空间。（https://issues.apache.org/jira/browse/HDFS-7285）多NameNode支持，即支持一个集群中，一个active、多个standby namenode部署方式。注：多ResourceManager特性在hadoop 2.0中已经支持。（https://issues.apache.org/jira/browse/HDFS-6440）关于这两个特性的官方文档地址：http://hadoop.apache.org/docs/r3.0.1/hadoop-project-dist/hadoophdfs/HDFSErasureCoding.html http://hadoop.apache.org/docs/r3.0.1/hadoop-project-dist/hadoophdfs/HDFSHighAvailabilityWithQJM.htmlHadoop3.x新特性之YARN改进基于cgroup的内存隔离和IO Disk隔离（https://issues.apache.org/jira/browse/YARN-2619）用curator实现RM leader选举（https://issues.apache.org/jira/browse/YARN-4438）containerresizing（https://issues.apache.org/jira/browse/YARN-1197）Timelineserver next generation （https://issues.apache.org/jira/browse/YARN-2928）官方文档地址：http://hadoop.apache.org/docs/r3.0.1/hadoop-yarn/hadoop-yarnsite/TimelineServiceV2.htmlHadoop3.x新特性之MapReduce改进Tasknative优化。为MapReduce增加了C/C++的map output collector实现（包括Spill，Sort和IFile等），通过作业级别参数调整就可切换到该实现上。对于shuffle密集型应用，其性能可提高约30%。（https://issues.apache.org/jira/browse/MAPREDUCE-2841）MapReduce内存参数自动推断。在Hadoop 2.0中，为MapReduce作业设置…

Apache Hadoop核心源码剖析
type: item
date: 2020-09-21T00:36:54+08:00
description: 源码阅读准备下载Apache Hadoop-2.9.2官方源码将源码导入idea中启动idea在提示界面选择导入点击Finish等待下载和解决依赖完成，源码导入成功！！NameNode 启动流程命令启动Hdfs集群start-dfs.sh该命令会启动Hdfs的NameNode以及DataNode，启动NameNode主要是通过org.apache.hadoop.hdfs.server.namenode.NameNode类。重点关注NameNode在启动过程中做了哪些工作（偏离主线的技术细节不深究）对于分析启动流程主要关注两部分代码：public class NameNode extends ReconfigurableBase implements NameNodeStatusMXBean { //该静态代码块主要是初始化一些HDFS的配置信息 static{ HdfsConfiguration.init(); //进入之后发现方法是空的，没有任何操作？其实不是观察HdfsConfiguration的静态代码块 } //HdfsConfiguration的类以及静态代码块 public class HdfsConfiguration extends Configuration { static { addDeprecatedKeys(); // adds the default resources Configuration.addDefaultResource("hdfs-default.xml"); Configuration.addDefaultResource("hdfs-site.xml"); } ... //main方法 public static void main(String argv[]) throws Exception{ //分析传入的参数是否为帮助参数，如果是帮助的话打印帮助信息，并退出。 if(DFSUtil.parseHelpArgument(argv,NameNode.USAGE,System.out,true)){ System.exit(0); } try{ //格式化输出启动信息，并且创建hook（打印节点关闭信息） StringUtils.startupShutdownMessage(NameNode.class,argv,LOG); //创建namenode NameNode namenode=createNameNode(argv,null); if（namenode!=null){ //加入集群 namenode.join(); } } catch(Throwable e){ //异常处理 LOG.error("Failed to start namenode.",e); terminate(1,e); } } ---------------------------------------------------------------------- //关注createNameNode public static NameNode createNameNode(String argv[], Configuration conf) throws IOException { LOG.info("createNameNode " + Arrays.asList(argv)); if (conf == null) conf = new HdfsConfiguration(); // Parse out some generic args into Configuration. GenericOptionsParser hParser = new GenericOptionsParser(conf, argv); argv = hParser.getRemainingArgs(); // Parse the rest, NN specific args. //解析启动的参数 StartupOption startOpt = parseArguments(argv); if (startOpt == null) { printUsage(System.err); return null; } setStartupOption(conf, startOpt); switch (startOpt) { .... default: { //正常启动进入该分支 //初始化metric系统 DefaultMetricsSystem.initialize("NameNode"); //返回新的NameNode return new NameNode(conf); } } } --------------…

Yarn资源调度
type: item
date: 2020-09-21T00:19:34+08:00
description: Yarn架构ResourceManager（rm）：处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度。NodeManager（nm）：单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令。ApplicationMaster（am）：数据切分、为应用程序申请资源，并分配给内部任务、任务监控与容错。Container：对任务运行环境的抽象，封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。Yarn任务提交（工作机制）作业提交过程之Yarn：作业提交第1步：Client调用job.waitForCompletion方法，向整个集群提交MapReduce作业。第2步：Client向RM申请一个作业id。第3步：RM给Client返回该job资源的提交路径和作业id。第4步：Client提交jar包、切片信息和配置文件到指定的资源提交路径。第5步：Client提交完资源后，向RM申请运行MrAppMaster。作业初始化第6步：当RM收到Client的请求后，将该job添加到容量调度器中。第7步：某一个空闲的NM领取到该Job。第8步：该NM创建Container，并产生MRAppmaster。第9步：下载Client提交的资源到本地。任务分配第10步：MrAppMaster向RM申请运行多个MapTask任务资源。第11步：RM将运行MapTask任务分配给另外两个NodeManager，另两个NodeManager分别领取任务并创建容器。任务运行第12步：MR向两个接收到任务的NodeManager发送程序启动脚本，这两个NodeManager分别启动MapTask，MapTask对数据分区排序。第13步：MrAppMaster等待所有MapTask运行完毕后，向RM申请容器，运行ReduceTask。第14步：ReduceTask向MapTask获取相应分区的数据。第15步：程序运行完毕后，MR会向RM申请注销自己。进度和状态更新YARN中的任务将其进度和状态返回给应用管理器，客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新，展示给用户。作业完成除了向应用管理器请求作业进度外，客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后，应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。Yarn调度策略Hadoop作业调度器主要有三种：FIFO、Capacity Scheduler和Fair Scheduler。Hadoop2.9.2默认的资源调度器是Capacity Scheduler。可以查看yarn-default.xmlFIFO（先进先出调度器）容量调度器（Capacity Scheduler 默认的调度器）Apache Hadoop默认使用的调度策略。Capacity 调度器允许多个组织共享整个集群，每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列，然后再为每个队列分配一定的集群资源，这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。除此之外，队列内部又可以垂直划分，这样一个组织内部的多个成员就可以共享这个队列资源了，在一个队列内部，资源的调度是采用的是先进先出(FIFO)策略。Fair Scheduler（公平调度器，CDH版本的hadoop默认使用的调度器）Fair调度器的设计目标是为所有的应用分配公平的资源（对公平的定义可以通过参数来设置）。公平调度在也可以在多个队列间工作。举个例子，假设有两个用户A和B，他们分别拥有一个队列。当A启动一个job而B没有任务时，A会获得全部集群资源；当B启动一个job后，A的job会继续运行，不过一会儿之后两个任务会各自获得一半的集群资源。如果此时B再启动第二个job并且其它job还在运行，则它将会和B的第一个job共享B这个队列的资源，也就是B的两个job会用于四分之一的集群资源，而A的job仍然用于集群一半的资源，结果就是资源最终在两个用户之间平等的共享。Yarn多租户资源隔离配置Yarn集群资源设置为A，B两个队列，A队列设置占用资源70%主要用来运行常规的定时任务，B队列设置占用资源30%主要运行临时任务，两个队列间可相互资源共享，假如A队列资源占满，B队列资源比较充裕，A队列可以使用B队列的资源，使总体做到资源利用最大化。选择使用Fai…

MapReduce编程框架
type: item
date: 2020-09-20T01:37:37+08:00
description: MapReduce思想MapReduce思想在生活中处处可见。我们或多或少都曾接触过这种思想。MapReduce的思想核心是分而治之，充分利用了并行处理的优势。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想，而不是自己原创。MapReduce任务过程是分为两个处理阶段：Map阶段：Map阶段的主要作用是“分”，即把复杂的任务分解为若干个“简单的任务”来并行处理。Map阶段的这些任务可以并行计算，彼此间没有依赖关系。Reduce阶段：Reduce阶段的主要作用是“合”，即对map阶段的结果进行全局汇总。再次理解MapReduce的思想官方WordCount案例源码解析经过查看分析官方WordCount案例源码我们发现一个统计单词数量的MapReduce程序的代码由三个部分组成：Mapper类Reducer类运行作业的代码（Driver）Mapper类继承了org.apache.hadoop.mapreduce.Mapper类重写了其中的map方法，Reducer类继承了org.apache.hadoop.mapreduce.Reducer类重写了其中的reduce方法。重写的Map方法作用：map方法其中的逻辑就是用户希望mr程序map阶段如何处理的逻辑；重写的Reduce方法作用：reduce方法其中的逻辑是用户希望mr程序reduce阶段如何处理的逻辑；Hadoop序列化为什么进行序列化？序列化主要是我们通过网络通信传输数据时或者把对象持久化到文件，需要把对象序列化成二进制的结构。观察源码时发现自定义Mapper类与自定义Reducer类都有泛型类型约束，比如自定义Mapper有四个形参类型，但是形参类型并不是常见的java基本类型。为什么Hadoop要选择建立自己的序列化格式而不使用java自带serializable？序列化在分布式程序中非常重要，在Hadoop中，集群中多个节点的进程间的通信是通过RPC（远程过程调用：Remote Procedure Call）实现；RPC将消息序列化成二进制流发送到远程节点，远程节点再将接收到的二进制数据反序列化为原始的消息，因此RPC往往追求如下特点：紧凑:数据更紧凑，能充分利用网络带宽资源快速:序列化和反序列化的性能开销更低Hadoop使用的是自己的序列化格式Writable,它比java的序列化serialization更紧凑速度更快。一个对象使用Serializable序列化后，会携带很多额外信息比如校验信息，Header，继承体系等。Java基本类型与Hadoop常用序列化类型Java基本类型Hadoop Writable类型booleanBooleanWritablebyteByteWritableintIntWritablefloatFloatWritablelongLongWritabledoubleDoubleWritableStringTextmapMapWritablearrayArrayWritableMapReduce编程规范及示例编写Mapper类用户自定义一个Mapper类继承Hadoop的Mapper类Mapper的输入数据是KV对的形式（类型可以自定义）Map阶段的业务逻辑定义在map()方法中Mapper的输出数据是KV对的形式（类型可以自定义）注意：map()方法是对输入的一个KV对调用一次！！Reducer类用户自定义Reducer类要继承Hadoop的Reducer类Reducer的输入数据类型对应Mapper的输出数据类型（KV对）Reducer的业务逻辑写在reduce()方法中Reduce()方法是对相同K的一组KV对调用执行一次Driver阶段创建提交YARN集群运行的Job对象，其中封装了MapReduce程序运行所需要的相关参数入输入数据路径，输出数据路径等，也相当于是一个YARN集群的客户端，主要作用就是提交我们MapReduce程序运行。WordCount代码实现需求在给定的文本文件中统计输出每一个单词出现的总次数输入数据：wc.txt;输出：apache 2clickhouse 2hadoop 1mapreduce 1spark 2xiaoming 1具体步骤按照MapReduce编程规范，分别编写Mapper，Reducer，Driver。新建maven工程导入hadoop依赖<dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>or…

HDFS分布式文件系统
type: item
date: 2020-09-16T15:23:24+08:00
description: HDFS简介HDFS（全称：Hadoop Distribute File System，Hadoop 分布式文件系统）是 Hadoop 核心组成，是分布式存储服务。分布式文件系统横跨多台计算机，在大数据时代有着广泛的应用前景，它们为存储和处理超大规模数据提供所需的扩展能力。HDFS是分布式文件系统中的一种。HDFS的重要概念HDFS 通过统一的命名空间目录树来定位文件； 另外，它是分布式的，由很多服务器联合起来实现其功能，集群中的服务器有各自的角色（分布式本质是拆分，各司其职）；典型的 Master/Slave 架构HDFS 的架构是典型的 Master/Slave 结构。HDFS集群往往是一个NameNode（HA架构会有两个NameNode,联邦机制）+多个DataNode组成；NameNode是集群的主节点，DataNode是集群的从节点。分块存储（block机制）HDFS 中的文件在物理上是分块存储（block）的，块的大小可以通过配置参数来规定；Hadoop2.x版本中默认的block大小是128M；命名空间（NameSpace）HDFS 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录，然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似：用户可以创建、删除、移动或重命名文件。Namenode 负责维护文件系统的名字空间，任何对文件系统名字空间或属性的修改都将被 Namenode 记录下来。HDFS提供给客户单一个抽象目录树，访问形式：hdfs://namenode的hostname:port/test/inputhdfs://linux121:9000/test/inputNameNode元数据管理我们把目录结构及文件分块位置信息叫做元数据。NameNode的元数据记录每一个文件所对应的block信息（block的id,以及所在的DataNode节点的信息）DataNode数据存储文件的各个 block 的具体存储管理由 DataNode 节点承担。一个block会有多个DataNode来存储，DataNode会定时向NameNode来汇报自己持有的block信息。副本机制为了容错，文件的所有 block 都会有副本。每个文件的 block 大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定，也可以在之后改变。副本数量默认是3个。一次写入，多次读出HDFS 是设计成适应一次写入，多次读出的场景，且不支持文件的随机修改。 （支持追加写入，不只支持随机更新）正因为如此，HDFS 适合用来做大数据分析的底层存储服务，并不适合用来做网盘等应用（修改不方便，延迟大，网络开销大，成本太高）HDFS架构NameNode(nn):Hdfs集群的管理者，Master维护管理Hdfs的名称空间（NameSpace）维护副本策略记录文件块（Block）的映射信息负责处理客户端读写请求DataNode:NameNode下达命令，DataNode执行实际操作，Slave节点。保存实际的数据块负责数据块的读写Client:客户端上传文件到HDFS的时候，Client负责将文件切分成Block,然后进行上传请求NameNode交互，获取文件的位置信息读取或写入文件，与DataNode交互Client可以使用一些命令来管理HDFS或者访问HDFSHDFS客户端操作Shell 命令行操作HDFS基本语法bin/hadoop fs 具体命令 OR bin/hdfs dfs 具体命令命令大全hdfs dfsHDFS命令演示1）启动Hadoop集群（方便后续的测试）start-dfs.sh start-yarn.sh2）-help：输出这个命令参数hadoop fs -help rm3）-ls: 显示目录信息hadoop fs -ls /4）-mkdir：在HDFS上创建目录hadoop fs -mkdir -p /test/bigdata5）-moveFromLocal：从本地剪切粘贴到HDFStouch hadoop.txt hadoop fs -moveFromLocal ./hadoop.txt /test/bigdata6）-appendToFile：追加一个文件到已经存在的文件末尾touch hdfs.txt vi hdfs.txt输入namenode datanode block replicationhadoop fs -appendToFile hdfs.txt /test/bigdata/hadoop.txt7）-cat：显示文件内容hadoop fs -cat /test/bigdata/hadoop.txt8）-chgrp 、-chmod、-ch…

Apache Hadoop完全分布式集群搭建
type: item
date: 2020-09-14T21:59:07+08:00
description: 软件和操作系统版本Hadoop框架是采用Java语言编写，需要java环境（jvm）JDK版本：JDK8版本集群：知识点学习：统一使用vmware虚拟机虚拟三台linux节点，linux操作系统：Centos7项目阶段：统一使用云服务器，5台云服务器节点Hadoop搭建方式单机模式：单节点模式，非集群，生产不会使用这种方式单机伪分布式模式：单节点，多线程模拟集群的效果，生产不会使用这种方式完全分布式模式：多台节点，真正的分布式Hadoop集群的搭建（生产环境建议使用这种方式）虚拟机环境准备三台虚拟机（静态IP，关闭防火墙，修改主机名，配置免密登录，集群时间同步）在/opt目录下创建文件夹创建软件安装包存放目录和软件安装目录mkdir -p /opt/test/software mkdir -p /opt/test/serversHadoop下载地址：https://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/Hadoop官网地址：http://hadoop.apache.org/上传hadoop压缩包到/opt/test/software集群规划框架linux121linux122linux123HDFSNameNode、DataNodeDataNodeSecondaryNameNode、DataNodeYARNNodeManagerNodeManagerNodeManager、ResourceManager安装Hadoop登录linux121节点；进入/opt/test/software，解压安装文件到/opt/test/serverstar -zxvf hadoop-2.9.2.tar.gz -C /opt/test/servers查看是否解压成功ll /opt/test/servers/hadoop-2.9.2添加Hadoop到环境变量vim /etc/profile##HADOOP_HOME export HADOOP_HOME=/opt/test/servers/hadoop-2.9.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin使环境变量生效source /etc/profile验证hadoophadoop version校验结果：hadoop目录drwxr-xr-x. 2 root root 194 Nov 13 2018 bindrwxr-xr-x. 3 root root 20 Nov 13 2018 etcdrwxr-xr-x. 2 root root 106 Nov 13 2018 includedrwxr-xr-x. 3 root root 20 Nov 13 2018 libdrwxr-xr-x. 2 root root 239 Nov 13 2018 libexec-rw-r--r--. 1 root root 106210 Nov 13 2018 LICENSE.txt-rw-r--r--. 1 root root 15917 Nov 13 2018 NOTICE.txt-rw-r--r--. 1 root root 1366 Nov 13 2018 README.txtdrwxr-xr-x. 3 root root 4096 Nov 13 2018 sbindrwxr-xr-x. 4 root root 31 Nov 13 2018 share1）bin目录:对Hadoop进行操作的相关命令，如hadoop，hdfs等2）etc目录：Hadoop的配置文件目录，如hdfs-site.xml，core-site.xml等3）lib目录：Hadoop本地库（解压缩的依赖）4）sbin目录：存放的是Hadoop集群启动停止相关脚本，命令5）share目录：Hadoop的一些jar，官方案例jar，文档等集群配置Hadoop集群配置 = HDFS集群配置 + MapReduce集群配置 + Yarn集群配置HDFS集群配置1）将JDK路径明确配置给HDFS（修改hadoop-env.sh）2）指定NameNode节点以及数据存储目录（修改core-site.xml）3）指定SecondaryNameNode节点（修改hdfs-site.xml）4）指定DataNode从节点（修改etc/hadoop/slaves文件，每个节点配置信息占一行）MapReduce集群配置1）将JDK路径明确配置给MapReduce（修改mapred-env.sh）2）指定MapReduce计算框架运行Yarn资源调度框架（修改mapred-site.xml）Yarn集群…

Apache Hadoop的重要组成
type: item
date: 2020-09-14T21:15:06+08:00
description: Hadoop=HDFS(分布式文件系统)+MapReduce(分布式计算框架)+Yarn(资源协调框架)+Common模块Hadoop HDFS：（Hadoop Distribute File System ）一个高可靠、高吞吐量的分布式文件系统比如：100T数据存储该怎么设计？Google发表的论文翻译成中文即“分而治之”分：拆分→数据切割，100T数据拆分为10G一个数据块由一个电脑节点存储这个数据块。数据切割、制作副本、分散储存图中涉及到几个角色NameNode（nn）：存储文件的元数据，比如文件名、文件目录结构、文件属性（生成时间、副本数、文件权限），以及每个文件的块列表和块所在的DataNode等。SecondaryNameNode（2nn）：辅助NameNode更好的工作，用来监控HDFS状态的辅助后台程序，每隔一段时间获取HDFS元数据快照。DataNode（dn）：在本地文件系统存储文件块数据，以及块数据的校验。注意：NN，2NN,DN这些既是角色名称，进程名称，代指电脑节点名称！！Hadoop MapReduce：一个分布式的离线并行计算框架拆解任务、分散处理、汇整结果MapReduce计算 = Map阶段 + Reduce阶段Map阶段就是“分”的阶段，并行处理输入数据；Reduce阶段就是“合”的阶段，对Map阶段结果进行汇总；Hadoop YARN：作业调度与集群资源管理的框架计算资源协调Yarn中有如下几个主要角色，同样，既是角色名、也是进程名，也指代所在计算机节点名称。ResourceManager(rm)：处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度；NodeManager(nm)：单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令；ApplicationMaster(am)：数据切分、为应用程序申请资源，并分配给内部任务、任务监控与容错。Container：对任务运行环境的抽象，封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。ResourceManager是老大，NodeManager是小弟，ApplicationMaster是计算任务专员。Hadoop Common：支持其他模块的工具模块（Configuration、RPC、序列化机制、日志操作）

Hadoop简介
type: item
date: 2020-09-14T21:05:18+08:00
description: 什么是HadoopHadoop 是一个适合大数据的分布式存储和计算平台。狭义的Hadoop:指的是一个框架，Hadoop是由三部分组成：HDFS：分布式文件系统→存储；MapReduce:分布式离线计算框架→计算；Yarn:资源调度框架广义的Hadoop:广义Hadoop是不仅仅包含Hadoop框架，除了Hadoop框架之外还有一些辅助框架。Flume：日志数据采集；Sqoop：关系型数据库数据的采集，数据的导出；Hive:深度依赖Hadoop框架完成计算（sql）；Hbase:大数据领域的数据库（mysql）广义Hadoop指的是一个生态圈。Hadoop生态圈技术栈Hadoop（HDFS + MapReduce + Yarn）Hive 数据仓库工具HBase 海量列式非关系型数据库Flume 数据采集工具Sqoop ETL工具Kafka 高吞吐消息中间件……Hadoop的起源Hadoop 的发展历程可以用如下过程概述：Nutch→Google论文（GFS、MapReduce）→Hadoop产生→成为Apache顶级项目→Cloudera公司成立（Hadoop快速发展）Hadoop最早起源于Nutch，Nutch 的创始人是Doug CuttingNutch 是一个开源 Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫，但随着抓取网页数量的增加，遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案。GFS，可用于处理海量网页的存储；MapReduce，可用于处理海量网页的索引计算问题。Google的三篇论文（三驾马车）GFS：Google的分布式文件系统（Google File System）MapReduce：Google的分布式计算框架BigTable：大型分布式数据库发展演变关系：GFS→HDFSGoogle MapReduce→Hadoop MapReduceBigTable→HBase随后，Google公布了部分GFS和MapReduce思想的细节，Doug Cutting等人用2年的业余时间实现了DFS和MapReduce机制，使Nutch性能飙升。2005年，Hadoop 作为Lucene的子项目Nutch的一部分引入Apache2006年，Hadoop从Nutch剥离出来独立2008年，Hadoop成为Apache的顶级项目Hadoop这个名字来源于Hadoop之父Doug Cutting儿子的毛绒玩具象Hadoop的特点Hadoop的发行版本目前Hadoop发行版非常多，有Cloudera发行版（CDH）、Hortonworks发行版、华为发行版、Intel发行版等，所有这些发行版均是基于Apache Hadoop衍生出来的，之所以有这么多的版本，是由Apache Hadoop的开源协议决定的（任何人可以对其进行修改，并作为开源或商业产品发布/销售）。企业中主要用到的三个版本分别是：Apache Hadoop版本（最原始的，所有发行版均基于这个版本进行改进）、Cloudera版本（Cloudera’s Distribution Including Apache Hadoop，简称“CDH”）、Hortonworks版本（Hortonworks Data Platform，简称“HDP”）。Apache Hadoop 原始版本官网地址：http://hadoop.apache.org/优点：拥有全世界的开源贡献，代码更新版本比较快，社区活跃度高，学习非常方便缺点：版本的升级，版本的维护，以及版本之间的兼容性Apache所有软件的下载地址（包括各种历史版本）：http://archive.apache.org/dist/软件收费版本ClouderaManager CDH版本--生产环境使用官网地址：https://www.cloudera.com/Cloudera主要是美国一家大数据公司在Apache开源Hadoop的版本上，通过自己公司内部的各种补丁，实现版本之间的稳定运行，大数据生态圈的各个版本的软件都提供了对应的版本，解决了版本的升级困难，版本兼容性等各种问题，生产环境强烈推荐使用免费开源版本HortonWorks HDP版本--生产环境使用官网地址：https://hortonworks.com/hortonworks主要是雅虎主导Hadoop开发的副总裁，带领二十几个核心成员成立Hortonworks，核心产品软件HDP（ambari），HDF免费开源，并且提供一整套的web管理界面，供我们可以通过web界面管理我们的集群状态，web管理界面软件HDF网址（http://amba…

大数据简介
type: item
date: 2020-09-14T20:55:54+08:00
description: 大数据的定义大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合，是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。大数据的特点大数据的特点可以用 IBM 曾经提出的 “5V” 来描述，如下：采集、存储和计算的数据量都非常大。计算机存储单位一般用B，KB，MB，GB，TB，PB，EB，ZB，YB，BB、NB、DB来表示，它们之间的关系是：1GB = 1024 MB1TB = 1024 GB1PB = 1024 TB1EB = 1024 PB1ZB = 1024 EB1YB = 1024 ZB1BB = 1024 YB1NB = 1024 BB1DB = 1024 NB以PB为例，PB级数据量有多大？是怎样的一个概念？假如手机播放MP3的速度为平均每分钟1MB，而1首歌曲的平均时长为4分钟，那么1PB存量的歌曲可以连续播放2000年。1PB 也相当于50%的全美学术研究图书馆藏书咨询内容。（1）1986年，全球只有0.02EB也就是约21000TB的数据量（2）2007年，全球就是280EB也就是约300000000TB的数据量，翻了14000倍（3）近些年，由于移动互联网及物联网的出现，各种终端设备的接入，各种业务形式的普及，平均每40个月，全球的数据量就会翻倍！2012年，每天会产生2.5EB的数据量（4）基于IDC的报告预测，从2013年到2020年，全球数据量会从4.4ZB猛增到44ZB！而到了2025年，全球会有163ZB的数据量！全球的数据量已经大到爆了！而传统的关系型数据库根本处理不了如此海量的数据！高速在大数据时代，数据的创建、存储、分析都要求被高速处理，比如电商网站的个性化推荐尽可能要求实时完成推荐，这也是大数据区别于传统数据挖掘的显著特征。多样数据形式和来源多样化。包括结构化、半结构化和非结构化数据，具体表现为网络日志、音频、视频、图片、地理位置信息等等，多类型的数据对数据的处理能力提出了更高的要求。真实确保数据的真实性，才能保证数据分析的正确性低价值数据价值密度相对较低，或者说是浪里淘沙却又弥足珍贵。互联网发展催生了大量数据，信息海量，但价值密度较低，如何结合业务逻辑并通过强大的机器算法来挖掘数据价值，是大数据时代最需要解决的问题，也是一个有难度的课题。大数据的应用场景随着大数据的发展，大数据技术已经广泛应用在众多行业，比如仓储物流、电商零售、汽车、电信、生物医学、人工智能、智慧城市等等领域，包括在疫情防控战中，大数据技术也发挥了重要的作用。仓储物流大数据技术驱动了仓储物流领域的智能化发展，以苏宁为例，苏宁物流可在全国的各级仓库间实现智能分仓、就近备货和预测式调拨，实现“客户需要的商品就在离客户最近的配送中心”。电商零售零售业“啤酒+纸尿裤”案例个性推荐“双11购物节”实时销售额大屏汽车利用了大数据和物联网技术的无人驾驶汽车，在不远的未来将走入我们的日常生活电信移动联通根据用户年龄、职业、消费情况，分析统计哪种套餐适合哪类人群，对市场人群精准定制。生物医学大数据可以帮助我们实现流行病预测、智慧医疗、健康管理，同时还可以帮助我们解读DNA，了解更多的生命奥秘。比如影像大数据支撑下的早期肺癌支撑平台，基于大量病例数据样本，制定早期肺癌高危人群预警指标。人工智能智慧城市大数据有效支撑智慧城市发展，成为城市的”数据大脑“。比如，在智慧城市建设上，杭州始终走在全国前列。如覆盖面广的移动支付、新颖的在线医疗模式、创新的物流运输模式，都受到较大关注。2016年，杭州被《中国新型智慧城市》白皮书评为“中国最智慧的城市”。大数据的价值，远远不止于此，大数据对各行各业的渗透，大大推动了社会生产和生活，未来必将产生重大而深远的影响。大数据的发展趋势及职业路线大数据发展趋势1）2015年党的十八届五中全会提出“实施国家大数据战略”，国务院印发《促进大数据发展行动纲要》，大数据技术和应用处于创新突破期，国内市场需求处于爆发期，我国大数据产业面临重要的发展机遇。2）2017年十九大报告明确 "推动互联网、大数据、人工智能和实体经济深度融合"。3）2020年全国政协十三届三次会议新闻发布会上，更进一步强调：大数据、人工智能、5G是引领未来发展的战略性技术。显然，发展大数据是我国的战略性决策，前景自然不言而喻。另外4）2017年北京大学、中国人民大学、北京邮电大学等25所高校成功申请开设大数据课程5）大数据属于高新技术，大牛少，升职竞争小6）2020年5月6日，人力资源和社会保障部发布《新职业—大数据工程技术人员就业景气现状分析报告》，报告显示：预计2020年中国大数据行业人才需求规模将达210万，2025年前大数据人才需求仍将保持30%~40%的增速，需求总量在200…