Detailliertes Tutorial zum Bereitstellen eines Hadoop-Clusters mit Docker

Detailliertes Tutorial zum Bereitstellen eines Hadoop-Clusters mit Docker

Ich möchte in meinem Unternehmen kürzlich einen Hadoop-Testcluster erstellen und verwende daher Docker, um den Hadoop-Cluster schnell bereitzustellen.

0. Schreiben Sie vor

Es gibt bereits viele Tutorials im Internet, aber sie bergen viele Fallstricke. Hier werde ich meinen eigenen Installationsprozess aufzeichnen.

Ziel: Verwenden Sie Docker, um einen Hadoop 2.7.7-Cluster mit einem Master und zwei Slaves zu erstellen.

Vorbereiten:

Zunächst benötigen Sie eine CentOS7-Maschine mit mehr als 8 GB Arbeitsspeicher. Ich verwende den Alibaba Cloud-Host.

Zweitens, laden Sie die JDK- und Hadoop-Pakete auf den Server hoch.

Ich habe hadoop2.7.7 installiert. Das Paket steht für alle bereit, Link: https://pan.baidu.com/s/15n_W-1rqOd2cUzhfvbkH4g Extraktionscode: vmzw.

1. Schritte

Es lässt sich grob in folgende Schritte unterteilen:

  • Docker installieren
  • Grundlegende Umgebungsvorbereitung
  • Konfigurieren Sie das Netzwerk und starten Sie den Docker-Container
  • Konfigurieren Sie den Host und die SSH-Anmeldung ohne Passwort
  • Installieren und Konfigurieren von Hadoop

1.1 Docker installieren

Befolgen Sie die nachstehenden Schritte, um Docker zu installieren. Wenn Sie eine Docker-Umgebung haben, können Sie diesen Schritt überspringen.

Yum-Aktualisierung

yum install -y yum-utils Gerätemapper-Persistent-Data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce
 
systemctl starte Docker

Docker -v

1.2 Grundlegende Umgebungsvorbereitung

1.2.1 Erstellen Sie ein grundlegendes CentOS7-Image und ziehen Sie das offizielle CentOS7-Image

Docker-Pull Centos

Generieren Sie ein CentOS-Image mit der SSH-Funktion, indem Sie eine Dockdatei erstellen

Erstellen einer Docker-Datei

vi Docker-Datei

Schreiben Sie den folgenden Inhalt in das Dockerfile

VON centos
WARTUNGSMITARBEITER mwf

Führen Sie den Befehl yum install -y openssh-server sudo aus.
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
Führen Sie den Befehl yum install -y openssh-clients aus.

RUN echo "root:qwe123" | chpasswd
Führen Sie echo "root ALL=(ALL) ALL" aus >> /etc/sudoers
Führen Sie den Befehl ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key aus.
Führen Sie den Befehl ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key aus.

FÜHREN Sie mkdir /var/run/sshd aus
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

Der obige Inhalt bedeutet wahrscheinlich: Setzen Sie basierend auf dem CentOS-Image das Kennwort auf wqe123, installieren Sie den SSH-Dienst und starten Sie ihn

Erstellen der Docker-Datei

docker build -t="centos7-ssh" .

Es wird ein Spiegel mit dem Namen centos7-ssh generiert, der über docker images angezeigt werden kann

1.2.2 Generieren Sie ein Image mit einer Hadoop- und JDK-Umgebung

  • Legen Sie das vorbereitete Paket in das aktuelle Verzeichnis. hadoop-2.7.7.tar.gz und jdk-8u202-linux-x64.tar.gz
  • Generieren Sie ein CentOS-Image mit einer Hadoop- und JDK-Umgebung, indem Sie eine Dockdatei erstellen.

Es wurde gerade eine Docker-Datei erstellt, also räumen wir sie aus dem Weg. mv Dockerfile Dockerfile.bak

Dockerfile erstellen

vi Docker-Datei

Schreiben Sie Folgendes:

VON centos7-ssh
HINZUFÜGEN jdk-8u202-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_202 /usr/local/jdk1.8
ENV JAVA_HOME /usr/local/jdk1.8
ENV-PFAD $JAVA_HOME/bin:$PATH

