Hadoop技术栈(二)深入HDFS/YARN

HDFS、YARN、MapReduce概述及三者之间的关系(图解) HDFS(Hadoop Distributed File System) 是一种分布式文件系统,用于处理在商业硬件上运行的大型数据集。它用于将单个 Apache Hadoop 集群扩展到数百 (甚至数千)个节点。HDFS 是的主要组件之一,其他组件包括MapReduce和 YARN。HDFS的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。MapReduce是一种分布式计算框架。 阅读详情

HDFS读写解析

读流程

  • 客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
  • 挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
  • DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
  • 客户端以Packet 为单位接收,先在本地缓存,然后写入目标文件。

写流程

  • 客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件 是否已存在,父目录是否存在。
  • NameNode返回是否可以上传。
  • 客户端请求第一个 Block上传到哪几个DataNode服务器上。
  • NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。
  • 客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后 dn2调用dn3,将这个通信管道建立完成。
  • dn1、dn2、dn3逐级应答客户端。
  • 客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个确认队列等待确认。
  • 当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

HDFS元数据管理机制

第一阶段:NameNode启动
  • 第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加
  • 载编辑日志和镜像文件到内存。
  • 客户端对元数据进行增删改的请求。
  • NameNode记录操作日志,更新滚动日志。
  • NameNode在内存中对数据进行增删改。
第二阶段:Secondary NameNode工作
  • Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否执行检查点操作结果。
  • Secondary NameNode请求执行CheckPoint。
  • NameNode滚动正在写的Edits日志。
  • 将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
  • Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
  • 生成新的镜像文件fsimage.chkpoint。
  • 拷贝fsimage.chkpoint到NameNode。
  • NameNode将fsimage.chkpoint重新命名成fsimage。

checkpoint周期

vim hdfs-default.xml

<!-- 定时一小时 -->
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
</property>
<!-- 一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次 -->
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>操作动作次数</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value>
<description> 1分钟检查一次操作次数</description>
</property>

Hadoop的限额与归档以及集群安全模式

HDFS文件的限额配置

允许我们以文件大小或者文件个数来限制我们在某个目录下上传的文件数量或者文件内容总量,以便达到我们类似百度网盘网盘等限制每个用户允许上传的最大的文件的量

数量限额

hdfs dfs -mkdir -p /user/root/lxq #创建hdfs文件夹
hdfs dfsadmin -setQuota 2 /user/root/lxq# 给该文件夹下面设置最多上传两个文件,上传文件,发现只能上传一个文件
hdfs dfsadmin -clrQuota /user/root/lxq# 清除文件数量限制

空间大小限额

hdfs dfsadmin -setSpaceQuota 4k /user/root/lxq # 限制空间大小4KB
#上传超过4Kb的文件大小上去提示文件超过限额
hdfs dfs -put /export/softwares/xxx.tar.gz /user/root/lxq
hdfs dfsadmin -clrSpaceQuota /user/root/lxq #清除空间限额
#查看hdfs文件限额数量
hdfs dfs -count -q -h /user/root/lxq

HDFS的安全模式

安全模式是 HDFS 所处的一种特殊状态,在这种状态下,文件系统只接 受读数据请求,而不接
受删除、修改等变更请求 。在 NameNode 主节点启动时, HDFS 首先进入安全模式, DataNode 在启动的时候会向NameNode 汇报可用的 block 等状态,当整个系统达到安全标准时, HDFS 自动离开安全模式。如果HDFS 出于安全模式下,则文件 block 不能进行任何的副本复制操作,因此达到最小的副本数量要求是基于DataNode 启动时的状态来判定的,启动时不会再做任何复制(从而达到最小副本数量要求),HDFS 集群刚启动的时候,默认 30S 钟的时间是出于安全期的,只有过了30S之后,集群脱离了安全期,然后才可以对集群进行操作。
hdfs dfsadmin -safemode

Hadoop归档技术

