2016-10-05 16 views
-1

私はUbuntuでhadoopを実行するためのmakefileを書きます。 inputsコマンドがrun:に従うと動作します。しかし、私がhdfs dfs -rm -f -r $(EXAMPLE_DIR)の下に移動すると、それは失敗し、エラーメッセージを表示します: make: inputs: Command not found.私はUbuntuを初めて使用していますので、このエラーが多すぎる可能性があるため、結果を検索した後に問題を解決する方法がわかりません。メークファイルは以下の通りです。私は私を混乱させる部分に印を付ける。makefile moveコマンドは動作しません

EXAMPLE_DIR = /user/$(USER)/matmult-dense/ 
    INPUT_DIR = $(EXAMPLE_DIR)/input 
    OUTPUT_DIR = $(EXAMPLE_DIR)/output 
    OUTPUT_FILE = $(OUTPUT_DIR)/part-00000 
    HADOOP_VERSION = 2.6.0 
    # generally I use HADOOP_HOME, for not modifying the original makefile, I set up the HADOOP_PREFIX here 
    HADOOP_PREFIX = /usr/local/hadoop 

    TOOLLIBS_DIR=$(HADOOP_PREFIX)/share/hadoop/tools/lib/ 
    //Hi, start here 
    run: inputs 
     hdfs dfs -rm -f -r $(EXAMPLE_DIR) 
    //Hi, end here. If swap them, the error comes   
     hadoop jar $(TOOLLIBS_DIR)/hadoop-streaming-$(HADOOP_VERSION).jar \ 
      -files ./map1.py,./reduce1.py \ 
      -mapper ./map1.py \ 
      -reducer ./reduce1.py \ 
      -input $(INPUT_DIR) \ 
      -output $(OUTPUT_DIR) \ 
      -numReduceTasks 1 \ 
      -jobconf stream.num.map.output.key.fields=5 \ 
      -jobconf stream.map.output.field.separator='\t' \ 
      -jobconf mapreduce.partition.keypartitioner.options=-k1,3 
     hdfs dfs -rm $(INPUT_DIR)/file01 
     hdfs dfs -mv $(OUTPUT_FILE) $(INPUT_DIR)/file01 
     hdfs dfs -rm -f -r $(OUTPUT_DIR) 
     hadoop jar $(TOOLLIBS_DIR)/hadoop-streaming-$(HADOOP_VERSION).jar \ 
      -files ./map2.py,./reduce2.py \ 
      -mapper ./map2.py \ 
      -reducer ./reduce2.py \ 
      -input $(INPUT_DIR) \ 
      -output $(OUTPUT_DIR) \ 
      -numReduceTasks 1 \ 
      -jobconf stream.num.map.output.key.fields=2 \ 
      -jobconf stream.map.output.field.separator='\t' 
     hdfs dfs -cat $(OUTPUT_FILE) 

    directories: 
     hdfs dfs -test -e $(EXAMPLE_DIR) || hdfs dfs -mkdir $(EXAMPLE_DIR) 
     hdfs dfs -test -e $(INPUT_DIR) || hdfs dfs -mkdir $(INPUT_DIR) 
     hdfs dfs -test -e $(OUTPUT_DIR) || hdfs dfs -mkdir $(OUTPUT_DIR) 

    inputs: directories 
     hdfs dfs -test -e $(INPUT_DIR)/file01 \ 
     || hdfs dfs -put matrices $(INPUT_DIR)/file01 

    clean: 
     hdfs dfs -rm -f -r $(INPUT_DIR) 
     hdfs dfs -rm -f -r $(OUTPUT_DIR) 
     hdfs dfs -rm -r -f $(EXAMPLE_DIR) 
     hdfs dfs -rm -f matrices 

    .PHONY: run 
+0

質問の理解に問題があります。あなたの質問を編集して、あなたが持っている問題を示すmakeを実行する例を含めることができますか?あなたの質問には、問題を引き起こすmakefileのバージョンが含まれていることを確認してください。 – Kenster

+0

@Kenster私はそれを書いておきたいが、それはコードに関連していないので、コードがたくさんある。 – Anderson

答えて

0

メークファイルの仕組みについては、混乱しているようです。あなたは複雑なものを試みる前にsimokeのものから始めなければなりません。

メイクファイルは、このようなルール含まれている場合:

foo: bar 
    kleb 

を、その後fooターゲット(ビルドできることを確認し、ファイルの通常名)です。 barが別のターゲットであり、klebコマンドであり、シェルによって実行される。 barklebを交換すると、klebはおそらくビルドの方法を知っているターゲットではなく、barはシェルが実行方法を知っているコマンドではないため、おそらくエラーが発生します。

+0

しかし、それは単純なもののようではありません。入力はmakeファイルに定義されています。つまり、たくさんのコマンドが含まれています。 – Anderson

+0

@Anderson:2つの異なるものに同じ名前を使用していて、変数を展開できません。私たちに[最小の完全な例](http://stackoverflow.com/help/mcve)を教えてくれれば、もっと具体的にすることができます。 – Beta

関連する問題