当前位置: 首页 > news >正文

【Hadoop-驯化】一文教你轻松搞懂hadoop的基本原理

【Hadoop-驯化】一文教你轻松搞懂hadoop的基本原理
 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🌵文章目录🌵

  • 🎯 1.基本介绍
      • hadoop的架构图
      • groupby例子
      • hadoop中数据倾斜问题

下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

🎯 1.基本介绍

  hadoop是一个大规模的集群处理框架,可以用来对大规模的数据进行并行处理,用来处理大规模的日志信息很方便,目前用的比较多的基本就是hdfs和MR计算框架了,Hadoop的生态架构如下所示:
在这里插入图片描述

  目前对于上述的生态组件的话,hive,hdfs,hbase以及flume和sqoop用的比较多,机器学习库mahout现在基本不用了,但是随着spark的得绝对优势,目前hadoop的使用基本都很少了,对于非大数据开发工程师来说,基本了解上层的数据挖掘、分析的使用即可,平时基本接触不到底层的原理。

hadoop的架构图

   对于hadoop的数据生态架构处理流程的话,如下所示,当数据输入进来,对其进行分桶操作,然后对map的结果进行排序,最好将排序好的结果传给reduce端,一般我们对大规模的数据都进行streaming流式处理,基本就是写一个map函数和一个reduce函数,一般map函数是对数据进行简单的处理,而reduce阶段基本都是进行统计处理。
  对于流式处理基本有如下几个地方需要注意的就是了,常用的设置如下:

"-input", INPUT_FILE.getAbsolutePath(),
"-output", OUTPUT_DIR.getAbsolutePath(),
"-mapper", map, //map函数
"-reducer", reduce, //reduce函数
"-partitioner",用户自定义分割函数, 
"-jobconf", "stream.map.output.field.separator=.", //输出流的默认分隔符
"-jobconf", "stream.num.map.output.key.fields=2", //输出流的key的个数,这个会默认是1,只按第一列进行排序,
//如果想要多列需要进行设置

在这里插入图片描述

groupby例子

  使用hadoop进行数据处理,在写MR函数时,比较难写的一个地方就是分组聚合操作了,从上面的数据流操作过程可知,当map端的数据输入给reduce时是已经排好序了的,因此,具体写法如下:

    func_dict = {} //定义一个字典用来key的赋值def groupby(key, func, *param):// 字典初始化,用'\t'来表示初始keyif func not in func_dict:func_dict[func] = '\t'//保存先前的keypkey = func_dict[func]// 如果map的key不同了且不为'\t'触发reduce函数if pkey != key:if pkye != '\t':func(pkey, *param)// 更新字典中的keyfunc_dict[func] = keyreturn Truereturn Falsedef reduce_func(k, v):"""reduce的数据处理函数"""print(k, v)// reduce端调用groupby的方法res_list = [] //用来保存相同key的values值for line in sys.stdin://判断groupby函数是否触动if groupby(key, reduce_func, res_list):res_list = [] // 重新讲保存列表置空line = line.strip().split('\t')k, v = line[0], line[1]// 保留相同key的valueres_list.append(value)groupby('\t', reduce_func, res_list,)

hadoop中数据倾斜问题

  在使用hadoop进行数据处理时,如果出现一个key的时比较多,这样对造成hadoop处理数据的效率特别慢,一般的处理方法有这些:

1.增加jvm内存,这适用于第一种情况(唯一值非常少,极少数值有非常多的记录值(唯一值少于几千)),这种情况下,往往只能通过硬件的手段来进行调优,增加jvm内存可以显著的提高运行效率。   
2.增加reduce的个数,这适用于第二种情况(唯一值比较多,这个字段的某些值有远远多于其他值的记录数,但是它的占比也小于百分之一或千分之一),我们知道,这种情况下,最容易造成的结果就是大量相同key被partition到一个分区,从而一个reduce执行了大量的工作,而如果我们增加了reduce的个数,这种情况相对来说会减轻很多,毕竟计算的节点多了,就算工作量还是不均匀的,那也要小很多。   
3.自定义分区,这需要用户自己继承partition类,指定分区策略,这种方式效果比较显著。   
4.重新设计key,有一种方案是在map阶段时给key加上一个随机数,有了随机数的key就不会被大量的分配到同一节点(小几率),待到reduce后再把随机数去掉即可。   
5.使用combinner合并,combinner是在map阶段,reduce之前的一个中间阶段,在这个阶段可以选择性的把大量的相同key数据先进行一个合并,可以看做是local reduce,然后再交给reduce来处理,

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 单个或两个及以上java安装与环境变量配置
  • Java码农人生使用手册——类和对象
  • Python教程(十一):单元测试与异常捕获
  • CTFHub XSS DOM 跳转
  • Python面试整理-第三方库
  • C++面向对象高级编程(I)侯捷 自我总结版
  • vim、sublime、notepad文本编辑器的使用
  • 爬虫中常见的加密算法Base64伪加密,MD5加密【DES/AES/RSA/SHA/HMAC】及其代码实现(二)
  • 设计模式介绍
  • 测试面试宝典(四十二)—— 接口测试什么时候介入
  • thinkphp 关联查询例子
  • 苹果手机录音删除了怎么恢复?快收藏,这3个方法超简单!
  • Learning vtkjs之Calculator
  • 我菜单为什么跟着滑动了?!!—— 固定定位为什么会失效?
  • ubuntu下Xsens_MTi_300传感器的python驱动安装
  • [case10]使用RSQL实现端到端的动态查询
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • learning koa2.x
  • Markdown 语法简单说明
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Next.js之基础概念(二)
  • 安装python包到指定虚拟环境
  • 读懂package.json -- 依赖管理
  • 翻译:Hystrix - How To Use
  • 给Prometheus造假数据的方法
  • 基于webpack 的 vue 多页架构
  • 基于组件的设计工作流与界面抽象
  • 力扣(LeetCode)965
  • 强力优化Rancher k8s中国区的使用体验
  • 全栈开发——Linux
  • 如何设计一个比特币钱包服务
  • 深入 Nginx 之配置篇
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • raise 与 raise ... from 的区别
  • 仓管云——企业云erp功能有哪些?
  • 如何用纯 CSS 创作一个货车 loader
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​secrets --- 生成管理密码的安全随机数​
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (1)STL算法之遍历容器
  • (8)STL算法之替换
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)计算机毕业设计高校学生选课系统
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)Linux Shell编程——输入输出重定向
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)ObjectiveC 深浅拷贝学习
  • (转)可以带来幸福的一本书
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net Core与存储过程(一)