Статьи

Работа с кустами в AWS EMR

В  предыдущем посте  я показал, как выполнить простую работу с помощью  AWS Elastic MapReduce (EMR) . В этом примере мы продолжаем использовать EMR, но теперь запускаем   задание Hive . Hive — это система хранения данных для  Hadoop,  которая упрощает обобщение данных, специальные запросы и анализ больших наборов данных, хранящихся в файловых системах, совместимых с Hadoop.
Для создания задания в EMR я все еще буду использовать  CLI  (написанный на Ruby), поставляемый с EMR (для установки см.  Здесь ). Работа, которую я собираюсь создать, более подробно описана в  «Руководстве по началу работы по анализу больших данных с помощью AWS» .


  • Создать кластер EMR
elastic-mapreduce-ruby$ ./elastic-mapreduce --create --name "My Job Flow" --hive-interactive --key-pair-file ../../../4synergy_palma.pem --enable-debugging --alive
Created job flow j-2CC8Q43IWSQ42

Я включил отладку и, как я показал  здесь,  я определил каталог журналирования как параметр в моем файле credentials.json.

Во время выполнения задания и создания кластера вы можете увидеть прогресс, перечислив сведения о задании:

elastic-mapreduce-ruby$ ./elastic-mapreduce --list -j j-2CC8Q43IWSQ42
j-2CC8Q43IWSQ42  STARTING  My Job Flow
PENDING  Setup Hadoop Debugging
PENDING  Setup Hive

Через несколько минут:

elastic-mapreduce-ruby$ ./elastic-mapreduce --list -j j-2CC8Q43IWSQ42
j-2CC8Q43IWSQ42  STARTING  ec2-54-228-55-226.eu-west-1.compute.amazonaws.com My Job Flow
PENDING  Setup Hadoop Debugging
PENDING  Setup Hive

Мы видим, что для главного узла предоставляется общедоступный DNS, но установка все еще выполняется, поэтому мы немного подождем, пока не увидим это:

elastic-mapreduce-ruby$ ./elastic-mapreduce --list -j j-2CC8Q43IWSQ42
j-2CC8Q43IWSQ42  WAITING  ec2-54-228-55-226.eu-west-1.compute.amazonaws.com My Job Flow
COMPLETED  Setup Hadoop Debugging
COMPLETED  Setup Hive
  • Войти в кластер EMR (мастер-узел)
  • Теперь мы можем
    ssh [email protected] -i 4synergy_palma.pem
    подключиться по ssh к главному узлу, введя следующую команду: Вам может потребоваться сделать файл pem читаемым для пользователя, с которым вы используете ssh. Вы можете сделать это, запустив chmod og-rwx ~/mykeypair.pem

    Добавьте хост в список известных хостов, и мы получим следующий стартовый экран:

    Linux (none) 3.2.30-49.59.amzn1.i686 #1 SMP Wed Oct 3 19:55:00 UTC 2012 i686
    --------------------------------------------------------------------------------
    Welcome to Amazon Elastic MapReduce running Hadoop and Debian/Squeeze.
    Hadoop is installed in /home/hadoop. Log files are in /mnt/var/log/hadoop. Check
    /mnt/var/log/hadoop/steps for diagnosing step failures.
    The Hadoop UI can be accessed via the following commands:
    JobTracker  lynx http://localhost:9100/
    NameNode  lynx http://localhost:9101/
    --------------------------------------------------------------------------------
    hadoop@ip-10-48-206-175:~$
  • Запустите и настройте Hive
  • Затем мы запускаем консоль куста на этом узле, чтобы мы могли добавить библиотеку Jar во время выполнения Hives. Эта библиотека Jar используется, например, для легкого доступа к корзинам S3:

    hadoop@ip-10-48-206-175:~$ hive
    Logging initialized using configuration in file:/home/hadoop/.versions/hive-0.8.1/conf/hive-log4j.properties
    Hive history file=/mnt/var/lib/hive_081/tmp/history/hive_job_log_hadoop_201305261845_2098337447.txt
    hive> add jar /home/hadoop/hive/lib/hive_contrib.jar;
    Added /home/hadoop/hive/lib/hive_contrib.jar to class path
    Added resource: /home/hadoop/hive/lib/hive_contrib.jar
    hive>

    Теперь давайте создадим таблицу Hive и представим в ней файлы журнала Apache, которые находятся в корзине S3.
    Выполните следующую команду в консоли Hive, чтобы создать таблицу:

    hive> CREATE TABLE serde_regex(
    > host STRING,
    > identity STRING,
    > user STRING,
    > time STRING,
    > request STRING,
    > status STRING,
    > size STRING,
    > referer STRING,
    > agent STRING)
    > ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
    > WITH SERDEPROPERTIES (
    > "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^
    > \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^
    > \"]*|\"[^\"]*\"))?",
    > "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"
    > )
    > LOCATION 's3://elasticmapreduce/samples/pig-apache/input/';
    OK
    Time taken: 17.146 seconds
    hive>
  • Запускайте запросы Hive
  • Теперь мы можем запускать запросы Hive в этой таблице. Чтобы запустить задание для подсчета всех записей в файлах журнала Apache:

    hive> select count(1) from serde_regex;
    Total MapReduce jobs = 1
    Launching Job 1 out of 1
    Number of reduce tasks determined at compile time: 1
    In order to change the average load for a reducer (in bytes):
    set hive.exec.reducers.bytes.per.reducer=
    In order to limit the maximum number of reducers:
    set hive.exec.reducers.max=
    In order to set a constant number of reducers:
    set mapred.reduce.tasks=
    Starting Job = job_201305261839_0001, Tracking URL = http://ip-10-48-206-175.eu-west-1.compute.internal:9100/jobdetails.jsp?jobid=job_201305261839_0001
    Kill Command = /home/hadoop/bin/hadoop job  -Dmapred.job.tracker=10.48.206.175:9001 -kill job_201305261839_0001
    Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
    2013-05-26 19:06:46,442 Stage-1 map = 0%,  reduce = 0%
    2013-05-26 19:07:02,857 Stage-1 map = 16%,  reduce = 0%, Cumulative CPU 4.03 sec
    2013-05-26 19:07:03,871 Stage-1 map = 16%,  reduce = 0%, Cumulative CPU 4.03 sec
    ...
    break
    ....
    2013-05-26 19:07:59,677 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 11.06 sec
    2013-05-26 19:08:00,709 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 11.06 sec
    MapReduce Total cumulative CPU time: 11 seconds 60 msec
    Ended Job = job_201305261839_0001
    Counters:
    MapReduce Jobs Launched:
    Job 0: Map: 1  Reduce: 1  Accumulative CPU: 11.06 sec  HDFS Read: 593 HDFS Write: 7 SUCCESS
    Total MapReduce CPU Time Spent: 11 seconds 60 msec
    OK
    239344
    Time taken: 111.722 seconds
    hive>

    Чтобы показать все поля строки:

    hive> select * from serde_regex limit 1;
    OK
    66.249.67.3 -  -  [20/Jul/2009:20:12:22 -0700]  "GET /gallery/main.php?g2_controller=exif.SwitchDetailMode&g2_mode=detailed&g2_return=%2Fgallery%2Fmain.php%3Fg2_itemId%3D15741&g2_returnName=photo HTTP/1.1"  302 5  "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    Time taken: 2.335 seconds
  • Завершить кластер
  • После игры мы должны прекратить кластер (таким образом, затраты сведены к минимуму). Поскольку мы начали работу в «интерактивном» режиме, чтобы мы могли войти на сервер и выполнить наши «специальные» запросы, мы должны завершить его самостоятельно:

    elastic-mapreduce-ruby$ ./elastic-mapreduce --terminate  j-2CC8Q43IWSQ42
    Terminated job flow j-2CC8Q43IWSQ42
    elastic-mapreduce-ruby$ ./elastic-mapreduce --list -j j-2CC8Q43IWSQ42
    j-2CC8Q43IWSQ42  SHUTTING_DOWN  ec2-54-228-55-226.eu-west-1.compute.amazonaws.com My Job Flow
    COMPLETED  Setup Hadoop Debugging
    COMPLETED  Setup Hive
    elastic-mapreduce-ruby$
  • Проанализируйте логирование
  • После завершения у нас все еще есть доступ к созданным файлам журнала в нашем определенном сегменте S3: хотя это может быть не очень полезно в этом случае, потому что мы запустили кластер в интерактивном режиме, этот параметр может быть полезен при загрузке кластера. В этом случае запросы выполняются автоматически, и кластер завершает работу после его завершения (вместе с файлами журналов). Один из способов просмотра этой регистрации — использование средства  отладки EMR . Перейдите в  Консоль управления  и выберите сервис EMR. На начальном экране выберите поток работ, на который вы подали иск для этого примера, и нажмите кнопку «Отладка»: теперь мы видим шаги нашего предыдущего потока работ. Шаг, в котором мы заинтересованы, это интерактивные вакансии. Нажмите на ссылку Просмотр вакансий в этой строке:
    Снимок экрана 2013-05-26 в 21.33.02


    Снимок экрана 2013-05-28 в 13.51.22

    Снимок экрана 2013-05-28 в 13.53.12
    Теперь мы просматриваем задания, для которых мы можем «Просмотреть задачи», нажав соответствующую ссылку. Наконец, нажмите «Просмотреть попытки» задачи уменьшения или сопоставления, и вы получите доступ к скопированным файлам журнала:
    Снимок экрана 2013-05-28 в 14.04.06

    Более подробную информацию об использовании Hive с EMR смотрите  здесь .