#03-[Série] SQL Server Big Data Clusters – Instalação

Falla Guys

Continuando a série sobre SQL Server Big Data Clusters (BDC) agora vamos de fato colocar a mão na massa, já estava na hora né 🙂

No primeiro post, compreendemos os conceitos gerais do BDC apresentando as motivações e também quais são os problemas e casos de uso que o SQL Server 2019 com o BDC pretende resolver, como virtualização de dados, pipeline para Ciêntistas e Engenheiros de Dados em ambientes de Machine Learning (ML), Inteligência Artificial (IA) entre outros.

No segundo post, o foco foi entender a arquitetura do BDC, compreendendo as camadas de controle (Control Plane), de computação (Compute Plane) e de dados (Data Plane) que tem duas partes, o Data Pool e o Storage Pool. Também mencionei a integração com HDFS/Yarn, Spark e o processamento nas origens externas de dados onde tem um carinha chamado predicate pushdown.

Agora a nossa missão é colocar tudo isso para funcionar, bora?

O SQL Server Big Data Clusters é configurado sob cluster do Kubernetes, logo, podemos fazer isso basicamente de três maneiras:

  1. Com Minikube na nossa própria máquina. O Minikube “simula” um cluster do Kubernetes e com isso podemos instalar o SQL Server 2019 nesse cluster e configurar o Big Data Clusters.
  2. A segunda forma, seria instalar do zero um cluster do Kubernetes no seu ambiente e sob essa infraestrutura configurar o BDC. Essa opção exige um pouco mais de conhecimento em Kuberentes e Linux, mas é perfeitamente possível. (vou subir um post sobre isso também).
  3. A terceira opção, é via Azure Kubernetes Services (AKS) que é o serviço do Kubernetes no Azure, totalmente gerenciável facilita muito a implementação dos contêiners e para este post foi o escolhido como plataforma para subir o nosso primeiro cluster de BDC no SQL Server 2019 🙂
Premissas:
- Possuir uma conta no Azure. Se ainda não tem, de uma olhada neste link para criar a sua.
- Antes de iniciar a instalação, precisamos dos utilitários: AZData e Kubectl.
- Também é interessante ter o Azure Data Studio instalado para conectar no BDC.

Vamos dividir nosso processo de instalação em duas duas partes. Na primeira, vamos subir o cluster AKS e na segunda parte vamos fazer o deploy do BDC. Após tudo isso teremos nosso ambiente disponível para uso 🙂

Configurando Azure Kubernetes Services (AKS)

Com o AZData instalado na sua máquina, vamos acessar a conta do Azure via CLI, linha de comando, para iniciarmos a configuração do AKS. No prompt (cmd) execute a seguinte instrução:

az login

Vai abir uma tela no seu browser para realizar a autenticação e se der certo, no seu prompt vai aparecer uma tela semelhante a essa. No meu caso, eu tenho duas subscription ID.

Também é possível listar as subscriptions com o comando abaixo:

az account list

Para demais comandos AZData, de uma olhada nesta lista.

Continuando, vamos criar o Resource Group (RG) no Azure, onde posteriormente vamos alocar o BDC, nodes, recursos, etc.
Para esse post vou criar o RG com o nome de RG-SQLBDC na região westus2.

az group create --name RG-SQLBDC --location westus2

Com o RG criado na etapa anterior, agora vamos iniciar a criação do AKS. Especifique seu Resource Group e também a quantidade de nodes. Para esse post vou criar o AKS com apenas um node, que futuramente receberá os contêiners do BDC.
obs: Dependendo da quantidade de nós que você colocar, talvez retorne um erro devido a quantidade de vCPUs habilitados para sua conta do Azure. Caso isso ocorra, peça via chamado para aumentar o seu Softlimite. Para mais informações de uma olhada neste link e nesse também.

Posso criar meu ambiente em produção com apenas 01 node?

Não é recomendável, pensando que estamos falando de Produção e isso na maioria das vezes requer alta disponibilidade para atender seu RTO e RPO. A documentação do proprio Kuberentes indica pelo menos três nodes no cluster.
Para efeito de estudo, como é o caso desse post, vou criar apenas com um node para evitar gastos desnecessários no Azure. Mas fique a vontade, caso você queira criar com mais.

Execute no PowerShell:

az aks create --name kubcluster `
--resource-group RG-SQLDBC `
--generate-ssh-keys `
--node-vm-size Standard_L8s `
--node-count 1 `
--kubernetes-version 1.15.5

Caso não saíba a versão correta do seu Kuberentes, execute o comando abaixo:

az aks get-versions `
--location westus2 `
--query orchestrators `
--o table

Pegue a versão mais recente, mude a versão no comando “az aks create” e execute novamente.
A execução desse comando pode levar alguns minutos.

Nesse momento seu cluster Kubernetes já deve estar online, vamos conectar nele para validar algumas informações.

Exibindo os nodes que especificamos na etapa anterior:

kubectl get nodes

Observer, o nó aks-nodepool1-28250724-0 está online a 52min. Se tivessemos criado com três nodes, o comando exibiria três registros parecidos com esse.

Caso de erro de conexão, conect no cluster com o comando: (não esqueça de substituir o Resource-group)

az aks get-credentials --resource-group=RG-SQLBDC --name kubcluster

O comando abaixo, retorna várias informações sobre o cluster. Bem útil para documentação e Troubleshooting.

kubectl config view

Mesmo que ainda não instalamos o BDC, já existem alguns PODs em execução no AKS que são responsáveis pelo gerenciamento do cluster.

kubectl get pods --all-namespaces

Observe os Pods em execução no namespace kube-system. A coluna READY indica quantos dockers existem dentro de cada POD e quantos estão online no momento. Por exemplo, o pod “heapster” tem dois dockers e os dois estão up.

