大数据开发基础知识整理1

  1. Datanode负责 HDFS 数据存储。
  2. HDfS 中的 block 默认保存3份。
  3. Jobtracker通常与 NameNode 在一个节点启动。
  4. HDFS 默认 Block Size为64MB或128MB
  5. 集群的最主要瓶颈是磁盘 IO
  6. SecondaryNameNode 的作用是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间
  7. Puppet 、Pdsh 、Zookeeper可以作为集群的管理
  8. Client 端上传文件时将文件切分为 Block,依次上传
    Client 向 NameNode 发起文件写入的请求。NameNode 根据文件大小和文件块配置情况,返回给 Client 它所管理部分 DataNode 的信息。Client 将文件划分为多个 Block,根据 DataNode 的地址信息,按顺序写入到每一个DataNode 块中。具体查看HDFS 体系结构简介及优缺点。
  9. Hadoop 运行的模式:单机版 、伪分布式 、分布式
  10. Hadoop的核心配置是什么?
    Hadoop拥有4个配置文件:1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml;4,yarn-site.xml。这些文件都保存在conf/子目录下。
  11. “jps”命令的用处?
    这个命令可以检查Namenode、Datanode、Task Tracker、 Job Tracker是否正常工作。
  12. mapreduce的原理?
    MapReduce采用”分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个Hadoop集群中只有一台JobTracker。在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。需要注意的是,用MapReduce来处理的数据集(或任务)必须具备这样的特点:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。

  13. HDFS存储的机制
    hdfs写流程 :

    • client链接namenode存数据
    • namenode记录一条数据位置信息(元数据),告诉client存哪。
    • client用hdfs的api将数据块(默认是64M)存储到datanode上。
    • datanode将数据水平备份。备份完反馈client。client通知namenode存储块完毕。
    • namenode将元数据同步到内存中。 另一块循环上面的过程。

    hdfs读流程 :

    • client链接namenode,查看元数据,找到数据的存储位置。
    • client通过hdfs的api并发读取数据。
    • 关闭连接。
  14. mapreduce是怎么来运行的 ?
    MapReduce运行的时候,会通过Mapper运行的任务读取HDFS中的数据文件,然后调用自己的方法,处理数据,最后输出。Reducer任务会接收Mapper任务输出的数据,作为自己的输入数据,调用自己的方法,最后输出到HDFS的文件中。

Mapper任务的执行过程详解:

  每个Mapper任务是一个Java进程,它会读取HDFS中的文件,解析成很多的键值对,经过我们覆盖的map方法处理后,转换为很多的键值对再输出。整个Mapper任务的处理过程又可以分为以下六个阶段:

  1. 把输入文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的。默认情况下,输入片(InputSplit)的大小与数据块(Block)的大小是相同的。如果数据块(Block)的大小是默认值128MB,输入文件有两个,一个是32MB,一个是172MB。那么小的文件是一个输入片,大文件会分为两个数据块,那么是两个输入片。一共产生三个输入片。每一个输入片由一个Mapper进程处理。这里的三个输入片,会有三个Mapper进程处理。
  2. 对输入片中的记录按照一定的规则解析成键值对。有个默认规则是把每一行文本内容解析成键值对。“键”是每一行的起始位置(单位是字节),“值”是本行的文本内容。
  3. 调用Mapper类中的map方法。第二阶段中解析出来的每一个键值对,调用一次map方法。如果有1000个键值对,就会调用1000次map方法。每一次调用map方法会输出零个或者多个键值对。
  4. 按照一定的规则对第三阶段输出的键值对进行分区(hash)。默认是只有一个区。分区的数量就是Reducer任务运行的数量。默认只有一个Reducer任务。
  5. 对每个分区中的键值对进行排序。首先,按照键进行排序,对于键相同的键值对,按照值进行排序。比如三个键值对<2,2>、<1,3>、<2,1>,键和值分别是整数。那么排序后的结果是<1,3>、<2,1>、<2,2>。
    如果有第六阶段,那么进入第六阶段;如果没有,直接输出到本地的Linux文件中。
  6. 对数据进行归约处理,也就是reduce处理。键相等的键值对会调用一次reduce方法。经过这一阶段,数据量会减少。归约后的数据输出到本地的linxu文件中。本阶段默认是没有的,需要用户自己增加这一阶段的代码。

