浅谈:Hadoop基础之MapReduce

浅谈Hadoop容错机制 简单介绍一下Hadoop中数据存储的可靠性和完整性,其中包括HDFS的容错机制、NameNode(元数据结点)的单点失效解决机制、Block数据块的多副本存储机制、 NameNode与DataNode之间的心跳检测机制、数据存储等。 (一)HDFS中NameNode单点问题 HDFS这种分布式的存储系统,存在中心结点,那么这个中心结点的可靠性就是整个集群的可靠性的关键,对于版本0.20.x的 阅读详情

Map输出的结果将会被序列化到缓冲区中,元数据将被存储在缓冲区中;当Map持续有输出结果时,序列化的缓冲区或者元数据超出了临界值,此时缓冲区中的数据将被排序并写入到磁盘中

1. Hadoop集群的配置安装(非安全模式)

1.重要的配置文件:

(1)Read-only default configuration:
core-default.xml
hdfs-default.xml
yarn-default.xml
mapred-default.xml

(2)Site-specific configuration:
etc/hadoop/core-site.xml
etc/hadoop/hdfs-site.xml
etc/hadoop/yarn-site.xml
etc/hadoop/mapred-site.xml

(3)Hadoop Daemon Configuration:
HDFS daemons:
NameNode
SecondaryNameNode
DataNode
YARN damones:
ResourceManager
NodeManager
WebAppProxy

2. 配置Hadoop Daemons的环境变量

3.Hadoop Daemon配置

4.HDFS相关操作

hadoop fs
- appendToFile
- cat
- chgrp chmod chown
- copyFromLocal copyToLocal
- count
- cp
- df du dus
- find
- get
- help
- ls lsr
- mkdir
- moveFromLocal
- moveToLocal
- mv
- put
- rm rmdir rmr
- touchz
- usage

2.MapReduce理论和实践

MapReduce的输入输出类型
(input) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> reduce -> <k3, v3> (output)

1.Mapper:

1.多少个Map合适?
Map的数量是根据输入的总大小确定的,也就是输入文件的总块数
最佳实践:
每个节点10~100个map

2.Reducer:

实现将Map的输出结果按照相同key进行归约为更小的值的集合

1. 三个阶段:

1)Shuffle
通过HTTP协议取得所以Mapper输出结果的相关分区
2)Sort
通过key对Reducer的输入进行分组
3)reduce
Reducer的输出结果通过write写入到文件系统中
Reducer的输出没有被排序

2. Reduce的数量
0.95/1.75*(节点数 * 每个节点最大的容器数量)
如果设置为0,Mapper的输出结果直接写入文件系统

3. Partitioner
控制map输出结果中key的分区
HashPartitioner是默认的Partitioner

4. Counter
Mapper和Reducer中实现计数的工具

3. Job的配置

1. Job中可以实现的配置
执行Mapper、Combiner、Partitioner、Reducer、InputFormat、OutputFormat的实现类

2. FileInputFormat显示输入文件的集合

FileInputFormat.setInputPaths(Job, Path…)
FileInputFormat.addInputPath(Job, Path)
FileInputFormat.setInputPaths(Job, String…)
FileInputFormat.addInputPaths(Job, String)

3. FileOutputFormat显示输入文件的集合

FileOutputFormat.setOutputPaths(Job, Path…)
FileOutputFormat.addOutputPath(Job, Path)
FileOutputFormat.setOutputPaths(Job, String…)
FileOutputFormat.addOutputPaths(Job, String)

4. 其他配置
comparator、DistributedCache、Compress、Execute Manner、MaxMapAttempts
可以使用Configuration.set(String,String)实现配置

4.任务的执行和环境

1. 内存管理
用户/管理员可以指定加载子任务时的最大虚拟内存

2. Map的参数
Map输出的结果将会被序列化到缓冲区中,元数据将被存储在缓冲区中
当Map持续有输出结果时,序列化的缓冲区或者元数据超出了临界值,此时缓冲区中的数据将被排序并写入到磁盘中

3. Shuffle/Reduce参数
每一个Reduce通过Partitioner使用HTTP分区到内存中,再定期地合并这些数据到磁盘中
如果Map的输出结果被压缩了,那么么一个输出都将被压缩到内存中

5.Job的提交和监控

1. 检查Job规格的输入输出
2. 为Job计算InputSplit的值
3. 为Job的分布式缓存设置必要的叙述信息(可选)
4. 复制Job的Jar和配置文件到文件系统的MapReduce的系统目录
5. 提交Job到ResourceManager以及监控Job的状态(可选)
用户和查看执行的历史记录:
$ mapred job -history output.jhist
$ mapred job -history all output.jhist
总而言之,用户使用Job创建应用、描述Job的详细信息、提交Job、监控Job的运行状态

