Visão Geral
O Gaffer é uma plataforma de armazenamento e consulta de grafos desenvolvida pelo GCHQ, voltada para cenários de alto volume, como análise de redes complexas e processamento de grandes massas de dados. Este guia apresenta o fluxo completo de preparação do ambiente, compilação, inicialização do serviço REST e execução das primeiras consultas.
Pré-requisitos de Ambiente
Certifique-se de que os seguintes componentes estejam installados antes de prosseguir:
| Componente | Versão Recomendada | Observação |
|---|---|---|
| Java | 8 ou 11 | OpenJDK é suficiente |
| Maven | 3.6 ou superior | Necessário para compilar o projeto |
| Git | 2.x | Para obter o código-fonte |
| Sistema Operacional | Linux/Unix | Ambientes Windows podem apresentar incompatibilidades com o Hadoop |
Instalação no Ubuntu/Debian
sudo apt update
sudo apt install -y openjdk-11-jdk maven git
# Validação
java -version
mvn -version
git --version
Instalação no RHEL/CentOS
sudo yum install -y java-11-openjdk-devel maven git
# Validação conjunta
java -version && mvn -version && git --version
Obtenção do Código e Compilação
Clone o repositório oficial e execute a compilação com o perfil rápido, que ignora testes mais pesados:
git clone --depth 1 https://github.com/gchq/Gaffer.git
cd Gaffer
mvn clean install -Pquick -DskipTests
Para compilar uma versão de snapshot com todos os módulos, utilize:
mvn clean install -am
Inicialização do Exemplo de Tráfego Rodoviário
O projeto inclui o exemplo road-traffic, que prepara um ambiente funcional com servidor Tomcat e dados de amostra:
chmod +x example/road-traffic/scripts/start.sh
./example/road-traffic/scripts/start.sh
Durante a execução, o script realiza o download das dependências Maven, configura o Tomcat, publica a API REST e carrega o conjunto de dados de exemplo.
Verificação da API
Após a inicialização, valide o estado do grafo com uma requisição simples:
curl -s http://localhost:8080/rest/graph/info | jq
Uma resposta válida deve conter metadados semelhantes a:
{
"graphId": "road-traffic",
"schema": {
"types": [...],
"edges": [...],
"entities": [...]
},
"operations": [...]
}
Configuração dos Backends de Armazenamento
O Gaffer permite o uso de diferentes implementações de armazenamento. A escolha depende do cenário de uso:
| Backend | Caminho do Exemplo de Configuração | Cenário de Uso |
|---|---|---|
| Accumulo | store-implementation/accumulo-store/sample-files/store.properties.sample |
Produção e clusters de grande porte |
| MapStore | store-implementation/map-store/src/main/resources/store.properties |
Desenvolvimento e testes em memória |
| Federated | store-implementation/federated-store/src/main/resources/store.properties |
Consultas unificadas entre múltiplos grafos |
Exemplo de Configuração do Accumulo
# Instância
accumulo.instance=meuGaffer
accumulo.zookeep.host=zookeeper1:2181,zookeeper2:2181
accumulo.user=admin
accumulo.password=senhaSegura
# Tabela e cache
gaffer.table=meu_grafo
cache.service.class=uk.gov.gchq.gaffer.cache.impl.HashMapCacheService
Consultas Básicas via REST
As operações são enviadas para o endpoint /rest/graph/operations/execute. Abaixo estão exepmlos representativos de interação com o grafo.
1. Listar IDs dos Grafos Disponíveis
curl -X POST http://localhost:8080/rest/graph/operations/execute \
-H "Content-Type: application/json" \
-d @payload_get_graph_ids.json
2. Inserir Elementos no Grafo
curl -X POST http://localhost:8080/rest/graph/operations/execute \
-H "Content-Type: application/json" \
-d @payload_add_elements.json
3. Consultar Dados de Uso de Estradas
curl -X POST http://localhost:8080/rest/graph/operations/execute \
-H "Content-Type: application/json" \
-d @payload_query_traffic.json
Os arquivos JSON de payload devem conter operações compatíveis com o esquema definido no exemplo. Estruturas típicas incluem AddElements para carga e GetElements para consulta.
Diagnóstico de Problemas Comuns
| Sintoma | Causa Provável | Solução |
|---|---|---|
| Falha na compilação por versão do Java | Java 12 ou superior em uso | Instale o Java 8 ou 11 e configure como padrão |
| Download de dependências lento | Latência com repositórios Maven | Configure um mirror Maven regional em ~/.m2/settings.xml |
| Script de inicialização não executa | Permissão negada | Execute chmod +x example/road-traffic/scripts/start.sh |
| Erro de porta em uso | Porta 8080 já ocupada | Altere a porta do Tomcat ou encerre o processo concorrente |
| Testes do Hadoop falham | Execução em ambiente Windows | Utilize Linux ou desative testes relacionados ao Hadoop |