Reducer任务的执行过程详解:

  每个Reducer任务是一个java进程。Reducer任务接收Mapper任务的输出,归约处理后写入到HDFS中,可以分为三个阶段:

  1. Reducer任务主动从Mapper任务复制其输出的键值对。
  2. 把复制到Reducer的数据全部进行合并,即把分散的数据合并成一个大的数据。再对合并后的数据排序。
  3. 对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法,每次调用会产生零个或者多个键值对。
  4. 最后把这些输出的键值对写入到HDFS文件中。

简单概括安装hadoop的步骤:

  1. 创建 hadoop 帐户。
  2. setup.改 IP。
  3. 安装 java,并修改/etc/profile 文件,配置 java 的环境变量。
  4. 修改 Host 文件域名。
  5. 安装 SSH,配置无密钥通信。
  6. 解压 hadoop。
  7. 配置 conf 文件下 hadoop-env.sh、core-site.sh、mapre-site.sh、hdfs-site.sh。
  8. 配置 hadoop 的环境变量。
  9. Hadoop namenode -format
  10. Start-all.sh

HDFS由 namenode、secondraynamenode、datanode 组成。

  • Namenode: 负责管理元数据的信息
  • SecondNameNode: 作为namenode的冷备份,对于namenode的机器当掉后能快速切换到制定的Secondname上
  • DateNode:主要用来储存数据。

MapReduce 中排序发生在哪几个阶段?这些排序是否可以避免?为什么?

   一个 MapReduce 作业由 Map 阶段和 Reduce 阶段两部分组成,这两阶段都会对数据排序。在 Map阶段,Map Task 会在本地磁盘输出一个按照 key 排序(采用的是快排序)的文件(中间可能产生多个文件,但最终会合并成一个);在 Reduce 阶段,每个 Reduce Task 会对收到的数据排序,这样,数据便按照 Key 分成了若干组,之后以组为单位交给 reduce()处理。很多人的误解在 Map 阶段,如果不使用 Combiner便不会排序,这是错误的,不管你用不用 Combiner,Map Task 均会对产生的数据排序(如果没有 Reduce Task,则不会排序,实际上 Map 阶段的排序就是为了减轻 Reduce端排序负载)。由于这些排序是 MapReduce 自动完成的,用户无法控制,因此,在hadoop 1.x 中无法避免,也不可以关闭,但 hadoop2.x 是可以关闭的。

hadoop的优化:优化的思路可以从配置文件和系统以及代码的设计思路来优化

  1. 配置文件的优化:调节适当的参数,在调参数时要进行测试

  2. 代码的优化:combiner的个数尽量与reduce的个数相同,数据的类型保持一致,可以减少拆包与封包的进度

  3. 系统的优化:可以设置linux系统打开最大的文件数预计网络的带宽MTU的配置

  4. 为 job 添加一个 Combiner,可以大大的减少shuffer阶段的maoTask拷贝过来给远程的 reduce task的数据量,一般而言combiner与reduce相同。

  5. 在开发中尽量使用stringBuffer而不是string,string的模式是read-only的,如果对它进行修改,会产生临时的对象,二stringBuffer是可修改的,不会产生临时对象。

怎样决定MapReduce的中的map以及reduce的数量

在MapReduce中Map是有块的大小来决定的,Reduce的数量可以按照用户的业务来配置。

MapReduce 中 shuffle、combiner、partition 比较详解:

Shuffle:

  shuffle意为洗牌。它代表reduce task获取map task的输出的过程。shuffle过程有一部分是在Map端,有一部分是在Reduce端。Hadoop集群在运行作业的大部分的情况下,map task与reduce task的执行是分布在不同的节点上的,因此很多情况下,reduce执行时需要跨节点去copy其他节点上的map task输出结果,这样造成了集群内部的网络资源消耗很严重,而且在节点的内部,磁盘I/O对性能的影响是非常严重的。如果集群中运行的job有很多,那么task的执行对于集群内部网络的资源消费非常大。
  因此,需要有一个shuffle的过程:

  1. 将Map的输出数据完整地传输到Reduce端。
  2. 在传输数据时,尽可能得减少不必要的带宽消耗。
  3. 降低磁盘I/O的影响。

Combine:

  combine分为map端和reduce端,作用是把同一个key的键值对合并在一起,可以自定义。combine函数把一个map函数产生的< key,value >对(多个key,value)合并成一个新的< key2,value2 >输入到reduce函数中。这个value2亦可称之为values,因为有多个。这个合并的目的是为了减少网络传输。

Patition:

   partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。这里可以理解为归类。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值