SAS Forum 2012 Den virtuelle operatør Automatiseret idriftsætning og jobafvikling i Odense Kommune Erik Lund-Jensen, Odense Kommune
Agenda Lidt om os selv organisatorisk, teknisk og opgavemæssigt Problembeskrivelse hvorfor har vi lavet systemet? Udfordringer ved opbygning af flows Udfordringer ved batchafvikling Kravspecifikation Beskrivelse af løsningen Fremskaffelse af styreinformation Kørsel af flows Lidt tekniske detaljer Implementering af løsningen SASDRIFT brugerinterface demo af driftafvikling Spørgsmål og afrunding
Odense Kommune Indbyggere 191.400 (2011) Ansatte 27.000 (aug. 2012) IT-Brugere 8.700 (aug. 2012) SAS-Portal 8.700 SAS AMO + WRS 8.700 SAS EG 50 ETL 16
Hvordan er vi organiseret BMF 1 DWH 6 4 3 50 > 200 2
Arbejdsfordeling Decentral udvikling - 10 personer i forvaltninger Definerer jobs og tabeller i DIS i udviklingsmiljøet Har ikke adgang til DI-produktionsmiljøet, kun læseadgang til en kopi af Datamart-området ligesom EG- og portalbrugere. Kan via et GUI kopiere data i alle dataområder fra produktionsmiljø til udviklingsmiljø Bestiller promotion til produktionsmiljøet (mail og spk. pakke) DWH-team 6 personer Udvikler fælles DWH-indhold (masterdata) Opretter fysikken i produktionsmiljøet og promoter det bestilte i DIS Deployer jobs til drift Lægger jobs i flows og planlægger flows til afvikling i LSF Driver al batchafvikling i produktionsmiljøet
Datawarehouse libraries og tabeller DM 150 libraries 1000 tabeller Kopiering BI server Kildesystemer 170 Indlæsning DWH 400 libraries 3500 SAS-tabeller 1.200 GB 550 ODBC-tabeller Eksport Eksport til andre systemer 120
Datawarehouse flows og jobs I alt 400 flows med 1500 jobs Daglig drift typisk 300 flows med 1100 jobs Komplicerede sammenhænge, ingen flows er helt uafhængige Op til 10 flows i kæde (25 jobs i kæde) fra grunddataindlæsning til datamart Vi får stort set dagligt nye eller rettede job til promotion
Setup - Produktionsmiljø Metadata server Web server MySQL server DI server BI server Fil server kopiering EG server
Problemer med idriftsætning 1 Når et nyt eller rettet job er deployed, skal det lægges i flow for at køre, men.. Hvilket flow skal jobbet placeres i? Princip: 1:1 sammenhæng mellem foldere i DIS og flows Hvordan er afhængighederne mellem jobs i flowet? Det kan besvares ved en impact-analyse og en reverse-impactanalyse, men det er tidskrævende Hvordan er afhængighederne mellem flows indbyrdes? Det er svært, men kan løses i metadata-browseren Alt i alt meget tidskrævende og med stor risiko for fejl. Men heldigvis findes alle nødvendige informationer i metadata, og SAS rummer række funktioner, der gør det rimelig let at skrive programmer, der kan finde dem
Problemer med idriftsætning 2 De planlagte flows skal køres i tur og orden Et flow må ikke læse data, medens et andet flow skriver dem Et flow skal udelades fra kørsel, hvis et forudgående flow er fejlet (mangelfulde data må ikke føres videre op) Et flow må først køres, når alle forudgående flows er kørt Et flow må ikke stå og vente på et forudgående flow, som ikke kører samme dag Hvis et fejlet flow køres om, skal efterfølgende flows, der er udeladt, også køres Det er der ikke rigtig mulighed for at styre fra SAS MC. Vi har i hvert fald ikke fundet ud af det
Krav til metadata Principper for at få alle nødvendige informationer registreret Alle jobs i DIS Alle jobs lægges i flows til kørsel i LSF Et job kun i ét flow Alle tabeller beskrevet i metadata Alle jobs beskrevet med source- og targettabeller og sourcefiler, også jobs med userwritten kode Resultat fra analyse af metadata Impact-analyse giver alle jobsammenhænge og job-fil-sammenhænge Kobling til flows giver flowsammenhænge og flow-fil-sammenhænge. Alle informationer til at styre driftafvikling i LSF er til stede.
Kravspecifikation Et program, der fungerer som virtuel driftsplanlægger og operatør Skal kunne fungere på grundlag af de standardregistreringer, der findes i metadata, når et job er oprettet og deployed fra DIS Skal starte driften, når vi andre er gået hjem, og hele tiden følge med i den øjeblikkelige driftstatus og køre de næste flows eller undlade dem afhængig af de hidtidige resultater Skal kunne fungere i sammenhæng med manuel omkørsel af et fejlet flow eller kørsel af et ekstra flow, som ikke er på kørselslisten, og tage over derfra og selv køre efterfølgende flows Skal vide, når et libname er færdigopdateret, og kopiere data til BI-miljøet samt skifte pointeren i metadata. Skal give detaljeret rapportering og mulighed for at fejlsøge via et webinterface Skal samle data op til driftstatistik Skal anvende det normale SAS driftafviklingsmiljø med oprettelse af flows i MC og afvikling i LSF Skal overflødiggøre al scheduleringsinformation i SAS MC. Alle flows sættes til at trigges manuelt, og programmet trykker på knappen på rette tidspunkt
Tættere på løsningen 1 Overblik over dispatcheren Metadata MySQL SASdriftapplikation DI-server Udtræk og opdatering Dispatcherloop LSF SASjob Data
Tættere på løsningen 2 Udtræk af metadata og opdatering af sasdrift-database DI-server MySQL Flowliste Flow-job-liste Metadata Udtræk og load Flowbetingelser Libnameliste Libnamebetingelser
Tættere på løsningen 3 Dispatcherens grundlæggende funktion Batchjob Flow-job-liste 1. Check aktuel status Flowliste 3. Check om libname er færdigopdateret Loop 2. Beregn ny status Trig flow Opdater status Libnameliste LSF
Tættere på løsningen 4 Statuskoder: Statuskoder og håndtering af betingelser 0 venter 1 frigivet 2 aktiv 3 ikke på kørselsliste 4 udeladt 5 fejlet 6 kørt OK med brugercondition 7 kørt OK
Tættere på løsningen 5 Dispatcherens integration i SAS og LSF Baseret på at alle batchjobs selv logger start og afslutning samt resultat i sasdrift-databasen. Intet modificeret i jobbene selv, der er standard DIS-jobs Eneste modifikation er følgende tilføjet i batfilen, der starter batchjobbene: Set USERMODS_OPTIONS= -initstmt '%%include "D:\DWHadmin\AdminSource\InitJob.sas";' -termstmt '%%include "D:\DWHadmin\AdminSource\TermJob.sas";' De to includeprogrammer anvender de systemvariable, der sættes af SAS, samt LSF s environmentvariable, til at registrere relevante informationer
Tættere på løsningen 6 Kopiering fra DI- til BI-server med 2 dataområder Libnameliste 1. Check aktuel status Data på DI-server 3. Skift sti på libname til dataområde 2 Loop 2. Kopier data fra DI- til BI-server Metadata Dataområde 1 Aktiv før kopiering Dataområde 2 Aktiv efter kopiering
Implementering af løsningen DWHadmin systemet er en skal, der indeholder: Et repository, der indeholder al DWHadmin software samt programmer til installation og opsætning af DWHadmin-komponenter. Programbiblioteker mv, der er fælles for de servere, der indgår i et driftsmiljø (produktion, udvikling eller test). En MySQL-database, der benyttes til styring af driftafviklingen i et driftsmiljø. I databasen findes fast definerede tabeller til styring af modulafviklingen samt tabeller til de enkelte modulers brug. En afviklingsplatform på den enkelte server, der virker som en fælles ramme om de moduler (schedulerede driftsafviklingsprogrammer), der skal køre på serveren. Styrer afviklingen af modulerne og sørger for logning, rapportering, notificeringsmails etc. Moduler, der udfører de konkrete driftsopgaver på den enkelte server. Hvert modul installeres under serverens afviklingsplatform og består af en cmd-fil og et standardiseret "indpakningsprogram", der udfyldes med kald af de relevante underprogrammer til driftsopgaverne.
Demo
Spørgsmål?