Füge hadoop-2.7.7.tar.gz /usr/local hinzu
Ausführen von mv /usr/local/hadoop-2.7.7 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV-PFAD $HADOOP_HOME/bin:$PATH

Führen Sie den Befehl yum install -y aus, wobei sudo

Der obige Inhalt bedeutet ungefähr: Basierend auf dem oben generierten Centos7-SSH fügen Sie die Hadoop- und JDK-Pakete ein und konfigurieren Sie dann die Umgebungsvariablen.

Erstellen der Docker-Datei

docker build -t="hadoop" .

Ein Spiegel mit dem Namen hadoop wird generiert

1.3 Konfigurieren Sie das Netzwerk und starten Sie den Docker-Container

Da die Cluster über das Netzwerk verbunden werden müssen, muss zuerst das Netzwerk konfiguriert werden.

Ein Netzwerk aufbauen

Docker-Netzwerk erstellen --Treiber Bridge Hadoop-BR

Der obige Befehl erstellt ein Bridge-Netzwerk mit dem Namen hadoop-br

Geben Sie das Netzwerk beim Starten von Docker an

docker run -itd --network hadoop-br --name hadoop1 -p 50070:50070 -p 8088:8088 hadoop
docker run -itd --network hadoop-br --name hadoop2 hadoop
docker run -itd --network hadoop-br --name hadoop3 hadoop

Der obige Befehl startet drei Maschinen, das Netzwerk wird als hadoop-br angegeben und die Portzuordnung wird für hadoop1 aktiviert.

Überprüfen des Netzwerkstatus

Docker-Netzwerkinspektion Hadoop-br

Führen Sie den obigen Befehl aus, um die entsprechenden Netzwerkinformationen anzuzeigen:

[
  {
    "Name": "hadoop-br",
    "ID": "88b7839f412a140462b87a353769e8091e92b5451c47b5c6e7b44a1879bc7c9a",
    "Container": {
"86e52eb15351114d45fdad4462cc2050c05202554849bedb8702822945268631": {
        "Name": "hadoop1",
        "IPv4Adresse": "172.18.0.2/16",
        "IPv6Adresse": ""
      },
      "9baa1ff183f557f180da2b7af8366759a0d70834f43d6b60fba2e64f340e0558": {
        "Name": "hadoop2",
        "IPv4Adresse": "172.18.0.3/16",
        "IPv6Adresse": ""
      }, "e18a3166e965a81d28b4fe5168d1f0c3df1cb9f7e0cbe0673864779b224c8a7f": {
        "Name": "hadoop3",
        "IPv4Adresse": "172.18.0.4/16",
        "IPv6Adresse": ""
      }
    },
  }
]

Wir können die IP-Adressen der drei Maschinen herausfinden:

172.18.0.2 hadoop1 
172.18.0.3 hadoop2 
172.18.0.4 hadoop3

Melden Sie sich beim Docker-Container an und Sie können sich gegenseitig anpingen.

docker exec -it hadoop1 bash
docker exec -it hadoop2 bash
docker exec -it hadoop3 bash

1.4 Konfigurieren Sie den Host und die SSH-Anmeldung ohne Passwort

1.4.1 Konfigurieren des Hosts

Ändern Sie den Host jeder Maschine separat

vi /etc/hosts

Schreiben Sie den folgenden Inhalt (Hinweis: Die von Docker zugewiesene IP kann für jede Person unterschiedlich sein, geben Sie Ihre eigene ein):

172.18.0.2 hadoop1 
172.18.0.3 hadoop2 
172.18.0.4 hadoop3

1.4.2 SSH-Anmeldung ohne Passwort

Da im obigen Image der SSH-Dienst installiert wurde, führen Sie die folgenden Befehle direkt auf jedem Computer aus:

ssh-keygen
Drücken Sie die Eingabetaste vollständig ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop1
Geben Sie das Passwort ein. Meins lautet qwe123.
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop2
Geben Sie das Passwort ein. Meins lautet qwe123.
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop3
Geben Sie das Passwort ein. Meins lautet qwe123.

