Aller au contenu

DevIOArchivesHDFS

Introduction

DevIOArchivesHDFS est un module d'archive qui permet l'intégration de DevIO avec Apache Hadoop HDFS (Hadoop Distributed File System). Ce module utilise l'API WebHDFS pour transférer les données d'archivage DevIO vers un cluster Hadoop, offrant une solution de stockage distribuée et scalable pour les données historiques.

Le module convertit les données DevIO en fichiers formatés (CSV, JSON, etc.) et les transfère automatiquement vers HDFS via des connexions HTTP/HTTPS sécurisées, avec support de l'authentification Kerberos et SSL.

Architecture et fonctionnement

Composants principaux

  • WebHdfsClient : Client WebHDFS pour communication avec le cluster Hadoop
  • HdfsManager : Gestionnaire de fichiers avec thread d'exécution asynchrone
  • PrmOutputFile : Formatage et organisation des données d'archive
  • ClientOptions : Configuration des paramètres de connexion et sécurité

Processus d'archivage

  1. Collecte : Réception des données DevIO via l'API d'archivage
  2. Formatage : Conversion des données selon le format configuré
  3. Buffering : Accumulation des données dans des fichiers temporaires
  4. Transfert : Envoi vers HDFS via l'API WebHDFS
  5. Nettoyage : Suppression des fichiers temporaires après transfert

Formats de données supportés

Le module peut formater les données avec les champs suivants :

Champ Description Position
TableName Nom de la table d'archive %1%
FormattedDate Date formatée personnalisable %2%
Type Type de données %3%
EquipmentName Nom de l'équipement %4%
NameSeparator Séparateur de nom %5%
VariableName Nom de la variable %6%
Handle Handle de la donnée %7%
StatusText Statut textuel %8%
StatusNumber Statut numérique %9%
Value Valeur de la donnée %10%
RecordType Type d'enregistrement %11%
Year Année %12%
Month Mois %13%
Day Jour %14%
Hours Heures %15%
Minutes Minutes %16%
Seconds Secondes %17%
Millisecs Millisecondes %18%
Argument Argument %19%
ServerName Nom du serveur %20%
ComputerName Nom de l'ordinateur %21%
OriginalTypeName Type original %22%
FinalTypeName Type final %23%
RecordTypeName Nom du type d'enregistrement %24%
RecordFamilyName Famille d'enregistrement %25%
Timestamp Timestamp Unix %26%

Configuration

Options de connexion

Paramètres obligatoires

Paramètre Description Exemple
hostname Adresse du cluster Hadoop "hadoop-cluster.company.com"
port Port WebHDFS 9870 (défaut), 14000
nodename Chemin de base HDFS "/devio/archives/"
username Nom d'utilisateur Hadoop "devio_user"

Paramètres de sécurité

Paramètre Description Valeur par défaut
password Mot de passe utilisateur Non défini
sslSecurity Activation SSL/TLS false
sshSecurity Activation SSH false
kerberos Authentification Kerberos false
sslCertPath Chemin vers certificat SSL Non défini
sshPubKey Clé publique SSH Non défini
sshPrvKey Clé privée SSH Non défini

Paramètres de performance

Paramètre Description Valeur par défaut
connectTimeout Timeout de connexion (secondes) 300
dataTransferTimeout Timeout de transfert 0 (infini)
blockSize Taille des blocs HDFS Défaut cluster
replication Facteur de réplication Défaut cluster
bufferSize Taille du buffer Défaut cluster
overwrite Écraser les fichiers existants false

Paramètres de fichiers

Paramètre Description Valeur par défaut
fileSpoolDirectory Répertoire de spool local "./spool/"
fileOutputFormat Extension des fichiers "csv"
csvNbLines Nombre de lignes par fichier 1000
dateFormat Format de date personnalisé ISO 8601
nameFormat Format du nom de fichier Configurable

Configuration via DevIO Studio

