Hadoop总结

Hadoop:
Hadoop的组成:HDFS 用于分布式文件的存储 MapReduce用于数据的计算 Yarn 进行任务调度
伪分布式的安装:准备虚拟机,关闭防火墙。安装jdk1.6以上-----配置主机名----配置hosts----配置免密码互通----上传安装Hadoop----配置Hadoop(1.修改hadoop-env.sh文件 主要是修改java_home的路径2.修改core-site.xml文件,添加namenode配置,文件存储位置配置3.修改hdfs-site.xml文件配置自身在内的备份副本数量4.修改mapred-site.xml文件,配置mapreduce运行在yarn上5.修改yarn-site.xml文件6.修改slaves.hadoop本身是一个主从结构7.配置hadoop环境变量8.格式化namenode)-----启动hadoop, start-all.sh
HDFS:分布式文件的存储。为保证数据的可靠性和读取性,HDFS对数据进行切块后进行复制并存储在集群的多个节点上。HDFS中存在一个名字节点namenode和若干个数据节点datanode.
优点:支持超大文件,检测和快速应对硬件故障,流式数据访问,高容错性
缺点:不支持超强的事务,低延迟数据访问,大量的小文件的处理
Block: 数据块Block是HDFS中存储文件的最基本的存储单位
在HDFS中存储的文件都是超大数据文件,我们可以把这个超大规模的文件以一个标准分成几块,分别存储在不同的磁盘上,这个标准就是Block
好处:文件可以保存在不同的磁盘上
简化存储系统,这样不需要管理文件,而是管理文件块就可以了
有利于数据的复制,在HDFS系统中,一个数据节点一般会复制3份
NameNode: 存储元数据信息、元数据保存在内存中以及磁盘中、保存文件、block/datanode之间的映射关系
SecondaryNameNode不是NameNode的备份,而是协助NameNode进行元数据合并。
合并过程:
达到合并条件后,snn会将nn中的fsimage和edits通过网络传输拷贝过来,同时nn中会创建一个新的edits.new文件,新的读写请求会写入这个edits.new中,在snn中将拷贝过来的fsimage和edits文件合并为一个新的fsimage文件,最后snn将合并成的新的fsimage文件拷贝回nn中代替原有的fsimage,nn将edits.new改为edits
Datanode: 在hadoop中,数据是以block的形式存储在DataNode中的,DataNode节点会不断的向NameNode节点发送心跳报告。
初始化时,每个数据节点将当前写存储的数据块告知NamwNode节点,通过心跳机制保持联系,并接受nameNode节点的指令,创建、移除或者删除本地磁盘上的数据块
HDFS的读流程:
 使用HDFS提供的客户点开发库Client,向远程的NameNode发起RPC请求。
 NameNode会视情况返回文件的部分或者全部block列表,对于block,都会返回有该block拷贝的DataNode地址
 客户端开发库Client会选取离客户端最近的DataNode来读取block。如果客户端本身就是DataNode,就从本地直接读取数据
 读取完当前block数据后,关闭与当前DataNode的连接,并为读取下一个block找最佳的DataNode
 当读取完列表的block的数据后,文件还没有读完,会继续想NameNode获取下一批的block列表
 读取完一个block都会进行checksum验证,如果读取DataNode时出现错误,会通知NameNode,再从下一个DataNode继续读
 当文件最后一个块也读取完毕后,datanode会连接NameNode告知关闭文件。
HDFS的写流程:
 使用HDFS提供的客户端开发库Client,向远程的NameNode发起RPC请求。
 NameNodehi检测要创建的文件是否存在,创建者是否有权进行操作。成功会为文件创建一个记录,否则会让客户端抛出异常
 客户端将文件自己手动切块,然后将块放入packets中,然后利用packets将切好的文件块出入到dataNode中
 DataNode会将收到的packets转化为block进行存储。通过管道的形式写入,当全部写入后,会向客户端发送一个ack通知,客户端再向NameNode发送通知关闭连接。
 传输过程中,如果某个dataNode出现故障,通道会关闭,dataNode会移除,分配一个新的进行传输。
