Geotools系列之Geotools连接Hbase数据库并读取数据

本文主要讲通过GeoTools API 连接Hbase数据库,并且获得数据  

  • 添加pom依赖
<properties>
        <geotools.version>20.0</geotools.version>
        <hbase.version>1.4.5</hbase.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-main</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-render</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-data</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <!--// https://mvnrepository.com/artifact/org.locationtech.geomesa/geomesa-hbase-datastore-->
        <dependency>
            <groupId>org.locationtech.geomesa</groupId>
            <artifactId>geomesa-hbase-datastore_2.11</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-protocol</artifactId>
            <version>${hbase.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>${hbase.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-common</artifactId>
            <version>${hbase.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>${hbase.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-annotations</artifactId>
            <version>${hbase.version}</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>osgeo</id>
            <name>Open Source Geospatial Foundation Repository</name>
            <url>http://download.osgeo.org/webdav/geotools/</url>
        </repository>
    </repositories>
  • Demo代码
package org.geotools.tutorial.quickstart.demo;

import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFinder;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.opengis.feature.Property;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.AttributeDescriptor;

import java.io.IOException;
import java.util.*;

/**
 * @author
 * @DesktopJavaDocable disable
 */
public class DataStoreHbaseDemo {

    private static String catalog = "China";
    //集群
    private static String zookeepers = "172.16.18.8:2181";

    private  Map getParams() {
        Map params = new HashMap();
        params.put("hbase.zookeepers", zookeepers);
        params.put("hbase.catalog", catalog);
        return params;
    }

    public void printfHbase() {
        try {
            DataStore dataStore = DataStoreFinder.getDataStore(getParams());
            if (dataStore != null) {
                //获取Catalog下所有的数据表
                String[] typeNames = dataStore.getTypeNames();
                if (typeNames.length > 0) {
                    //获取第一张数据表的数据信息
                    SimpleFeatureSource featureSource = dataStore.getFeatureSource(typeNames[0]);
                    if (featureSource != null) {
                        //获取该数据表的属性信息
                        SimpleFeatureType featureType = featureSource.getSchema();
                        System.out.println("表名:" + featureType.getTypeName());
                        System.out.println("字段数:" + featureType.getAttributeCount());
                        //获取数据表的属性(字段)结构
                        List<AttributeDescriptor> attributeDescriptors = featureType.getAttributeDescriptors();
                        for (AttributeDescriptor attributeDescriptor : attributeDescriptors) {
                            System.out.println("字段名:" + attributeDescriptor.getLocalName());
                        }
                        //获取数据表的记录信息
                        SimpleFeatureCollection features = featureSource.getFeatures();
                        SimpleFeatureIterator featureIterator = features.features();
                        //打印前10条记录
                        int counter = 0;
                        while (featureIterator.hasNext()) {
                            //一条记录集
                            SimpleFeature simpleFeature = featureIterator.next();
                            //获取记录集信息
                            Collection<Property> properties = simpleFeature.getProperties();
                            Iterator<Property> iterator = properties.iterator();
                            while (iterator.hasNext()) {
                                Property property = iterator.next();
                                System.out.println(property.getName().getLocalPart() + ":" + property.getValue().toString());
                            }
                            if (counter > 10) {
                                break;
                            }
                            counter++;
                        }

                    }
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  关于Hbase数连接参数的说明:

  hbase.catalog为Hbase数据库meta信息表,为必填参数;

  hbase.zookeepers为Hbase数据zk地址,如果是本机的Hbase数据库可以不设置,不设置的默认值为localhost;

  还有一些选填参数,可以根据需求设置:

  

 

  

  • 打印结果

  

 

posted @ 2019-05-07 20:32  王小豆又叫小王子  阅读(1814)  评论(0编辑  收藏  举报