【大数据】MapReduce

因上努力

个人主页:丷从心·

系列专栏:大数据

果上随缘


海量数据分流技术

传统Hash
  • Hash(key) % max
一致性Hash(Consistent Hashing)
  • 将哈希值映射到一个哈希环上
  • 每个节点通过哈希函数映射到这个环上一个或多个点
  • 数据项也通过哈希函数映射到环上的某个点,然后按照顺时针方向查找到第一个节点,这个节点就是该数据项存储的地方

MapReduce执行流程

1

InputFormat
  • M a p R e d u c e MapReduce MapReduce框架基础类之一,进行 D a t a   S p l i t Data \ Split Data Split数据分割和 R e c o r d   R e a d Record \ Read Record Read记录读取
  • B l o c k Block Block是底层的文件块, M a p Map Map无法直接读取,需要将 B l o c k Block Block转换为内部可以识别的 R e c o r d Record Record
  • '\n'保证每条记录在数据切割时不被切散,实际上每个 S p l i t Split Split包含后一个 B l o c k Block Block中开头部分的数据,解决 R e c o r d Record Record B l o c k Block Block问题
  • R e c o r d   R e a d e r Record \ Reader Record Reader每读取一条 R e c o r d Record Record,就调用一次 M a p Map Map函数
Shuffle
  • M a p Map Map任务的输出到 R e d u c e Reduce Reduce任务的输入之间的过程
Partitioner
  • 决定数据由哪个 R e d u c e Reduce Reduce处理,从而分区
  • P a r t i t i o n Partition Partition在一个环形内存缓冲区中进行,每个缓冲区大小默认 100 M 100 M 100M,溢写阈值为 100 M × 80 % = 80 M 100 M \times 80\% = 80 M 100M×80%=80M,缓冲区中的数据为 ( p a r t i t i o n , k e y , v a l u e ) (partition , key , value) (partition,key,value)三元组
Spill
  • 在内存缓冲区达到阈值时, S p i l l Spill Spill溢写线程会锁住 80 M 80 M 80M的缓冲区,开始将数据写到本地磁盘上,然后释放内存
  • 每次溢写都生成一个数据文件
  • 数据溢写前会对 k e y key key进行快速排序以及 C o m b i n e Combine Combine
Combiner
  • 将相同的 k e y key key的数据的 v a l u e value value进行合并
  • 减少数据量,提高数据传输效率

2

MapReduce两个重要的进程

JobTracker
  • 主进程,负责接收 C l i e n t Client Client作业提交,调度任务到从节点上运行
  • 监控工作节点状态及任务进度
  • 利用一个线程池来同时处理心跳和用户请求
TaskTracker
  • J o b T r a c k e r JobTracker JobTracker指派任务,实例化用户程序,在本地执行任务
  • 通过周期性的心跳来通知 J o b T r a c k e r JobTracker JobTracker其当前的健康状态,每 3 3 3秒心跳一次,每一次心跳包含了可用的 M a p Map Map R e d u c e Reduce Reduce任务数目、占用的数目以及运行中的任务详细信息

MapReduce物理配置

查看系统资源限制
ulimit -a
设置合适的slot
  • mapred.tasktracker.map.tasks.maximum默认值为 2 2 2
  • mapred.tasktracker.reduce.tasks.maximum默认值为 2 2 2

Hadoop Streaming

  • M a p Map Map R e d u c e Reduce Reduce只需要从 s t d i n stdin stdin读和写到 s t d o u t stdout stdout
  • S t r e a m i n g Streaming Streaming默认只能处理文本数据,如果对二进制数据进行处理,比较好的方法是将二进制的 k e y key key v a l u e value value进行 b a s e 64 base64 base64的编码转换,得到文本
Streaming选项
  • -cacheFile选项指定一个文件,需要上传到 H D F S HDFS HDFS
  • -cacheArchive选项指定一个目录结构,需要上传到 H D F S HDFS HDFS
  • -file选项将本地文件分发到计算节点上
  • -jobconf选项
    • mapred.job.priority表示作业优先级
    • mapred.job.map.capacity表示最多同时运行的 M a p Map Map任务数
    • mapred.job.reduce.capacity表示最多同时运行的 R e d u c e Reduce Reduce任务数
    • mapred.task.timeout表示任务未响应的最大时间

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-16 15:18:18       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-16 15:18:18       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-16 15:18:18       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-16 15:18:18       18 阅读

热门阅读

  1. 自定义一个starter

    2024-05-16 15:18:18       12 阅读
  2. ESP32 Arduino 定时器中断

    2024-05-16 15:18:18       14 阅读
  3. vue3-响应式API(工具函数)-unRef

    2024-05-16 15:18:18       11 阅读
  4. 【数据库】高并发场景下的数据库开发注意要点

    2024-05-16 15:18:18       14 阅读
  5. 什么是Vue.js? Vue.js简介

    2024-05-16 15:18:18       10 阅读
  6. SpringBoot解析MyBatis预编译SQL

    2024-05-16 15:18:18       14 阅读