主要解决 HDFS 集群存在大量小文件的问题。由于大量小文件会占用NameNode 的内存,因此对于 HDFS 来说存储大量小文件造成 NameNode内存资源的浪费!
Hadoop 存档文件 HAR 文件,是一个更高效的文件存档工具, HAR 文件是由一组文件通过 archive
工具创建而来,在减少了 NameNode 的内存使用的同时,可以对文件进行透明的访问,通俗来说
就是 HAR 文件对 NameNode 来说是一个文件减少了内存的浪费,对于实际操作处理文件依然是一
个一个独立的文件。
把/user/lxq/input目录里面的所有文件归档成一个叫input.har的归档文件,并把归档后文件存储到/user/lxq/output路径下。
[root@linux121 hadoop-2.9.2]$ bin/hadoop archive -archiveName input.har –p /user/root/input /user/root/output

查看归档

[root@linux121 hadoop-2.9.2]$ hadoop fs -lsr /user/root/output/input.har
[root@linux121 hadoop-2.9.2]$ hadoop fs -lsr har:///user/root/output/input.har

解归档文件

[root@linux121 hadoop-2.9.2]$ hadoop fs -cp har:///user/root/output/input.har/* /user/root

MR思想

自定义Mapper类

public class WordcountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    Text k = new Text();
    IntWritable v = new IntWritable(1);

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            // 1 获取一行
            String line = value.toString();
            // 2 切割
            String[] words = line.split(" ");
            // 3 输出
            for (String word : words) {
            k.set(word);
            context.write(k, v);
        }
    }
}

自定义Reduce类

import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class WordcountReducer extends Reducer<Text, IntWritable, Text,
IntWritable> {
    int sum;
    IntWritable v = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {
        // 1 累加求和
        sum = 0;
        for (IntWritable count : values) {
            sum += count.get();
        }
        // 2 输出
        v.set(sum);
        context.write(key,v);
    }
}
自定义序列化器
import org.apache.hadoop.io.Writable;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
// 1 实现writable接口
public class SpeakBean implements Writable {
private long selfDuration;
private long thirdPartDuration;
private long sumDuration;
//2 反序列化时,需要反射调用空参构造函数,所以必须有
public SpeakBean() {
}
public SpeakBean(long selfDuration, long thirdPartDuration) {
this.selfDuration = selfDuration;
this.thirdPartDuration = thirdPartDuration;
this.sumDuration=this.selfDuration+this.thirdPartDuration;
}
//3 写序列化方法
public void write(DataOutput out) throws IOException {
out.writeLong(selfDuration);
out.writeLong(thirdPartDuration);
out.writeLong(sumDuration);
}
//4 反序列化方法
//5 反序列化方法读顺序必须和写序列化方法的写顺序必须一致
public void readFields(DataInput in) throws IOException {
this.selfDuration = in.readLong();
this.thirdPartDuration = in.readLong();
this.sumDuration = in.readLong();
}
// 6 编写toString方法,方便后续打印到文本
@Override
public String toString() {
return selfDuration +
"\t" + thirdPartDuration +
"\t" + sumDuration ;
}
public long getSelfDuration() {
return selfDuration;
}
public void setSelfDuration(long selfDuration) {
this.selfDuration = selfDuration;
}
public long getThirdPartDuration() {
return thirdPartDuration;
}
public void setThirdPartDuration(long thirdPartDuration) {
this.thirdPartDuration = thirdPartDuration;
}
public long getSumDuration() {
return sumDuration;
}
public void setSumDuration(long sumDuration) {
this.sumDuration = sumDuration;
}
public void set(long selfDuration, long thirdPartDuration) {
this.selfDuration = selfDuration;
this.thirdPartDuration = thirdPartDuration;
this.sumDuration=this.selfDuration+this.thirdPartDuration;
}
}

mr原理

mapTask机制

