如何在 shell 脚本中读取所需文件

how to read required file in shell script

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

我在 Python 中编写了两个 Hadoop MapReduce 程序:map.py 和 red.py。 然后在HDFS上写了run.sh来进行MapReduce使用Hadoop streaming。

需要读取HDFS上半年的数据,文件named: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

非常感谢!

不确定,您是要读取 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 }'`
for IN_PATH in `echo $hdfs_files`;
do 
  echo "HDFS FILE IS: $IN_PATH"
done