Preparazione dell'ambiente di elaborazione batch sull'ecosistema Hadoop
Per configurare l'elaborazione batch sull'ecosistema Hadoop, è necessario preparare l'ambiente di distribuzione.
Prerequisiti
Per configurare l'elaborazione batch sull'ecosistema Hadoop è necessario disporre dei seguenti artefatti:
- Una versione di Apache Hive 2.3.7 o un database successivo
- Apache Hadoop 2.10.0 con Apache Spark 2.4.7
- Un motore Docker per creare e impacchettare l'applicazione Spark Manager
- Un notebook specializzato che si utilizza insieme per le valutazioni dei modelli
- Una tabella di feedback, una tabella di dati di formazione e una tabella di registrazione del carico utile create nel database Hive
- Livy e WebHDFS sono disponibili sull'ecosistema Hadoop, richiede Apache Hadoop 2.10.0
- Un insieme di utenti che possono accedere a questa applicazione tramite autenticazione di base
- Un archivio dell' Python che contiene i moduli necessari per la valutazione del modello
- Una
drifted_transactiontabella che memorizza le transazioni utilizzate per l'analisi post-elaborazione - Facoltativamente, un ecosistema Kerberizzato Hadoop per l'esecuzione dell'applicazione
Passaggio 1: assicurarsi che Livy e WebHDFS siano disponibili sull'ecosistema Hadoop
Poiché l'applicazione Spark Manager utilizza Livy per inviare lavori e WebHDFS per accedere ai file, è necessario installare Livy e WebHDFS per accedere all'ecosistema Hadoop. Se Livy e WebHDFS non sono installati, è necessario richiederli. L'amministratore del cluster Hadoop può fornire gli URL di base per Livy, WebHDFS, e la base di file HDFS. È necessario disporre di questi URL per preparare l'ambiente di distribuzione. Gli esempi seguenti mostrano gli URL di base per Livy, WebHDFS, e la base file HDFS :
WebHDFS URL:
http://$hostname:50070HDFS file base URL :
hdfs://$hostname:9000Livy URL:
http://$hostname:8998
È inoltre possibile richiedere i seguenti elementi all'amministratore del cluster Hadoop :
- Un percorso di base nel file system dell' HDFS e in cui è possibile scrivere file
- Percorso del file yarn.keytab, specificato come parametro
conf.spark.yarn.keytabnel payload della richiesta di lavoro
Passaggio 2: utilizzo di un ecosistema Kerberizzato Hadoop
Se si esegue l'applicazione in un ecosistema Kerberizzato Hadoop, l'applicazione deve generare un ticket Kerberos prima di poter inviare richieste a Livy o WebHDFS. Per generare un ticket Kerberos, sono necessari i seguenti file e ID:
Un file keytab
Un file krb5.conf
Un utente Kerberos principale
Per l'autenticazione al Key Distribution Center (KDC), i computer abilitati all Kerberos richiedono un file keytab. Il file keytab è una copia crittografata e locale su disco della chiave host. L'amministratore del cluster Hadoop deve fornire questo file keytab. È necessario richiedere il hdfs.keytab file per preparare l'ambiente di distribuzione.
Il krb5. conf file contiene informazioni di configurazione dell' Kerberos, quali le posizioni dei KDC e dei server di amministrazione per i domini dell' Kerberos. Il file contiene anche le impostazioni predefinite per il dominio corrente e per le applicazioni Kerberos, nonché le mappature dei nomi host sui domini Kerberos. L'amministratore del cluster Hadoop deve fornire questo file di configurazione. È necessario richiedere il krb5.conf file per preparare l'ambiente di distribuzione.
Un'entità principale (principal) di Kerberos rappresenta un'identità univoca, ad esempio openscale_user1/$hostname@HADOOPCLUSTER.LOCAL in un sistema Kerberos in cui Kerberos può assegnare ticket per accedere a servizi compatibili con Kerberos. I nomi principali contengono diversi componenti separati da una barra ( / ). È anche possibile specificare un dominio come ultimo componente del nome utilizzando il simbolo @. L'amministratore del cluster Hadoop deve fornire l'ID principale. È necessario richiedere l'ID principale per preparare l'ambiente di distribuzione. Se hai bisogno che più utenti possano inviare lavori, devi richiedere più ID principali.
Passaggio 3: creare un elenco di utenti autorizzati ad accedere a questa applicazione tramite autenticazione di base
È necessario creare un elenco di nomi utente e password autorizzati ad accedere all'applicazione Spark Manager tramite autenticazione di base. Questo elenco di nomi utente e password autorizzati deve essere specificato in un auth.json file.
Passaggio 4: Creare un archivio Python dei moduli necessari per la valutazione del modello
Le valutazioni dei modelli eseguite sull'ecosistema Hadoop richiedono pacchetti Python dipendenti. Senza questi pacchetti, le valutazioni falliscono. È possibile seguire i passaggi riportati di seguito per installare queste dipendenze e caricarle in una posizione nel sistema di file distribuito di Hadoop ( HDFS ).
Accedere a un sistema operativo Linux su cui è installato Python e verificare la versione di Python eseguendo il seguente comando:
python --version Python 3.7.9Installa il
python3-develpacchetto, che installa le librerie GNU Compiler Collection (GCC), eseguendo il seguente comando:yum install python3-develPassare alla directory in cui è stato creato l'ambiente virtuale Python, ad esempio la
/optcartella:cd /optElimina qualsiasi ambiente virtuale creato in precedenza eseguendo il seguente comando.
rm -fr wos_env rm -fr wos_env.zipLa
wos_envcartella contiene un ambiente virtuale Python con dipendenze Spark Job al suo interno.Crea e attiva l'ambiente virtuale eseguendo i seguenti comandi.
python -m venv wos_env source wos_env/bin/activateL'ambiente
wos_envvirtuale viene creato e ilsourcecomando attiva l'ambiente virtuale.Aggiorna l'ambiente pip eseguendo il seguente comando:
pip install --upgrade pipPer installare tutte le dipendenze, scegli se installarle singolarmente o con un processo batch in un file. Devono essere installati nel seguente ordine.
Se utilizzi Python 3.7, esegui i seguenti comandi per installare singolarmente i file richiesti:
python -m pip install numpy==1.20.2 python -m pip install scipy==1.6.3 python -m pip install pandas==1.2.4 python -m pip install scikit-learn==0.24.2 python -m pip install osqp==0.6.1 python -m pip install cvxpy==1.0.25 python -m pip install marshmallow==3.11.1 python -m pip install requests==2.25.1 python -m pip install jenkspy==0.2.0 python -m pip install pyparsing==2.4.7 python -m pip install tqdm==4.60.0 python -m pip install more_itertools==8.7.0 python -m pip install tabulate==0.8.9 python -m pip install py4j==0.10.9.2 python -m pip install pyarrow==4.0.0 python -m pip install "ibm-wos-utils==4.6.*"
È possibile inserire tutti i moduli in un
requirements.txtfile ed eseguire i comandi contemporaneamente.Se utilizzi Python 3.7, crea il
requirements.txtfile aggiungendo le seguenti righe al file. Quindi, esegui ilpython -m pip install -r requirements.txtcomando:numpy==1.20.2 scipy==1.6.3 pandas==1.2.4 osqp==0.6.1 cvxpy==1.0.25 marshmallow==3.11.1 requests==2.25.1 jenkspy==0.2.0 pyparsing==2.4.7 tqdm==4.60.0 more_itertools==8.7.0 tabulate==0.8.9 py4j==0.10.9.2 pyarrow==4.0.0 ibm-wos-utils==4.6.*
Disattiva l'ambiente virtuale eseguendo il
deactivatecomando.
Passaggio 5: Caricare l'archivio
È necessario comprimere l'ambiente virtuale e caricare il file di archivio su HDFS.
Crea un file compresso contenente l'ambiente virtuale eseguendo i seguenti comandi:
zip -r wos_env.zip wos_env/ ls -alt --block-size=M wos_env.zipEsegui l'autenticazione su HDFS eseguendo il seguente comando:
kinit -kt /home/hadoop/keytabs/hdfs.keytab hdfs/$HOST@#REALMIn HDFS, crea una
py_packagescartella e aggiungi ilwos_env.zipfile a tale cartella eseguendo i seguenti comandi:hdfs dfs -mkdir /py_packages hdfs dfs -put -f wos_env.zip /py_packagesVerifica di aver aggiunto correttamente il file a HDFS eseguendo il seguente comando:
hdfs dfs -ls /py_packagesQuando il file viene aggiunto correttamente, viene visualizzato il seguente output:
Found 1 items -rw-r--r-- 2 hdfs supergroup 303438930 2020-10-07 16:23 /py_packages/wos_env.zip
Passaggio 6: impacchettare l'applicazione in un'immagine Docker
È necessario impacchettare l'applicazione in un'immagine Docker e clonare il repository GitHub che contiene l'applicazione di riferimento Spark Manager per i processi batch.
Clona il repository GitHub nella cartella wos-spark-manager-api.
Passa alla cartella wos-spark-manager-api.
Aggiorna il
service/security/auth.jsonfile con gli utenti dell'elenco di autorizzazione che hai creato. Il file aggiornato è simile al seguente modello:{ "allowlisted_users": { "openscale_user1": "passw0rd", "openscale_user2": "passw0rd", "openscale_user3": "passw0rd", "openscale": "passw0rd" } }Se si sta preparando questa applicazione per l'esecuzione su un cluster Kerberizzato Hadoop, è necessario completare anche i seguenti passaggi:
Posiziona il file
hdfs.keytabe ilkrb5.conffile nella directory principale dellawos-spark-manager-apicartellaAggiorna il
service/security/auth.jsonfile con lauser_kerberos_mappingmappatura che contiene i principali Kerberos forniti dall'amministratore. Il file è simile al seguente modello:{ "allowlisted_users": { "openscale_user1": "passw0rd", "openscale_user2": "passw0rd", "openscale_user3": "passw0rd", "openscale": "passw0rd" }, "user_kerberos_mapping" : { "openscale_user1": "openscale_user1/$hostname@HADOOPCLUSTER.LOCAL", "openscale_user2": "openscale_user2/$hostname@HADOOPCLUSTER.LOCAL", "openscale_user3": "openscale_user3/$hostname@HADOOPCLUSTER.LOCAL" } }Nel
payload/Dockerfilefile, rimuovere il commento dalle righe 53-55.
Esegui il seguente comando per creare l'immagine docker:
docker build -t <repository/image_name>:version> -f payload/Dockerfile .Se utilizzi una nuova macchina virtuale ( VM ) per creare il pacchetto della tua applicazione, segui questi passaggi per trasferire l'immagine Docker sul tuo nuovo VM :
Salva l'immagine docker come tarball eseguendo il seguente comando:
docker save myimage:latest | gzip > myimage_latest.tar.gzArchivia il file tarball sull'altro server remoto VM.
Carica il tarball eseguendo il seguente comando:
docker load < myimage_latest.tar.gz
Passaggio 7: Eseguire l'applicazione
Accedi alla macchina virtuale ( VM ) su cui intendi eseguire l'applicazione. Verificare che l' VM e abbia installato Docker.
Se l'indirizzo VM è diverso da quello in cui è stata creata l'immagine Docker, è necessario salvare e caricare l'immagine Docker su questo indirizzo VM.
Componi il file di ambiente utilizzato per avviare Docker. È necessario disporre di tutti i valori richiesti per comporre il
docker.envfile.Crea un
docker.envfile.Aggiungi le seguenti voci nel
docker.envfile:WEB_HDFS_URL=http://lamy1.fyre.companyserver.com:50070 HDFS_FILE_BASE_URL=hdfs://lamy1.fyre.companyserver.com:9000 SPARK_LIVY_URL=http://sheaffer1.fyre.companyserver.com:8998 BASE_HDFS_LOCATION=sw/openscale WOS_ENV_ARCHIVE_LOCATION=hdfs://lamy1.fyre.companyserver.com:9000/py_packages/wos_env.zip#wos_env WOS_ENV_SITE_PACKAGES_PATH=./wos_env/wos_env/lib/python3.6/site-packages:Se l'applicazione viene eseguita su un cluster Kerberizzato Hadoop, aggiungere le seguenti voci aggiuntive al
docker.envfileKERBEROS_ENABLED=true HDFS_KEYTAB_FILE_PATH=/opt/ibm/wos/python/keytabs/hdfs.keytab SPARK_YARN_KEYTAB_FILE_PATH=/home/hadoop/hadoop/etc/hadoop/yarn.keytab
Elenca le immagini Docker e ottieni il
$IMAGE_IDvalore eseguendo il seguente comando:docker imagesAvvia il container Docker eseguendo il seguente comando:
docker run --env-file docker.env -p 5000:9443 --name wos-spark-manager-api $IMAGE_ID
Ora è possibile accedere alle API con il seguente URL : http://<VM-HOST-NAME>:5000. Ora è anche possibile visualizzare la documentazione Swagger al seguente indirizzo: http://<VM-HOST-NAME>:5000/spark_wrapper/api/explorer URL.