すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:Hadoopストリーミング

最終更新日:Jan 11, 2025

このトピックでは、Pythonを使用してHadoopストリーミングジョブを送信する方法について説明します。

前提条件

E-MapReduce(EMR)Hadoopクラスターが作成されていること。

クラスターの作成方法の詳細については、クラスターの作成をご参照ください。

手順

  1. SSHモードでHadoopクラスターにログオンします。詳細については、クラスターへのログオンをご参照ください。
  2. mapper.pyという名前のファイルを作成します。
    1. 次のコマンドを実行して、mapper.pyという名前のファイルを作成し、ファイルを開きます。
      vim /home/hadoop/mapper.py
    2. I キーを押して、編集モードに切り替えます。
    3. mapper.py ファイルに次の情報を追加します。
      #!/usr/bin/env python
      import sys
      for line in sys.stdin:
          line = line.strip()
          words = line.split()
          for word in words:
              print '%s\t%s' % (word, 1)
    4. Esc を押して編集モードを終了します。次に、:wq と入力してファイルを保存して閉じます。
  3. reducer.pyという名前のファイルを作成します。
    1. 次のコマンドを実行して、reducer.pyという名前のファイルを作成し、ファイルを開きます。
      vim /home/hadoop/reducer.py
    2. I キーを押して、編集モードに切り替えます。
    3. reducer.py ファイルに次の情報を追加します。
      #!/usr/bin/env python
      from operator import itemgetter
      import sys
      current_word = None
      current_count = 0
      word = None
      for line in sys.stdin:
          line = line.strip()
          word, count = line.split('\t', 1)
          try:
              count = int(count)
          except ValueError:
              continue
          if current_word == word:
              current_count += count
          else:
              if current_word:
                  print '%s\t%s' % (current_word, current_count)
              current_count = count
              current_word = word
      if current_word == word:
          print '%s\t%s' % (current_word, current_count)
    4. Esc を押して編集モードを終了します。次に、:wq と入力してファイルを保存して閉じます。
  4. 次のコマンドを実行して、hosts ファイルを HDFS にアップロードします。
    hdfs dfs -put /etc/hosts /tmp/
  5. 次のコマンドを実行して、Hadoopストリーミングジョブを送信します。
    hadoop jar /usr/lib/hadoop-current/share/hadoop/tools/lib/hadoop-streaming-X.X.X.jar -file /home/hadoop/mapper.py -mapper mapper.py -file /home/hadoop/reducer.py -reducer reducer.py -input /tmp/hosts -output /tmp/output
    パラメーター説明
    input入力パス。この例では、入力パスは /tmp/hosts です。
    output出力パス。この例では、出力パスは /tmp/output です。
    説明 hadoop-streaming-X.X.X.jarX.X.X は、JARパッケージのバージョンを示します。JARパッケージのバージョンは、クラスターのHadoopバージョンと同じである必要があります。/usr/lib/hadoop-current/share/hadoop/tools/lib/ ディレクトリでJARパッケージのバージョンを確認できます。