关闭

Hadoop基础之MapReduce

标签: Hadoopmapreducehadoop集群hdfs
1063人阅读 评论(3) 收藏 举报
分类:

Hadoop基础

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

  1. 重要的配置文件:

    1Read-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的环境变量

    Daemon Environment Variable
    NameNode HADOOP_NAMENODE_OPTS
    DataNode HADOOP_DATANODE_OPTS
    SecondaryNameNode HADOOP_SECONDARYNAMENODE_OPTS
    ResourceManager YARN_RESOURCEMANAGER_OPTS
    NodeManager YARN_NODEMANAGER_OPTS
    WebAppProxy YARN_PROXYSERVER_OPTS
    Map Reduce Job History Server HADOOP_JOB_HISTORYSERVER_OPTS

3.Hadoop Daemon配置

Daemon Environment Variable
ResourceManager YARN_RESOURCEMANAGER_HEAPSIZE
NodeManager YARN_NODEMANAGER_HEAPSIZE
WebAppProxy YARN_PROXYSERVER_HEAPSIZE
Map Reduce Job History Server HADOOP_JOB_HISTORYSERVER_HEAPSIZE

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~100map
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输入过程中某些坏记录的一种方式
1
5
查看评论

Hadoop那些事儿(四)---MapReduce编程实例(基础)

前言上一篇文章,以WordCount为例讲了一下MapReduce的代码结构及运行机制,这篇文章将通过几个简单的例子进一步认识MapReduce。1.数据检索问题描述假设有很多条数据,我们从中查找包含某个字符串的语句。解决方案这个问题比较简单,首先在Map中获取当前读取的文件的文件名作为key,将要...
  • u012116457
  • u012116457
  • 2017-02-17 11:33
  • 2521

Hadoop之图解MapReduce与WordCount示例分析

Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算。   HDFS是Google File System(GFS)的开源实现,MapReduce是Google MapReduce的开源实现。   HDFS和...
  • shujuelin
  • shujuelin
  • 2018-01-21 12:42
  • 48

Hadoop(四)——编程核心MapReduce(上)

上篇讲述了Hadoop的核心内容之一HDFS,是Hhadoop分布式的平台基础,而这讲的MapReduce则是充分利用Hdfs分布式,提高运行效率的算法模型 ,Map(映射)和Reduce(归约)两个主要阶段都以键值对作为输入和输出,我们需要做的就是对这些,value>做我们想要的处理。看似简...
  • liujiahan629629
  • liujiahan629629
  • 2015-09-09 00:07
  • 3576

Hadoop学习---第三篇Hadoop的第一个Mapreduce程序

Mapreducer程序写了好几个了,但是之前一直都没有仔细的测试过本地运行和集群上运行的区别,今天写了一个Mapreduce程序,在此记录下来。  本地运行注意事项有以下几点: 1、本地必须配置好Hadoop的开发环境 2、在src里不加入配置文件运行,或者如果本地的src里有mapre...
  • zxl333
  • zxl333
  • 2015-05-30 21:50
  • 819

学习Hadoop,需要什么基础?

Hadoop需要具备javaSE的基础知识,对于javaEE(jsp/servlet/三大框架)没有要求。需要熟练使用linux系统(第一天课程有复习linux操作的时间)。大体上,有这些预备知识就够了。严格的说,只需要具备javaSE知识就足够了。我掌握的javaSE不够好,行吗?没问题!Hado...
  • away30
  • away30
  • 2017-09-15 11:40
  • 241

MapReduce求年度最高气温值以及combiner的一点认识

MapReduce编程我是初学,下面这个例子是参考《Hadoop权威指南》第二章中的气象数据集中求取年份气温最高值的一个示例入门程序,so,如果您是老道级的高手就不用往下看了。其实这个例子的原理和统计词频是一样的,这里重点想说的还是关于combiner的一点认识,不过索性就将代码的实现写了吧。 &...
  • houqingdong2012
  • houqingdong2012
  • 2013-12-28 14:22
  • 2437

Hadoop--倒排索引过程详解

倒排索引就是根据单词内容来查找文档的方式,由于不是根据文档来确定文档所包含的内容,进行了相反的操作,所以被称为倒排索引下面来看一个例子来理解什么是倒排索引这里我准备了两个文件 分别为1.txt和2.txt1.txt的内容如下 I Love Hadoop I like ZhouSiYu...
  • tanggao1314
  • tanggao1314
  • 2016-05-07 23:09
  • 5500

hadoop基础之mapreduce

看这篇文章请出去跑两圈,然后泡一壶茶,边喝茶,边看,看完你就对hadoop整体有所了解了。 Hadoop简介 Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关项目也...
  • qq_24651739
  • qq_24651739
  • 2017-05-09 09:46
  • 75

Hadoop基础教程-第6章 MapReduce入门(6.5 温度统计)(草稿)

第6章 MapReduce6.5 MapReduce应用6.5.1 温度统计《HADOOP权威指南 第3版 》教程中有个经典例子,既是温度统计。作者Tom White在书中写了程序和讲解了原理,认为读者们都会MapReduce程序的基本环境搭建部署,所以这里轻描淡写给带过了,对于初学者来说,这是一个...
  • chengyuqiang
  • chengyuqiang
  • 2017-06-02 08:43
  • 1567

Hadoop MapReduce之MapTask任务执行(一)

前面我们介绍了作业的提交(客户端和服务端)、任务分解和调度、任务的启动,这些操作完成之后就是任务执行了,在hadoop中一个任务的执行是包含在一个单独的JVM中的,在任务启动阶段会生成一个shell(taskjvm.sh),然后会通过ShellCommandExecutor类来执行这个脚本,底层通过...
  • lihm0_1
  • lihm0_1
  • 2013-11-11 14:34
  • 2065
    个人资料
    • 访问:64240次
    • 积分:1029
    • 等级:
    • 排名:千里之外
    • 原创:39篇
    • 转载:23篇
    • 译文:0篇
    • 评论:23条
    最新评论