Se quiser brincar um pouco mais com kubectl, de uma olhada neste link.
O próximo post (#04) será sobre Monitoração e vamos utilizar muito kubectl e AZData.

Deploy do BDC no clusters AKS (set mode = raiz)

O BDC como mencionado no post “Arquitetura do Big Data Clusters” faz parte da Engine do SQL Server 2019 e é implementado com Dockers no cluster do Kubernetes.

Vamos criar um arquivo de configuração (perfil) “aks-dev-test” que será nossa “forma”, isso facilitará caso queria reutilizar para novas instalações. Esse arquivo está em formato Json, portanto, podem ser editados em vários lugares como Nodepad, VSCode, etc.

Iniciando, caso você ainda não tenha executado nenhum comando AZData na sua máquina, provavelmente terá que aceitar a EULA. Também dá para fazer isso via portal do Azure. Para evitar um erro conhecido lá na frente, já vamos aceitar:
Execute via prompt (cmd)

azdata bdc create --accept-eula=yes

Execute no cmd:

azdata bdc config list

Repare que retornou três linhas.

  • aks-dev-test: Perfil com as configurações padrões para ambiente AKS.
  • kubeadm-dev-test: Perfil com as configurações padrões para ambientes cluster Kubernetes (instalados separadamente).
  • minikube-dev-test: Perfil com as configurações padrões caso esteja utilizando Minikube para simular o Kubernetes Cluster.

Como estamos criando nosso ambiente no AKS, vamos criar uma cópia do perfil “aks-dev-test”. Execute o comando abaixo especificando um diretório válido na sua máquina:

azdata bdc config init --source aks-dev-test --target c:\sqldbc\

Com esse Json em mãos, você poderia alterá-lo criando uma espécie de receita de instalação e configuração do seu Big Data Clusters. Por exemplo: você poderia especificar um padrão de nomenclatura com base na taxinomia da sua empresa, quantidade de nodes, distribuição dos serviços nos docker entre outras coisas.

No meu caso eu não vou alterar nada, a ideia foi mostrar a possibilidade de customizar a instalação, que pode ser usada inclusive em esteiras DevOps na automatização do Deploy do seu ambiente BDC.
Então seguindo, vamos alterar o BDC Config passando o nosso novo arquivo (Simulando um json customizado):

azdata bdc create --config-profile c:\sqldbc\ --accept-eula yes

Pronto, pode ir buscar uma Coca-Cola, Cerveja ou Todinho porque seu BDC está em processo de Deploy sob o cluster AKS criado anteriormente.

Isso pode demorar alguns minutos, em média todo deploy que eu fiz levou entre 20 e 55 minutos, depende da quantidade de nodes. Parece muito?, tente fazer isso manualmente na sua infra para ter ideia de quanto tempo demoraria hahaha. #AzureÉvida

Depois de alguns minutos, seu prompt exibirá alguns outputs assim:
Olha que bacana, ele provisionando a camada de Dados, de Computação, subindo a instância Masters…

E em mais alguns minutos o processo finalizará o deploy do BDC.

Parabéns, você criou seu primeiro BIG DATA CLUSTERS com o SQL Server 2019 no Azure Kubernetes Service (AKS)


Achou a instalação muito complicada?

Não se preocupe, a Microsoft sempre pensa em tudo 🙂, existe um script em Python que abstrai toda a complexidade de criação de perfils, alteração de variáveis de ambiente, criação e configuração do AKS…
Esse código ajuda você a implementar o cluster AKS + BDC com muita facilidade, porem, não exime de configurá-lo bem posteriormente. Como dica, utilize esse script somente em ambiente de testes e experimentação. Em produção, crie sua arquitetura e configure seu ambiente da melhor forma possível.

Deploy do BDC no Cluster AKS (set mode = “Nutella”)

Vamos lá:

az login

Faça o deploy do código Python na última versão:

curl -o deploy-sql-big-data-aks.py "https://raw.githubusercontent.com/Microsoft/sql-server-samples/master/samples/features/sql-big-data-cluster/deployment/aks/deploy-sql-big-data-aks.py"

Ainda no prompt de comando, execute:

python deploy-sql-big-data-aks.py

O prompt vai exibir algo semelhante a isso:

O primeiro passo é colocar sua subscription ID, se não lembrar é só rodar o comando “az account list”.
Após incluir o ID, é só dar ENTER e ir preenchendo os demais campos, no final, você receberá uma mensagem de “Creating azure Resource Group”, pronto, isso significa que seu Big Data Clusters está em processo de Deploy e em alguns minutos (uns 30..40) será disponibilizado para conexão.
Bem mais facil né ? rsrs

Durante o processo, você vai ver ele fazendo tudo que fizemos manualmente, por exemplo, criação do Resource Group, cópias do perfil, criação do AKS e deploy do BDC.

No final, o output do prompt exebirá os Endpoints de acesso aos serviços do Clusters, como URL de acesso os serviços de Grafana e Kibana, URL do HDFS, IPs e portas.

Parabéns 02, você criou seu primeiro BIG DATA CLUSTERS com o SQL Server 2019 no Azure Kubernetes Service (AKS), agora no modo Nutella 🙂


Como acessar o Big Data Clusters?

Primeiro vamos pegar o IP externo e a porta, execute o comando no cmd:

kubectl get svc master-svc-external -n sqlbigdata

Aproveitando que está no CMD, vamos analisar algumas coisas interessante.
O comando abaixo exibe o status da instância Master e das camadas de Controle, Computação e Dados.

azdata bdc status show -o table

Agora do Azure Data Studio, abra uma nova conexão e informe os dados.
O IP e porta são os coletados pelo comando “kubectl get svc master-svc-external -n sqlbigdata”. O login é “SA” e a senha definida no deploy.

Pronto, você está conectado no SQL Server 2019 Big Data Clusters 🙂
De uma navegada nas pastas do lado esquerdo, repare nos novos bancos de dados de sistema, diretórios do HDFS, notebooks…
Por curiosidade, faça uma query “Select @@version” e de uma olhada no sistema operacional haha.

Agora que já sabemos o que é o Big Data Clusters, sua Arquitetura e como instala-lo, vamos começar a brincar com ele.

Vou fazer isso nos próximos posts para não ficar muito extenso. Mas, já dando um spoiler tem mais dois posts quase prontos. O primeiro será sobre Monitoramento, onde vamos executar muito AZData, Kubectl e acessar a console de gerenciamento do Kubernetes para entender cada pod, cada contêiner e como gerência-los. O outro post será sobre ingestão de dados no HDFS e também vamos fazer algumas querys T-SQL via external tabela nesses dados… Isso mesmo, Vamos meter um SELECT no HDFS.. daqui para frente os posts serão sempre mão na massa.

Se ficou com dúvida, se está com erro na instalação… comente aqui ou me manda e-mail que vamos conversando.

See you next post
Luiz Henrique Garetti

Comente sobre isso: