You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hadoop Streaming场景下如何去除输出结果末尾的制表符?

去除Hadoop Streaming输出结果末尾制表符的方法

针对你当前的Hadoop Streaming任务,要去掉输出结果每行末尾的制表符,可以通过以下几种方式实现:

方法一:修改Mapper/Reducer为文本处理命令

直接替换cat为sed或awk命令,在输出时自动去除行尾的制表符:

使用sed命令的示例命令

hadoop jar \
      /usr/hdp/3.1.0.0-78/hadoop-mapreduce/hadoop-streaming.jar \
      -Dmapred.reduce.tasks=1 \
      -Dmapred.job.queue.name=default \
      -input hdfs://yyclusterxx/hive_warehouse/xx.db/tab/dt=2023-01-03 \
      -output hdfs://yyclusterxx/hive_warehouse/xx.db/tab/dt=2023-01-03-test5 \
      -mapper "sed 's/\t$//'" \
      -reducer "sed 's/\t$//'"

sed 's/\t$//'的作用是精准匹配每行末尾的制表符,并将其替换为空内容。

使用awk命令的示例命令

hadoop jar \
      /usr/hdp/3.1.0.0-78/hadoop-mapreduce/hadoop-streaming.jar \
      -Dmapred.reduce.tasks=1 \
      -Dmapred.job.queue.name=default \
      -input hdfs://yyclusterxx/hive_warehouse/xx.db/tab/dt=2023-01-03 \
      -output hdfs://yyclusterxx/hive_warehouse/xx.db/tab/dt=2023-01-03-test5 \
      -mapper "awk '{sub(/\t$/,"");print}'" \
      -reducer "awk '{sub(/\t$/,"");print}'"

awk '{sub(/\t$/,"");print}'会定位每行末尾的制表符并删除,再输出处理后的完整行内容。

方法二:针对键值对输出的特殊处理(若适用)

如果你的任务实际是输出键值对(而非单纯复制输入),Hadoop Streaming默认会用制表符分隔键和值。若要避免末尾出现多余制表符,可以通过配置参数修改输出分隔符:

hadoop jar \
      /usr/hdp/3.1.0.0-78/hadoop-mapreduce/hadoop-streaming.jar \
      -Dmapred.reduce.tasks=1 \
      -Dmapred.job.queue.name=default \
      -Dmapred.textoutputformat.separator= \  # 设置为空分隔符
      -input hdfs://yyclusterxx/hive_warehouse/xx.db/tab/dt=2023-01-03 \
      -output hdfs://yyclusterxx/hive_warehouse/xx.db/tab/dt=2023-01-03-test5 \
      -mapper cat \
      -reducer cat

注意:此方法仅适用于键值对输出场景,若你的任务是直接复制输入内容,建议优先使用方法一。

内容的提问来源于stack exchange,提问作者rui liang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:12:44