hadoop---001

本文深入解析Hadoop生态系统,涵盖HDFS分布式文件系统的工作原理,MapReduce编程模型的细节,以及YARN资源管理器的运作机制。同时,介绍了HBase分布式数据库的特性,以及Spark作为新一代大数据处理框架的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hadoop:是一个生态圈,核心是分布式存储和计算

1、datanode:
    一个文件被划分成多个block进行存储,datanode是用来存储这些block的,datanode启动时候会把他存储的blocklist发送给namenode。
    datanode会定期给namenode发送心跳信号,namenode长时间没收到某个datanode的心跳,就认为他宕掉了,他上面的数据就会被转
        移到其他datanode。

2、namenode:
    是用来存储hdfs元数据信息的,比如用来存储一个文件分成了多少个block,这些block分别存储在哪个datanode节点上面。
         hadoop2.x中namenode采用ha方式进行部署,一个是active的一个是standby的,active的挡掉后,standby的自动切换为active的。

3、hdfs写文件流程:
         client向namenode发起写文件的请求,namenode返回哪些datanode有资源存储。
         client自己把file切分成多个block,先把第一个block上传到返回的一个datanode中,这个datanode写完这个block后,流水线方式写给备份的datanode。
         这些datanode写完后通知namenode更新相应的元数据信息。
         namenode通知client第一个block写完了,开始写后面的block,方式类似直到写完所有的block。

4、hdfs读取文件流程:
         client向namenode发起读文件请求,namenode把这个文件对应block所在的datanode列表返回给client。
         client就可以分块的从不同datanode上面读取文件,都读取完后文件就下载完成了。
         一个block会有多个备份的block,如果配置了机架感知策略,client就可以选择从近的datanode上面读取block。

5、mapreduce:是一种编程模型
         输入的大文件split后得到多个分片
    每个分片交给一个map方法处理
    汇总各个map的计算结果,并且得到最终的结果,这就是reduce方法
    
    spark有很丰富的算子(即方法),mapreduce只有map和reduce两个方法
    分为split、map、shuffle、reduce4个阶段,其中map和reduce2个阶段需要我们自己写代码实现
    hadoop1.x默认block大小为64M
    hadoop2.x默认block大小为128M
    一个map处理一个split的数据,默认一个split对应一个block,这个可以设置,即可以设置一个map处理几个block的数据

    一个datanode中map的个数最好不要超过100个
    一个小文件也会占用一个block的
    为了减少网络传输,有些是可以在map端增加combiner过程的,即本地的reducer,先进行部分合并后减少了数据量在网络传输给reducer
    
    应该mapreduce的作业中,partition的数量、reduce的数量、reduce端输出文件的数量3个是相同的
    在应该reducer中,所有数据都会按照key值进行升序排序,所以如果reduce端的输出文件中如果包括key,那么这个文件一定是有顺序的
    应该mapreduce作业中,如果只有应该reducer那么在reduce阶段那么其他节点闲置,资源利用率不高,可以把reducer数量设置大些,最大为72个

    partition是在reduce之前发生的,相同的key值一定会进入同一个partitoner,reduce过程会按照key进行排序
    Mapper类和reducer类上面的泛型指定的是输入key的类型、输入value的类型、输出key的类型、输出value的类型

6、hadoop的分布式缓存:
    多个mapper可能要共享一些信息,如果数据量不大,可以把它从hdfs中加载到内存中,这就是hadoop的分布式缓存机制
    在job执行之前就把数据加载到内存中,每个从节点各自缓存一份相同的数据,如果共享数据太大,可以将共享数据分批缓存,重复执行作业

    job.addCacheArchive()可以把一个hdfs文件做为缓存文件加载到分布式缓存中,这样在mapper的setup(初始化)方法中就可以使用FileReader读取,并使用这个缓存文件了
        比如把缓存文件的内容读取到mapper的成员变量list中,这样map方法中就可以使用这个list中的数据了
        每个map方法中看到的是一个相同的list,都是来源于job添加进去的缓存文件

        框架负责把任务add进来的hdfs文件加载到hdfs的分布式缓存中,并且给这个文件起一个别名,然后我们在mapper中就可以

        通过FileReader读取那个别名使用这个分布式缓存文件了。


7、yarn中的概念:
    yarn:是hadoop2.x中的资源管理器,支持多种计算框架。
         ResourceManager:是master,负责分配调度资源、启动并监控ApplicationMaster、监控NodeManager
         ApplicationMaster:为作业申请资源、切分数据、监控作业的执行及容错
    NodeManager:管理单个节点的资源,处理来自ResourceManager和ApplicationMaster的命令。

8、hbase:分布式数据库
    hadoop适合存储大文件,如果是大量小文件可以考虑使用hbase来存储,设计的表结构如下:
    rowkey是filename的hash值,列族cf,包括size(大小)、type(txt等)、author(作者)、content(内容)这下列

9、spark:是基于内存的分布式计算框架


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值