详细步骤:
1. 首先,读取数据组件 InputFormat (默认 TextInputFormat )会通过 getSplits 方法对输入目录中文件进行逻辑切片规划得到splits ,有多少个 split 就对应启动多少个 MapTask 。 split 与 block 的对应关系默认是一对一。
2. 将输入文件切分为 splits 之后,由 RecordReader 对象(默认 LineRecordReader )进行读取,以 \n作为分隔符,读取一行数据,返回<key , value> 。 Key 表示每行首字符偏移值, value 表示这一行文本内容。
3. 读取 split 返回 <key,value> ,进入用户自己继承的 Mapper 类中,执行用户重写的 map 函数。 RecordReader读取一行这里调用一次。
4. map 逻辑完之后,将 map 的每条结果通过 context.write 进行 collect 数据收集。在 collect 中,会先对其进行分区处理,默认使用HashPartitioner 。
MapReduce 提供 Partitioner 接口,它的作用就是根据 key 或 value 及 reduce 的数量来决定当前的这对 输出数据最终应该交由哪个 reduce task 处理。默认对 key hash 后再以 reduce task 数量取模。默认的 取模方式只是为了平均 reduce 的处理能力,如果用户自己对 Partitioner 有需求,可以订制并设置到 job 上。
5. 接下来,会将数据写入内存,内存中这片区域叫做环形缓冲区,缓冲区的作用是批量收集 map 结果,减少磁盘IO 的影响。我们的 key/value 对以及 Partition 的结果都会被写入缓冲区。当然写入之前,key 与 value 值都会被序列化成字节数组。
  • 环形缓冲区其实是一个数组,数组中存放着key、value的序列化数据和key、value的元数据信息,包括partition、key的起始位置、value的起始位置以及value的长度。环形结构是一个抽象概念。
  • 缓冲区是有大小限制,默认是100MB。当map task的输出结果很多时,就可能会撑爆内存,所以需要在一定条件下将缓冲区中的数据临时写入磁盘,然后重新利用这块缓冲区。这个从内存往磁盘写数据的过程被称为Spill,中文可译为溢写。这个溢写是由单独线程来完成,不影响往缓冲区写map结果的线程。溢写线程启动时不应该阻止map的结果输出,所以整个缓冲区有个溢写的比例spill.percent。这个比例默认是0.8,也就是当缓冲区的数据已经达到阈值(buffer size * spill percent = 100MB * 0.8 = 80MB),溢写线程启动,锁定这80MB的内存,执行溢写过程。Map task的输出结果还可以往剩下的20MB内存中写,互不影响。
6 、当溢写线程启动后,需要对这 80MB 空间内的 key 做排序 (Sort) 。排序是 MapReduce 模型默认的行为 !
  • 如果job设置过Combiner,那么现在就是使用Combiner的时候了。将有相同key的key/value对的value加起来,减少溢写到磁盘的数据量。Combiner会优化MapReduce的中间结果,所以它在整个模型中会多次使用。
  • 那哪些场景才能使用Combiner呢?从这里分析,Combiner的输出是Reducer的输入,Combiner绝不能改变最终的计算结果。Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。Combiner的使用一定得慎重,如果用好,它对job执行效率有帮助,反之会影响reduce的最终结果。
7. 合并溢写文件:每次溢写会在磁盘上生成一个临时文件(写之前判断是否有 combiner ),如果map的输出结果真的很大,有多次这样的溢写发生,磁盘上相应的就会有多个临时文件存在。当整个数据处理结束之后开始对磁盘中的临时文件进行merge 合并,因为最终的文件只有一个,写入磁盘,并且为这个文件提供了一个索引文件,以记录每个reduce 对应数据的偏移量。
至此 map 整个阶段结束 !!

Reduce机制

