Apache Hadoop

Przydatne zasoby:

Konfiguracja

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.

Usługę HDFS oraz JobTracker można monitorować poprzez interfejs Web:

Przygotowanie JAR

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

Zadanie 1

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));
}

Zadanie 2

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).