1.4.3 Testen, ob die Konfiguration erfolgreich ist

ping hadoop1 
ping hadoop2
ping hadoop3
ssh hadoop1
ssh hadoop2
ssh hadoop3

1.5 Installieren und Konfigurieren von Hadoop

1.5.1 Betrieb auf hadoop1

Geben Sie hadoop1 ein

docker exec -it hadoop1 bash

Erstellen Sie einige Ordner, die später in der Konfiguration verwendet werden

mkdir /home/hadoop
mkdir /home/hadoop/tmp /home/hadoop/hdfs_name /home/hadoop/hdfs_daten

Wechseln Sie zum Hadoop-Konfigurationsverzeichnis

cd $HADOOP_HOME/etc/hadoop/

Bearbeiten Sie core-site.xml

<Eigenschaft>
    <name>fs.defaultFS</name>
    <Wert>hdfs://hadoop1:9000</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>hadoop.tmp.dir</name>
    <Wert>Datei:/home/hadoop/tmp</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>io.Datei.Puffergröße</name>
    <Wert>131702</Wert>
  </Eigenschaft>

Bearbeiten Sie hdfs-site.xml

 <Eigenschaft>
    <name>dfs.namenode.name.dir</name>
    <Wert>Datei:/home/hadoop/hdfs_name</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>dfs.datanode.data.dir</name>
    <Wert>Datei:/home/hadoop/hdfs_data</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>dfs.replikation</name>
    <Wert>2</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>dfs.namenode.secondary.http-Adresse</name>
    <Wert>hadoop1:9001</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>dfs.webhdfs.aktiviert</name>
    <Wert>wahr</Wert>
  </Eigenschaft>

Bearbeiten Sie mapred-site.xml

mapred-site.xml existiert standardmäßig nicht. Führen Sie dazu cp mapred-site.xml.template mapred-site.xml aus.

 <Eigenschaft>
    <name>mapreduce.framework.name</name>
    <value>Garn</value>
  </Eigenschaft>
  <Eigenschaft>
    <name>mapreduce.jobhistory.adresse</name>
    <Wert>hadoop1:10020</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>mapreduce.jobhistory.webapp.adresse</name>
    <Wert>hadoop1:19888</Wert>
  </Eigenschaft>

yarn-site.xml bearbeiten

 <Eigenschaft>
    <name>yarn.nodemanager.aux-services</name>
    <Wert>mapreduce_shuffle</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
    <Wert>org.apache.hadoop.mapred.ShuffleHandler</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>Garn.Resourcemanager.Adresse</name>
    <Wert>hadoop1:8032</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>garn.resourcemanager.scheduler.adresse</name>
    <Wert>hadoop1:8030</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>Garn.Resourcemanager.Resource-Tracker.Adresse</name>
    <Wert>hadoop1:8031</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>yarn.resourcemanager.admin.adresse</name>
    <Wert>hadoop1:8033</Wert>
  </Eigenschaft>
  <Eigenschaft>
    <name>yarn.resourcemanager.webapp.adresse</name>
    <Wert>hadoop1:8088</Wert>
  </Eigenschaft>

Slaves bearbeiten

Hier verwende ich hadoop1 als Masterknoten und hadoop2 und 3 als Slaveknoten

hadoop2
hadoop3

Kopieren Sie die Datei nach hadoop2 und hadoop3

Führen Sie die folgenden Befehle nacheinander aus:

scp -r $HADOOP_HOME/hadoop2:/usr/local/
scp -r $HADOOP_HOME/hadoop3:/usr/local/

scp -r /home/hadoop hadoop2:/
scp -r /home/hadoop hadoop3:/

1.5.2 Bedienung an den einzelnen Maschinen

Stellen Sie eine separate Verbindung zu jedem Computer her

docker exec -it hadoop1 bash
Docker Exec -it Hadoop2 Bash
docker exec -it hadoop3 bash

Konfigurieren Sie die Umgebungsvariablen des Hadoop-Sbin-Verzeichnisses

