Il dataset originale è stato fornito da Kaggle al seguente link: Flight Prices (31.09 GB).
I datasets usati per questo progetto sono stati campionati sul dataset originale con le seguenti percentuali: 2%, 16% e 33%; e sono stati caricati nella cartella Datasets di OneDrive, per facilitarne il download:
- itineraries-sample02.csv (615 MB)
- itineraries-sample16.csv (4.85 GB)
- itineraries-sample33.csv (9.94 GB)
src/contiene il codice sorgente ed è suddiviso in linguaggio di programmazionepython/include i seguenti notebook:- data-exploration.ipynb: dedicato alla comprensione e all'analisi esplorativa dei dati
- main-notebook.ipynb: implementa il job proposto, sia in versione non ottimizzata sia in versione ottimizzata
scala/contiene tutti i file che compongono l'applicazione principale
aws/contiene gli script per avviare una sessione su Amazon Web Services e creare un cluster, spiegati nella sezione AWS che seguehistory/contiene la cronologia dell'esecuzione dei jobreports/contiene il report generato con Power BI
I seguenti script sono stati creati per gestire più facilmente le operazioni da effettuare da linea di comando. Sono stati eseguiti con la shell Git Bash.
Per avviare una nuova sessione su AWS, eseguire lo script start_aws_session.sh. Verranno richieste le seguenti informazioni:
AWS PROFILE NAMEAWS Access Key IDAWS details > AWS CLI > aws_access_key_idAWS Secret Access KeyAWS details > AWS CLI > aws_secret_access_keyDefault region nameus-east-1Default output formatjsonAWS Session TokenAWS details > AWS CLI > aws_session_token
./aws/start_aws_session.shEseguire lo script create_aws_cluster.sh per avviare un cluster Amazon EMR utilizzando Hadoop e Spark.
Al suo interno viene eseguito anche lo script security_group_ingress.sh per creare un Security Group di nome ElasticMapReduce-master (se non esiste già) con le seguenti regole:
IpProtocol:tcpFromPort:22ToPort:22IpRanges:[{CidrIp=0.0.0.0/0}]
Il cluster creato avrà le seguenti caratteristiche:
- Versione di EMR:
emr-7.3.0 - Applicazioni installate:
HadoopeSpark - Gruppo di istanze:
MASTER: una istanza di tipom4.large(2 cores, 8GB di RAM)CORE: 6 istanze di tipom4.large(2 cores, 8GB di RAM)
In input verrà richiesto l'inserimento di: AWS PROFILE NAME e KEY PAIR NAME. Una volta creato il cluster verrà visualizzato il ClusterID e lo script rimarrà in esecuzione fino a quando lo stato del Cluster non sarà passato da STARTING a WAITING, viene effettuato un controllo ogni 10 secondi. Al termine, verrà mostrato su console anche il PublicDNS, utile in seguito per l'SSH Configuration.
./aws/create_aws_cluster.shPer ottenere il .jar dell'applicazione, eseguire a linea di comando:
./gradlewVerrà salvato all'interno della cartella build/libs/.
Spark local configurations:
Spark home:C:/spark-3.5.1-bin-hadoop3Application:build/libs/ProjectBigData.jarClass:MainApplicationRun arguments:local 1oppurelocal 2Cluster manager:localMaster:local[*]
All'interno del file conf/spark-defaults.conf nella cartella C:/spark-3.5.1-bin-hadoop3, sono stati impostati i seguenti valori:
Driver memory:4gDriver cores:4
Spark remote configurations:
Remote target:EMR: Big Data ClusterSSH configuration(una volta configurato verificare che Test Connection restituisca Successfully connected!)Host: inserire ilPublicDNSottenuto in seguito alla creazione del clusterAuthentication type:KeyPairPrivate key file: inserire il path del file.ppk
Application:build/libs/ProjectBigData.jarClass:MainApplicationRun arguments:remote 1/sharedRemote 1oppureremote 2/sharedRemote 2
Sotto la voce Additional customization, selezionare Spark configuration ed Executor.
Spark configurationCluster manager:Hadoop YARNDeploy mode:ClusteroppureClient
Executor parametersExecutor cores:2Executor number:6Executor memory:5g