Hadoop Streaming使用简介

news/2024/5/20 4:29:32 标签: hadoop, hdfs, 大数据

一、Hadoop Streaming

  它是hadoop的一个工具,用来创建和运行一类特殊的map/reduce作业。所谓的特殊的map/reduce作业可以是可执行文件或脚本本件(python、PHP、c等)。Streaming使用“标准输入”和“标准输出”与我们编写的Map和Reduce进行数据的交换。由此可知,任何能够使用“标准输入”和“标准输出”的编程语言都可以用来编写MapReduce程序。如下

$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming.jar
 
-input myInputDirs 【hdfs系统中输入文件/夹位置】 

-output myOutputDir 

-mapper cat 

-reducer wc 

-file 【需要分发的文件】
 

二、Hadoop Streaming原理

   在上面的例子里,mapper和reducer都是可执行文件,它们从标准输入读入数据(一行一行读),并把计算结果发给标准输出。Streaming工具会创建一个Map/Reduce作业,并把它发送给合适的集群,同时监视这个作业的整个执行过程。

    如果一个可执行文件被用于mapper,则在mapper初始化时,每一个mapper任务会把这个可执行文件作为一个单独的进程启动。 mapper任务运行时,它把输入切分成行并把每一行提供给可执行文件进程的标准输入。同时,mapper收集可执行文件进程标准输出的内容,并把收到的每一行内容转化成key/value对,作为mapper的输出。默认情况下,一行中第一个tab之前的部分作为key,之后的(不包括tab)作为value。如果没有tab,整行作为key值,value值为null。不过,这可以定制,在下文中将会讨论如何自定义key和value的切分方式。

    如果一个可执行文件被用于reducer,每个reducer任务会把这个可执行文件作为一个单独的进程启动。 Reducer任务运行时,它把输入切分成行并把每一行提供给可执行文件进程的标准输入。同时,reducer收集可执行文件进程标准输出的内容,并把每一行内容转化成key/value对,作为reducer的输出。默认情况下,一行中第一个tab之前的部分作为key,之后的(不包括tab)作为value。在下文中将会讨论如何自定义key和value的切分方式。

三、使用注意事项

  1、使用Hadoop Streaming运行MapReduce会比用java代码写的MapReduce稍慢一些,原因如下:

      Java运行Map任务输出一定数量结果集后就会启动Reduce任务,而使用Streaming要等到所有Map任务都执行完毕后才会启动Reduce任务;

  2、运行失败

      使用Hadoop Streaming时需要将mapper文件和reducer文件放到所有tasktracker节点上。或者采用 -file 选型指定文件,打包文件到提交的作业中,可以是mapper或者reducer要用的输入文件,如配置文件,字典,framework会把文件当成作业提交的一部分分发到集群的机器上。。

  3、只需要map函数处理数据,如何设置?

      “-jobconf  mapred.reduce.tasks=0” ,Map/Reduce框架就不会创建reducer任务,直接使用mapper任务的输出做为最终输出。

  4、如何为作业指定其他插件

      -inputformat JavaClassName
      -outputformat JavaClassName
      -partitioner JavaClassName   【用户自定义的partitioner程序】
      -combiner JavaClassName    【用户自定义的combiner程序(必须用java实现)】

  5、为作业指定附加配置参数

    【-D】:作业的一些属性(以前用的是-jonconf),具体有:

       1)mapred.map.tasks:map task数目
       2)mapred.reduce.tasks:reduce task数目
       3)stream.map.input.field.separator/stream.map.output.field.separator: map task输入/输出数据的分隔符,默认均为\t。
       4)stream.num.map.output.key.fields:指定map task输出记录中key所占的域数目
       5)stream.reduce.input.field.separator/stream.reduce.output.field.separator:reduce task输入/输出数据的分隔符,默认均为\t。
       6)stream.num.reduce.output.key.fields:指定reduce task输出记录中key所占的域数目
 6、如何处理python程序map输出文件,每行后面的的tab符 or 空格符;
 问题原因:当Map/Reduce框架从mapper的标准输入读取一行时,它把这一行切分为key/value对。在默认情况下,每行第一个tab符之前的部分作为key,之后的部分作为value(不包括tab符)。
 参考5做如下设置:建设分隔符是"^"【-jobconf mapred.textoutputformat.separator=^ -jobconf stream.map.output.field.separator=^】
 7、如何输出gzip文件格式的输出
 你只需设置streaming作业中的选项‘-jobconf mapred.output.compress=true -jobconf mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCode’
 8、如何使用Streaming如何解析XML文档?
 可以使用StreamXmlRecordReader来解析XML文档。hadoop jar hadoop-streaming.jar -inputreader "StreamXmlRecord,b"


http://www.niftyadmin.cn/n/353814.html

相关文章

【算法题】2364. 统计坏数对的数目

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 题目: 给你一个下标从 0 开始的整数数组 …

leetcode 数据库题 196,197,262,511,550,570

leetcode 数据库题第二弹 196. 删除重复的电子邮箱197. 上升的温度262. 行程和用户511. 游戏玩法分析 I550. 游戏玩法分析 IV570. 至少有5名直接下属的经理577. 员工奖金小结 196. 删除重复的电子邮箱 题目地址:https://leetcode.cn/problems/delete-duplicate-emai…

【哈士奇赠书活动 - 24期】-〖前端工程化:基于Vue.js 3.0的设计与实践〗

文章目录 ⭐️ 赠书 - 《前端工程化:基于Vue.js 3.0的设计与实践》⭐️ 内容简介⭐️ 作者简介⭐️ 精彩书评⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《前端工程化:基于Vue.js 3.0的设计与实践》 ⭐️ 内容简介 本书以Vue.js的3.0版本为核心技术栈&#…

2023年电工杯报名队伍破万!!!!

截止2023年5月24日凌晨0:56分,刚刚使用账号进行电工杯队伍注册,电工杯报名队伍已经达到10600只队伍,作为本年度上半学年,最后一场大型认可度较高的比赛,本次比赛的时间设置、报名费免费等优势使得,这场比赛…

STM32入门100步(第1步~第5步)

第一章 基础知识与平台建立 第1~2步 是时候学ARM了 1.1 为啥学? 什么是ARM? ARM处理器是英国Acorn有限公司设计的低功耗成本的第一款RISC(精简指令集)微处理器。全称为Advanced RISC Machine。ARM是一种性能出众的32位处理器的内核架构。1991年,一家叫ARM的公司在英国…

结构体总结

目录 1.普通结构体 2.定义结构体并同时建立变量 3.匿名结构体 4.typedef重命名 5.typedef省略结构体名字 6.结构体数组 7.结构体指针 8.结构体嵌套 9.结构体链表(头插法) 10.结构体中的函数指针 11.结构体的构造函数和初始化列表 1.普通结构体 stru…

【数据库复习整理】数据库表连接和聚合的区别

数据库表连接和聚合是在数据库查询中常用的操作,它们具有不同的目的和方式。 **表连接(Table Join):** 表连接是用于将两个或多个表中的数据进行关联的操作。通过指定连接条件(例如共享的列或关联键)&…

Chatbot UI老外在用的gpt网页版 搭建方法分享!

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT资源 Chatbot UI 高仿ChatGPT官网,中文还支持贼好,界面美观度间距还需要打磨。是老外做的吗? ​ 环境部署 更新环境 apt update -y && apt upg…