Hadoop Streaming的基本原理与参数解析

2023-05-16

Hadoop Streaming原理介绍

在这里插入图片描述
Hadoop是基于hdfs和MapReduce的分布式框架。由于hadoop是基于java语言的,对于其他语言实现map reduce操作不太方便,因此出现了hadoop streaming。

hadoop streaming可以将各种非java语言的脚本(script)或者可执行文件(executable)作为map和reduce函数(当然java的更可以)。其基本的方法就是将输入和输出都通过标准输入输出流来进行。这样,我们就可以从标准输入读取数据,进行map操作,传给reduce,再进行合并,输出到标准输出。我们发现,这个过程中,并没有提到具体的语言,因为都是在标准的I / O stream中操作的。

可执行文件可以是python的一个.py脚本,也可以是一个自定义的.sh的shell脚本。或者直接用linux自带的函数,如 cat, wc 等。

标准输入输出,在shell脚本中,可以用cat 等方式,而输出则可以用 > 或者管道符号 | 。在c中就是stdio,c++里是cin和cout。python中就是sys.stdin和print。等等。只要从标准输入拿数据,并且写到标准输出中,hadoop streaming都能正确地运行。

hadoop streaming的基本原理示意图如下:

在这里插入图片描述
可以看到,输入首先在hdfs上进行split,然后分别用mapper处理,然后经过shuffle&sort,进入reducer,汇合,得到最终结果。可以看到,这里深颜色的mapper和reducer就是我们的可执行文件或者脚本。而从streaming java mapper/reducer可以看出,实际上是hadoop streaming对自定义的mapper和reducer进行了一个java的封装,在封装的mapper和reducer内部,输出输出是用stdin和stdout传的,消除了不同语言脚本的差异。相当于开了一个java 的MapReduce,然后再运行自定义脚本,并将输入的k-v对转成用stdin,通过管道喂给自定义脚本,得到输出后,通过stdout传出来,再重新整理成k-v对。

下面我们看看实际中的hadoop streaming是如何使用的。

Hadoop Streaming的用法和参数简介

hadoop streaming的基本形式如下所示:

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
    -input myInputDirs \
    -output myOutputDir \
    -mapper /bin/cat \
    -reducer /bin/wc

首先是hadoop的二进制文件路径,然后jar,运行hadoop-streaming.jar这个jar包,后面跟着一些参数。输入输出的存放位置,以及mapper和reducer的可执行文件。在上面,我们的mapper就是linux 中的cat函数,而reducer则是wc函数。因此这个脚本的作用就是,将所有输入cat起来,然后统计一下字数。

下面我们来看下hadoop streaming的各种参数:

bin/hadoop command [genericOptions] [streamingOptions]

这里,通用option在前面,streaming的在后面。所谓通用的option指的是如下这些参数,即在hadoop中本身也存在的参数:
在这里插入图片描述
比如,-conf指定配置文件,在直接用hadoop操作是也可以这样使用。同理,-D表示和directory相关的一些参数,它的形式比如:

   -D mapred.local.dir=/tmp/local
   -D mapred.system.dir=/tmp/system
   -D mapred.temp.dir=/tmp/temp

-D的参数常用的有以下几个:

-D mapred.job.name 就是给提交到hdfs的job起个名字
-D mapred.job.priority job的优先级,有五种取值:LOW、VERY_LOW、NORMAL、HIGH、VERY_HIGH 
-D mapred.job.map.capacity 最多同时运行map数量
-D mapred.job.reduce.capacity 最多同时运行reduce数量
-D mapred.map.tasks map任务数
-D mapred.reduce.tasks reduce任务数

而streaming options就是hadoop streaming特有的一些参数,主要包括以下几个:

-input : 输入文件路径,是hdfs集群上的路径
-output : 输出路径,也是集群的
-mapper : mapper脚本名,或者可执行文件名称,比如 "cat"/"mypyscript.py"-reducer : reduer脚本或可执行文件名,如"cat"或者py文件名等
-file : 随job提交的文件路径,这里是本地路径

在执行hadoop streaming时,mapper和reducer脚本不一定都在集群上,当集群上没有对应的mapper和reducer时,需要通过-file,把所需要的所有文件都提交上来(和job一起)。比如,在执行mapper的时候,需要用到脚本my.py,以及一个字典 mydict.dict,那么,可以这么写:

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
    -input myInputDirs \
    -output myOutputDir \
    -mapper my.py \
    -reducer cat \
    -file my.py \
    -file mydict.dict

这里补充一点,在普通场景下,我们的程序较为复杂,体量较大,而数据则很方便可以下载到本地,这种情况下,我们的程序不动,而数据需要被下载过来。而在大数据场景下,数据体量非常之大,而我们的程序的操作则比较简单,因此,采用了相反的策略,即数据不动,将脚本传过去找数据,然后在hdfs上运算。

我只能期待着,
那一天——
地下的烈火冲腾,
把这活棺材和我一齐烧掉,
我应该在烈火和热血中
得到永生。
—— 叶挺 《囚歌》