Reduce 大致分为 copy 、 sort 、 reduce 三个阶段,重点在前两个阶段。 copy 阶段包含一个
eventFetcher 来获取已完成的 map 列表,由 Fetcher 线程去 copy 数据,在此过程中会启动两个 merge 线程,分别为inMemoryMerger 和 onDiskMerger ,分别将内存中的数据 merge 到磁盘和将磁盘中的数据进行merge 。待数据 copy 完成之后, copy 阶段就完成了,开始进行 sort 阶段, sort 阶段主要是执行finalMerge操作,纯粹的 sort 阶段,完成之后就是 reduce 阶段,调用用户定义的 reduce 函数进行处理。
详细步骤
  • Copy阶段,简单地拉取数据。Reduce进程启动一些数据copy线程(Fetcher),通过HTTP方式请求maptask获取属于自己的文件。
  • Merge阶段。这里的merge如map端的merge动作,只是数组中存放的是不同map端copy来的数值。Copy过来的数据会先放入内存缓冲区中,这里的缓冲区大小要比map端的更为灵活。merge有三种形式:内存到内存;内存到磁盘;磁盘到磁盘。默认情况下第一种形式不启用。当内存中的数据量到达一定阈值,就启动内存到磁盘的merge。与map 端类似,这也是溢写的过程,这个过程中如果你设置有Combiner,也是会启用的,然后在磁盘中生成了众多的溢写文件。第二种merge方式一直在运行,直到没有map端的数据时才结束,然后启动第三种磁盘到磁盘的merge方式生成最终的文件。
  • 合并排序。把分散的数据合并成一个大的数据后,还会再对合并后的数据排序。
  • 对排序后的键值对调用reduce方法,键相等的键值对调用一次reduce方法,每次调用会产生零个或者多个键值对,最后把这些输出的键值对写入到HDFS文件中。

Shuffle机制

自定义分区器
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;
public class CustomPartitioner extends Partitioner<Text,PartitionBean> {
@Override
public int getPartition(Text text, PartitionBean partitionBean, int
numPartitions) {
int partition=0;
final String appkey = text.toString();
if(appkey.equals("kar")){
partition=1;
}else if(appkey.equals("pandora")){
partition=2;
}else{
partition=0;
}
return partition;
}
}

数据倾斜通用解决方案:对key增加随机数。

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.xml
FIFO按照任务到达顺序,先到先服务
容量调度器( Capacity Scheduler 默认的调度器)
Apache Hadoop 默认使用的调度策略。 Capacity 调度器允许多个组织共享整个集群,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。除此之外,队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是采用的是先进先出(FIFO) 策略。
Fair Scheduler (公平调度器, CDH 版本的 hadoop 默认使用的调度器)
Fair 调度器的设计目标是为所有的应用分配公平的资源(对公平的定义可以通过参数来设置)。公平调度在也可以在多个队列间工作。举个例子,假设有两个用户A 和 B ,他们分别拥有一个队列。当A 启动一个 job 而 B 没有任务时, A 会获得全部集群资源;当 B 启动一个 job 后, A 的 job 会继续运行,不过一会儿之后两个任务会各自获得一半的集群资源。如果此时B 再启动第二个 job并且其它j ob 还在运行,则它将会和 B 的第一个 job 共享 B 这个队列的资源,也就是 B 的两个 job 会用于四分之一的集群资源,而A 的 job 仍然用于集群一半的资源,结果就是资源最终在两个用户之间平等的共享

YARN调度模式详解

YARN(Yet Another Resource Negotiator)是Hadoop的资源管理系统,支持多种调度器模式来管理集群资源分配。以下是三种主要调度器的详细说明:

1. FIFO调度器(先进先出)

工作特点:

 
   

mermaidCopy Code

flowchart LR A[Job1] --> B[Job2] --> C[Job3]

  • ‌执行顺序‌:按照作业提交顺序执行
  • ‌资源分配‌:前一个作业完成后才分配资源给下一个作业
  • ‌优点‌:
    • 实现简单,无额外配置
  • ‌缺点‌:
    • 大作业会阻塞小作业("head-of-line"阻塞)
    • 资源利用率低
  • ‌适用场景‌:小型集群或测试环境

2. 容量调度器(Capacity Scheduler)

核心特性:

 
   

