Среда на основе Hadoop

Hadoop

предисловие

В этой статье в основном представлены три режима работы Hadoop и способы их настройки.

рабочий режим

Есть три режима работы Hadoop:

  1. Автономный (локальный режим/автономный режим/локальный режим)

    В этом режиме нет процесса-демона, пользовательская программа и программа Hadoop выполняются в одном и том же Java-процессе, а используемая файловая система является локальной файловой системой, а не распределенной файловой системой.Этот режим обычно используется для локальной отладки.

  2. Псевдораспределенный (псевдокластерный режим)

    существуетавтономныйРежим кластера моделируется выше, каждый демон работает в отдельном процессе Java, а используемая файловая система — HDFS.

  3. Полностью распределенный (кластерный режим)

    Демон работает в кластере, а также используется файловая система 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-standalone

Вы можете видеть, что в автономном режиме Hadoop запустит процесс RunJar только для выполнения всего задания.

Псевдораспределенный режим

  1. Изменить 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>
  2. Изменить 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>
  3. Настроить вход без пароля

    ssh localhost 测试能否免密登录(如果能够则跳过以下操作)
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 0600 ~/.ssh/authorized_keys
  4. Измените etc/hadoop/hadoop-env.sh (если подсказка не может найти JAVA_HOME)

    export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.i386 //上面配置的 JAVA_HOME 好像没起作用
  5. Формат HDFS

    bin/hdfs namenode -format
  6. Запустить HDFS

    sbin/start-dfs.sh

    После запуска введите jps и увидите, что следующий процесс прошел успешно.В это время вы можете пройтиhttp://localhost:50070/Доступ к NameNode

    hdfs进程

  7. запустить подсчет слов

    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 в другом терминале, чтобы увидеть следующие процессы во время выполнения.

    Pseudo-Distributed

    Он по-прежнему отправляется с RunJar, но для чтения и записи используется HDFS.

  8. Выполнение задания через 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 показывают следующие процессы.

      yarn-process

      Где ResourceManager и NodeManager — это процессы, принадлежащие YARN.

    • повторение7операция, введите jps, чтобы запросить процесс

      yarn-run-process

      Вы можете видеть, что процесс YarnChild и процесс MRAppMaster добавлены недавно.Причина, по которой существует два процесса YarnChild, заключается в том, что во входной папке есть два текстовых файла, которые показывают, что MapReduce создается путем созданиянесколько процессов параллельновычислительный.

Полностью распределенный режим

Кластер включает в себя два узла. Имена узлов — главный и подчиненный. Процесс настройки узла главного и подчиненного в основном одинаков. Ниже приведен процесс настройки (будет отмечена разница в конфигурации двух узлов. Копируется команда scp подчиненному узлу для модификации.):

  1. Исправлять/etc/hosts

    152.136.76.12 master //腾讯云公网ip
    94.191.43.137 slave
  2. Вход без пароля (⚠️Имена входа двух узлов должны быть одинаковыми, здесь оба являются корневыми.)

    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
  3. Изменить 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>
  4. Изменить 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>
  5. Изменить etc/hadoop/mapred-site.xml

    <configuration>
        <property>
            <name>mapreduce.framework.name</name> <!--表明运行在 YARN 上-->
            <value>yarn</value>
        </property>
    </configuration>
  6. Измените файл 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>
  7. Изменить 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 //可以自己选定
  8. Изменить etc/hadoop/mapred-env.sh

    export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.i386
  9. Измените 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
  10. Изменить etc/hadoop/slaves

    master
    slave
  11. Запустите HDFS и YARN

    bin/hdfs namenode -format //首次运行时格式化
    sbin/start-dfs.sh
    sbin/start-yarn.sh

    После ввода jps на ведущем и ведомом узлах соответственно есть

    На этом этапе вы можете получить доступ к веб-интерфейсу HDFS и веб-интерфейсу YARN через http://152.136.76.12:8080 (ip-адрес — общедоступный сетевой IP-адрес мастера) и http://152.136.76.12:50070 соответственно. Вы можете видеть, что есть один подчиненный узел, есть два узла под YARN

    HDFS-node

    YARN-node

  12. запустить подсчет слов (в соответствии с псевдораспределением)

    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 для просмотра процессов двух хостов

    Вы можете видеть, что процессы в режиме кластера ничем не отличаются от процессов в режиме псевдокластера, разница лишь в том, что процессы выполняются на разных хостах.

Ошибка

Здесь мы в основном фиксируем некоторые ошибки, возникающие в процессе настройки.

  1. Container exited with a non-zero exit code 1. Error file: prelaunch.err.

    Эта ошибка возникает, когда wordcount запускается в режиме псевдокластера, настроенном на хосте Tencent Cloud.Я пробовал некоторые методы в Интернете, но ни один из них не может быть разрешен. Наконец, я использовал свою собственную конфигурацию компьютера, чтобы снова успешно запустить его, что может быть связано с проблемой конфигурации облачного хоста.

  2. Запуск на YARN Java.net.ConnectException: в соединении отказано

    Возможно, причина в брандмауэре, согласно?Советы в решении

  3. Не удается получить доступ к порту 8088 Hadoop YARN в виртуальной машине из внешней сети

    Если вы не можете получить доступ к веб-странице YARN через облачный хост с IP-адресом: 8088, вы можете использоватьnetstat -nlp | grep javaПроверьте порт, который в настоящее время предоставляет веб-службу. Если IP-адрес 127.0.0.1, это доказывает наличие проблемы и необходимость изменения хостов. Конкретный процесс см.?.

  4. slave: bash: line 0: cd: /root/hadoop/hadoop-2.9.2: No such file or directory

    При настройке режима кластера основная причина заключается в том, что путь к хранилищу Hadoop не соответствует ведущему при ручной настройке ведомого устройства.Это можно решить, поместив ведомое устройство Hadoop по тому же пути, что и ведущее устройство.

Thanks

  1. Полностью распределенное развертывание Hadoop
  2. Введение в три режима Hadoop
  3. Различия и детали конфигурации трех режимов работы Hadoop