Je sais que HDFS est écrit une fois et lu plusieurs fois.
Supposons que si je souhaite mettre à jour un fichier dans HDFS, existe-t-il un moyen de le faire?
Merci d'avance !
Option 1:
Si vous voulez juste ajouter à un fichier existant
echo "<Text to append>" | hdfs dfs -appendToFile - /user/hduser/myfile.txt
OU
hdfs dfs -appendToFile - /user/hduser/myfile.txt
puis tapez le texte sur le terminal. Une fois que vous avez fini de taper puis appuyez sur 'Ctrl + D'
Option 2:
Récupérez le fichier d'origine de HDFS sur le système de fichiers local, modifiez-le puis replacez-le sur HDFS.
hdfs dfs -get /user/hduser/myfile.txt
vi myfile.txt
# ou utiliser un autre outil et le modifier
hdfs dfs -put -f myfile.txt /user/hduser/myfile.txt
Si vous souhaitez ajouter des lignes, vous devez mettre un autre fichier et concaténer des fichiers:
hdfs dfs -appendToFile localfile /user/hadoop/hadoopfile
Pour modifier une partie d'un fichier déjà écrit, vous avez trois options:
Obtenir un fichier à partir de fichiers hdfs et modifier leur contenu en local
hdfs dfs -copyToLocal /hdfs/source/path /localfs/destination/path
ou
hdfs dfs -cat /hdfs/source/path | modify...
Utilisez une technologie de traitement pour mettre à jour en tant que Carte Réduire ou Apache Spark , le résultat apparaît sous la forme d'un répertoire de fichiers et vous supprimez les anciens fichiers. Ce devrait être le meilleur moyen.
Installez NFS ou Fuse, les deux prennent en charge les opérations d’ajout.
Hadoop Fuse : mountableHDFS, permet de monter HDFS (sur la plupart des versions d'Unix) en tant que système de fichiers standard à l'aide de la commande mount. Une fois monté, l’utilisateur peut utiliser une instance de fichiers hdfs à l’aide d’utilitaires Unix standard tels que «ls», «cd», «cp», «mkdir», «find», «grep».