mermaidCopy Code

graph TD Root[Root Queue 100%] Root --> Prod[Production 70%] Root --> Dev[Development 30%] Prod --> ETL[ETL Jobs 50%] Prod --> Reporting[Reporting 20%] Dev --> Research[Research 15%] Dev --> Test[Testing 15%]

  • ‌队列分层‌:
    • 父队列分配总资源比例
    • 子队列继承父队列资源
  • ‌核心机制‌:
    • ‌容量保证‌:每个队列有保障的最小资源
    • ‌弹性分配‌:空闲资源可被其他队列借用
    • ‌多租户支持‌:ACL控制队列访问权限
  • ‌资源配置‌(示例):
     

    xmlCopy Code

    <property> <name>yarn.scheduler.capacity.root.queues</name> <value>prod,dev</value> </property> <property> <name>yarn.scheduler.capacity.root.prod.capacity</name> <value>70</value> </property>

  • ‌优势‌:
    • 资源隔离性好
    • 支持多租户
    • 防止小作业被大作业饿死
  • ‌适用场景‌:企业级生产环境(Cloudera/Hortonworks默认调度器)

3. 公平调度器(Fair Scheduler)

工作原理:

 
   

mermaidCopy Code

pie title 资源分配比例随时间变化 “Job1(60s)” : 60 “Job2(30s)” : 25 “Job3(新提交)” : 15

  • ‌动态分配机制‌:
    • 新作业启动时立即获得均等资源
    • 运行中的作业逐步释放超额资源
  • ‌核心特性‌:
    • ‌公平共享‌:所有作业获得相等资源份额
    • ‌最小资源保证‌:可为队列设置最低资源
    • ‌资源抢占‌:可回收超额分配的资源
    • ‌权重分配‌:重要作业可设置更高权重
  • ‌配置示例‌:
     

    xmlCopy Code

    <allocations> <queue name="prod"> <minResources>10000 mb, 10vcores</minResources> <weight>2.0</weight> </queue> <queue name="dev"> <minResources>5000 mb, 5vcores</minResources> </queue> </allocations>

  • ‌优势‌:
    • 快速响应短作业
    • 自动平衡资源分配
    • 适合交互式查询场景
  • ‌适用场景‌:共享分析集群(如Spark/Flink交互查询)

调度器对比总结

‌特性‌FIFO调度器容量调度器公平调度器
‌资源分配策略‌顺序分配队列容量保证公平共享
‌弹性扩展‌❌ 无✅ 队列间借用资源✅ 自动平衡
‌资源隔离‌❌ 无✅ 强隔离✅ 队列级隔离
‌饥饿问题‌❌ 严重✅ 通过容量避免✅ 自动解决
‌配置复杂度‌无需配置⚪ 中等复杂
‌适用场景‌测试/小集群企业生产环境交互式分析集群
‌默认启用‌Hadoop 1.xHadoop 3.x 默认CDH可选

高级调度特性

  1. ‌节点标签调度‌:

    • 将节点分组(如SSD/GPU节点)
    • 作业可指定运行在特定标签节点
     

    shellCopy Code

    yarn node -addToClusterNodeLabels "GPU"

  2. ‌预约调度‌:

    • 提前预约未来时间段资源
    • 保证重要作业按时执行
  3. ‌动态资源自动伸缩‌:

    • 基于队列负载自动调整容量
    • 需要配置弹性伸缩策略

最佳实践建议

  1. ‌生产环境选择‌:

    • 稳定需求 → 容量调度器
    • 交互分析 → 公平调度器
  2. ‌队列设计原则‌:

    • 按部门/项目划分队列
    • 为关键作业保留专用队列
    • 设置合理的最大资源限制
  3. ‌参数调优‌:

     

    javaCopy Code

    // 防止资源碎片化 yarn.scheduler.minimum-allocation-mb = 1024 // 启用抢占保证SLA yarn.resourcemanager.scheduler.monitor.enable=true

