Статьи

Spring Data — Apache Hadoop

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