SQL Server 2019 - En route vers les Architectures Data Lake On Premise ? Sarah Bessard - Experte SQL Server - https://ConcatSkills.com Sauget Charles-Henri - MVP Data Platform - https://sauget-ch.fr #Meetup - Les gentils développeurs Data Platform
SAUGET Charles-Henri Consultant Data Platform depuis 2009 MAIL chsauget@insiders.coop GITHUB https://github.com/chsauget TWITTER @SaugetCh BLOG www.sauget-ch.fr WWW.INSIDERS.COOP
BESSARD Sarah Architecte SQL Server @concatskills contact@concatskills.com
Agenda 01 02 03 04 05 Container et Kebernetes Architecture SQL Server 2019 (Preview) 03 Gestion du cluster, debug et supervision 04 Architecture Data Lake 05 Démos
Container : Méthode de cloisonnement au niveau de l’OS VM Application 1 Application 2 Bin\Lib OS Invité OS Hôte Infrastructure Hyperviseur Conteneur Application 1 Application 2 Bin\Lib OS Hôte Infrastructure Moteur Container VS
Container Le principe est de faire tourner des environnements linux isolés les uns des autres, des micro services, mais partageant le même kernel. Un conteneur est la virtualisation de l’environnement d’exécution et non de l’intégralité de la machine, ce qui le rend plus léger qu'une VM, facilitant le déploiement. Un conteneur est portable et donc plus adapté aux applications qui doivent s'exécuter dans des environnements hétérogènes.
Container Le container n'a pas connaissance de ce qui se passe sur la machine hôte. Dans ces conditions, comment assurer la haute disponibilité et la scalabilité d’un service ?
Kubernetes Le mot Kubernetes vient du grec ancien et signifie « timonier », soit celui qui tient la barre d’un bateau. Si l’on reprend l’analogie de Docker avec les conteneurs maritimes, Kubernetes est le capitaine qui dirige le porte-conteneurs.
Kubernetes : Orchestration Création de services applicatifs sur différents conteneurs Planification de l’exécution des conteneurs dans un cluster Garantir l’intégrité des conteneurs Assurer le monitoring
Kubernetes : Cluster Kubernetes Master Nœud 1 POD A Nœud 2 POD B Kubelet Kubernetes Master Nœud 2 POD B Kubelet Nœud 3 POD C POD D Kubelet
Kubernetes : Haute disponibilité Nœud 1 POD A Kubelet POD A Kubernetes Master Nœud 2 Répliqua POD B Kubelet Nœud 3 POD C Kubelet
Kubernetes : Scalabilité Nœud 1 POD A Kubelet POD B2 Kubernetes Master Nœud 2 POD B1 Instanciation d’un POD Kubelet Nœud 3 POD C POD D Kubelet
Kubernetes : Service Client Client Service « Web » VIP Service « BDD » Load Balancing Load Balancing Serveur Web Serveur Web Serveur Web Serveur BDD Serveur BDD POD POD POD POD POD Nœud 1 Nœud 2 Nœud 3 Nœud 4 Nœud 5
Kubernetes : Glossaire Cluster : Agrégation de nœuds pour former une machine plus puissante et assurer la redondance Kubernetes Master : Serveur contrôlant les nœuds et la distribution des charges de travail aux nœuds en fonction de la disponibilité des ressources Nœud (physique, VM, ou hybride) : Héberge un à plusieurs PODS POD : Unité logique contenant un ou plusieurs conteneurs partageant les même ressources et/ou hébergeant les mêmes fonctionnalités Kubelet : Agent présent sur chaque nœud remontant les ressources disponibles, la disponibilité du nœud et des conteneurs Service : Point d'entrée permettant l'accès en mode load-balancé à un groupe de containers
Installation SQL Server 2019 (Preview) 1ère partie : Minikube et autres outils https://docs.microsoft.com/en-us/sql/big-data-cluster/deploy-on-minikube?view=sqlallproducts-allversions 2de partie : Déploiement d’un cluster Big Data Kubernetes https://docs.microsoft.com/en-us/sql/big-data-cluster/deployment-guidance?view=sqlallproducts-allversions#deploy Configuration suivante : CPU : 6 Mémoire : 32Go Stockage : 100Go Hyperviseur : Hyper-V, VirtualBox
Outils : Gestion du cluster et debug minikube : Outil permettant de mettre en place rapidement un cluster Kubernetes opérationnel sur sa machine mssqlctl : Outil de ligne de commande pour déployer et gérer un cluster big data via les API REST exposées par le service de contrôleur. kubectl : Outil de ligne de commande pour l’analyse du cluster Kubernetes Minikube : L’un des défauts souvent reproché à Kubernetes est en effet sa complexité. Par exemple, Kubernetes est très long à installer et à configurer, et nécessite une certaine planification car les noeuds doivent être définis avant de débuter. La procédure diffère également pour chaque système d’exploitation.
Outils : minikube Création d'une VM minikube minikube start --vm-driver="hyperv" --cpus 6 --memory 32768 --disk-size 100g --hyperv-virtual-switch "External" Arrêt/Démarrage minikube minikube stop/start IP associé à la VM minikube minikube ip Accès SSH à minikube minikube ssh Suppression de la VM minikube minikube delete
Outils : mssqlctl Créer un cluster mssqlctl cluster create --name CLUSTER_NAME (variables d'environnement à initialiser) Supprimer un cluster mssqlctl cluster delete -n CLUSTER_NAME Configuration du cluster mssqlctl cluster config get -n CLUSTER_NAME -f cong_cluster.txt Logs du cluster mssqlctl cluster debug copy-logs -n CLUSTER_NAME -d PATH
Outils : kubectl Infos cluster kubectl cluster-info Liste des nœuds Liste des nœuds kubectl get nodes -n CLUSTER_NAME Liste des services kubectl get svc -n CLUSTER_NAME Liste des pods kubectl get pods -n CLUSTER_NAME Description et évènements d'un POD kubectl describe pod POD_NAME -n CLUSTER_NAME
Architecture Microsoft SQL Server : Cluster Kubernetes Nœud : Kubernetes Master Instance Mater SQL Server Proxy SQL Nœud Portail d’admin (cluster) Passerelle Knox Ranger Hive Dashboard Grafana Dashboard Kibana Plan de contrôle Plan de calcul Plan de données Pool de calcul Pool de stockage Pool de données SQL Nœud de stockage Nœud SQL Proxy SQL : Redirection des écritures sur le maître et les lectures sur les autres nœuds, système de cache HDFS : Système de fichiers distribués, Hadoop Distributed File System (HDFS) Sparks : Système de calcul distribué In-Memory (cache RDS) plus rapide que Map Reduce Ranger: Sécurité des données Hadoop Hive : Interrogation et d'analyse de données HDFS Le plan de données est utilisé pour la persistance des données et la mise en cache. Il contient le pool de données SQL et le pool de stockage. Contient le pool de stockage et de données. Le pool de données est composé d'un ou plusieurs PODS exécutant SQL Server et reçoit les données issus de requêtes SQL ou de travaux Spark. Le pool de stockage comprend des PODS SQL Server, du Spark, et de l'HDFS. Pool de données : Distribution des données en mode ROUNDROBIN, REPLIQUATION, HASH SMP vs MPP
Architecture Microsoft SQL Server : Cluster Kubernetes
SQL Server 2019 (Preview) : Portail d’admin du cluster Application pool ?
Sécurité Mots de passe (secret Kubernetes) : Contrôleur Instance Master SQL Server Passerelle Knox (HDFS/Sparks) HDFS : Pas de sécurité implémentée dans cette preview Services autres que SQL Server : Certificats Secret Kubernetes : Objets permettant de stocker et de gérer toutes les infos sensibles comme des mots de passe, token ou encore clé
La flexibilité de la solution Avantages La flexibilité de la solution On étend les possibilités existantes de SQL Server en supportant de nouveaux usages : Support des fichiers sources qui restent requêtable Plus besoin de tout faire rentrer dans une table Support du Python / Scala / R / T-SQL Solution scalable
Architecture Data Lake Computation Model & Serve T-SQL Notebook Jupyter Polybase R / Python Application SQLDB SQL Server master instance SSIS Storage SSAS Reporting SQL Server Data Pool Data can be ingested using Spark Streaming, by inserting data directly to HDFS through the HDFS API, or by inserting data into SQL Server through standard T-SQL insert queries. The data can be stored in files in HDFS, or partitioned and stored in data pools, or stored in the SQL Server master instance in tables, graph, or JSON/XML. Either T-SQL or Spark can be used to prepare data by running batch jobs to transform the data, aggregate it, or perform other data wrangling tasks. Data scientists can choose either to use SQL Server Machine Learning Services in the master instance to run R, Python, or Java model training scripts or to use Spark. In either case, the full library of open-source machine learning libraries, such as TensorFlowor Caffe, can be used to train models. Lastly, once the models are trained, they can be operationalized in the SQL Server master instance using real-time, native scoring via the PREDICT function in a stored procedure in the SQL Server master instance;or you can use batch scoring over the data in HDFS with Spark. Alternatively, using tools provided with the big data cluster, data engineers can easily wrap the model in a REST API and provision the API + model as a container on the big data cluster as a scoring microservice for easy integration into any application. Data Lake HDFS HDFS CSV Web Service
Démo Comment analyser un fichier JSON contenant des avis d’incidents dans les installations nucléaires ? PowerBI ? On accède directement au fichier depuis HDFS, ce qui permet de garder le fichier source disponible pour d’autres utilisateurs et de garder une gestion des droits Notebook Jupyter ? On traite le fichier en Python et on expose le résultat au sein d’un fichier ou d’une table Avec SQL Server SGBDR ? Stockage en VARCHAR(MAX) analyse difficile mais faisable en utilisant Python ou R en external script
Chargement d’un DataWarehouse depuis un Lake Démo Chargement d’un DataWarehouse depuis un Lake La zone de dépôt des fichiers devient requêtable en SQL / Python / Scala Support de très grosse volumétrie Support de données déstructurées (Images / Pdf) Tout en ayant la capacité de capitaliser sur l’existant https://docs.microsoft.com/fr-fr/sql/big-data-cluster/big-data-cluster-overview?view=sqlallproducts-allversions
Mais aussi… Virtualisation de données Scale-Out Data mart