Анализ больших данных: MapReduce, Hadoop, Spark и Flink с примерами кода

Вот несколько методов, используемых при анализе больших данных, а также примеры кода:

  1. MapReduce:
    MapReduce — это модель программирования для параллельной обработки больших наборов данных в распределенной системе. Он включает в себя два основных этапа: этап сопоставления, на котором данные делятся на фрагменты и обрабатываются независимо, и этап сокращения, на котором результаты этапа сопоставления объединяются для получения окончательного результата.

Вот простой пример на Python с использованием библиотеки mrjob:

from mrjob.job import MRJob
class WordCount(MRJob):
    def mapper(self, _, line):
        for word in line.split():
            yield word, 1
    def reducer(self, word, counts):
        yield word, sum(counts)
if __name__ == '__main__':
    WordCount.run()
  1. Hadoop:
    Hadoop — это платформа с открытым исходным кодом, которая позволяет распределять обработку больших наборов данных по кластерам компьютеров. Он предоставляет распределенную файловую систему (HDFS) и платформу распределенной обработки (MapReduce) для обработки больших данных.

Вот пример запуска задания Hadoop с использованием Hadoop Streaming API и Python:

$ hadoop jar hadoop-streaming.jar \
    -input input.txt \
    -output output \
    -mapper mapper.py \
    -reducer reducer.py \
    -file mapper.py \
    -file reducer.py
  1. Spark:
    Spark — это быстрая и универсальная кластерная вычислительная система, предоставляющая интерфейс для программирования целых кластеров с неявным параллелизмом данных и отказоустойчивостью. Он поддерживает различные языки программирования, такие как Scala, Java, Python и R.

Вот пример подсчета слов с использованием Spark в Python:

from pyspark import SparkContext
sc = SparkContext("local", "WordCount")
lines = sc.textFile("input.txt")
counts = lines.flatMap(lambda line: line.split()).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
counts.saveAsTextFile("output")
  1. Apache Flink:
    Flink — это платформа потоковой и пакетной обработки больших данных с открытым исходным кодом. Он предоставляет API для обработки потоков данных и пакетных данных распределенным и отказоустойчивым образом.

Вот пример программы WordCount, использующей API Flink DataStream на Java:

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
public class WordCount {
    public static void main(String[] args) throws Exception {
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.readTextFile("input.txt")
                .flatMap((String line, Collector<String> out) -> {
                    for (String word : line.split(" ")) {
                        out.collect(word);
                    }
                })
                .map((String word) -> new Tuple2<>(word, 1))
                .keyBy(0)
                .sum(1)
                .writeAsText("output");
        env.execute("WordCount");
    }
}