Hadoop Streaming 实战: 传递环境变量

本文介绍了如何通过修改系统环境变量来定制Hadoop环境,特别针对Map-Reduce与Streaming程序中配置信息的传递方式。通过示例展示了如何编写并运行这些程序,以及如何通过环境变量获取关键参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


环境变量可以理解程序运行的系统环境,用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。
用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:
<!--CRLF-->
#以下为环境变量
<!--CRLF-->
TASK_ID=$mapred_task_id
<!--CRLF-->
PDW=$PWD
<!--CRLF-->
BLOCK_SIZE=$dfs_block_size
<!--CRLF-->

<!--CRLF-->

      
#环境变量附着到输入数据并输出
<!--CRLF-->
while read line
<!--CRLF-->
do
<!--CRLF-->
        echo "$TASK_ID  $PDW  $BLOCK_SIZE $line" 
<!--CRLF-->
done
<!--CRLF-->

<!--CRLF-->

      
reducer.sh:
<!--CRLF-->
#!/bin/sh
<!--CRLF-->

<!--CRLF-->

      
while read line
<!--CRLF-->
do
<!--CRLF-->
        echo $line
<!--CRLF-->
done
<!--CRLF-->

<!--CRLF-->

      
test.txt:
<!--CRLF-->
1,2,1,1,1
<!--CRLF-->
1,2,2,1,1
<!--CRLF-->
1,3,1,1,1
<!--CRLF-->
1,3,2,1,1
<!--CRLF-->
1,3,3,1,1
<!--CRLF-->
1,2,3,1,1
<!--CRLF-->
1,3,1,1,1
<!--CRLF-->
1,3,2,1,1
<!--CRLF-->
1,3,3,1,1
<!--CRLF-->

2) 运行并观察输出

$hadoop streaming  
<!--CRLF-->
-input /app/test/test.txt / 
<!--CRLF-->
-output /app/test/test_result / 
<!--CRLF-->
-mapper ./mapper.sh -reducer ./reducer.sh /
<!--CRLF-->
-file mapper.sh -file reducer.sh  /
<!--CRLF-->
-jobconf mapred.map.tasks=10 -jobconf mapred.reduce.tasks=1  /
<!--CRLF-->
-jobconf mapred.job.name="envi_test"
<!--CRLF-->

<!--CRLF-->

    
$hadoop fs -cat /app/test/test_result/part-00000
<!--CRLF-->

<!--CRLF-->

    
/home/disk3/mapred/taskTracker/jobcache/job_201104221932_88161/attempt_201104221932_88161_m_000001_0/work 268435456 1,2,2,1,1
<!--CRLF-->
/home/disk9/mapred/taskTracker/jobcache/job_201104221932_88161/attempt_201104221932_88161_m_000002_0/work 268435456 1,3,1,1,1
<!--CRLF-->
/home/disk9/mapred/taskTracker/jobcache/job_201104221932_88161/attempt_201104221932_88161_m_000003_0/work 268435456 1,3,2,1,1
<!--CRLF-->
/home/disk10/mapred/taskTracker/jobcache/job_201104221932_88161/attempt_201104221932_88161_m_000004_0/work 268435456 1,3,3,1,1
<!--CRLF-->
/home/disk9/mapred/taskTracker/jobcache/job_201104221932_88161/attempt_201104221932_88161_m_000005_0/work 268435456 1,2,3,1,1
<!--CRLF-->
/home/disk4/mapred/taskTracker/jobcache/job_201104221932_88161/attempt_201104221932_88161_m_000006_0/work 268435456 1,3,1,1,1
<!--CRLF-->
/home/disk2/mapred/taskTracker/jobcache/job_201104221932_88161/attempt_201104221932_88161_m_000007_0/work 268435456 1,3,2,1,1
<!--CRLF-->
/home/disk3/mapred/taskTracker/jobcache/job_201104221932_88161/attempt_201104221932_88161_m_000008_0/work 268435456 1,3,3,1,1
<!--CRLF-->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值