2019年11月5日00:17:13

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop Streaming的基本原理与参数解析 的相关文章

  • 多维数组的初始化。大括号{}与小括号()的区别

    include lt stdio h gt int main void int a 3 2 61 0 1 2 3 4 5 int b 3 2 61 0 1 2 3 4 5 int p int p1 p 61 a 0 p1 61 b 0 pr
  • ubuntu16.04修改复制粘贴快捷键的方法

    Ubuntu虚拟机在terminal使用CTRL 43 C CTRL 43 V xff0c 复制 xff0c 粘贴的办法 xff1a 选择 xff1a Terminal gt Preference gt Shortcut 把你要修改的复制
  • 虚拟机ubuntu16.04的备份与恢复方法

    本文目的在于记录在命令行的模式下进行linux系统的备份与还原 xff0c 虽然系统的备份方法有很多种 xff0c 但本文只记录最简单粗暴的一种 首先成为root用户 xff1a sudo su 然后进入文件系统的根目录 当然 xff0c
  • VSCode C++代码提示和补全

    网上都说安装完扩展C C 43 43 Extension就可以了 xff0c 但我这儿不行 xff0c 发现是因为需要自己另外提供头文件 xff0c 于是利用了mingw的头文件 1 解压i686 4 9 3 release posix d
  • vs 写c++一个类的头文件放在改工程下的一个子目录里,include出错

    工程名test 类名http 子目录 xff1a http 在主源文件中include这个http 的头文件时 xff0c include 34 http http h 34 编译出错 一定要改成绝对路径 include 34 home m
  • STM32 FreeRTOS堆、栈以及系统堆栈

    stm32以及freertos 堆栈解析 https blog csdn net sinat 36568888 article details 124320985 1 当freertos采用heap 4内存分配方案时 xff0c stm32
  • 在linux下如何编译c/c++代码(库)

    目录 在linux下如何编译c c 43 43 代码 库 1 运行环境 1 学知资料 2 Linux下静态库和动态库的区别 2 基本文件类型 2 c c 43 43 程序编译使用基本流程 2 gcc和g 43 43 区别 3 gcc基本使用
  • Ubuntu系统用火狐浏览器无法上网问题的解决方法

    刚做的Ubuntu系统用火狐浏览器无法上网问题的解决方法 首先打开终端 xff0c 输入 xff1a sudo apt get update 等待出现完成字样 其次再输入 xff1a sudo apt get install firefox
  • Raspberry Pi2/3引脚介绍

    引脚图 Raspberry Pi2 3引脚如下图所示 xff1a Raspberry Pi 3 的硬件接口通过开发板上的 40 排针 J8 公开 功能包括 xff1a 17x GPIO 引脚1x SPI 总线1x I2C 总线2x 5V 电
  • robot_pose_ekf 使用说明

    协方差参数的设置 主要确定mpu6050和odom编码器协方差参数的设置 参考 xff1a turtlebot node协方差的设置 mpu605参数的设置 参考 xff1a https github com Arkapravo turtl
  • 互斥锁、读写锁 、 自旋锁和RCU锁

    基础知识思考整理 http blog csdn net aganlengzi article details 50996227 互斥锁 mutex xff1a 在访问共享资源之前对进行加锁操作 xff0c 在访问完成之后进行解锁操作 加锁后
  • Dashgo D1概述

    概述 Dashgo D1是深圳EAI科技专门针对ROS开发的移动平台 xff0c 自主研发的核心结构保证了载重大 动力足 续航长和扩展性强的性能 xff0c 深受创客 科研 企业的欢迎 主要特性 xff1a 易于使用 由整机及其附件组成 x
  • 搭建Dashgo运行环境

    安装 设置用户的串口读取权限 span class hljs built in sudo span usermod span class hljs operator a span G dialout your user name your
  • 超声波避障

    运行如下脚本 roslaunch dashgo bringup bringup smoother ob span class hljs preprocessor launch span 在另一个终端运行 rostopic span clas
  • 虚拟机VirtualBox安装Ubuntu14.04

    本教程的运行环境 xff1a Windows 7 虚拟机 VirtualBox xff0c Ubuntu 14 04 1 准备 下载 VirtualBox5 0版可以使用后面提供的OVA镜像直接导入 xff0c 镜像是ROS的集合环境 xf
  • 树莓派实现自主导航

    使用 Flash Lidar F4 激光雷达进行自主导航 树莓派的IP假设为192 168 11 100 该教程基于地图已经建好并保存的情况下 teb amcl demo launch 的 args 参数要与前面 gmapping demo
  • 键盘控制移动

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为eaibot 默认密码为 eaibot 1 不带陀螺仪的底盘驱动 打开一个终端 xff0c 运行以下命令 xff0c 启动底盘驱动 带平滑加减
  • Dashgo-D1 不带陀螺仪的建图导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot xff0c 默认密码为 eaibot D1与F4的坐标系已经校准正确的情况下 扫描建图 打开一个终端 xff0c ssh登录导
  • Dashgo-D1 带陀螺仪的建图导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot 默认密码为 eaibot D1与F4的坐标系已经校准正确的情况下 扫描建图 打开一个终端 xff0c ssh登录导航模块并启动
  • Dashgo-D1 多点连续导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot xff0c 默认密码为 eaibot 地图已经建好并引用的情况下 第一种方式 打开一个终端 xff0c ssh登录导航模块 x

随机推荐