Научиться выполнять операции с файлами и папка в HDFS. На практике познакомиться с парадигмой вычислений MapReduce. Выполнить агрегации данных с использованием MRJob.
Чтобы существенно упростить выполнение лабораторной работы рекомендуется использовать Visual Studio Code и возможность подключения по SSH:
Для выполнения данной лабораторной работы предварительно необходимо выполнить ЛР 2: у вас должен быть работающий кластер с Namenode и Datanode
Напоминание: на машинах с Hadoop должен быть установлен
Java Development Kit 11. Версия имеет значение!
~/.bashrc следующие строки:
export PATH=$PATH:/usr/local/hadoop/bin/export HADOOP_HOME=/home/mikhail/hadoop-3.3.6source ~/.bashrcyarn-site.xml и mapred-site.xml в папке hadoop-3.3.6/etc/hadoop (проверьте путь, у вас может быть другая версия Hadoop) следующим образом:yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.scheduler.capacity.root.support.user-limit-factor</name>
<value>2</value>
</property>
<property>
<name>yarn.nodemanager.disk-health-checker.min-healthy-disks</name>
<value>0.0</value>
</property>
<property>
<name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-
percentage</name>
<value>100.0</value>
</property>
<property>
<name>yarn.application.classpath</name>
<!--Не забудьте здесь заменить пути!-->
<value>
/home/mikhail/hadoop-3.3.6/etc/hadoop,
/home/mikhail/hadoop-3.3.6/share/hadoop/common/*,
/home/mikhail/hadoop-3.3.6/share/hadoop/common/lib/*,
/home/mikhail/hadoop-3.3.6/share/hadoop/hdfs/*,
/home/mikhail/hadoop-3.3.6/share/hadoop/hdfs/lib/*,
/home/mikhail/hadoop-3.3.6/share/hadoop/mapreduce/*,
/home/mikhail/hadoop-3.3.6/share/hadoop/mapreduce/lib/*,
/home/mikhail/hadoop-3.3.6/share/hadoop/yarn/*,
/home/mikhail/hadoop-3.3.6/share/hadoop/yarn/lib/*
</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<!--Не забудьте здесь заменить пути!-->
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/home/mikhail/hadoop-3.3.6</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/home/mikhail/hadoop-3.3.6</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/home/mikhail/hadoop-3.3.6</value>
</property>
</configuration>
hadoop-3.3.6/sbin на Namenode и выполните команду ./start-yarn
jps на Namenode при этом должен быть примерно таким (с компонентами NodeManager и ResourceManager):
Замечание: при работе с HDFS может возникнуть предупреждение
Name node is in safe mode. В этом случае файловая система HDFS доступна "только для чтения". Namenode может автоматически переходить в безопасный режим. Чтобы выключить безопасный режим используйте командуhdfs dfsadmin -safemode leave
Namenode даже после выполнения указанной команды может оставаться в безопасном режиме; одна из основных причин — отсутствие свободного места на диске
python3 --version), создайте и активируйте виртуальное окружение (рекомендуется организовать отдельную папку)MRJob и библиотеку для выполнения HTTP-запросов (в базовом варианте — requests; если хотите выполнять запросы асинхронно — используйте httpx или аналоги)python3 <имя файла python> -r hadoop hdfs:///<путь к файлу или папке в HDFS> (например, если в HDFS создана папка /test и в ней расположены исходные данные в виде нескольких файлов, то можно указать путь hdfs:///test — в этом случае на вход первому мапперу будут поступать строки из всех файлов папки)При желании можно использовать флаг
--output-dirдля указания папки, куда будут сохраняться результаты выполнения задачи MapReduce; помните, что вы указываете путь в HDFS
В целях отладки можно запускать код командой
python3 <имя файла python> <путь к файлу или папке со входными данными>;MrJobпозволяет работать с файлами и папками в локальной файловой системе

Если все хорошо, то пора попробовать решить задачки, которые похожи на реальные задачи BigData (ну только масштаб все же меньше).
UTF-8