【问题标题】:how to read required file in shell script如何在 shell 脚本中读取所需的文件
【发布时间】:2017-07-20 14:16:57
【问题描述】:

抱歉问题不清楚,我是 Hadoop 研究的新手。 我再次编辑了问题。

我用 Python 编写了两个 Hadoop MapReduce 程序:map.py 和 red.py。 然后在 HDFS 上编写 run.sh 以继续使用 Hadoop 流的 MapReduce。

我需要在HDFS上读取半年的数据,文件名为:20170101-20170630。

文件在 HDFS 中的路径:

/user/name/20161231
/user/name/20170101
/user/name/20170102
.....
/user/name/20170630
/user/name/20170701

如何编写run.sh来读取需要的文件?

run.sh中的脚本部分:

#! /bin/bash 
HPHOME=/opt/cloudera/parcels/CDH
JAR_PACKAGE=/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming.jar
#it dosen't work, how to read selected file:20170101-20170630
IN_PATH=/user/name/20170[101-630] 
OUT_PATH=/user/out
MAP_FILE=/home/map.py
RED_FILE=/home/red.py

非常感谢!

【问题讨论】:

  • 删除了“python”标签,这是一个 bash 问题而不是 python 问题。
  • 先将想要的文件移动或复制到一个目录中如何?

标签: shell hadoop mapreduce streaming


【解决方案1】:

不确定,您是尝试读取local 文件还是hdfs 文件。但会提出两种解决方案。

从本地 unix 系统读取 6 个月的文件。

local_files=`ls /user/name/2017[0][1-6][0-9][0-9]`
for IN_PATH in `echo $local_files`;
do 
   echo "LOCAL FILE IS: $IN_PATH"
done

从 hdfs 系统读取 6 个月的文件。

hdfs_files=`hdfs dfs -ls /user/hduser/|grep /user/hduser/2016[0][1]|awk '{print $8}'`
for IN_PATH in `echo $hdfs_files`;
do 
  echo "HDFS FILE IS: $IN_PATH"
done

【讨论】:

  • 它有效。我很抱歉这个问题不清楚,我编辑了它。非常感谢! :)
猜你喜欢
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
相关资源
最近更新 更多