6. JobControl

1. Job.submmit():提交任务到集群并立即返回
2. Job.waitForCompletion(boolean):提交任务到集群,并等待执行完成

7. Job的输入

1. InputFormat描述了MapReduce的Job的指定输入
1. 验证Job指定的输入
2. 将输入文件切分成逻辑上的InputSplit的实例,每一个实例再分配给独立的Mapper
3. 提供RecodeReader的实现类来收集被Mapper处理的逻辑InputSplit输入记录
4. InputFormat的默认实现类是:TextInputFormat

2. InputSplit
1. 代表的是被每一个独立的Mapper处理后的数据
2. 代表的是面向类型的输入视图
3. FileSplit是默认的IputSplit

3. RecodeReader
1. 从InputSplit中读取<key,value>对
2. 将由InputSplit提供的面向类型的输入视图转换成Mapper的实现类进行处理

8. Job的输出

1. OutputFormat描述了MapReduce的Job的指定输出
1. 验证Job指定的输出,如:检查Job的输出目录是否存在
2. 提供RecodeWriter实现类用来写Job的输出文件,存储在文件系统中
3. OutputFormat的默认实现类是:TextOutputFormat

2. OutputCommitter
1. 描述的是MapReduce的Job的指定的输出
2.处理过程
1. 在初始化期间设置Job,如:在Job的初始化期间创建临时的输出目录
2. 在Job执行完成后清理Job,如:在Job执行完成之后,移除临时目录
3. 设置任务的临时输出目录,在任务的初始话阶段完成
4. 测是否有任务需要提交
5. 任务输出的提交
6. 丢弃任务的提交.如果任务已经失败或者进程被杀掉,则输出将会被清理,如果这个任务没有被清理,则另外一个带有相同attempt-id的任务将会被加载执行清理
3. OutputCommitter默认的实现类是FileOutputCommitter,Job初始化/清理任务在Map和Reduce容器中

3. RecodeWriter
1. 将output<key,value>对写到输出文件中
2. RecodeWriter的实现类将Job的输出写入到文件系统中

9. 其他有用的特性

1. 提交Job到队列中
1.队列作为Job的集合,允许系统提供指定的功能,例如:队列使用ACLs控制哪个用户可以提交Job
2. Hadoop有一个强制的队列,称为default.队列的名称在Hadoop的配置文件中进行定义
mapreduce.job.queuename
3. 定义队列的方式
1. 设置mapreduce.job.queuename
2. Configuration.set(MRJobConfig.QUEUE_NAME,String)
4. 队列的设置是可选的,如果没有设置,则使用默认的队列default

2. 计数器
1. Counters代表了全局计数器,可以被MapReduce框架或者应用程序进行定义。每一个计数器可以是任意的Enum类型,一个特殊的Enum的计数器被绑定进Counters.Group类型的组中
2. 应用程序可以定义任意的计数器,可以通过 Counters.incrCounter(Enum,long)或者Counters.incrCounter(String,String,long)进行更新,然后这些计数器被框架进行全局范围的聚合

