предисловие
В этой статье в основном представлены три режима работы Hadoop и способы их настройки.
рабочий режим
Есть три режима работы Hadoop:
-
Автономный (локальный режим/автономный режим/локальный режим)
В этом режиме нет процесса-демона, пользовательская программа и программа Hadoop выполняются в одном и том же Java-процессе, а используемая файловая система является локальной файловой системой, а не распределенной файловой системой.Этот режим обычно используется для локальной отладки.
-
Псевдораспределенный (псевдокластерный режим)
существуетавтономныйРежим кластера моделируется выше, каждый демон работает в отдельном процессе Java, а используемая файловая система — HDFS.
-
Полностью распределенный (кластерный режим)
Демон работает в кластере, а также используется файловая система HDFS.
процесс настройки
Эта конфигурация основана на Hadoop2.9.2, в которой Standalone настроен на CentOS 7.2, псевдораспределенный режим настроен на MacOS 10.14.4, полностью распределенный режим настроен на облачном хосте Tencent, а кластер состоит из двух облачных хостов. под управлением систем Ubuntu 14.04.1 и CentOS 7.2 соответственно.
Подготовка окружающей среды
-
Java 7/8
Hadoop от 2.7.x до 2.x поддерживает Java 7/8, другие версии Hadoop поддерживают версию Java, нажмите здесь?сделать запрос
скачать:
sudo yum install java-1.8.0-openjdk-devel //centos 安装 Java8,ubuntu 下需要用 apt-get 进行安装
Настройте переменные среды:
cd ~ vi .bash_profile export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.i386 source .bash_profile
-
ssh и rsync: используйте
ssh
иrsync
После командной проверки я обнаружил, что она есть у самого Centos, поэтому устанавливать ее не нужно. -
Hadoop
sudo wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz tar -zxvf hadoop-2.9.2.tar.gz
Адрес загрузки здесь лучше всего выбирать в соответствии с регионом, в котором находится облачный хост.Если это домашний облачный хост, лучше использовать адрес домашнего зеркала, так загрузка будет намного быстрее.
Автономный режим
После загрузки и распаковки Hadoop по умолчанию находится в автономном режиме, и вы можете запустить wordcount непосредственно для тестирования.
mkdir input //hadoop 的同级目录创建
cp hadoop-2.9.2/LICENSE.txt input/
hadoop-2.9.2/bin/hadoop jar hadoop-2.9.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount input output //运行 wordcount
cat output/part-r-00000 //查看结果
В то же время откройте другой терминал и введите jps, чтобы просмотреть процесс во время выполнения задания.
Вы можете видеть, что в автономном режиме Hadoop запустит процесс RunJar только для выполнения всего задания.
Псевдораспределенный режим
-
Изменить etc/hadoop/core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <!--配置访问 nameNode 的 URI--> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <!--指定临时目录,MapReduce 和 HDFS 的许多路径配置依赖此路径--> <value>/home/hadoop/tmp</value> </property> </configuration>
-
Изменить etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <!--配置文件的副本数量--> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> <!--关闭防火墙--> </property> </configuration>
-
Настроить вход без пароля
ssh localhost 测试能否免密登录(如果能够则跳过以下操作) ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys
-
Измените etc/hadoop/hadoop-env.sh (если подсказка не может найти JAVA_HOME)
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.i386 //上面配置的 JAVA_HOME 好像没起作用
-
Формат HDFS
bin/hdfs namenode -format
-
Запустить HDFS
sbin/start-dfs.sh
После запуска введите jps и увидите, что следующий процесс прошел успешно.В это время вы можете пройтиhttp://localhost:50070/Доступ к NameNode
-
запустить подсчет слов
bin/hdfs dfs -mkdir /user bin/hdfs dfs -mkdir /user/<username> bin/hdfs dfs -mkdir /user/<username>/input bin/hdfs dfs -put LICENSE.txt /user/<username>/input //创建文件夹并上传文件 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount input output //运行 wordcount bin/hdfs dfs -cat output/part-r-00000 //显示结果
Введите jps в другом терминале, чтобы увидеть следующие процессы во время выполнения.
Он по-прежнему отправляется с RunJar, но для чтения и записи используется HDFS.
-
Выполнение задания через YARN (необязательная конфигурация, но рекомендуемая конфигурация для приближения к реальному кластеру)
-
Изменить etc/hadoop/mapred-site.xml
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml vi etc/hadoop/mapred-site.xml
Добавьте следующее
<configuration> <property> <name>mapreduce.framework.name</name> <!--表明运行在 YARN 上--> <value>yarn</value> </property> </configuration>
-
Измените файл etc/hadoop/yarn-site.xml.
<configuration> <property> <name>yarn.resourcemanager.hostname</name><!--设置resourcemanager的hostname--> <value>localhost</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <!--指定 nodemanager 获取数据的方式--> <value>mapreduce_shuffle</value> </property> </configuration>
-
Начать пряжу
sbin/start-yarn.sh
После успешного запуска можно пройтиhttp://localhost:8088/Доступ к узлу ResourceManager и ввод jps показывают следующие процессы.
Где ResourceManager и NodeManager — это процессы, принадлежащие YARN.
-
повторение
7
операция, введите jps, чтобы запросить процессВы можете видеть, что процесс YarnChild и процесс MRAppMaster добавлены недавно.Причина, по которой существует два процесса YarnChild, заключается в том, что во входной папке есть два текстовых файла, которые показывают, что MapReduce создается путем созданиянесколько процессов параллельновычислительный.
-
Полностью распределенный режим
Кластер включает в себя два узла. Имена узлов — главный и подчиненный. Процесс настройки узла главного и подчиненного в основном одинаков. Ниже приведен процесс настройки (будет отмечена разница в конфигурации двух узлов. Копируется команда scp подчиненному узлу для модификации.):
-
Исправлять/etc/hosts
152.136.76.12 master //腾讯云公网ip 94.191.43.137 slave
-
Вход без пароля (⚠️Имена входа двух узлов должны быть одинаковыми, здесь оба являются корневыми.)
master 节点配置本机免密登录以及移动公钥到子节点 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys scp ~/.ssh/id_rsa.pub root@slave:~/ slave 节点配置 master 节点免密登录 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
-
Изменить etc/hadoop/core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <!--配置访问 nameNode 的 URI--> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <!--指定临时目录,MapReduce 和 HDFS 的许多路径配置依赖此路径--> <value>/home/hadoop/tmp</value> </property> </configuration>
-
Изменить etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <!--配置文件的副本数量--> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> <!--关闭防火墙--> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>slave:50090</value> <!-- 指定secondarynamenode位置 --> </property> </configuration>
-
Изменить etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <!--表明运行在 YARN 上--> <value>yarn</value> </property> </configuration>
-
Измените файл etc/hadoop/yarn-site.xml.
<configuration> <property> <name>yarn.resourcemanager.hostname</name><!--设置resourcemanager的hostname--> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <!--指定 nodemanager 获取数据的方式--> <value>mapreduce_shuffle</value> </property> </configuration>
-
Изменить etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.i386 //master 和 slave 填入各自路径 export HADOOP_LOG_DIR=/root/hadoop/hadoop-2.9.2/logs //可以自己选定
-
Изменить etc/hadoop/mapred-env.sh
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.i386
-
Измените etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.i386 export YARN_LOG_DIR=/root/hadoop/hadoop-2.9.2/logs
-
Изменить etc/hadoop/slaves
master slave
-
Запустите HDFS и YARN
bin/hdfs namenode -format //首次运行时格式化 sbin/start-dfs.sh sbin/start-yarn.sh
После ввода jps на ведущем и ведомом узлах соответственно есть
-
запустить подсчет слов (в соответствии с псевдораспределением)
bin/hdfs dfs -mkdir /user bin/hdfs dfs -mkdir /user/<username> bin/hdfs dfs -mkdir /user/<username>/input bin/hdfs dfs -put LICENSE.txt /user/<username>/input bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount input output bin/hdfs dfs -cat output/part-r-00000
Продолжайте использовать jps для просмотра процессов двух хостов
Вы можете видеть, что процессы в режиме кластера ничем не отличаются от процессов в режиме псевдокластера, разница лишь в том, что процессы выполняются на разных хостах.
Ошибка
Здесь мы в основном фиксируем некоторые ошибки, возникающие в процессе настройки.
-
Container exited with a non-zero exit code 1. Error file: prelaunch.err.
Эта ошибка возникает, когда wordcount запускается в режиме псевдокластера, настроенном на хосте Tencent Cloud.Я пробовал некоторые методы в Интернете, но ни один из них не может быть разрешен. Наконец, я использовал свою собственную конфигурацию компьютера, чтобы снова успешно запустить его, что может быть связано с проблемой конфигурации облачного хоста.
-
Запуск на YARN Java.net.ConnectException: в соединении отказано
Возможно, причина в брандмауэре, согласно?Советы в решении
-
Не удается получить доступ к порту 8088 Hadoop YARN в виртуальной машине из внешней сети
Если вы не можете получить доступ к веб-странице YARN через облачный хост с IP-адресом: 8088, вы можете использовать
netstat -nlp | grep java
Проверьте порт, который в настоящее время предоставляет веб-службу. Если IP-адрес 127.0.0.1, это доказывает наличие проблемы и необходимость изменения хостов. Конкретный процесс см.?. -
slave: bash: line 0: cd: /root/hadoop/hadoop-2.9.2: No such file or directory
При настройке режима кластера основная причина заключается в том, что путь к хранилищу Hadoop не соответствует ведущему при ручной настройке ведомого устройства.Это можно решить, поместив ведомое устройство Hadoop по тому же пути, что и ведущее устройство.