Simulation de Streaming sur AWS
1 Créer un bucket
-
- du dossier de la VM :
U:\Eleves\Informatique\Big Data\tweet_stream - ou télécharger puis dezipper depuis ce lien
- du dossier de la VM :
-
- En remplaçant
bucket_name = 'ensai-labs-2023-2024-files'par le nom de votre bucket - Notez ensuite l’URI de votre fichier (ex : s3://ensai-labs-2023-2024-files/stream_simulation.py)
- En remplaçant
import boto3
import time
import os
# Configuration des dossier source et destination
bucket_name = 'ensai-labs-2023-2024-files'
file_prefix = 'source/tweets' # Préfixe commun des noms de fichier à copier
file_extension = '.jsonl.gz'
# Créer un client S3
s3 = boto3.client('s3')
# Fonction pour copier les fichiers avec l'extension .jsonl.gz
def copy_files():
try:
# Liste les objets dans le dossier source
response = s3.list_objects_v2(Bucket=bucket_name, Prefix=file_prefix)
if 'Contents' in response:
for obj in response['Contents']:
time.sleep(2)
key = obj['Key']
if key.endswith(file_extension):
file_name = os.path.basename(key)
# Copier le fichier du dossier source vers le dossier destination
s3.copy_object(
Bucket=bucket_name,
CopySource={'Bucket': bucket_name, 'Key': key},
Key=f"lab3/destination/{file_name}"
)
print(f"Fichier {file_name} copié avec succès.")
except Exception as e:
print("Erreur lors de la copie des fichiers :", e)
# Fonction pour vider le dossier destination lorsqu'il est plein
def empty_destination_bucket():
try:
# Liste les objets dans le dossier destination
response = s3.list_objects_v2(Bucket=bucket_name, Prefix="destination/tweets")
if 'Contents' in response:
# Supprimer chaque objet du dossier destination
for obj in response['Contents']:
s3.delete_object(Bucket=bucket_name, Key=obj['Key'])
print("dossier destination vidé avec succès.")
except Exception as e:
print("Erreur lors de la vidange du dossier destination :", e)
# Copier les fichiers et vider le dossier destination
while True:
copy_files()
empty_destination_bucket()2 Programme de transfert de fichiers
Le but de ce programme est de simuler un flux de fichiers entre les dossiers source et destination
-
- installez python :
sudo yum install -y python3-devel.x86_64 - installez le package boto3 :
pip install boto3 - copiez votre programme
aws s3 cp <S3_URI_programme_python>- ex :
aws s3 cp s3://ensai-labs-2023-2024-files/stream_simulation.py
- ex :
- lancez le programme :
python3 stream_simulation.py- ou lancer en arrière plan :
nohup python3 ec2_stream_simul.py &
- ou lancer en arrière plan :
- installez python :
Si tout se passe bien, les fichiers sont copiés toutes les 2 secondes du dossier source vers destination.
Ce dernier est vidé lorsque tous les fichiers sont copiés.