IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> HadoopCore-MapReduce -> 正文阅读

[大数据]HadoopCore-MapReduce

3.MapReduce简介

4.MapReduce运行流程

program——》master
assign map散——>worker——》split逻辑切分——》localwrite到 disks (先暂存,解耦)
assign reduce聚——》worker——》聚在一起——》output files

5.流程详解

1.pre-map:map前期准备
文件切分——》<k,v>
2.map: 打散
partition(hash值运算,按split进行划分)——》sort排序——》combine局部聚合
2.5shuffle:洗牌,神奇发生处
sort&merge(排序,partition合并)
3.reduce:聚
reduce全局聚合——》output

注意:combine局部聚合,为了减少全局聚合的压力
但也不一定哪都适用,不能局部计算的类型就不适合局部聚合

2.MapReduce Java Api 实现

2.1 Map类 (散)

		对数据进行切分

		重点:StringTokenizer st=new StringTokenizer(line,",");

		在这就可以设置具体的切分方式

2.2 Reduce类 (聚)

		 Iterable<IntWritable> values,按key值将相同key对应的value形成一个聚合体,可以看成一个集合。

		在迭代中,获取对应的value值。便可以进行各种计算。

		所有Reduce类中 , 每次传来的就是  key 和 key对应value的集合,这个概念是求平均值的重点!

2.3 Driver类 (驱动)

		可以设定有多少个环节,一般多操作job.setCombinerClass,局部聚合看情况添减。

3.如何判断输入数据的类型

3.1判断数组

		1) 正则表达式

		2) 强制转换

		3) 现成的API

3.2 正则表达式

		最为灵活强大

1)Pattern

			创建正则表达式的对象,便能做操作

2)Matcher

		1.matches()			全匹配

		2.lookingAt()		前段匹配

		3.find()		任意位置匹配

4.数据的分块存储和切分计算

	任何文件都可以进行分块存储  (都是二进制)

	但不一定都适合切分计算,比如一张图片切分成两段计算,就是两个废文件

5.压缩的本质

	数据有一定的重复性和规律性

6.文件格式

	1 .txt 	可切分	便捷	成本大

	2  .seq	可切分	kv存储,可压缩	不易查看数据

	3 .rc	可切分	查询快,利用率高		每一项都不最高 

	(行列切分,行切分保证数据连贯完整,列切分保证数据相似性。便于减少寻址时间,提高压缩率)

	4 .orc	可切分	rc的进一步提升

7.压缩格式

gz		最原生	不可切分		cpu要求高	<128最好

lzo		不原生	快,合理

bz2		原生	快,高

snappy	不原生	快,合理

1.文件输出格式

-Dmapred.output.compress=true \

-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec\

main方法中添加-

         //参数解析器

        GenericOptionsParser optionParser = new GenericOptionsParser(conf,args);

      String[] remainingArgs = optionParser.getRemainingArgs();

       if ((remainingArgs.length != 2)) {

        System.err.println("Usage: yarn jar jar_path main_class_path -D参数列表 <in> <out>");

        System.exit(2);

       }

//指定输入数据的路径

FileInputFormat.addInputPath(job, new Path(remainingArgs[0]));

//指定输出路径,并要求该输出路径一定是不存在的

FileOutputFormat.setOutputPath(job, new Path(remainingArgs[1]));

gzip格式:.GzipCodec lzo格式:.lzo.LzopCodec bzip2格式:.BZip2codec

2.自定义Partition

-Dmapred.reduce.tasks=2 \ 定义reduce数量

 /**

        自定义Partition的定义

 */

publicstatic class MyHashPartitioner<K, V> extends Partitioner<K, V> { 

    /**Use {@link Object#hashCode()} to partition. */

   public int getPartition(K key, V value, int numReduceTasks) {

       return (key.toString().charAt(0) < 'q' ? 0 : 1) % numReduceTasks;

       // return key.toString().charAt(0);

    }

}

可以对key进行限制进行不同规则切分

3.外部配置文件-configuration

当需要将某个xx.txt文件内容传递到各个计算节点,可通过Configuration传递到Map中

覆写setup方法,需要的参数只初始化一次。

标记状态位,用于标记一次性初始化的用法。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:15:18  更:2021-10-21 12:15:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:44:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码