Comment utiliser Spark-NLP depuis une EMR ?

Spark NLP est une excellente collection d’algorithmes de transformation et d’analyse de texte. Cependant, utiliser des librairies tierces dans un cluster Hadoop+Spark requiert un peu de technicité. Nous vous partageons un guide pas à pas pour vous lancer plus facilement dans la valorisation de vos corpus textuels. Ici nous faisons un focus sur une architecture Hadoop dans Amazon Web Services, autrement appelé EMR.

1. Créer l’EMR

  • Etape 1 « Logiciels et étapes » :

– Cocher au moins : Hadoop, JupyterHub, Hive et Spark

  • Etape 2 « Matériel » :

– Choisir les capacités adapatées à son besoin

  • Etape 3 « Paramètres des clusters généraux » :

– Ajouter le lien du bucket où les données sont stockées, dans « Dossier S3 »
– Ajouter un tag « JUPYTER_CONSOLE » tel que :

  • Etape 4 «Sécurité» :

– Associer l’EMR à une paire de clefs SSH, stockée sur votre poste.
– Prendre un groupe de sécurité qui ouvre, par exemple, le port 8890 à votre adresse IP. Sur les paramètrages du groupe, s’assurer qu’il y a une ligne telle que :

  • Créer et démarrer l’EMR

2. Connection à l’EMR

  • Ouvrez un terminal là où la paire de clef SSH est enregistrée (fichier .pem)
  • Se connecter en SSH, sur le port choisi (par exemple ici, le 8890) :
ssh -i clef_ssh.pem -L 8890:localhost:8890 hadoop@ec2-…

=> ec2-… correspond au nom DSN de l’EMR
=> Taper « yes », si tout est ok le terminal affiche un logo « EMR »

3. Paramétrages sur la machine

  • Si Pyspark est sur Python 2.7 et non Python 3, installer enum34 (sinon il est déjà installé).
sudo pip install enum34
  • Installer également jupyter notebook en sudo. On pourrait aussi plutôt installer anaconda (qui inclut jupyter) si on le souhaite.
sudo pip install jupyter

NB : Ces installations pourraient être effectuées en bootstrap actions ou « actions d’amorçage », qui sont définies lors de la création de l’EMR (étape 3).

  • Ajouter les variables d’environnement suivantes
sudo vim .bashrc

Dans .bashrc, ajouter les lignes :

export PYSPARK_PYTHON=python3
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS= »notebook –no-browser –port=8890″

Une fois sauvegardé, run le .bashrc :

source .bashrc

=> Ainsi, lorsqu’on lance pyspark il s’ouvre sur Jupyter Notebook et non en console dans le Terminal.
=> Le paramètre « –no-browser –port=8890 » implique qu’une fenêtre ne s’ouvre pas automatiquement lorsque Jupyter se lance, il faudra aller sur la page localhost:8890 pour accéder à Jupyter.

4. Lancer pyspark

  • Lancer pyspark en chargeant le package spark-nlp grâce à l’option “–packages”. On peut utiliser cette option pour ajouter d’autres packages si on le souhaite.
pyspark –packages JohnSnowLabs:spark-nlp:2.2.2 –master local[*]

NB : Grâce à l’option “–packages”, pas besoin de faire un pip install spark-nlp
=> Si tout est ok, Jupyter Notebook se lance.

5. Accéder aux notebooks

  • Ouvrez votre navigateur et allez à l’adresse suivante : localhost:8890

=> une page Jupyter s’affiche, et on vous demande de vous authentifier

  • Copiez le token affiché dans le terminal, et coller le dans la case « Password or token »



=> On accède à l’accueil « Home » de Jupyter. Si on ouvre un notebook python, une session Spark surlaquelle spark-nlp est installée démarre dès qu’on lance une 1ère ligne.

6. Initialiser Spark-NLP

  • Ouvrez un notebook Python. La session spark est accessible depuis la variable « sc ».

  • Pour utiliser Spark-NLP, lancer les lignes suivantes

  • Un exemple de « Hello World » est de charger une pipeline pré-entraînée et de la tester sur une phrase, comme ici une analyse de sentiments.


NB : Si on souhaite faire la même chose en local, on peut suivre les étapes à partir de l’étape 3

Sources :

Notebook depuis EMR
https://towardsdatascience.com/use-pyspark-with-a-jupyter-notebook-in-an-aws-emr-cluster-e5abc4cc9bdd

Spark NLP
https://github.com/JohnSnowLabs/spark-nlp
https://nlp.johnsnowlabs.com/docs/en/quickstart
https://github.com/JohnSnowLabs/spark-nlp-workshop/blob/master/jupyter/quick_start.ipynb
https://towardsdatascience.com/introduction-to-spark-nlp-foundations-and-basic-components-part-i-c83b7629ed59