2017-07-19 43 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