3. 分布式缓存
1. 有效地描述了执行文件的、大型的、只读的
2. 是MapReduce框架提供的应用程序必须的缓存文件(text、archives、jars)的工具
3. 应用程序在Job中通过url(hdfs://)的形式指定可以被缓存的文件

4. 调试
1. 当MapReduce的任务失败时,用户可以运行一个debug脚本去执行任务,这脚本可以访问任务的标准输出、标准错误目录以及JobConf
2. 用户使用DistributedCache去分发和创建脚本的符号链接
3. 提交脚本的方式
1. 设置mapreduce.map.debug.script、mapreduce.reduce.debug.script
2. Configuration.set(MRJobConfig.MAP_DEBUG_SCRIPT,String)
Configuration.set(MRJobConfig.REDUCE_DEBUG_SCRIPT,String)

5. 数据压缩
1. MapReduce提供了写应用程序为Map的输出以及Job的输出指定压缩方式的工具
2. 中间输出结果
应用程序可以控制Map中间结果的压缩
Configuration.set(MRJobConfig.MAP_OUTPUT_COMPRESS,boolean)
Configuration.set(MRJobConfig.MAP_OUTPUT_CODEC,Class)
3. Job输出结果
FileOutputFormat.setCompressOutput(Job,boolean)
FileOutputFormat.SetOutputCompressorClass(Job,Class)

6. 跳过坏的记录
Hadoop提供了在处理Map输入过程中某些坏记录的一种方式

 

大数据1024G数据资料

长按关注下方微信公众号,获取更多专业大数据资讯和获取大数据学习资料

电商平台大数据分析指标 一、五大关键数据分析指标 1.1活跃用户量 活跃用户量是一个基本的指标,有 DAU(日活跃用户)、WAU(周活跃用户)和 MAU(月活跃用户)三个层次; 1.2转化 转化是一个非常重要的指标,电商运营需要关注主路径、次路径甚至精细到每一个品类 / SKU 的转化率; 1.3留存 留存要从不同的时间周期上研究,包括次日留存率、3 日、7 日、30 日留存; 1.4复购 复购则要从 3 个角度去看,复购用户量、复购率和复购金额比; 1.5GMV GMV 是最重要的指标,我们的运营最终是围绕这 阅读详情

相关推荐

揭秘CAS:深入理解与应用解析

在并发编程中,Compare-And-Swap(CAS)机制作为一种无锁算法,凭借其高效性和避免线程阻塞的优势,受到广泛关注。CAS不仅在底层实现上有着重要地位,还在实际开发中发挥着关键作用。本文将从CAS的工作原理、在Java中的实现及其增强机制来回顾和加深理解一下CAS。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 85万+

Hive 在使用不同的执行引擎时设置作业的队列名的方法

不同的执行引擎设置队列名的方式不同。 当执行引擎为 mr 时 set hive.execution.engine=mr; set mapred.job.queue.name='queueName'; 当执行引擎为 tez 时 set hive.execution.engine=mr; set tez.queue.name='queueName';

houzhizhen的专栏 1609

Telcordia GR-487-CORE:2016(Issue 5) Generic Requirements for Ele

Telcordia GR-487-CORE:2016(Issue 5) Generic Requirements for Electronic Equipment Cabinets - 完整英文电子版(164页).zip

Hadoop MapReduce指定yarn队列: -Dmapreduce.job.queuename

-Dmapreduce.job.queuename=dmgeo指定队列名称,不需要加root. hadoop jar /opt/bigdata/hadoop-2.9.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.9.2-tests.jar TestDFSIO -Dmapreduce.job.queuename=dmgeo -write -nrFiles 10 -fileSize 128MB ...

学亮编程手记 3479

HiveSQL运行优化参数配置

执行任务时Map的任务数配置 执行任务时Map的任务数配置,即执行任务时,上图标红的,number of mappers: 1 的数量。 map的个数设置其实对执行效率有很大的影响: 如果mappers数量过多,map任务启动和初始化的时间远远大于逻辑处理的时间,就会造成很大的资源浪费。而且,同时可执行的map数是受限的; 如果mappers数量过少,Hadoop的计算资源没有充分的利用,计算缓慢; map的个数主要的决定因素有: input的文件总个数,input的文件...

数据掘金 3224

Hive入门及常用指令

Hive 最近在公司实习,对hive进行了学习,做了些整理的笔记。 基础命令 show databases; # 查看某个数据库 use 数据库; # 进入某个数据库 show tables; # 展示所有表 desc 表名; # 显示表结构 show partition...

Jack_LI的博客 2176

Hadoop 设置任务执行的队列以及优先级和其他 配置

作业提交到的队列:mapreduce.job.queuename 作业优先级:mapreduce.job.priority Pig版本: SET mapreduce.job.queuename root.etl.distcp; SET mapreduce.job.priority HIGH; Hive版本: SET mapreduce.job.queuename=root.etl.distcp; SET mapreduce.job.priority=HIGH; MapReduce版本: hadoop jar

zhuzhen123zhuzhen的博客 483

浅谈MapReduce

从今天开始,本人将会开始对另一项技术的学习,就是当下炙手可热的Hadoop分布式就算技术。目前国内外的诸多公司因为业务发展的需要,都纷纷用了此平台。国内的比如BAT啦,国外的在这方面走的更加的前面,就不一一列举了。但是Hadoop作为Apache的一个开源项目,在下面有非常多的子项目,比如HDFS,HBase,Hive,Pig,等等,要先彻底学习整个Hadoop,仅仅凭借一个的力量,是远远不够的。

走在前往架构师的路上 4101

浅谈HadoopMapReduce任务运行机制

一、浅谈HadoopMapReduce运行机制 1. MapReduce作业运行机制 提交作业的方式,一般常用的有以下两种 方式一: 通过一个简单的方式法调用来运行MR作业Job对象上的submit(),直接将作业提交到Hadoop集群的平台,而客户端没有任何日志输出; 方式二: 调用Job对象上的waitForCompletion()方法,用于提交之前没有处理过的作业,并等待它的完成,客户端会时刻打印作业执行的进度信息,如出现异常,也会立刻将异常信息打印出来。 2. 了解作业的运行组件 MR框架

bug的博客 1563

Hadoop浅谈Hadoop

随缘一笔接触Hadoop差不多有一年多的时间了,一年前正是研一下学期,自己还没有从电子信息专业的思维以及基础过度到计算机领域,整个人懵懵懂懂,无所特长。对于Linux、Java、数据结构和网络这些乱七八糟的东西仅仅只能说是了解,期间又承受着信息检索、模式识别、机器学习和数据挖掘这类高端名词的冲刷,整个人过的比较茫然和无奈。起初,我对于Hadoop是没什么热爱情绪的,首先不知道这是什么东西,其次Had

木东居士 1460

浅谈hadoopmapreduce的文件分发

版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/zgc_sitech/article/details/27547483 ...

weixin_30916125的博客 247

HADOOP浅谈HadoopMapReduce工作机制

浅谈HadoopMapReduce工作机制

SmallScorpion 1730

hadoop使用mapreduce统计词频_浅谈Hadoop安全(上)

1Hadoop简介Hadoop是一个用java编写的Apache开源框架,它允许使用简单的编程模型跨计算机集群分布式处理大型数据集。Hadoop框架应用程序在一个跨计算机集群提供分布式存储和计算的环境中工作。Hadoop旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储。Hadoop的起源是2003年10月发布的谷歌文件系统论文。这篇论文催生了谷歌的另一篇论文– “Map...

weixin_39559015的博客 545

hadoop浅谈

hadoop浅谈 什么是hadoop 百度百科: Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件...

a2209963的博客 337

浅谈Hadoop的应用

浅谈Hadoop的实际应用

Kayleigh520的博客 1811

浅谈MapReduce算法的五个过程

数学系的我,只有点简单的数学功底和计算机的功底,本着兴趣,在刚毕业就开始了大数据的学习之旅。本篇不谈学习方法,浅谈经验,学习方法还在摸索中,以零基础大数据的我,还在摸索高效的学习方法,但是万丈高楼平地起,基础是值得花很长时间去打磨的,只是担心了我的工作。 MapReduce算法是hadoop大数据平台最基础的算法,它是整个分布式算法的基石,掌握了MapReduce算法,有助于我们理解整个大数据

qq_39834551的博客 1893

Hadoop 浅谈

一、什么是hadoop hadoop是一个开源的分布式计算和存储的框架。 二、什么是mapreduce? 从总体上来讲,MapReduce主要包括三个阶段,map阶段, shuffle阶段, reduce阶段,如果大家对我前面讲的HDFS还有印象,应该能知道split这个过程,其实是HDFS帮我们做了,下面我从map的输入开始,剖析一下整个MapRedu...

Morpheus2005的博客 301

浅谈MapReduce的原理及编程

一、什么是MapReduce MapReduce是一个分布式计算框架; 它将大型数据操作作业分解为可以跨服务器集群并行执行的单个任务;适用于大规模数据处理场景;每个节点处理存储在该节点的数据;每个 job 包含Map和Reduce两部分 二、MapReduce的设计思想 1、分而治之 简化并行计算的编程模型 2、构建抽象模型 开发人员专注于实现 Mapper 和 Reduce 函数 3、隐藏系统层细节 开发人员专注于业务逻辑实现 MapReduce特点 1、优点 易于编程 可扩展性 高容错性

绿萝蔓蔓绕枝生 704

彷徨 | HadoopMapReduce个人浅谈

MapReduce是分布式运算编程框架,Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上 为什么要MAPREDUCE (1)海量数据在单机上处理因为硬件资源限制,无法胜任 (2)而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度 (3)引入mapreduce框架后,开发人员可以将绝大部...

彷徨的博客 425

浅谈MapReduce经典案例之wordcount

Hadoop是由Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到由Google Lab 开发的Map/Reduce 和Google File System(GFS)的启发,而正式落地。 Hadoop最核心的设计便是HDFS和MapReduceHadoop最底层的HDFS(Hadoop Distributed File System)是一个大型的分布式文件系统,为海量数据的存储提供了可能性及高可靠性。 而其离线分布式并

qq_44093764的博客 620
上一篇: 大数据Hadoop生态圈:Pig
下一篇: Apache Kafka:大数据的实时处理时代
大数据hadoop
博客等级 码龄7年 5粉丝 39原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值