{"id":7027,"date":"2018-01-17T09:34:44","date_gmt":"2018-01-17T12:34:44","guid":{"rendered":"http:\/\/www.fernandoquadro.com.br\/html\/?p=7027"},"modified":"2018-01-18T07:42:30","modified_gmt":"2018-01-18T10:42:30","slug":"testando-softwares-para-big-data-spatial-parte-3","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2018\/01\/17\/testando-softwares-para-big-data-spatial-parte-3\/","title":{"rendered":"Testando softwares para Big Data Spatial &#8211; Parte 3"},"content":{"rendered":"<p>Prezados leitores, hoje daremos continuidade ao post anterior falando um pouco sobre o GeoWave.<\/p>\n<p><strong>1. LocationTech GeoWave<\/strong><\/p>\n<p>O <a href=\"https:\/\/locationtech.github.io\/geowave\/\" rel=\"noopener\" target=\"_blank\">GeoWave<\/a> \u00e9 uma biblioteca que conecta a escalabilidade de estruturas de computa\u00e7\u00e3o distribu\u00eddas de key-value stores (Hadoop + HBase neste caso) com software geoespacial para armazenar, recuperar e analisar conjuntos de dados geoespaciais maci\u00e7os. Essa \u00e9 uma \u00f3tima ferramenta \ud83d\ude42<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave-1024x651.png\" alt=\"\" width=\"676\" height=\"430\" class=\"aligncenter size-large wp-image-7029\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave-1024x651.png 1024w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave-300x191.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave-768x488.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave-945x601.png 945w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave-600x382.png 600w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave.png 1379w\" sizes=\"auto, (max-width: 676px) 100vw, 676px\" \/><\/p>\n<p>Falando do ponto de vista do desenvolvedor, esta biblioteca implementa um provedor de dados vetoriais do kit de ferramentas <a href=\"http:\/\/www.geotools.org\/\" rel=\"noopener\" target=\"_blank\">GeoTools<\/a> para ler recursos (geometria e atributos) de um ambiente distribu\u00eddo. Quando adicionamos o plugin correspondente ao <a href=\"http:\/\/www.geoserver.org\" rel=\"noopener\" target=\"_blank\">GeoServer<\/a>, o usu\u00e1rio ver\u00e1 novas stores para configurar novos tipos de conjuntos de dados distribu\u00eddos suportados.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_geowaveplugin-1024x599.png\" alt=\"\" width=\"676\" height=\"395\" class=\"aligncenter size-large wp-image-7030\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_geowaveplugin-1024x599.png 1024w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_geowaveplugin-300x176.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_geowaveplugin-768x450.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_geowaveplugin-945x553.png 945w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_geowaveplugin-600x351.png 600w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_geowaveplugin.png 1218w\" sizes=\"auto, (max-width: 676px) 100vw, 676px\" \/><\/p>\n<p>Hoje em dia, o GeoWave suporta tr\u00eas tipos de armazenamento de dados distribu\u00eddos; <a href=\"https:\/\/accumulo.apache.org\/\" rel=\"noopener\" target=\"_blank\">Apache Accumulo<\/a>, <a href=\"https:\/\/cloud.google.com\/bigtable\/\" rel=\"noopener\" target=\"_blank\">Google BigTable<\/a> e HBase, usaremos o \u00faltimo deles.<\/p>\n<p>Deixemos o GeoServer para mais tarde. De acordo com os guias de usu\u00e1rios e desenvolvedores do GeoWave, temos que definir \u00edndices prim\u00e1rios e secund\u00e1rios que as camadas devem usar, ent\u00e3o podemos carregar informa\u00e7\u00f5es para o nosso local de armazenamento de dados.<\/p>\n<p>Conforme consta no guia do desenvolvedor, vamos construir com o Maven o kit de ferramentas GeoWave para salvar dados geogr\u00e1ficos no HBase:<\/p>\n<pre>\r\n> mvn package -P geowave-tools-singlejar\r\n<\/pre>\n<p>E incluir o plugin no GeoServer:<\/p>\n<pre>\r\n> mvn package -P geotools-container-singlejar\r\n<\/pre>\n<p>Defini minha pr\u00f3pria vari\u00e1vel de ambiente com um comando para executar os processos GeoWave o mais confort\u00e1vel poss\u00edvel:<\/p>\n<pre>\r\n> set GEOWAVE=\r\n  java -cp \"%GEOWAVE_HOME%\/geowave-deploy-0.9.6-SNAPSHOT-tools.jar\" \r\n  mil.nga.giat.geowave.core.cli.GeoWaveMain\r\n<\/pre>\n<p>Agora, podemos executar facilmente comandos digitando % geowave% [&#8230;]. Verificamos a vers\u00e3o GeoWave:<\/p>\n<pre>\r\n> %geowave% --version\r\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave_version-1024x242.png\" alt=\"\" width=\"676\" height=\"160\" class=\"aligncenter size-large wp-image-7033\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave_version-1024x242.png 1024w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave_version-300x71.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave_version-768x181.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave_version-945x223.png 945w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave_version-600x142.png 600w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geowave_version.png 1250w\" sizes=\"auto, (max-width: 676px) 100vw, 676px\" \/><\/p>\n<p>Ok, vamos registrar os \u00edndices espaciais e temporais necess\u00e1rios da nossa camada. O aplicativo cliente ir\u00e1 filtrar dados usando um filtro espacial (BBOX) e um filtro temporal para buscar apenas medi\u00e7\u00f5es de NO2 de uma data espec\u00edfica.<\/p>\n<p>Agora, registre ambos os \u00edndices:<\/p>\n<pre>\r\n> %geowave% config addindex \r\n  -t spatial eea-spindex --partitionStrategy ROUND_ROBIN\r\n\r\n> %geowave% config addindex \r\n  -t spatial_temporal eea-hrindex --partitionStrategy ROUND_ROBIN \r\n  --period HOUR\r\n<\/pre>\n<p>E adicione uma &#8220;loja&#8221;, na terminologia do GeoWave, para nossa nova camada:<\/p>\n<pre>\r\n> %geowave% config addstore eea-store \r\n  --gwNamespace geowave.eea -t hbase --zookeeper localhost:2222\r\n<\/pre>\n<p>Aviso, no \u00faltimo comando, 2222 \u00e9 o n\u00famero da porta onde foi publicado o Zookeeper.<\/p>\n<p>Agora, podemos carregar os dados. Nossa entrada s\u00e3o arquivos CSV, ent\u00e3o eu usarei a op\u00e7\u00e3o &#8220;-f geotools-vector&#8221; para indicar que o GeoTools inspeciona o provider de vetores que deve usar para ler os dados. Existem outros formatos suportados e, claro, podemos desenvolver um novo provider para ler nossos pr\u00f3prios tipos de dados espec\u00edficos.<\/p>\n<p>Para carregar um arquivo CSV, fa\u00e7a:<\/p>\n<pre>\r\n> %geowave% ingest localtogw \r\n  -f geotools-vector \r\n  .\/mydatapath\/eea\/NO2-measures.csv eea-store eea-spindex,eea-hrindex\r\n<\/pre>\n<p>Ok, dados carregados, at\u00e9 agora sem problemas, certo? Por\u00e9m, a GeoTools CSVDataStore tem algumas limita\u00e7\u00f5es ao ler arquivos. O <a href=\"https:\/\/github.com\/geotools\/geotools\/tree\/master\/modules\/unsupported\/csv\/src\/main\/java\/org\/geotools\/data\/csv\" rel=\"noopener\" target=\"_blank\">c\u00f3digo atual<\/a> n\u00e3o suporta atributos de data\/hora (nem atributos booleanos). O c\u00f3digo gera todos eles como strings (texto). Isso \u00e9 inaceit\u00e1vel para nossos pr\u00f3prios requisitos, a data da medi\u00e7\u00e3o deve ser um atributo preciso para o \u00edndice, ent\u00e3o foi alterado no c\u00f3digo java original. Al\u00e9m disso, para calcular o tipo de valor apropriado de cada atributo, o leitor l\u00ea todas as linhas no arquivo, \u00e9 a maneira mais segura, mas pode ser muito lento ao ler grandes arquivos com milhares e milhares de linhas. Se o arquivo tiver um esquema congruente, podemos ler um pequeno conjunto de linhas para calcular os tipos. Ent\u00e3o tamb\u00e9m foi alterado. Temos que reconstruir GeoTools e GeoWave. Voc\u00ea pode baixar as altera\u00e7\u00f5es deste <a href=\"https:\/\/github.com\/ahuarte47\/geotools\/commit\/4208b8a3b26765d539c85d37fc9f25fa23fa177e\" rel=\"noopener\" target=\"_blank\">fork do GeoTools<\/a>.<\/p>\n<p>Ap\u00f3s esta pausa, vamos voltar ao caminho principal do guia, onde n\u00f3s carregamos recursos em nossa camada com o comando &#8220;ingest&#8221;. N\u00f3s inclu\u00edmos o plugin em uma inst\u00e2ncia do GeoGerver implantada tamb\u00e9m (\u00e9 f\u00e1cil, basta copiar a biblioteca &#8220;geowave-deploy-xxx-geoserver.jar&#8221; para a pasta &#8220;..\\WEB-INF\\lib&#8221; e reiniciar).<\/p>\n<p>No <a href=\"http:\/\/www.fernandoquadro.com.br\/html\/2018\/01\/18\/testando-softwares-para-big-data-spatial-parte-4\/\" rel=\"noopener\" target=\"_blank\">pr\u00f3ximo post<\/a> iremos abordar o GeoServer, n\u00e3o perca!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prezados leitores, hoje daremos continuidade ao post anterior falando um pouco sobre o GeoWave. 1. LocationTech GeoWave O GeoWave \u00e9 uma biblioteca que conecta a escalabilidade de estruturas de computa\u00e7\u00e3o distribu\u00eddas de key-value stores (Hadoop + HBase neste caso) com&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2018\/01\/17\/testando-softwares-para-big-data-spatial-parte-3\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":7032,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[315,208,314,313],"class_list":["post-7027","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-big","tag-geoserver","tag-geowave","tag-hadoop"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/comments?post=7027"}],"version-history":[{"count":9,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7027\/revisions"}],"predecessor-version":[{"id":7070,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7027\/revisions\/7070"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/7032"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=7027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=7027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=7027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}