Amazon EMRでPydoopをどのように使用しますか?
私はこのトピックをグーグルで調べてみましたが無駄になりました:それは可能ですか?
Amazon EMRでPydoopをどのように使用しますか?
私はこのトピックをグーグルで調べてみましたが無駄になりました:それは可能ですか?
私はついにこれを機能させました。すべてがマスターノードで発生します...ユーザーhadoopとしてそのノードにsshします
いくつかのパッケージが必要です:
sudo easy_install argparse importlib
sudo apt-get update
sudo apt-get install libboost-python-dev
ものを構築するには:
wget http://apache.mirrors.pair.com/hadoop/common/hadoop-0.20.205.0/hadoop-0.20.205.0.tar.gz
wget http://sourceforge.net/projects/pydoop/files/Pydoop-0.6/pydoop-0.6.0.tar.gz
tar xvf hadoop-0.20.205.0.tar.gz
tar xvf pydoop-0.6.0.tar.gz
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export JVM_ARCH=64 # I assume that 32 works for 32-bit systems
export HADOOP_HOME=/home/hadoop
export HADOOP_CPP_SRC=/home/hadoop/hadoop-0.20.205.0/src/c++/
export HADOOP_VERSION=0.20.205
export HDFS_LINK=/home/hadoop/hadoop-0.20.205.0/src/c++/libhdfs/
cd ~/hadoop-0.20.205.0/src/c++/libhdfs
sh ./configure
make
make install
cd ../install
tar cvfz ~/libhdfs.tar.gz lib
sudo tar xvf ~/libhdfs.tar.gz -C /usr
cd ~/pydoop-0.6.0
python setup.py bdist
cp dist/pydoop-0.6.0.linux-x86_64.tar.gz ~/
sudo tar xvf ~/pydoop-0.6.0.linux-x86_64.tar.gz -C /
2 つの tarball を保存します。将来的には、ビルド部分をスキップして、次の手順を実行してインストールできます (マルチノード クラスタにインストールするためのブーストラップ オプションを実行する方法を理解する必要があります)。
sudo tar xvf ~/libhdfs.tar.gz -C /usr
sudo tar xvf ~/pydoop-0.6.0.linux-x86_64.tar.gz -C /
次に、本格的な Hadoop APIを使用してサンプル プログラムを実行することができました
(コンストラクターのバグを修正して、 を呼び出すようにしましたsuper(WordCountMapper, self)
)。
#!/usr/bin/python
import pydoop.pipes as pp
class WordCountMapper(pp.Mapper):
def __init__(self, context):
super(WordCountMapper, self).__init__(context)
context.setStatus("initializing")
self.input_words = context.getCounter("WORDCOUNT", "INPUT_WORDS")
def map(self, context):
words = context.getInputValue().split()
for w in words:
context.emit(w, "1")
context.incrementCounter(self.input_words, len(words))
class WordCountReducer(pp.Reducer):
def reduce(self, context):
s = 0
while context.nextValue():
s += int(context.getInputValue())
context.emit(context.getInputKey(), str(s))
pp.runTask(pp.Factory(WordCountMapper, WordCountReducer))
そのプログラムをバケットにアップロードし、run と呼びました。次に、次の conf.xml を使用しました。
<?xml version="1.0"?>
<configuration>
<property>
<name>hadoop.pipes.executable</name>
<value>s3://<my bucket>/run</value>
</property>
<property>
<name>mapred.job.name</name>
<value>myjobname</value>
</property>
<property>
<name>hadoop.pipes.java.recordreader</name>
<value>true</value>
</property>
<property>
<name>hadoop.pipes.java.recordwriter</name>
<value>true</value>
</property>
</configuration>
最後に、次のコマンド ラインを使用しました。
hadoop pipes -conf conf.xml -input s3://elasticmapreduce/samples/wordcount/input -output s3://tmp.nou/asdf
与えられた答えは部分的に正しいだけですが、解決策は次のようにするよりも簡単です:
このコードを、コンピューターで作成した bash ファイルにコピーします。
#!/bin/bash
pip install pydoop
このファイルの書き込みが完了したら、s3 バケットにアップロードします。
次に、emr でブートストラップ アクションを追加できます。[
カスタム アクション] を選択し、s3 バケットへのパスを指定します。これで、emr クラスターに pydoop がインストールされました。