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.
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.
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
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>
~/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
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.
~/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>
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
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
ipython notebook --pylab inline --profile=myserver
Il peut être utilisé en accédant au <domaine du serveur maître Spark: 8888>.
[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.
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>.
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