# Plataforma de BigData - Índice
###### tags: `bigdata`
Esse documento contém os passos com os links de documentação necessários para fazer a implantação da plataforma de BigData.
## O que é a plataforma?
A plataforma consiste em diversos elementos, abaixo uma lista reduzida com os principais componentes:
* Postgres
* Ambari
- HDFS
- Yarn
- Zookeeper
- Kafka
- Oozie
- Ranger
- Atlas
- Sqoop
- Spark
* Dremio
* Superset
* Kubernetes
- Jupyter
- Presto
## Implantação
Toda implantação é feita utilizando containers do Docker, portanto os primeiros passos são para preparar o cluster para que consigamos iniciar os containers e o cluster do kubernetes.
### 1. Preparação do ambiente
#### 1.1 Firewall
O primeiro passo é desabilitar o firewall, se possível, desabilite apenas para a rede interna caso o seu ambiente não tenha nenhuma outra defesa contra ataques externos.
#### 1.2 Docker
Instalação e configuração do Docker.
[CentOS - Docker](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/rkmIVJFJS)
[Ubuntu - Docker] TODO
#### 1.3 Kubernetes
[CentOS - Kubernetes: preparar ambiente](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/HJ2S9-PZD)
---
### 2. Docker registry
O docker registry é utilizado para armazenar as imagens customizadas que criamos para a plataforma. Abaixo está um arquivo de configuração genérico. Para mais informações sobre de configuração veja a [documentação oficial](https://docs.docker.com/registry/configuration).
```yaml=
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /data/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
```
Salve o arquivo de configuração e execute o comando abaixo a partir do mesmo diretório para iniciar o registry.
```bash=
docker run --name registry \
-p 5000:5000 \
-v <diretorio-local-para-armazenar-os-dados>:/data \
-v $PWD/config.yaml:/etc/docker/registry/config.yml \
--restart always \
-dit registry:2.7.1
```
No exemplo acima, utilizamos a versão `2.7.1` da imagem, acesse essa [página](https://registry.hub.docker.com/_/registry?tab=tags) para verificar se existe alguma versão mais nova.
O comando abaixo pode ser executado para validar se o registry foi iniciado corretamente.
```bash=
curl -o /dev/null -s -w "%{http_code}\n" http://localhost:5000/v2/_catalog
200
```
Se imprimir o status 200 é porque está tudo certo.
---
### 3. Banco de dados
Utilizamos o Postgres como banco de dados oficial para todas demandas da plataforma de BigData. Diversos componentes o utiliza, para mencionar alguns: ambari, hive, oozie, ranger, jupyter e superset.
Abaixo está o comando utilizado para iniciar o Postgres no docker.
```bash=
docker run --name postgres \
-p 5432:5432 \
-e PGDATA=/data/postgresql \
-e POSTGRES_PASSWORD=<sua-senha> \
--volume <dir-para-armazenar-os-dados>:/data \
--restart always \
-dit postgres:12.3 -c "max_connections=1000"
```
---
### 4. Ambari
O Ambari é iniciado em containers baseados no Ubuntu 18.04.
#### 4.1 Docker imagem
[Ambari - Docker Imagem](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/Bk_zZWKkS)
#### 4.2 Usuário e banco de dados
Vamos criar um usuário e um banco no postgres para que seja utilizado no setup do Ambari.
O comando abaixo deve ser executado no servidor em que foi iniciado o Postgres.
```bash=
docker exec -it postgres psql -U postgres
postgres=> create role ambari with password 'ambari' ;
CREATE ROLE
postgres=> create database ambari ;
CREATE DATABASE
postgres=> alter role ambari with login ;
ALTER ROLE
postgres=> grant all privileges on database ambari to ambari ;
GRANT
```
#### 4.3 Setup
[Ambari - Servers and agents](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/Bk4GXZKJS)
#### 4.4 Manutenção
[Ambari - Manutenção](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/BJs6qE6pB)
---
### 5. Instalação dos componentes
#### 5.1 HDFS, Yarn, Zookeeper e Kafka
Acesse pelo navegador a interface do Ambari e instale os componentes. Comece selecionando apenas os itens básicos para facilitar a configuração. Abaixo uma lista inicial:
- HDFS
- Yarn
- Zookeeper
- Kafka
- Sqoop
- Spark
- Hive
Alguns outros módulos são selecionados de forma automática pelo próprio Ambari, como por exemplo: Ambari Metrics e Smartsense.
#### 5.2 Habilitar Workflow Manager (Oozie)
O Apache Oozie é responsável por definir workflows de processamento e executá-los de acordo com o agendamento realizado.
Abaixo estão os passos necessários para habilitar a interface gráfica dele pelo Ambari.



A imagem abaixo mostra que você pode ir diretamente para o Oozie após habilitá-lo.

E nessa outra imagem, mostra um link mais rápido para entrar na interface do Oozie.

#### 5.3 Dependências para o Sqoop no Oozie
Siga [esses passos](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/rybnIW9ID) para configurar algumas dependências importantes para executar comandos do Sqoop no Oozie.
---
### 6. Active Directory e Kerberos
#### 6.1 Integração
[Ambari + Ldap/AD](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/BkjEWASvP)
#### 6.2 Atlas
[Atlas - Active Directory](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/SJGdVWvPD)
#### 6.3 Ranger
[Ranger - Active Directory](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/BJwsEMvDD)
#### 6.4 Comandos básicos no Kerberos
[Kerberos - Comandos básicos](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/Bk4OsOIcP)
#### 6.5 Kerberos no Ambari
[Ambari + Kerberos](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/SkIBl0rDP)
---
### 7. Kubernetes
#### 7.1 Iniciar cluster
[Kubernetes - Iniciar cluster](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/BJGUXmvbP)
#### 7.2 Helm
[Kubernetes - Helm](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/Hy7eB4aFD)
#### 7.3 Storage: OpenEBS
[Kubernetes - Storage: OpenEBS (v1)](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/HkOFr46tw)
#### 7.4 Comandos básicos
[Kubernetes - Comandos básicos](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/S1r-5Y89D)
#### 7.5 Funcionamento geral
[Kubernetes - Funcionamento geral](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/rJdrV61sD)
---
### 8. JupyterHub
[JupyterHub no Kubernetes](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/H10ySpIWP)
---
### 9. Verificação do ambiente
Nessa seção temos diversos comandos e procedimentos interessantes para verificar se tudo dentro da plataforma está funcionando corretamente.
#### 9.1 HDFS, Yarn e Oozie
O tutorial [Do Jupyter ao Oozie](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/SJ4gJR9Zw) é um ótimo ponto de partida para verificar os principais componentes da plataforma.
#### 9.2 Sqoop no Oozie
O tutorial [Importando dados: RDBMS -> HDFS](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/S1IYXlosE) é importante caso o ambiente tenha necessidade de importar dados de bancos de dados relacionais.
#### 9.3 Hive
Veja o tutorial [Testes básicos com Hive](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/HJ_V6a77w) para verificar se o Hive está funcionando.
#### 9.4 Ambari
Veja o documento [Ambari - Manutenção](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/BJs6qE6pB).
#### 9.5 Kubernetes
Veja o documento [Kubernetes - Funcionamento Geral](https://hackmd.io/@oAdhuQJ2T8iByJUEQ5jUuQ/B1U8-Zv-w).