Я не буду говорить об использовании Maven. В Интернете много, и за эти годы не было больших изменений. Здесь я только представлю, как построить среду разработки Hadoop.
1. Сначала создайте проект
Скопируйте код следующим образом: MVN Архетип: генерировать -dgroupid = my.hadoopstudy -dartifactid = hadoopstudy -darchetypeartifactid = maven -archetype -quickstart -dinteractivemode = false
2. Затем добавьте пакеты зависимостей Hadoop в Hadoop-Common, Hadoop-Client, Hadoop-HDF в файле pom.xml. Добавленный файл pom.xml выглядит следующим образом
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>my.hadoopstudy</groupId> <artifactId>hadoopstudy</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>hadoopstudy</name> <URL> http://maven.apache.org </url> <deperiated> <deperency> <groupid> org.apache.hadoop </groupid> <artifactid> hadoop-common </artifactid> <sersive> 2.5.1 </version> </vehing> <dependency> <groupid> org.apache.hadoop </version> </jependency> <dependency> <groupid> org.apache.hadoop </version> </jependency> <dependency> <groupd> org.apache.hadoop </version> </redyse> <dehy <ArtifactId> HADOOP-hdfs </artifactid> <sersive> 2.5.1 </version> </dependency> <depertion> <groupid> org.apache.hadoop </groupid> <artifactid> hadoop-client </artifactid> <serse> 2.5.1 </version> </repect> <groupe> <groupid> </artifact> <serse> 3.8.1 </version> <clapope> test </scope> </dependency> </depertive> </project>
3. тест
3.1 Сначала мы можем проверить разработку HDF. Здесь мы предполагаем, что мы Havedoop Clusters в предыдущей статье Hadoop, код класса заключается в следующем
Пакет my.hadoopstudy.dfs; import org.apache.hadoop.conf.configuration; импорт org.apache.hadoop.fs.fsdataoutputstream; импорт org.apache.hadoop.fs.filestatus; импорт org.apache.hadoop.files.filestem; org.apache.hadoop.io.ioutils; import java.io.inputstream; импорт java.net.uri; public class test {public static void main (String [] args) бросает исключение {string uri = "hdfs: //9.111.254.189: 9000/"; Конфигурация config = new Configuration (); Fileystem fs = fileystem.get (uri.create (uri), config); // Перечисление всех файлов и каталогов в каталоге/user/fkong/hdfs filestatus [] status = fs.liststatus (новый Path ("/user/fkong")); Для (FileStatus Status: Statestes) {System.out.println (Status); } // Создать файл в каталоге HDFS/user/fkong и напишите линию текста fsDataOutputStream OS = fs.Create (новый Path ("/user/fkong/test.log")); OS.Write ("Привет, мир!". Getbytes ()); os.flush (); os.close (); // Показать содержимое указанного файла в/user/fkong в hdfs inputstream is = fs.open (new Path ("/user/fkong/test.log")); Ioutils.copybytes (is, system.out, 1024, true); }} 3.2 Тестирование заданий MapReduce
Тестовый код относительно прост, следующим образом:
Пакет my.hadoopstudy.mapreduce; import org.apache.hadoop.conf.configuration; import org.apache.hadoop.fs.path; import org.apache.hadoop.io.intwritable; импорт org.apache.hadoop.io.ext; импорт org.apache.hadoop.mapreduce.job; org.apache.hadoop.mapreduce.mapper; import org.apache.hadoop.mapreduce.reducer; import org.apache.hadoop.mapreduce.lib.input.fileinputformat; импорт org.apache.hadoop.mapreduce.lib.utput.FileOutputformat; org.apache.hadoop.util.genericoptionsparser; import java.io.ioexception; открытый класс EventCount {public Static Class MyMapper Extends Mapper <объект, текст, текст, Intrable> {Private Final Static Intrable One = new IntRable (1); Частное текстовое событие = новый текст (); public void Map (ключ объекта, значение текста, контекст контекста), пробуждает ioException, прерывание Exception {int idx = value.toString (). Indexof (""); if (idx> 0) {string e = value.toString (). substring (0, idx); event.set (e); Context.Write (Event, One); }}} public static class myReducer расширяет Reducer <текст, Intwrable, Text, Intwrable> {Private Intrable Result = new Intwritable (); public void уменьшить (текстовый ключ, итерабильный <Intwrable> Значения, контекст контекста) бросает ioException, прерывание Extexception {int sum = 0; for (intwrable al: values) {sum += val.get (); } result.set (sum); context.write (ключ, результат); }} public static void main (string [] args) бросает исключение {configuration conf = new Configuration (); String [] orethargs = new genericoptionsparser (conf, args) .getremainingArgs (); if (otherargs.length <2) {System.err.println ("Использование: EventCount <in> <up>"); System.Exit (2); } Job job = abob.getInstance (conf, "count событий"); job.setjarbyclass (eventcount.class); job.setmapperclass (mymapper.class); job.setCombinerclass (myreducer.class); job.setreducerclass (myreducer.class); job.setOutputKeyClass (text.class); job.setOutputValueClass (Intwriteble.class); FileInputFormat.AddInputPath (задание, новый путь (другие аргсы [0])); FileOutputFormat.SetOutPutPath (задание, новый путь (другие аргисты [1])); System.Exit (abob.WaitForComplotion (true)? 0: 1); }}Запустите команду «MVN Package», чтобы сгенерировать пакет JAR Hadoopstudy-1.0-snapshot.jar и скопируйте файл JAR в каталог установки Hadoop.
Здесь мы предполагаем, что нам нужно проанализировать информацию о событии в нескольких файлах журнала, чтобы подсчитать количество событий, поэтому создайте каталог и файл
/tmp/input/event.log.1
/tmp/input/event.log.2
/tmp/input/event.log.3
Поскольку нам просто нужно сделать столбец здесь, содержимое каждого файла может быть одинаковым, если содержимое следующее
Job_new ...
Job_new ...
Job_finish ...
Job_new ...
Job_finish ...
Затем скопируйте эти файлы в HDFS
Копия кода следующим образом: $ bin/hdfs dfs -put/tmp/input/user/fkong/input
Запустите работу MapReduce
Скопируйте код следующим образом: $ bin/hadoop jar hadoopstudy-1.0-snapshot.jar my.hadoopstudy.mapreduce.eventcount/user/fkong/input/user/fkong/output
Посмотреть результаты выполнения
Копия кода выглядит следующим образом: $ bin/hdfs dfs -cat/user/fkong/output/part-r-00000
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.