Présentation de Spark à EC2 et liaison d'iPython Notebook

introduction

J'ai créé un environnement Spark sur le DME et l'ai touché, mais il est coûteux de toujours le démarrer et de le mettre en marche. Il était difficile de l'effacer lorsqu'il n'était plus utilisé et de créer un environnement lorsqu'il était temps de l'utiliser. J'ai construit un environnement Spark sur EC2. Vous pouvez démarrer et arrêter le serveur à tout moment, vous pouvez donc vérifier Spark à faible coût. J'ai également ajouté un notebook iPython pour faciliter l'analyse, afin que je puisse également gérer Spark là-bas.

Préparation d'instance EC2

Une spécification faible suffit car elle démarre, arrête et supprime uniquement le serveur utilisé pour Spark.

Cette fois, j'ai utilisé le t2.micro le moins cher.

Télécharger Spark

Parce qu'il utilise la commande git Tout d'abord, installez git et apportez les fichiers nécessaires.

sudo yum install -y git
git clone git://github.com/apache/spark.git -b branch-1.2

J'ai inclus 1.2, qui était le dernier en date (janvier 2015).

【référence】 Spark Lightning-fast cluster computing

Paramètres AWS

En regardant spark / ec2 / spark_ec2.py Si AWS est défini dans .boto, il semble faire référence aux variables d'environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY etc. si ce n'est pas le cas. Cette fois, j'ai défini la clé secrète d'accès dans le fichier de configuration boto.

~/.boto


[Credentials]
aws_access_key_id = <AWS_ACCESS_KEY_ID>
aws_secret_access_key = <AWS_SECRET_ACCESS_KEY>

Lancer le cluster Spark

~/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>

[Remarques] Cela prendra quelques minutes pour démarrer. Cette fois, cela a pris environ 5 minutes. Par défaut, deux instances m1.large sont utilisées. "--Copy-aws-credentials" Si cela est ajouté, les paramètres AWS seront hérités.

Voir ci-dessous pour les paramètres détaillés. Running Spark on EC2 http://spark.apache.org/docs/1.2.0/ec2-scripts.html

À propos des groupes de sécurité

Lorsque vous démarrez un cluster Spark, un groupe de sécurité est automatiquement créé, mais dans l'état par défaut, certains ports sont entièrement ouverts, vous devez donc le modifier si nécessaire.

De plus, iPython Notebook utilise les ports 8888 et 9000, veuillez donc l'ajouter afin de pouvoir y accéder.

Connectez-vous au serveur

~/spark/ec2/spark-ec2 --key-pair=<KEY_PAIR_NAME> --identity-file=<SSH_KEY_FILE_NAME> --region=ap-northeast-1 login <CLUSTER_NAME>

Panne de cluster

~/spark/ec2/spark-ec2 --region=ap-northeast-1 stop <CLUSTER_NAME>

Pour démarrer le cluster

~/spark/ec2/spark-ec2 --key-pair=<KEY_PAIR_NAME> --identity-file=<SSH_KEY_FILE_NAME> --region=ap-northeast-1 start <CLUSTER_NAME>

Exécutez pyspark

Après vous être connecté au serveur maître, vous pouvez l'exécuter avec la commande suivante.

/root/spark/bin/pyspark

scala

/root/spark/bin/spark-shell

Paramètres du bloc-notes iPython

Créer un profil

ipython profile create myserver

Modifier le fichier de configuration

~/.ipython/profile_myserver/ipython_notebook_config.py


c = get_config()
c.NotebookApp.ip = '*' #Ou l'adresse IP locale du maître
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'))

【référence】 How-to: Use IPython Notebook with Apache Spark

Lancez iPython Notebook

ipython notebook --pylab inline --profile=myserver

Il peut être utilisé en accédant au <domaine du serveur maître Spark: 8888>.

Lire le fichier

[Lire à partir de S3 et traiter comme RDD]

s3_file = sc.textFile("s3n://<BUCKET>/<DIR>")
s3_file = sc.textFile("s3n://<BUCKET>/<DIR>/<FILE>")

Le point à noter est d'écrire "s3n: //". Il n'a pas pu être lu avec "s3: //". Vous pouvez faire référence à des dossiers ainsi qu'à des fichiers individuels.

[Lire le fichier local]

local_file = sc.textFile("file://" + "Chemin du fichier local")

Lors de la spécification du nom de fichier, il semble faire référence à HDFS par défaut.

Je souhaite gérer les fichiers avec HDFS, Si vous souhaitez faire référence à un fichier local, vous devez ajouter "file: //" avant le chemin.

De plus, lors du référencement d'un fichier local depuis iPython Notebook Il utilise 9000 ports, vous devez donc ouvrir des groupes de sécurité si nécessaire.

[Lire depuis S3 et traiter comme DataFrame]

Spark n'a rien à voir avec ça, mais je vais l'écrire pour le moment. Si vous souhaitez gérer les fichiers S3 avec des pandas, vous devez définir boto.

~/.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>")

Contrairement au cas de RDD, écrivez "s3: //" au lieu de "s3n: //" et vous ne pouvez pas sélectionner le dossier.

À propos de la surveillance du serveur

Spark Web UI avec <Domaine de serveur maître Spark: 8080> Vous pouvez accéder aux ganglia avec <domaine du serveur maître Spark: 5080 / ganglia>.

PostScript 2015/2/19

Tout d'abord, il y a la préparation de l'instance EC2, mais si vous le faites individuellement, vous pouvez apporter la source de github sur votre PC. Cette fois, j'ai configuré une instance car il est supposé que plusieurs personnes géreront le cluster Spark.

Recommended Posts

Présentation de Spark à EC2 et liaison d'iPython Notebook
[IPython] Comment partager un bloc-notes IPython
Comment utiliser IPython Notebook
[Apprentissage automatique] Démarrez Spark avec iPython Notebook et essayez MLlib
Installez Anaconda sur votre Mac et téléchargez votre notebook Jupyter (IPython) sur Anaconda Cloud
Utilisation d'Apache Spark avec le notebook Jupyter (notebook IPython)
Utiliser Jupyter Lab et Jupyter Notebook avec EC2
Lier Python et JavaScript avec le notebook Jupyter
Comment faire revivre des cellules dans le notebook iPython
Comment déboguer avec Jupyter ou iPython Notebook
Introduction du cadre de style Sinatra et comment l'utiliser
Lancer et utiliser le notebook IPython sur le réseau
Paramètres de Jupyter Notebook - Comment utiliser (EC2 Amazon Linux 2)
Présentation de Jupyter Notebook
installation du notebook ipython
Approvisionnement EC2 avec Vagrant + Jupyter (IPython Notebook) sur Docker
[Windows] [Python3] Installer python3 et Jupyter Notebook (anciennement ipython notebook) sous Windows
[Spark] Une histoire sur le fait d'être accro aux pièges de "", null et [] dans DataFrame
Comment (forcer) PDF les diapositives d'un notebook IPython