Spring f или Apache Hadoop — это проект Spring для поддержки написания приложений, которые могут выиграть от интеграции Spring Framework и Hadoop. В этом посте описывается, как использовать Spring Data Apache Hadoop в среде Amazon EC2 с использованием «Hello World», эквивалентного программированию Hadoop — приложения Wordcount.
1. / Запустите экземпляр Amazon Web Services EC2.
— Перейдите к консоли AWS EC2 («https://console.aws.amazon.com/ec2/home»):
— Выберите «Запустить экземпляр», затем «Классический Wizzard» и нажмите «Продолжить». Моей тестовой средой был «Basic Amazon Linux AMI 2011.09» 32-разрядный. Мгновенный тип: Micro (t1.micro, 613 МБ), группа безопасности quick-start-1, позволяющая использовать ssh для входа в систему. Выберите существующую пару ключей (или создайте новую). Очевидно, вы можете выбрать другой AMI и типы экземпляров в зависимости от вашего любимого аромата. (Если вы голосуете за экземпляр на базе Windows 2008, вам также необходимо установить Cygwin в качестве дополнительного условия Hadoop помимо Java JDK и ssh, см. Раздел «Установка Apache Hadoop»)
2. / Загрузите Apache Hadoop — на момент написания этой статьи 1.0.0 является последней стабильной версией Apache Hadoop, которая использовалась для тестирования. Я скачал hadoop-1.0.0.tar.gz и скопировал его в каталог / home / ec2-user с помощью команды pscp с моего компьютера под управлением Windows:
c: \ downloads> pscp -i mykey.ppk hadoop-1.0.0.tar.gz [email protected]: / home / ec2 -user
(имя компьютера выше — ec2-ipaddress-region-compute.amazonaws.com — можно найти на консоли AWS EC2, описание экземпляра, общедоступное поле DNS)
3. / Установите Apache Hadoop:
В качестве предварительных условий вам необходимо установить Java JDK 1.6 и ssh, см. Руководство по установке Apache для одного узла. (ssh автоматически устанавливается с Basic Amazon AMI). Затем установите сам hadoop:
$ cd ~ # сменить каталог на домашний пользователь ec2 (/ home / ec2-пользователь)
$ tar xvzf hadoop-1.0.0.tar.gz
$ ln -s hadoop-1.0.0 hadoop
$ cd hadoop / conf
$ vi hadoop-env.sh # изменить, как показано ниже
export JAVA_HOME=/opt/jdk1.6.0_29
$ vi core-site.xml # edit, как показано ниже — это определяет, что namenode будет работать на localhost и переходить на порт 9000.
<configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> </configuration>
$ vi hdsf-site.xml # edit, как показано ниже, определяет, что репликация файловой системы равна 1 (в производственной среде предполагается, что по умолчанию она равна 3)
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
$ vi mapred-site.xml # edit, как показано ниже — это определяет, что jobtracker должен работать на локальном хосте и переходить на порт 9001.
<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration>
$ cd ~ / hadoop
$ bin / hadoop namenode -format
$ bin / start-all.sh
На этом этапе все задания hadoop выполняются в псевдораспределенном режиме, вы можете проверить это, выполнив:
$ ps -ef | гре ява
Вы должны увидеть 5 процессов Java: namenode, вторичныйnamenode, datanode, JobTracker и TaskTracker.
4. / Установите Spring Data Hadoop
Загрузите пакет Spring Data Hadoop с сайта загрузки сообщества SpringSource. На момент написания этой статьи последняя стабильная версия была spring-data-hadoop-1.0.0.M1.zip.
$ cd ~
$ tar xzvf spring-data-hadoop-1.0.0.M1.zip
$ ln -s spring-data-hadoop-1.0.0.M1 spring-data-hadoop
5. / Пример сборки и запуска Spring Data Hadoop Wordcount
$ cd spring-data-hadoop / spring-data-hadoop-1.0.0.M1 / samples / wordcount
Spring Data Hadoop использует gradle в качестве инструмента для сборки. Проверьте файл сборки build.grandle. Оригинальная версия, упакованная в файл tar.gz, не компилируется, она жалуется на thrift, версия 0.2.0 и jdo2-api, версия 2.3-ec.
Добавьте репозиторий datanucleus.org maven в файл build.gradle для поддержки jdo2-api (http://www.datanucleus.org/downloads/maven2/).
К сожалению, похоже, что нет репозитория Maven для Thrift 0.2.0. Вам следует скачать файл thrift 0.2.0.jar и thrift.0.2.0.pom, например, из этого репозитория: « http://people.apache.org/~rawson/repo «, а затем добавить его в локальное репозиторий maven.
$ mvn install: install-file -DgroupId = org.apache.thrift -DartifactId = thrift -Dversion = 0.2.0 -Dfile = thrift-0.2.0.jar -Dpackaging = jar
$ vi build.grandle # изменить файл сборки для ссылки на репозиторий datanucleus maven для jdo2-api и локальный репозиторий для thrift
repositories { // Public Spring artefacts mavenCentral() maven { url “http://repo.springsource.org/libs-release” } maven { url “http://repo.springsource.org/libs-milestone” } maven { url “http://repo.springsource.org/libs-snapshot” } maven { url “http://www.datanucleus.org/downloads/maven2/” } maven { url “file:///home/ec2-user/.m2/repository” } }
Я также изменил файл META-INF / spring / context.xml, чтобы вручную запускать команды файловой системы hadoop:
$ cd /home/ec2-user/spring-data-hadoop/spring-data-hadoop-1.0.0.M1/samples/wordcount/src/main/resources
$ vi META-INF / spring / context.xml # remove clean-script, а также зависимость от него для JobRunner.
<?xml version=”1.0″ encoding=”UTF-8″?> xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:context=”http://www.springframework.org/schema/context” xmlns:hdp=”http://www.springframework.org/schema/hadoop” xmlns:p=”http://www.springframework.org/schema/p” xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop.xsd”> <context:property-placeholder location=”hadoop.properties”/> <hdp:configuration> fs.default.name=${hd.fs} <!–hdp:configuration> <hdp:job id=”wordcount-job” validate-paths=”false” input-path=”${wordcount.input.path}” output-path=”${wordcount.output.path}” mapper=”org.apache.hadoop.examples.WordCount.TokenizerMapper” reducer=”org.apache.hadoop.examples.WordCount.IntSumReducer”/> <!– simple job runner –> <bean id=”runner” class=”org.springframework.data.hadoop.mapreduce.JobRunner” p:jobs-ref=”wordcount-job”/> </beans>
Скопируйте файл примера — nietzsche-chapter-1.txt — в файловую систему Hadoop (каталог / user / ec2-user- / input)
$ cd src / main / resources / data
$ hadoop fs -mkdir / user / ec2-user / input
$ hadoop fs -put nietzsche-chapter-1.txt / user / ec2-user / input / data
$ cd ../../../ .. # вернуться в каталог samples / wordcount
$ ../gradlew
Проверьте результат:
$ hadoop fs -cat / user / ec2-user / output / part-r-00000 | Больше
«ВДАЛИ 1
«на 1
«Beyond 1
«на 2
«Приветствия 1
«DE 1
«Везде 1
„от“1
«Угодников 1
«Свобода 1