您的位置:首页 > 运维架构

Hadoop Streaming 实战: 传递环境变量

2014-06-06 16:07 423 查看
环境变量可以理解程序运行的系统环境,用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。

用JAVA实现的Map-Reduce程序可以通过Hadoop提供的编程接口访问作业的配置信息,而streaming程序不能使用JAVA编程接口,因此,streaming框架通过设置环境变量的方式给mapper、reducer程序传递配置信息。常用的环境变量如下:

HADOOP_HOME

计算节点上配置的Hadoop路径

LD_LIBRARY_PATH

计算节点上加载库文件的路径列表

PWD

当前工作目录

dfs_block_size

当前设置的HDFS文件块大小

map_input_file

mapper正在处理的输入文件路径

mapred_job_id

作业ID

mapred_job_name

作业名

mapred_tip_id

当前任务的第几次重试

mapred_task_id

任务ID

mapred_task_is_map

当前任务是否为map

mapred_output_dir

计算输出路径

mapred_map_tasks

计算的map任务数

mapred_reduce_tasks

计算的reduce任务数

示例:

1).编写map程序mapper.sh;reduce程序reducer.sh;测试数据test.txt

mapper.sh:

#以下为环境变量

TASK_ID=$mapred_task_id

PDW=$PWD

BLOCK_SIZE=$dfs_block_size


#环境变量附着到输入数据并输出

whilereadline

do

echo"$TASK_ID$PDW$BLOCK_SIZE$line"

done


reducer.sh:

#!/bin/sh


whilereadline

do

echo$line

done


test.txt:

1,2,1,1,1

1,2,2,1,1

1,3,1,1,1

1,3,2,1,1

1,3,3,1,1

1,2,3,1,1

1,3,1,1,1

1,3,2,1,1

1,3,3,1,1


2)运行并观察输出

$hadoopstreaming

-input/app/test/test.txt/

-output/app/test/test_result/

-mapper./mapper.sh-reducer./reducer.sh/

-filemapper.sh-filereducer.sh/

-jobconfmapred.map.tasks=10-jobconfmapred.reduce.tasks=1/

-jobconfmapred.job.name="envi_test"


$hadoopfs-cat/app/test/test_result/part-00000

/home/disk5/mapred/taskTracker/jobcache/job_201104221932_88161/attempt_201104221932_88161_m_000000_0/work2684354561,2,1,1,1

/home/disk3/mapred/taskTracker/jobcache/job_201104221932_88161/attempt_201104221932_88161_m_000001_0/work2684354561,2,2,1,1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: