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
- Collecte : Réception des données DevIO via l'API d'archivage
- Formatage : Conversion des données selon le format configuré
- Buffering : Accumulation des données dans des fichiers temporaires
- Transfert : Envoi vers HDFS via l'API WebHDFS
- 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
- Ouvrir le projet avec DevIO Studio
- Aller dans Configuration → Archives
- Ajouter une nouvelle archive de type HDFS
- 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
- Accumulation : Les données sont écrites dans des fichiers
.tmp - Seuil atteint : Quand
csvNbLinesest atteint ou timeout - Finalisation : Renommage en
.csv(ou format configuré) - Transfert : Envoi vers HDFS via WebHDFS
- 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