‌注‌:在Hadoop 3.0+版本中,所有调度器都支持‌层级队列‌和‌资源动态管理‌功能,可根据实际需求组合使用不同调度器的优势特性。

hadoop:hdfs/yarn启动停止 本人环境: 3台虚拟机分别为 sparkproject1 192.168.124.110 sparkproject2 192.168.124.111 sparkproject3 192.168.124.112 linux(vi /etc/hosts)和windows配置hosts文件(C:\Windows\System32\drivers\etc) : # Copyri... 阅读详情

相关推荐

Hadoop 之 集群安装(HDFS、YARN)

Hadoop 之 集群安装(HDFS、YARN)

1740

HDFS、YARN、Mapreduce简介

一、 HDFS介绍: Hadoop2介绍 HDFS概述 HDFS读写流程 1. Hadoop2介绍 Hadoop是Apache软件基金会旗下的一个分布式系统基础架构。Hadoop2的框架最核心的设计就是HDFS、MapReduce和YARN,为海量的数据提供了存储和计算。 HDFS主要是Hadoop的存储,用于海量数据的存储; MapReduce主要运用于分...

weixin_34417814的博客 686

大数据Hadoop入门——HDFS、Yarn、MapReduce

Hadoop框架详细个人总结——Hadoop入门篇大数据是什么?Hadoop基本概念介绍一、什么是Hadoop?二、Hadoop优势——四高三、Hadoop组成(重点)四、HDFS架构五、YARN架构六、MapReduce架构七、HDFS、YARN、MapReduce 三者关系Hadoop运行环境搭建虚拟机的准备一、安装虚拟机二、虚拟机配置及环境准备Hadoop运行模式一、本地运行模式二、伪分布式模式三、完全分布式模式**1.虚拟机准备****2.准备一个集群分发脚本****3.SSH 无密登录配置****

weixin_44090845的博客 2846

hadoop的三大核心组件之HDFS和YARN

Hadoop的三大核心组件之HDFS和YARN Hadoop集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起。 (1)HDFS集群:负责海量数据的存储,集群中的角色主要有NameNode/DataNode/SecondaryNameNode。 (2)YARN集群:负责海量数据运算时的资源调度,集群中的角色主要有ResourceManager...

微电子学与固体电子学-俞驰 3271

Hadoop集群HDFS、MapReduce及Yarn面试全集(更新中)

广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。狭义上说,Hadoop指Apache这款开源框架,它的核心组件有:HDFS(分布式文件系统):解决海量数据存储YARN(作业调度和集群资源管理的框架):解决资源任务调度MAPREDUCE(分布式运算编程框架):解决海量数据计算定义:Hdfs是一个分布式文件系统,用来存储文件,通过目录树来定位文件。Hdfs适合一次写入、多次写出的文件场景,且不支持文件的修改,适合用来做数据分析,并不适合用来做网盘应用。

weixin_44687655的博客 1254

Hadoop 配置本篇主要就是配置HDFS和YARN

配置HDFS和YARN之前要对服务器或者虚拟机安装jdk、maven、findbugs、protobuf等,这些就不一一赘述了,一查一大堆。 首先要有编译好的hadoop的jar包,解压到自己的目录。 上面所用到的jar包可以到我上传的资源中下载 maven:http://download.youkuaiyun.com/detail/just_for_fun_208/9505012 findbugs:h

Just_for_fun_208的博客 2513

Hadoop学习(二)——HDFS&YARN【Hadoop数据分析(图灵程序设计丛书)】

Hadoop的基础结构,初步认识了解HDFS和YARN。 进行MapReduce作业,排坑修改,能够顺利执行。

Stack It Up 349

Hadoop的HDFS以及YARN简介

Hadoop的HDFS以及YARN简介 Hadoop分布式系统简介 Hadoop是分布式的系统架构,是Apache基金会顶级金牌项目 来源:三大论文GFS、MapReduce、 Bigtable 创始人:Doug cutting Hadoop分布式系统重要部分 HDFS YARN MapReduce Zookeeper Hive Hbase … HDFS(分布式存储系统) 用...