Da das Hadoop-Bin-Verzeichnis bei der vorherigen Erstellung des Images konfiguriert wurde, das Sbin-Verzeichnis jedoch nicht, muss es separat konfiguriert werden. Weisen Sie jeder Maschine eine Konfiguration zu:

vi ~/.bashrc

Fügen Sie den folgenden Inhalt an:

export PATH=$PATH:$HADOOP_HOME/sbin

implementieren:

Quelle ~/.bashrc

1.5.3 Hadoop starten

Führen Sie den folgenden Befehl auf hadoop1 aus:

Formatieren von HDFS

hdfs-Namensknoten -Format

Ein-Klick-Start

start-all.sh

Wer keine Fehler macht, kann feiern. Wenn Sie einen Fehler machen, kommen Sie.

1.6 Testen mit hadoopjps

#hadoop1
1748 Jps
490 NameNode
846 RessourcenManager
686 SekundärerNamensknoten

#hadoop2
400 Datenknoten
721 Jps
509 KnotenManager

#hadoop3
425 KnotenManager
316 Datenknoten
591 Jps

Dateien hochladen

hdfs dfs -mkdir /mwf

echo hallo > a.txt
hdfs dfs -put eine.txt /mwf

hdfs dfs -ls /mwf

Gefunden 1 Artikel
drwxr-xr-x - Root-Supergruppe 0 04.09.2020 11:14 /mwf

Da es sich um einen Cloud-Server handelt, möchte ich den Port nicht konfigurieren und werde mir daher die UI-Oberfläche nicht ansehen.

2. Abschließend

Oben ist der Prozess, den ich nach der erfolgreichen Installation zusammengefasst habe. Es sollte keine Probleme geben, aber es können Auslassungen auftreten.

3. Referenzen

https://cloud.tencent.com/developer/article/1084166

https://cloud.tencent.com/developer/article/1084157?from=10680

https://blog.csdn.net/ifenggege/article/details/108396249

Dies ist das Ende dieses Artikels mit dem ausführlichen Tutorial zum Bereitstellen eines Hadoop-Clusters mit Docker. Weitere Informationen zum Bereitstellen eines Hadoop-Clusters mit Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So erstellen Sie eine Hadoop-Clusterumgebung mit Ubuntu Docker
  • Detaillierte Erklärung zum Erstellen von Hadoop- und HBase-Clustern mit Docker
  • Detaillierte Erklärung, wie Sie mit Docker schnell von Grund auf eine Hadoop-Clusterumgebung erstellen können
  • Detaillierte Erläuterung der Verwendung von Docker zum Erstellen eines verteilten Hadoop-Clusters

<<:  Detaillierte Erklärung zum Schreiben von MySQL ungleich null und gleich null

>>:  jQuery zum Erzielen eines gleitenden Treppeneffekts

Artikel empfehlen

Zwei Verwendungen von iFrame-Tags in HTML

Ich habe kürzlich an einem Projekt gearbeitet – B...

Perfekte Lösung für das Problem des CSS-Hintergrundbildpfads im Webpack

Innerhalb des Style-Tags der Vue-Komponente befin...

Vue implementiert bidirektionale Datenbindung

In diesem Artikelbeispiel wird der spezifische Co...

Websocket+Vuex implementiert eine Echtzeit-Chat-Software

Inhaltsverzeichnis Vorwort 1. Der Effekt ist wie ...

Detaillierte Erklärung zu Drag-Time und Drag-Case in JavaScript

Inhaltsverzeichnis DragEvent-Schnittstelle Übersi...

Detaillierte Erklärung der MySQL-Grundoperationen (Teil 2)

Vorwort Dieser Artikel enthält 1. Mehrere wesentl...

So führen Sie py-Dateien direkt unter Linux aus

1. Erstellen Sie zuerst die Datei (wechseln Sie p...

Javascript um den Drag-Effekt der Login-Box zu erreichen

In diesem Artikel wird der spezifische Code von J...

Detaillierte Erläuterung der geplanten MySQL-Aufgaben (Ereignisereignisse)

1. Kurze Einführung in die Veranstaltung Ein Erei...