Я недавно столкнулся с той же проблемой.Ваш ответ может быть упрощен.Вам вообще не нужно устанавливать jython или создавать каталог кеша.Вам необходимо включить jython jar в скрипт начальной загрузки EMR (или сделать что-то подобное).Я написал сценарий начальной загрузки EMR со следующими строками.Можно еще больше упростить это, вообще не используя s3cmd, а используя поток работ (чтобы поместить файлы в определенный каталог).Получение UDF через s3cmd определенно неудобно, однако я не смог зарегистрировать файл udf на s3 при использовании EMR-версии pig.
Если вы используете CharStream, вы должны также включить этот jar вСвинья путь.В зависимости от используемой вами среды, вы можете передать эти сценарии начальной загрузки в качестве опций для своей работы, EMR поддерживает это через их Ruby-клиент эластичный-mapreduce.Простым вариантом является размещение сценариев начальной загрузки на s3.
Если вы используете s3cmd в скрипте начальной загрузки, вам нужен еще один скрипт начальной загрузки, который делает что-то подобное.Этот скрипт должен быть помещен перед другим в порядке начальной загрузки.Я отошел от использования s3cmd, но для моей успешной попытки s3cmd добился цели.Кроме того, исполняемый файл s3cmd уже установлен в образе pig для amazon (например, ami версии 2.0 и hadoop версии 0.20.205.
Script # 1 (Seeding s3cmd)
#!/bin/bash
cat <<-OUTPUT > /home/hadoop/.s3cfg
[default]
access_key = YOUR KEY
bucket_location = US
cloudfront_host = cloudfront.amazonaws.com
cloudfront_resource = /2010-07-15/distribution
default_mime_type = binary/octet-stream
delete_removed = False
dry_run = False
encoding = UTF-8
encrypt = False
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/local/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd % (passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase = YOUR PASSPHRASE
guess_mime_type = True
host_base = s3.amazonaws.com
host_bucket = %(bucket)s.s3.amazonaws.com
human_readable_sizes = False
list_md5 = False
log_target_prefix =
preserve_attrs = True
progress_meter = True
proxy_host =
proxy_port = 0
recursive = False
recv_chunk = 4096
reduced_redundancy = False
secret_key = YOUR SECRET
send_chunk = 4096
simpledb_host = sdb.amazonaws.com
skip_existing = False
socket_timeout = 10
urlencoding_mode = normal
use_https = False
verbosity = WARNING
OUTPUT
Script #2 (посевные банки jython)
#!/bin/bash
set -e
s3cmd get <jython.jar>
# Very useful for extra libraries not available in the jython jar. I got these libraries from the
# jython site and created a jar archive.
s3cmd get <jython_extra_libs.jar>
s3cmd get <UDF>
PIG_LIB_PATH=/home/hadoop/piglibs
mkdir -p $PIG_LIB_PATH
mv <jython.jar> $PIG_LIB_PATH
mv <jython_extra_libs.jar> $PIG_LIB_PATH
mv <UDF> $PIG_LIB_PATH
# Change hadoop classpath as well.
echo "HADOOP_CLASSPATH=$PIG_LIB_PATH/<jython.jar>:$PIG_LIB_PATH/<jython_extra_libs.jar>" >> /home/hadoop/conf/hadoop-user-env.sh