Infinity_TP的博客 988

HDFS、YARN、MapReduce概述及三者之间的关系

一、HDFS架构概述 1、NameNode(nn): 存储文件的元数据,如文件名、文件目录结构、文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。 2nn:每隔一段时间对NameNode元数据备份 ...

weixin_49415186的博客 8774

VCS和UVM常用编译选项

VCS编译选项 -full64 在64bit模式下编译、仿真,用于64位操作系统 -j8 指定编译器可以并行编译的进程数为8 -timescale=1ns/1ps 指定仿真时间和精度 +libext+.v+.V+.sv+.svh 识别.v、.sv、.svh等多种格式文件 -sverilog 支持system verilog 编译 -f xxx.lisf 指定包含所有设计文件列表的文件名 -top test 设置顶层模块为test。(指包含.

qq_40571921的博客 9932

Laravel 结合 jwt-auth 实现无状态 API 认证(实战解析)

本文详细解析了如何在Laravel框架中结合jwt-auth实现无状态API认证,包括JWT的优势、环境搭建、Token签发与刷新、API路由保护等实战内容。通过具体代码示例和优化技巧,帮助开发者高效解决跨域认证问题,提升系统安全性。

weixin_29315569的博客 210

大数据之——Hadoop的HDFS、YARN、MapReduce

如何看他们的关系?首先HDFS将【NameNode】部署到一个节点先,分出多个【DataNode】分布到各个节点上,里面分别存储了将总的海量数据分散了的【子数据】,最后还要有一个节点有【Secondary NameNode】来备份【NameNode】的数据;

m0_73991249的博客 3587

UWB定位原理详细介绍

Hello大家好我是小智,今天我来给大家介绍下超宽带的定位原理,首先我们来讲下什么是UWB技术。 超宽带(Ultra Wide Band)简称UWB,和我们熟悉的WIFI、蓝牙技术一样属于通信技术的一种,UWB是一种无线载波通信技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,其所占的频谱范围很宽,右图是一种典型的正弦载波信号图。 UWB这种技术有什么特点呢? UWB系统结构实现简单;2.具有高速的数据传输能力;3.功耗低;4.安全性高;5.多径分辨能力强;6.可用于精确定位等特点。 UWB.

qq_35699674的博客 2万+

Hadoop入门—HDFS、MR、Yarn

hadoop生态及架构,HDFS存储方式、Yarn资源调度、MR并行计算

qq_73181349的博客 2977

STM32F4三重ADC+DMA双缓冲实战:用CubeMX搞定同步采样,告别数据覆盖烦恼

本文详细介绍了STM32F4三重ADC与DMA双缓冲技术的实战应用,通过CubeMX配置实现同步采样,解决数据覆盖问题。内容涵盖硬件架构解析、CubeMX工程配置、双缓冲实现技巧及调试优化方法,适用于电机控制、电力监测等需要高精度多通道信号采集的场景。

weixin_30627341的博客 357

【汽车ECU电控数据管理篇】A2L文件在ECU标定中的关键作用与实战解析

本文深入解析A2L文件在汽车ECU标定中的关键作用,详细介绍了其作为'数据字典'的核心功能与实战应用。通过剖析A2L文件的结构、关键标签及常见问题,帮助工程师高效管理电控数据,提升ECU标定效率与准确性。文章特别强调了ASAP2标准下的A2L文件在汽车电控系统中的重要性。

a3b4c5的博客 786

【快速入门大数据】hadoop和它的hdfs、yarn、mapreduce

文章目录导学大数据概述初识Hadoop概述核心组件HDFS分布式文件系统资源调度系统YARNMapReduce优势发展史生态系统发行版本选择企业应用案例 导学 开发环境 学做镜像 生态圈 目录 实战 分析客户端登录日志 与spring结合使用 扩展及新技术 大数据概述 场景 足球预判分析人物特性 购物推荐 来源 4v特征 量大、种类多、价值密度低、速度快 技术 采集-存储-分析-可视化 技术架构挑战 量大,无法用结构化数据库,关系型数据库 经典数据库没有考虑数据多类别 比如json 实时性的

瑞新の博客:bennyrhys 4627

SoulX-FlashHead 加速实践,提升3倍。

SoulX-FlashHead 加速实践,提升3倍。

jacke121的专栏 220

hadoop集群搭建HDFS、HA、 YARN

hadoop2.0已经发布了很多稳定版本,增加了很多特性,比如HDFS HA、YARN等。最新的hadoop-2.7.2又增加了YARN HA1、环境准备修改主机名、IP地址。这些在之前博客有提过就不再写了。 配置IP地址和主机名映射关系。 sudo vi /etc/hosts集群规划: 主机名 IP 安装的软件 运行的进程 spark01 1

IT小生 1万+

基于YOLOv8和时序模型的异常动作检测系统

异常动作检测是计算机视觉领域的重要应用,广泛应用于智能监控、安防系统、老人看护等场景。本项目结合YOLOv8目标检测和LSTM时序模型,实现对打架、摔倒、奔跑等异常动作的实时检测,并提供了完整的Web界面。多技术融合: 结合YOLOv8目标检测和LSTM时序建模实时检测: 支持实时视频流处理和文件分析用户友好: 提供完整的Web界面可扩展性: 模块化设计便于功能扩展高性能: 包含多种优化策略。

YOLO 763

学Simulink——基于高渗透率可再生能源微电网的逆变器系统场景实例:含高比例逆变型电源的微电网暂态稳定性分析

本文详细介绍了基于MATLAB/Simulink的高渗透率可再生能源微电网建模方法,重点分析含高比例逆变型电源的微电网暂态稳定性问题。通过构建包含光伏、风电、逆变器和电网等模块的系统模型,展示了从项目创建、模块搭建到控制策略实现的完整过程。文章特别提供了逆变器PQ控制算法和故障处理逻辑的代码示例,并介绍了仿真参数设置与结果分析方法。该模型能有效评估微电网在故障条件下的动态响应特性,为优化逆变器控制策略提供依据,对现代智能电网研究具有重要意义。

xiaoheshang_123的博客 140

Hadoop集群搭建(hdfs、yarn)

Hadoop 是 Apache 软件基金会旗下的一个开源项目,是用于处理大数据的分布式系统基础架构,被广泛应用于大数据存储、处理和分析等场景。

majunssz的博客 1570

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

大数据面试问答-Hadoop/Hive/HDFS/Yarn

可分为 SQL解析阶段、语义分析阶段、逻辑计划生成阶段、逻辑优化阶段、物理计划生成阶段。SQL解析阶段词法分析(Lexical Analysis):使用Antlr3将SQL字符串拆分为有意义的token序列语法分析(Syntax Analysis):根据Hive语法规则构建抽象语法树(AST)语义分析阶段元数据验证:检查表、列是否存在,类型是否匹配隐式类型转换:如将字符串与数字比较时的自动转换UDF解析:确定用户定义函数的实现类权限验证:检查用户是否有执行该查询的权限。

weixin_44999258的博客 1254

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

hadoop概念和组成(hdfs、yarn、mapreduce)

文章目录Hadoop概述组成1. 分布式存储系统HDFS(Hadoop Distributed File System)2. 资源管理系统YARN3. 分布式计算框架MapReduceHadoop生态圈1. Hive2. pig3. Mahout4. Hbase5. Zookeeper6. Sqoop7. Flume8. OozieHDFS概述1. 设计思想2. 主从架构解析2.1 ==namen...

tyhawk的博客 3279
上一篇: Hadoop技术栈(一)hadoop搭建与HDFS常用命令
下一篇: Hadoop技术栈(四)HIVE常用函数汇总
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值