2017-07-19 59 views
0

对不起,这个问题还不清楚,我是Hadoop研究中的新手。 我再次编辑了问题。如何阅读shell脚本中所需的文件

我在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 

非常感谢您!

+0

删除了“python”标记,这是一个bash问题,而不是python问题。 –

+0

如何将您想要的文件移动或复制到一个目录中? – williezh

回答

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 
+0

它的工作原理。我很抱歉,这个问题还不清楚,我编辑了它。非常感谢你! :) – plainter