1. Activation du module

  1. Ouvrir le projet avec DevIO Studio
  2. Aller dans ConfigurationArchives
  3. Ajouter une nouvelle archive de type HDFS
  4. Configurer les paramètres de connexion

2. Paramètres de base

Nom de l'archive : HDFS_Archive
Type : DevIOArchivesHDFS
Serveur Hadoop : hadoop-cluster.company.com:9870
Chemin HDFS : /devio/data/
Utilisateur : devio_user

3. Configuration avancée

SSL activé : Oui
Certificat SSL : /path/to/cert.pem
Timeout connexion : 300s
Format de sortie : csv
Lignes par fichier : 5000

Exemples de configuration

Configuration basique

ClientOptions options;
options.setHostName("hadoop-master.company.com")
       .setPort(9870)
       .setNodeName("/devio/archives/")
       .setUserName("devio_user")
       .setConnectTimeout(300);

WriteOptions writeOpts;
writeOpts.setOverwrite(false)
         .setReplication(3)
         .setBlockSize(134217728); // 128MB

Configuration sécurisée avec SSL

ClientOptions secureOptions;
secureOptions.setHostName("secure-hadoop.company.com")
             .setPort(9871)
             .setUserName("devio_secure")
             .setPassword("secure_password")
             .setSSLsecu(1)
             .setSSL_CERT_PATH("/etc/ssl/certs/hadoop-ca.pem")
             .setConnectTimeout(600);

Configuration avec Kerberos

ClientOptions kerberosOptions;
kerberosOptions.setHostName("kerberos-hadoop.company.com")
               .setUserName("devio@COMPANY.COM")
               .setKeyberos(1)
               .setConnectTimeout(300);

Configuration SSH

ClientOptions sshOptions;
sshOptions.setHostName("ssh-hadoop.company.com")
          .setUserName("devio_user")
          .setSSHsecu(1)
          .setSSH_PUB_KEY("/home/devio/.ssh/id_rsa.pub")
          .setSSH_PRV_KEY("/home/devio/.ssh/id_rsa");

Format des données d'archive

Structure d'enregistrement HDFS

struct HDFS_ARCHIVE_RECORD {
    std::string eqName;          // Nom équipement
    std::string varName;         // Nom variable
    char separator;              // Séparateur
    ULONG handle;               // Handle
    USHORT milliSeconds;        // Millisecondes
    USHORT objectType;          // Type objet
    USHORT state;               // État
    USHORT typeRecord;          // Type enregistrement
    std::string stateTxt;       // État textuel
    std::string valueTxt;       // Valeur textuelle
    // ... autres champs
};

Exemple de format CSV

Time,Equipment,Variable,Value,Status,Type
2024-01-15T10:30:45.123,Sensor_01,Temperature,23.5,OK,REAL
2024-01-15T10:30:45.124,Sensor_01,Humidity,65.2,OK,REAL
2024-01-15T10:30:45.125,Sensor_02,Pressure,1013.25,OK,REAL

Format personnalisé avec templates

// Template de nom de fichier
std::string nameFormat = "devio_%1%_%2%_%3%.csv";
// %1% = TableName, %2% = FormattedDate, %3% = EquipmentName

// Template de format de date
std::string dateFormat = "%1%-%2%-%3%T%4%:%5%:%6%.%7%";
// %1% = Year, %2% = Month, %3% = Day, %4% = Hours, %5% = Minutes, %6% = Seconds, %7% = Millisecs

Gestion des fichiers et transferts

Processus de buffering

  1. Accumulation : Les données sont écrites dans des fichiers .tmp
  2. Seuil atteint : Quand csvNbLines est atteint ou timeout
  3. Finalisation : Renommage en .csv (ou format configuré)
  4. Transfert : Envoi vers HDFS via WebHDFS
  5. Nettoyage : Suppression du fichier local après succès

