Сегодняшняя рекомендация: поиграйте с рабочим процессом ИИ: шаг за шагом создайте гибкий автоматизированный процесс.
Ссылка на статью:https://cloud.tencent.com/developer/article/2470497
В этой статье представлены основные концепции рабочего процесса, управляемого событиями пошагового метода контроля и управления процессом выполнения приложения, а также демонстрируется его использование с помощью практического кода.
Распределенные вычисления (MapReduce)
, Hadoop MapReduce Это модель распределенных вычислений, предназначенная для обработки крупномасштабных наборов данных. Это значительно повышает эффективность обработки данных за счет разложения задач на несколько подзадач и их параллельного выполнения в распределенном кластере. В этой статье будет подробно разобран MapReduce из Трех ядерэтап: Этап карты、Этап перемешивания и Уменьшить фазу, чтобы помочь вам глубже понять механизм его работы.MapReduce
Вычислительная модель,Выше приведена блок-схема моего поиска в Интернете.,может быть ясноиз Видно, что весь процесс можно условно разделить на триэтап:Map、Shuffle、Reduce
,Но на самом деле в существование вступил три этапа назад,Существует также этап осколков данных.,Таким образом, мы можем разделить весь процесс на следующие четыре этапа:1. Фрагментация входных данных: данные Воля разбиваются на несколько логических блоков, причем каждый блок делится на Mapper иметь дело с.
2、Этап карты: Обработка входных данных и преобразование их в ключевые значения верно (key, value)。
3、Этап перемешивания:верно Этап картыиз Вывод секционируется, сортируется и группируется.
4、Уменьшить фазу:верно Все значения одного и того же ключа агрегируются или вычисляются, и выводится окончательный результат.
1. Каждый логический блок состоит из Mapper Обработка, чтение входных данных и формирование промежуточных результатов.
2. Пользователи должны осознавать map() Метод, определяющий, как входные данные Воли преобразуются в промежуточные. (key, value) верно。
Введите данные:
hello hadoop
hello world
Выходные данные
(hello, 1), (hadoop, 1), (hello, 1), (world, 1)
Введите данные:
(hello, 1), (hadoop, 1), (hello, 1), (world, 1)
Выходные данные
Reducer 1: (hadoop, [1])
Reducer 2: (hello, [1, 1]), (world, [1])
Этап Растворение может стать узким местом в производительности, поскольку задействованы большие объемы данных в операциях сетевой передачи и сортировки.
1、входить:<key, list(values)>,То есть каждый ключ должен иметь список значений.
2. Пользователи должны осознавать reduce() метод,Определите, как правильно иметь все значения одного и того же ключа. дело с.
Введите данные:
(hadoop, [1])
(hello, [1, 1])
(world, [1])
Выходные данные
(hadoop, 1)
(hello, 2)
(world, 1)
MapReduce:Map、Shuffle、Reduce
Три процесса, поэтому при установке используются готовые docker Реализация зеркала:docker pull sequenceiq/hadoop-docker:2.7.1
# бегать Hadoop контейнер с одним узлом
docker run -it --name hadoop-master -p 8088:8088 -p 9870:9870 -p 9000:9000 sequenceiq/hadoop-docker:2.7.1
HDFS NameNode Интерфейс: http://xxxxx:9870
YARN ResourceManager Интерфейс: http://xxxx:8088
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class WordCountMapper extends Mapper<Object, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
protected void map(Object key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] words = line.split("\\s+");
for (String str : words) {
word.set(str); // Установить текущее слово
context.write(word, one); // Выходное слово и значение счета (1)
}
}
}
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum); // Установить значение результата
context.write(key, result); // Выведите общее количество слов
}
}
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.err.println("Usage: WordCount <input path> <output path>");
System.exit(-1);
}
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "Word Count");
job.setJarByClass(WordCount.class);
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
wordcount.txt
hadoop hello hadoop
world
# загрузить
hdfs dfs -mkdir -p /input/wordcount
hdfs dfs -put wordcount.txt /input/wordcount
hadoop jar xxx/hadoop-wordcount-1.0-SNAPSHOT.jar com.example.WordCount
hadoop 1
hello 2
world 1
👋 привет, я Lorin Лорейн, один Java Разработчик бэкэнд-технологий!девиз:Technology has the power to make the world a better place.
🚀 Моя страсть к технологиям — это моя мотивация продолжать учиться и делиться ими. Мой блог — это место, посвященное экосистеме Java, серверной разработке и новейшим технологическим тенденциям.
🧠 Будучи энтузиастом серверных технологий Java, я не только с энтузиазмом изучаю новые возможности языка и глубину технологий, но также с энтузиазмом делюсь своими идеями и передовым опытом. Я верю, что обмен знаниями и сотрудничество с сообществом могут помочь нам расти вместе.
💡 В моем блоге вы найдете подробные статьи об основных концепциях Java, базовой технологии JVM, часто используемых платформах, таких как Spring и Mybatis, управлении базами данных, таких как MySQL, промежуточном программном обеспечении для обработки сообщений, таком как RabbitMQ и Rocketmq, оптимизации производительности и т. д. Я также поделюсь некоторыми советами по программированию и методами решения проблем, которые помогут вам лучше освоить программирование на Java.
🌐 Я поощряю взаимодействие и создание сообщества, поэтому, пожалуйста, оставляйте свои вопросы, предложения или запросы по темам и дайте мне знать, что вас интересует. Кроме того, я буду делиться последними новостями Интернета и технологий, чтобы вы всегда были в курсе последних событий в мире технологий. Я с нетерпением жду возможности вместе с вами двигаться вперед по пути технологий и исследовать безграничные возможности мира технологий.
📖 Следите за обновлениями моего блога и давайте вместе стремиться к техническому совершенству.