Hausgemachte BigData. Teil 1. Spark-Streaming-Praxis in einem AWS-Cluster

Guten Tag.

Es gibt viele Dienste im Internet, die Cloud-Dienste bereitstellen. Mit ihrer Hilfe können Sie die Technologie von BigData erlernen.

In diesem Artikel werden wir Apache Kafka, Apache Spark, Zookeeper und Spark-Shell auf der EC2 AWS-Plattform (Amazon Web Services) zu Hause installieren und lernen, wie Sie alles verwenden.

Bild


Einführung in Amazon Web Services


Sie müssen sich unter aws.amazon.com/console registrieren. Geben Sie einen Namen ein und merken Sie sich das Passwort.

Konfigurieren Sie Knoteninstanzen für Zookeeper- und Kafka-Dienste.

  • Wählen Sie "Services-> EC2" aus dem Menü. Wählen Sie als Nächstes die Version des Betriebssystems des Images der virtuellen Maschine aus, wählen Sie Ubuntu Server 16.04 LTS (HVM), SSD-Volume-Typ, klicken Sie auf „Auswählen“. Wir konfigurieren die Serverinstanz: Geben Sie „t3.medium“ mit den Parametern 2vCPU, 4 GB Speicher, Allgemeiner Zweck ein Klicken Sie auf "Weiter: Instanzdetails konfigurieren".
  • Fügen Sie die Anzahl der Instanzen 1 hinzu und klicken Sie auf "Weiter: Speicher hinzufügen".
  • Wir akzeptieren den Standardwert für die Festplattengröße von 8 GB und ändern den Typ in "Magnetisch" (in den Produktionseinstellungen basierend auf Datenvolumen und Hochleistungs-SSD).
  • Geben Sie im Abschnitt "Tag-Instanzen" für "Name" den Namen der Instanz des Knotens "Home1" ein (wobei 1 nur eine Seriennummer ist) und klicken Sie auf "Weiter: ...".
  • Wählen Sie im Abschnitt "Sicherheitsgruppen konfigurieren" die Option "Vorhandene Sicherheitsgruppe verwenden" aus, indem Sie den Namen der Sicherheitsgruppe ("Spark_Kafka_Zoo_Project") auswählen und die Regeln für eingehenden Datenverkehr festlegen. Klicken Sie auf "Weiter: ..."
  • Scrollen Sie durch den Überprüfungsbildschirm, um Ihre Eingaben zu überprüfen und Launch zu starten.
  • Um eine Verbindung zu den Clusterknoten herzustellen, müssen Sie ein Paar öffentlicher Schlüssel zur Identifizierung und Autorisierung erstellen (in unserem Fall die vorhandenen verwenden). Wählen Sie dazu in der Liste den Operationstyp „Vorhandenes Paar verwenden“.

Schlüsselerstellung


  • Laden Sie Putty (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) für den Client herunter oder verwenden Sie die SSH-Verbindung vom Terminal.
  • Die .pem-Schlüsseldatei verwendet der Einfachheit halber das alte Format. Wir konvertieren es in das von Putty verwendete ppk-Format. Führen Sie dazu das Dienstprogramm PuTTYgen aus und laden Sie den Schlüssel im alten PEM-Format in das Dienstprogramm. Wir konvertieren den Schlüssel und speichern ihn (Save Private Key) zur späteren Verwendung im Home-Ordner mit der Erweiterung .ppk.

Clusterstart


Benennen Sie die Clusterknoten der Einfachheit halber in Node01-04-Notation um. Um vom lokalen Computer aus über SSH eine Verbindung zu Clusterknoten herzustellen, müssen Sie die IP-Adresse des Knotens und seinen öffentlichen / privaten DNS-Namen ermitteln, jeden Clusterknoten einzeln auswählen und für die ausgewählte Instanz seinen öffentlichen / privaten DNS-Namen für die Verbindung über SSH und für die Installation notieren Software zur Textdatei HadoopAdm01.txt.

Beispiel: ec2-35-162-169-76.us-west-2.compute.amazonaws.com

Installieren Sie Apache Kafka im SingleNode-Modus auf einem AWS-Clusterknoten