Gestion des erreurs

  • Retry automatique : En cas d'échec de transfert
  • Logs détaillés : Traçabilité complète des opérations
  • Files d'attente : Gestion des pics de charge
  • Récupération : Reprise des transferts interrompus

Monitoring

Logs d'archivage

Les logs sont générés avec les niveaux : - ERROR : Erreurs de connexion, transfert - WARN : Avertissements de performance - INFO : Opérations normales, succès de transfert - DEBUG : Détails techniques

Métriques disponibles

  • Nombre de fichiers transférés
  • Volume de données archivées
  • Temps de transfert moyen
  • Taux d'erreur
  • Taille de la queue d'événements

Intégration avec l'écosystème Hadoop

Compatibilité HDFS

  • Apache Hadoop 2.x : Support complet
  • Apache Hadoop 3.x : Support complet
  • Cloudera CDH : Compatible
  • Hortonworks HDP : Compatible
  • Amazon EMR : Compatible avec adaptations

Outils complémentaires

Apache Hive

-- Création de table externe pour données DevIO
CREATE EXTERNAL TABLE devio_data (
    timestamp STRING,
    equipment STRING,
    variable STRING,
    value DOUBLE,
    status STRING
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/devio/archives/';

Apache Spark

# Lecture des données DevIO dans Spark
df = spark.read.csv("/devio/archives/*.csv", header=True)
df.createOrReplaceTempView("devio_data")

# Analyse des données
result = spark.sql("""
    SELECT equipment, AVG(value) as avg_value 
    FROM devio_data 
    WHERE variable = 'Temperature' 
    GROUP BY equipment
""")

Sécurité et gouvernance

Intégration Kerberos

# Configuration Kerberos pour DevIO
kinit devio@COMPANY.COM
# Le module utilisera automatiquement le ticket Kerberos

Permissions HDFS

# Configuration des permissions HDFS
hdfs dfs -mkdir /devio/archives
hdfs dfs -chown devio:devio /devio/archives
hdfs dfs -chmod 755 /devio/archives

Optimisation des performances

Configuration réseau

// Optimisation pour réseaux haute latence
ClientOptions optimizedOptions;
optimizedOptions.setConnectTimeout(600)
                .setDataTransferTimeout(1800)
                .setBufferSize(1048576); // 1MB buffer

Taille des fichiers

// Optimisation pour gros volumes
PrmOutputFile largeFileConfig;
largeFileConfig.m_nCSVnbLines = 50000;  // 50K lignes par fichier
largeFileConfig.m_sFileOutputFormat = "csv.gz";  // Compression

Parallélisation

  • Threads multiples : Transferts parallèles
  • Partitioning : Répartition par équipement/date
  • Compression : Réduction de la bande passante

FAQ et dépannage

Q : Erreur de connexion à HDFS ?

R : Vérifier la connectivité réseau, les ports (9870, 14000), et les credentials.

Q : Authentification Kerberos échoue ?

R : Vérifier le ticket Kerberos (klist) et la configuration /etc/krb5.conf.

Q : Fichiers corrompus dans HDFS ?

R : Vérifier les permissions HDFS et l'espace disque disponible.

Q : Performance dégradée ?

R : Ajuster bufferSize, blockSize, et le nombre de lignes par fichier.

Q : Perte de données ?

R : Vérifier les logs d'erreur et activer le mode debug pour traçabilité.

Annexes et références utiles

Documentation Hadoop

  • Apache Hadoop : Documentation officielle HDFS
  • WebHDFS REST API : Référence API WebHDFS
  • Hadoop Security : Guide sécurité Kerberos

Outils de diagnostic

  • hdfs dfsadmin : Administration HDFS
  • hdfs fsck : Vérification intégrité
  • curl : Test manuel des APIs WebHDFS

Formats de données

  • CSV : Format standard pour analytics
  • JSON : Format structuré pour NoSQL
  • Parquet : Format colonnaire optimisé
  • Avro : Format avec schéma évolutif

Documentation technique