2017-11-22 3 views
2

bash에서 기본 MapReduce 기능을 만들려고합니다 (새로운 기능입니다). 나는 현재 job_master.sh와 map_function.sh라는 두 개의 스크립트를 가지고있다. 데이터 파일에서 잘라내 기 위해 작업 마스터에서 맵 기능을 실행하려고합니다. 존재하지 않는 경우에는 키로 보냅니다. 그러나 이름으로 파일을 보내면 키를 보냅니다. job_master 스크립트 나 map_function 스크립트를 파일을 인수로 사용하여 실행하면 아무 것도 일어나지 않습니다. if 문을 map_function에 추가하기 전에 작동했습니다.Bash의 기본 MapReduce에서 실행되지 않는 스크립트와 관련된 문제

누구나 왜 그들이 실행되지 않는지 파악할 수있는 경우 아래 두 코드를 모두 포함 시켰습니다. 테스트 할 echo 문을 포함 시키려고 시도했지만 job_master 스크립트에 루프를 입력하거나 map_function 스크립트에서 아무 것도 수행하지 않습니다.

MAP_FUNCTION

#!/bin/bash 

while IFS="," read -r date prod remainder; do 
     if [ ! -e "$prod" ]; 
     then 
       echo $prod >> keys 
     else 
       echo $prod >> $prod 
     fi 
done 

JOB_MASTER

#!/bin/bash 

files=$(ls | egrep 'sales_a*') 

for elem in $files ; do 
     ./map_function.sh $elem 
done 

답변

0

지도 기능 스크립트 입력을 기다리고 있습니다. 보세요 :

while IFS="," read -r date prod remainder; do 
    # ... 
done 

read은 (는) 입력이 어디입니까? stdin에서 기다리고 있지만 아무 것도 전달하지 않은 것입니다.

입니다
./map_function.sh $elem 

, 당신은 명령 줄 인수를 전달하는 : 한편

, 나는이 같은지도 기능 스크립트를 호출하는 것을 알 수있다. 그러나 맵 함수 스크립트는 해당 인수를 사용하지 않습니다. $elem의 내용을 stdin (으)로 리디렉션하고 싶습니다. 이 같은 쓰기 :

for elem in sales_a*; do 
    ./map_function.sh < "$elem" 
done 

이 또한 스크립트에서 있었다 다른 문제를 해결합니다. files=$(ls | grep 'sales_a*')은 버그가 있으며 파일을 반복하는 것은 부적절한 방법입니다.

관련 문제