Аліас що приймає параметри

При вивченні  Hadoop зіткнувся з проблемою запуску MapReduce завдань великою і страшною командою:

hadoop -jar /повний_шлях_до_jar_бібліотеки_haddop_streaming
 -map файл_маппер -reduce файл_ред'юсер
 -file файл_маппер -file файл_ред'юсер 
 -input папка_з_даним_що_тре_опрацювати
 -output папка_для_результатів
Я бачите команда довга та страшна :), можна легко заробити помилку. Складність команди змусила мене звернутися до alias, проте вони не приймають параметрів. Трошки погугливши знайшов рішення тут та тут.
Отже, рішення просте написати функцію, яка опрацьовує передані параметриб та призначити їй алас. Ось зразок мого коду:

export HADOOP_STREAMING="/opt/cloudera/parcels/CDH-5.0.0-1.cdh5.0.0.p0.47/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.3.0-mr1-cdh5.0.0.jar"

hadoop_task() 
{
    if [ $# -ne 4 ]; then
        echo "Please provide all data";
        echo "Usage hs [mapper_file_name] [reducer_file_name] [input_dir] [output_dir]";
    else
        if [[ -e $1 ]] && [[ -e $2 ]]; then
            echo `hadoop jar ${HADOOP_STREAMING} -mapper $1 -reducer $2 -file $1 -file $2 -input $3 -output $4`;
        else
           echo "File names you have provided does not find";
        fi;
    fi
}

alias hs=hadoop_task
Тепер команду можна викликати так:
    hs mapper.py reducer.py myinput output
! Будьте уважні використання існуючої папки для виводу результатів MapReduce b Hadoop призводить до помидки, що унеможливлює проведення операцій обчислення.

Comments

Popular posts from this blog

Install Kubeflow locally

RabbitMQ and OpenShift