Um die Software zu installieren, wählen Sie unseren Knoten aus (kopieren Sie dessen öffentliches DNS), um eine Verbindung über SSH herzustellen. Wir konfigurieren die Verbindung über SSH. Wir verwenden den gespeicherten Namen des ersten Knotens, um die Verbindung über SSH mithilfe des in Abschnitt 1.3 erstellten privaten / öffentlichen Schlüsselpaars „HadoopUser01.ppk“ zu konfigurieren. Wir gehen über die Schaltfläche Durchsuchen zum Abschnitt Verbindung / Authentifizierung und suchen nach dem Ordner, in dem wir zuvor die Datei „HadoopUserXX.ppk“ gespeichert haben.

Wir speichern die Verbindungskonfiguration in den Einstellungen.

Wir sind mit dem Knoten verbunden und verwenden login: ubuntu.

  • Mit Root-Rechten aktualisieren wir Pakete und installieren zusätzliche Pakete, die für die weitere Installation und Konfiguration des Clusters erforderlich sind.

    sudo apt-get update sudo apt-get -y install wget net-tools netcat tar 
  • Installieren Sie Java 8 jdk und überprüfen Sie die Version von Java.

     sudo apt-get -y install openjdk-8-jdk 
  • Für eine normale Leistung des Clusterknotens müssen Sie die Speicheraustauscheinstellungen anpassen. VM-Swappines sind standardmäßig auf 60% eingestellt. Dies bedeutet, dass das System bei einer Speicherauslastung von 60% aktiv Daten vom RAM auf die Festplatte austauscht. Abhängig von der Linux-Version kann der Parameter VM swappines auf 0 oder 1 gesetzt werden:

     sudo sysctl vm.swappiness=1 

  • Fügen Sie der Konfigurationsdatei eine Zeile hinzu, um die Einstellungen während des Neustarts zu speichern.

     echo 'vm.swappiness=1' | sudo tee --append /etc/sysctl.conf 

  • Bearbeiten von Einträgen in der Datei / etc / hosts zur bequemen Auflösung der Knotennamen des Kafka-Clusters und
    zookeeper an privaten IP-Adressen zu den zugewiesenen Clusterknoten.

     echo "172.31.26.162 host01" | sudo tee --append /etc/hosts 

    Wir überprüfen die korrekte Erkennung von Namen, indem wir einen der Einträge pingen.

  • Laden Sie die neuesten Versionen (http://kafka.apache.org/downloads) der Kafka- und Scala-Distributionen herunter und bereiten Sie das Verzeichnis mit den Installationsdateien vor.

     wget http://mirror.linux-ia64.org/apache/kafka/2.1.0/kafka_2.12-2.1.0.tgz tar -xvzf kafka_2.12-2.1.0.tgz ln -s kafka_2.12-2.1.0 kafka 

  • Löschen Sie die tgz-Archivdatei, wir brauchen sie nicht mehr

  • Versuchen wir dazu den Zookeeper-Dienst:

     ~/kafka/bin/zookeeper-server-start.sh -daemon ~/kafka/config/zookeeper.properties 

    Zookeeper startet mit Standardstartoptionen. Sie können das Protokoll überprüfen:

     tail -n 5 ~/kafka/logs/zookeeper.out 

    Um sicherzustellen, dass der Zookeeper-Daemon nach dem Neustart gestartet wird, müssen wir Zookeper als Hintergrunddienst starten:

     bin/zookeeper-server-start.sh -daemon config/zookeeper.properties 

    Um den Start von Zookepper zu überprüfen, überprüfen Sie

     netcat -vz localhost 2181 

    Wir konfigurieren den Zookeeper- und Kafka-Dienst für die Arbeit. Bearbeiten / erstellen Sie zunächst die Datei /etc/systemd/system/zookeeper.service (Dateiinhalt unten).

     [Unit] Description=Apache Zookeeper server Documentation=http://zookeeper.apache.org Requires=network.target remote-fs.target After=network.target remote-fs.target [Service] Type=simple ExecStart=/home/ubuntu/kafka/bin/zookeeper-server-start.sh /home/ubuntu/kafka/config/zookeeper.properties ExecStop=/home/ubuntu/kafka/bin/zookeeper-server-stop.sh [Install] WantedBy=multi-user.target 

    Bearbeiten / erstellen Sie als Nächstes für Kafka die Datei /etc/systemd/system/kafka.service (Dateiinhalt unten).

     [Unit] Description=Apache Kafka server (broker) Documentation=http://kafka.apache.org/documentation.html Requires=zookeeper.service [Service] Type=simple ExecStart=/home/ubuntu/kafka/bin/kafka-server-start.sh /home/ubuntu/kafka/config/server.properties ExecStop=/home/ubuntu/kafka/bin/kafka-server-stop.sh [Install] WantedBy=multi-user.target 

  • Wir aktivieren systemd-Skripte für Kafka- und Zookeeper-Dienste.

     sudo systemctl enable zookeeper sudo systemctl enable kafka 

  • Überprüfen Sie die Funktion von systemd-Skripten.

     sudo systemctl start zookeeper sudo systemctl start kafka sudo systemctl status zookeeper sudo systemctl status kafka sudo systemctl stop zookeeper sudo systemctl stop kafka 

  • Wir werden die Funktionalität der Dienste von Kafka und Zookeeper überprüfen.

     netcat -vz localhost 2181 netcat -vz localhost 9092 

  • Überprüfen Sie die Zookeeper-Protokolldatei.

     cat logs/zookeeper.out 

Erste Freude


Wir erstellen unser erstes Thema auf dem zusammengebauten Kafka-Server.

  • Es ist wichtig, die Verbindung zu "host01: 2181" zu verwenden, wie Sie in der Konfigurationsdatei server.properties angegeben haben.
  • Wir schreiben einige Daten in das Thema.

     kafka-console-producer.sh --broker-list host01:9092 --topic first_topic     

    Strg-C - Beenden Sie die Themenkonsole.

  • Versuchen Sie nun, die Daten aus dem Thema zu lesen.

     kafka-console-consumer.sh --bootstrap-server host01:9092 --topic last_topic --from-beginning 

  • Schauen wir uns die Liste der Kafka-Themen an.

     bin/kafka-topics.sh --zookeeper spark01:2181 --list 

  • Bearbeiten der Kafka-Servereinstellungen für die Optimierung der Einrichtung einzelner Cluster
    # Sie müssen den ISR-Parameter auf 1 ändern.

     bin/kafka-topics.sh --zookeeper spark01:2181 --config min.insync.replicas=1 --topic __consumer_offsets --alter 

  • Wir starten den Kafka-Server neu und versuchen erneut, den Verbraucher-Ohm anzuschließen

  • Schauen wir uns die Themenliste an.

     bin/kafka-topics.sh --zookeeper host01:2181 --list 

Konfigurieren Sie Apache Spark auf einem Cluster mit einem Knoten


Wir haben eine Instanz des Knotens mit den auf AWS installierten Zookeeper- und Kafka-Diensten vorbereitet. Jetzt müssen Sie Apache Spark installieren.

Laden Sie die neueste Apache Spark-Distribution herunter.

 wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.6.tgz 


  • Entpacken Sie die Distribution und erstellen Sie einen symbolischen Link für spark und löschen Sie unnötige Archivdateien.

     tar -xvf spark-2.4.0-bin-hadoop2.6.tgz ln -s spark-2.4.0-bin-hadoop2.6 spark rm spark*.tgz 

  • Gehen Sie zum sbin-Verzeichnis und führen Sie den Spark-Assistenten aus.

     ./start-master.sh 

  • Wir stellen über einen Webbrowser eine Verbindung zum Spark-Server an Port 8080 her.

  • Führen Sie Spark-Slaves auf demselben Knoten aus

     ./start-slave.sh spark://host01:7077 

  • Führen Sie die Funkenschale mit dem Master auf host01 aus.

     ./spark-shell --master spark://host01:7077 

  • Wenn der Start nicht funktioniert, fügen Sie den Pfad zu Spark in bash hinzu.

     vi ~/.bashrc #      SPARK_HOME=/home/ubuntu/spark export PATH=$SPARK_HOME/bin:$PATH 

     source ~/.bashrc 

  • Führen Sie die Funkenschale erneut mit dem Master auf host01 aus.

     ./spark-shell --master spark://host01:7077 

    Ein Einzelknotencluster mit Kafka, Zookeeper und Spark funktioniert. Hurra!

Ein bisschen Kreativität


Laden Sie den Scala-IDE-Editor herunter (unter scala-ide.org ). Wir beginnen und beginnen Code zu schreiben. Hier werde ich mich nicht mehr wiederholen, da es einen guten Artikel über Habré gibt .

Nützliche Literatur und Kurse helfen:

Kurse.hadoopinrealworld.com/courses/enrolled/319237
data-flair.training/blogs/kafka-consumer
www.udemy.com/apache-spark-with-scala-hands-on-with-big-data

Source: https://habr.com/ru/post/de452752/


All Articles