Po rozpakowaniu, konfiguracja znajduje się w katalogu conf/. Najważnieje ustawienia, to:
conf/core-site.xml: <configuration> <property> <name>fs.default.name</name> <value>hdfs://lab-149-9:9000</value> </property> </configuration> conf/hdfs-site.xml: <configuration> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration> conf/mapred-site.xml: <configuration> <property> <name>mapred.job.tracker</name> <value>lab-149-9:9001</value> </property> </configuration>
Konfiguracja definiuje usługe HDFS oraz JobTrackera dostępnego na komputerze lab-149-9.
Hadoop przyjmuje archiwa JAR zawierające postać skompilowaną aplikacji. Archiwum JAR z projektem eksportujemy z poziomu Eclipse (Export|Java|JAR File), lub wykonując polecenia:
$ mkdir classes $ javac -cp hadoop-core-0.20.203.0.jar WordCount.java $ jar -cvf wordcount.jar WordCount*.class
Uruchamianie zadania:
bin/hadoop jar wordcount.jar WordCount [input_HDFS_dir] [output_HDFS_dir] # np.: $ bin/hadoop jar wordcount.jar WordCount /user/putgrid/small_input output
Zadaniem jest przygotowaniu aplikacji w oparciu o Hadoop, która umożliwi zliczanie słów w dokumencie tekstowym.
Należy utworzyć nowy projekt Java w środowisku eclipse, oraz dodać bibliotekę hadoop do projektu. W tym celu wykonaj import|File System, wskazując katalog /a/local/proactive oraz plik hadoop-core-0.20.203.0.jar. Następnie dodaj jar do classpath.
Pobierz szkielet aplikacji oraz dodaj go do projektu w Eclipse.
Poniżej znajduje się przykładowa implementacja metody map oraz reduce:
public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); } } public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int sum = 0; while (values.hasNext()) { sum += values.next().get(); } output.collect(key, new IntWritable(sum)); }
W plikach masters oraz slaves można zdefiniować nazwy hostów tworzących klaster hadoop. Zadanie polega na uruchomieniu hadoop na kilku komputerach (plik slaves).