2017-11-22 13 views
2

基本的なMapReduce関数をbashで作成しようとしています(私は非常に新しいです)。現時点では、job_master.shとmap_function.shの2つのスクリプトがあります。私は、データファイルから切断するためにジョブマスターから地図機能を実行しようとしていますが、それが存在しない場合はキーに送信しますが、その名前のファイルに送信します。 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*')はバグがあり、ファイルを反復処理するのは不適切です。

関連する問題