Elaborazione batch su Linux

Attualmente stiamo impostando un server ad un sollevamento pesante (ETL) dopo che un altro process è finito all'interno dell'azienda, al momento stai spegnendo i lavori tramite lavori di cron pianificati o con l'esecuzione remota (tramite ssh). All'inizio di questa settimana abbiamo affrontato un problema con troppi posti di lavoro che funzionavano fianco a fianco sul sistema che portò tutti i lavori a un ritmo di lumaca mentre combattevano per il tempo della CPU.

Sto cercando un scheduler batch, un sistema in cui possiamo inserire i lavori in una coda di esecuzione e il sistema li elaborerà uno per uno. Può qualcuno consigliare su un programma / sistema per farlo? Il basso costo / FOSS sarebbe apprezzato a causa della natura della scarpa di questo progetto.

  • ionice vs Software-RAID
  • 9 Solutions collect form web for “Elaborazione batch su Linux”

    Avrei istituito un qualche tipo di servizio di coda. Un rapido Google su roba pronta all'uso mostra questo:

    A seconda delle tue esigenze potresti semplicemente

    • creare un wrapper where gli utenti inviano posti di lavoro,
    • il wrapper scrive il lavoro in un socket / file / whatever
    • creare un consumatore che esegue il lavoro da parte del lavoro in attesa che finisca
    • il consumatore viene chiamato regolarmente da cron (each 5 minuti o giù di lì)
      • ovviamente creare un certo meccanismo di block in modo che solo lavori n eseguire alla volta (where n => 1)
    • se non ci sono più posti di lavoro non fare nulla
    • se ci sono più posti di lavoro afferrare il prossimo e aspettare che finisca

    In realtà c'è molto di più, si potrebbero avere dei requisiti che implementano una coda di priorità che solleva problemi come lavori nidificanti o simili, ma non è così male per get qualcosa e funzionare abbastanza veloce.

    Se LDP come suggerito da womble avrei preso quello. Avere un sistema simile mantenuto da una comunità più grande è ovviamente migliore di creare i propri bug per i problemi già risolti altri 🙂

    Anche il servizio di accodamento ha il vantaggio di disaccoppiare le risorse dal numero di crunching effettivo. Rendendo i lavori disponibili su una qualche connessione di networking è ansible semplicemente lanciare l'hardware a un problema (ansible) di scalabilità e avere quasi scalabilità infinita.

    Due soluzioni si prendono in mente:

    1. Utilizza xargs -P per controllare i processi paralleli massimi contemporaneamente.
    2. Crea un Makefile e spawn con make -j .

    In realtà sono entrambi riassunti in questo thread SO in dettaglio.

    Esiste la possibilità che questi non siano applicabili alla struttura dello script.

    Una soluzione di peso pesante al tuo problema è quella di utilizzare qualcosa come Sun Grid Engine .

    Motore di griglia del sole (SGE). SGE è un software di gestione delle risorse distribuite e consente di utilizzare efficacemente le risorse all'interno del cluster / macchina (tempo di elaborazione, software, licenze ecc.).

    Ecco un piccolo tutorial su come utilizzare SGE.

    Puoi sempre usare lpd – yeah, vecchia scuola, ma è davvero un sistema di controllo di elaborazione batch generalizzato mascherato come server di printing.

    È ansible verificare alcuni dei sisthemes di batch utilizzati per pianificare i lavori sui cluster, che hanno la possibilità di monitorare l'utilizzo delle risorse e dichiarare che un sistema è troppo caricato per submit più carica di lavoro ad esso. Potresti facilmente configurarli anche per eseguire solo un lavoro alla volta, ma per questo potresti essere migliore con qualcosa di less complesso di un pianificatore batch completo (nello spirito di mantenere le cose semplici).

    Per quanto riguarda i sisthemes di batch / scheduling liberamente disponibili, i due che si sprigionano alla mente sarebbero OpenPBS / Torque e SGE.

    Modificato per aggiungere: Se si intende aggiungere più capacità di elaborazione in futuro sotto forma di più caselle, un sistema di batch / scheduling come Torque / OpenPBS / SGE può essere una buona scelta poiché è fondamentalmente costruito per gestire risorse di calcolo e distribuire loro carichi di lavoro.

    man batch :

    batch esegue i comandi quando i livelli di carico del sistema lo consentono; in altre parole, quando la media di carico scende al di sotto di 1,5, o il valore specificato nell'invocazione di atd.

    Penso che questo potrebbe essere quello che stai cercando. Fa parte del pacchetto Debian.

    Uno script di shell richiamato dal cron potrebbe facilmente fare questo, la processes it line-by-line.

    Vorrei utilizzare Torque, che è una versione aggiornata del FOSS OpenPBS.

    wava : uno scheduler di memory che consente di eseguire i lavori batch (inviati con una promise di utilizzo della memory fisica massima) da eseguire quando una memory fisica sufficiente (RSS) è disponibile nel sistema.

    Questo scheduler è stato creato originariamente per immettere un numero elevato di lavori in esecuzione a lungo in macchine con una grande quantità di RAM e eseguire la maggior parte di essi contemporaneamente, evitando la memorizzazione delle pagine e lo scambio in modo da non penalizzare le performance di altri servizi in esecuzione il sistema.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.