Ich habe eine Spark-Umgebung auf der EMR erstellt und sie berührt, aber es ist teuer, sie immer zu starten und anzulegen. Es war schwierig, es zu löschen, wenn es nicht mehr verwendet wurde, und eine Umgebung zu erstellen, wenn es Zeit war, es zu verwenden. Ich habe eine Spark-Umgebung auf EC2 erstellt. Sie können den Server jederzeit starten und stoppen, um Spark kostengünstig zu überprüfen. Ich habe auch ein iPython-Notizbuch eingebaut, um die Analyse zu vereinfachen, damit ich dort auch mit Spark umgehen kann.
Eine niedrige Spezifikation reicht aus, da sie nur den für Spark verwendeten Server startet, stoppt und löscht.
Dieses Mal habe ich das billigste t2.micro verwendet.
Weil es den Befehl git verwendet Installieren Sie zuerst git und bringen Sie die erforderlichen Dateien mit.
sudo yum install -y git
git clone git://github.com/apache/spark.git -b branch-1.2
Ich habe 1.2 aufgenommen, das war der letzte Moment (Januar 2015).
【Referenz】 Spark Lightning-fast cluster computing
Mit Blick auf spark / ec2 / spark_ec2.py Wenn AWS in .boto festgelegt ist, scheint es sich auf die Umgebungsvariablen AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY usw. zu beziehen, wenn dies nicht der Fall ist. Dieses Mal habe ich den geheimen Zugriffsschlüssel in der Boto-Einstellungsdatei festgelegt.
~/.boto
[Credentials]
aws_access_key_id = <AWS_ACCESS_KEY_ID>
aws_secret_access_key = <AWS_SECRET_ACCESS_KEY>
~/spark/ec2/spark-ec2 --key-pair=<KEY_PAIR_NAME> --identity-file=<SSH_KEY_FILE_NAME> --region=ap-northeast-1 --spark-version=1.2.0 --copy-aws-credentials launch <CLUSTER_NAME>
[Bemerkungen] Der Start dauert einige Minuten. Diesmal dauerte es ungefähr 5 Minuten. Standardmäßig werden zwei m1.large-Instanzen verwendet. "--Copy-aws-credentials" Wenn dies hinzugefügt wird, werden die AWS-Einstellungen vererbt.
Detaillierte Einstellungen finden Sie weiter unten. Running Spark on EC2 http://spark.apache.org/docs/1.2.0/ec2-scripts.html
Wenn Sie einen Spark-Cluster starten, wird automatisch eine Sicherheitsgruppe erstellt. Im Standardzustand sind jedoch einige Ports vollständig geöffnet, sodass Sie sie bei Bedarf ändern müssen.
Außerdem verwendet das iPython Notebook die Ports 8888 und 9000. Fügen Sie sie daher hinzu, damit Sie darauf zugreifen können.
~/spark/ec2/spark-ec2 --key-pair=<KEY_PAIR_NAME> --identity-file=<SSH_KEY_FILE_NAME> --region=ap-northeast-1 login <CLUSTER_NAME>
Clusterausfall
~/spark/ec2/spark-ec2 --region=ap-northeast-1 stop <CLUSTER_NAME>
So starten Sie den Cluster
~/spark/ec2/spark-ec2 --key-pair=<KEY_PAIR_NAME> --identity-file=<SSH_KEY_FILE_NAME> --region=ap-northeast-1 start <CLUSTER_NAME>
Nachdem Sie sich beim Master-Server angemeldet haben, können Sie ihn mit dem folgenden Befehl ausführen.
/root/spark/bin/pyspark
Scala
/root/spark/bin/spark-shell
Profil erstellen
ipython profile create myserver
Konfigurationsdatei bearbeiten
~/.ipython/profile_myserver/ipython_notebook_config.py
c = get_config()
c.NotebookApp.ip = '*' #Oder die lokale IP des Masters
c.NotebooksApp.open_browser = False
~/.ipython/profile_myserver/startup/00-myserver-setup.py
import os
import sys
os.environ['SPARK_HOME'] = '/root/spark/'
CLUSTER_URL = open('/root/spark-ec2/cluster-url').read().strip()
spark_home = os.environ.get('SPARK_HOME', None)
if not spark_home:
raise ValueError('SPARK_HOME environment variable is not set')
sys.path.insert(0, os.path.join(spark_home, 'python'))
sys.path.insert(0, os.path.join(spark_home, 'python/lib/py4j-0.8.2.1-src.zip'))
execfile(os.path.join(spark_home, 'python/pyspark/shell.py'))
execfile(os.path.join(spark_home, 'conf/spark-env.sh'))
【Referenz】 How-to: Use IPython Notebook with Apache Spark
ipython notebook --pylab inline --profile=myserver
Sie können durch Zugriff auf <Spark Master Server Domain: 8888> verwendet werden.
[Aus S3 lesen und als RDD behandeln]
s3_file = sc.textFile("s3n://<BUCKET>/<DIR>")
s3_file = sc.textFile("s3n://<BUCKET>/<DIR>/<FILE>")
Der zu beachtende Punkt ist das Schreiben von "s3n: //". Konnte nicht mit "s3: //" lesen. Sie können sowohl auf Ordner als auch auf einzelne Dateien verweisen.
[Lokale Datei lesen]
local_file = sc.textFile("file://" + "Lokaler Dateipfad")
Bei der Angabe des Dateinamens wird standardmäßig auf HDFS verwiesen.
Ich möchte die Dateien mit HDFS verwalten, Wenn Sie auf eine lokale Datei verweisen möchten, müssen Sie dem Pfad "file: //" voranstellen.
Wenn Sie auf eine lokale Datei aus iPython Notebook verweisen Es werden 9000 Ports verwendet, daher müssen Sie Sicherheitsgruppen nach Bedarf öffnen.
[Aus S3 lesen und als DataFrame behandeln]
Spark hat damit nichts zu tun, aber ich werde es vorerst schreiben. Wenn Sie S3-Dateien mit Pandas verarbeiten möchten, müssen Sie boto festlegen.
~/.boto
[Credentials]
aws_access_key_id = <AWS_ACCESS_KEY_ID>
aws_secret_access_key = <AWS_SECRET_ACCESS_KEY>
df = pd.read_csv("s3://<BUCKET>/<DIR>/<FILE>")
Schreiben Sie im Gegensatz zu RDD "s3: //" anstelle von "s3n: //", und Sie können den Ordner nicht auswählen.
Spark-Web-Benutzeroberfläche mit <Spark Master Server Domain: 8080> Sie können auf Ganglien mit <Spark Master Server Domain: 5080 / Ganglien> zugreifen.
Zunächst wird die EC2-Instanz vorbereitet. Wenn Sie dies jedoch einzeln tun, können Sie die Github-Quelle auf Ihren PC übertragen. Dieses Mal habe ich eine Instanz eingerichtet, da davon ausgegangen wird, dass mehrere Personen den Spark-Cluster verwalten.
Recommended Posts