1. 程式人生 > >Geotools系列之Geotools連線Hbase資料庫並讀取資料

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;

  還有一些選填引數,可以根據需求設定:

  

 

  

  • 列印結果

  

&n