MapReduce:是一个分布式计算框架,由map和reduce组成。
Mapreduce原理:文件存储到HDFS,进行切片处理,每个文件块对应一个Map. Map通过键值对获取数据,键为数据的偏移量,值为读取的这一行的数据。Map根据自己写入的逻辑,对这些key,value进行处理,转换成新的key,value。通过洗牌对新的key,value进行分区管理,将相同的键所对应的值放到一块儿。Reduce自动去获取这些分区后的集合,根据自己写的逻辑进行处理,转换成新的key,value输出到HDFS中。
MR的序列化机制:map和reduce是通过RPC请求来处理对象的,Hadoop没有使用java的原生的序列化,它的底层是通过AVRO实现序列化的,只需要对象的类实现Writable接口
MR的内部执行流程:客户端提交一个MR的jar包JobClient,JobClient通过RPC和ResourceManger进程通信,返回一个存放jar包的地址,client将jar包写入到HDFS中开始提交任务。ResourceManger进行初始化操作,读取HDFS上要处理的文件,开始计算输入分片。每一个分片对应一个MapperTask。NodeManger通过心跳机制领取任务,下载需要的jar包,配置文件。Nodemanger启动一个java子进程用来执行具体的任务。将结果写入到HDFS中。
Map阶段:

  1. 输入分片(inputsplit),这个时候就是输入数据的时候,会通过内部计算对数据进行逻辑上的分片,默认情况下这里的分片与HDFS文件中的分块是一致的。每个分片也就对应着一个mapper任务。
  2. Mapper将切片的数据输入到map函数中进行处理。
  3. Buffer函数将结果输出首先放入buffer(缓冲区)中为后面的操作(也就是写入硬盘)做准备。这里着重介绍一下buffer。Buffer从逻辑上来说是一个环形的缓冲区默认大小为100M,当第一次输入的数据超过它容量的80%这个阈值的时候(80%是他的溢写比)就会自动写入硬盘。就在它写入硬盘的时候程序会继续往剩余的20%的空间写数据。所有这样可以动态的写入更多的数据。但是一旦整个缓冲区写满的话没写入程序将会挂起直到缓冲区的数据都写完了写入程序将再次开启向缓冲区中写数据。
  4. 溢写(spill),在达到缓冲区容量的阈值时,环形缓冲区的数据会写到硬盘上,这个过程叫做溢写。这是会伴随者溢写列的操作,分区,排序,合并的操作。每一个溢写操作对应生成一个文件,也就是一个mapperTask会对应着多次溢写也就会处理多个文件。
     分区(partition),默认的分区是hash分区这样会保证所有相同的key就会存储在一起。我们也可以基于各种意义进行分区,这样具有相同意义的key会存储在一起。同时指出,一个分区对应一个Reduce。
     排序(sort)按照一定的规则按照键排序,这样key相同的数据就会排在一起,patition内部会整体有序。必须实现Comparable接口实现comableTo方法。
     合并(Combiner),程序在后台开启了一个线程Combiner,t提前将key值相同的数据合并起来,减少往硬盘上写数据节省了空间。这些合并的数据会通过网络传输到Reduce相关的节点上,节省网络的开销。
  5. 归并(merge),将spill写入磁盘形成的小文件合并成一个大文件。
    Reduce阶段:
  6. 获取数据(fetch)reduce会主动向map阶段产生的数据中获取属于自己的数据,也就是每一reduce对应特定分区(patitiion)的数据。
  7. 归并(merge)将这些零散的数据再次合并,与前面的归并不同,这里的合并产生的不是一个大文件。
  8. 分组(group)分组和分区是不同的,分区的目的是根基key值决定Mapper输出的记录会被哪个reduce所获取,分组常常在分区内部进行。
  9. Reduce将这些数据输入reduce函数中进行计算处理,将最后结果存入到HDFS中。
    HDFS小文件的处理:
  10. Hadoop Archive 是一个高效的将小文件放入HDFS块中的文件存档工具,能够将多个小文件打包成一个HAR文件,减少nameNode内存使用的同时,仍然允许对文件进行透明的访问。
  11. 开启Hadoop的JVM重用机制,避免海量小文件带来的JVM频繁起停
  12. 将多个小文件合成一个文件,可以减少map的任务数量
    Yarn机制:Yarn是资源协调者,主要负责资源你的调度,与其他两个组件相互独立。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值