大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java API連接hbase示例

Java API連接hbase示例

更新時間:2022-09-30 09:55:50 來源:動力節點 瀏覽1436次

首先pom.xml里添加hbase-client依賴:

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>1.4.13</version>
</dependency>

然后將hbase-site.xml,core-site.xml復制到本地(如果實在本地運行的話)

package com.dkl.blog.hbase;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;
/**
 *Java API 連接 HBASE
 */
public class JavaHbaseExample {
    private static final String TABLE_NAME = "MY_TABLE_NAME_TOO";
    private static final String CF_DEFAULT = "DEFAULT_COLUMN_FAMILY";
    public static void createOrOverwrite(Admin admin, HTableDescriptor table) throws IOException {
        if (admin.tableExists(table.getTableName())) {//如果表已存在
            if (admin.isTableEnabled(table.getTableName())) {//如果表狀態為Enabled
                admin.disableTable(table.getTableName());
            }
            admin.deleteTable(table.getTableName());
        }
        admin.createTable(table);
    }
    public static void createSchemaTables(Configuration config) throws IOException {
        try (Connection connection = ConnectionFactory.createConnection(config);
             Admin admin = connection.getAdmin()) {
            HTableDescriptor table = new HTableDescriptor(TableName.valueOf(TABLE_NAME));
            table.addFamily(new HColumnDescriptor(CF_DEFAULT).setCompressionType(Algorithm.NONE));
            System.out.print("Creating table. ");
            createOrOverwrite(admin, table);
            System.out.println(" Done.");
        }
    }
    public static void modifySchema(Configuration config) throws IOException {
        try (Connection connection = ConnectionFactory.createConnection(config);
             Admin admin = connection.getAdmin()) {
            TableName tableName = TableName.valueOf(TABLE_NAME);
            if (!admin.tableExists(tableName)) {
                System.out.println("Table does not exist.");
                System.exit(-1);
            }
            HTableDescriptor table = admin.getTableDescriptor(tableName);
            // Update existing table
            HColumnDescriptor newColumn = new HColumnDescriptor("NEWCF");
            newColumn.setCompactionCompressionType(Algorithm.GZ);
            newColumn.setMaxVersions(HConstants.ALL_VERSIONS);
            //admin.addColumn(tableName, newColumn); //官方文檔代碼,這里我理解的是應該要添加列簇,但是該方法不生效,
            // 導致拋出異常org.apache.hadoop.hbase.InvalidFamilyOperationException:
            // Family 'DEFAULT_COLUMN_FAMILY' is the only column family in the table, so it cannot be deleted,
            // 用我下面這行代碼
            table.addFamily(newColumn);
            // Update existing column family
            HColumnDescriptor existingColumn = new HColumnDescriptor(CF_DEFAULT);
            existingColumn.setCompactionCompressionType(Algorithm.GZ);
            existingColumn.setMaxVersions(HConstants.ALL_VERSIONS);
            table.modifyFamily(existingColumn);
            admin.modifyTable(tableName, table);
            // Disable an existing table
            admin.disableTable(tableName);
            // Delete an existing column family
            admin.deleteColumn(tableName, CF_DEFAULT.getBytes("UTF-8"));
            // Delete a table (Need to be disabled first)
            admin.deleteTable(tableName);
        }
    }
    public static void main(String... args) throws IOException {
        Configuration config = HBaseConfiguration.create();
        config.set("hbase.zookeeper.quorum", "192.168.44.128");  //hbase 服務地址,如果在hbase-site.xml里有配置,可以不用這行代碼
//        config.set("hbase.zookeeper.property.clientPort","2181"); //默認2181端口
//        System.out.println(System.getenv("HBASE_CONF_DIR"));
        //Add any necessary configuration files (hbase-site.xml, core-site.xml)
//        config.addResource(new Path(System.getenv("HBASE_CONF_DIR"), "hbase-site.xml")); //官方文檔代碼,需要配置環境變量
        config.addResource(new Path("D:\\data\\conf\\hbase", "hbase-site.xml"));
//        config.addResource(new Path(System.getenv("HADOOP_CONF_DIR"), "core-site.xml"));//官方文檔代碼,需要配置環境變量
        config.addResource(new Path("D:\\data\\conf\\hadoop", "core-site.xml"));
        createSchemaTables(config);
        modifySchema(config);
    }
}

異常及解決

java.net.ConnectException: Connection refused: no further information

java.net.ConnectException: Connection refused: no further information

解決方法:

1.添加里添加

config.set("hbase.zookeeper.quorum", "192.168.44.128");    //官網代碼里沒有這行

2.程序里用到的hbase-site.xml里添加 (如果hbase-site.xml沒有下面的配置,單機配置時沒有添加)

<property>
    <name>hbase.zookeeper.quorum</name>
    <value>192.168.44.128</value>
</property>

Call to localhost/127.0.0.1:16201 failed on connection exception

java.net.SocketTimeoutException: callTimeout=60000, callDuration=62839: Call to localhost/127.0.0.1:16201  failed on connection exception

沒有設置host 和 hostname 驗證:

netstat -nautlp|grep 16201
tcp6       0      0 127.0.0.1:16201         :::*                    LISTEN      69041/java          
tcp6       0      0 127.0.0.1:34889         127.0.0.1:16201         ESTABLISHED 68947/java          
tcp6       0      0 127.0.0.1:16201         127.0.0.1:34889         ESTABLISHED 69041/java          
tcp6       0      0 127.0.0.1:34885         127.0.0.1:16201         ESTABLISHED 68947/java          
tcp6       0      0 127.0.0.1:16201         127.0.0.1:34885         ESTABLISHED 69041/java

修改:

vim /etc/hosts
192.168.44.128 master
vim /etc/hostname
master

然后重啟hbase和程序,驗證

netstat -nautlp|grep 16201
tcp6       0      0 192.168.44.128:16201    :::*                    LISTEN      66641/java          
tcp6       0      0 192.168.44.128:16201    192.168.44.128:40589    ESTABLISHED 66641/java          
tcp6       0      0 192.168.44.128:40589    192.168.44.128:16201    ESTABLISHED 66546/java

java.net.SocketTimeoutException: callTimeout=60000, callDuration=79924: can not resolve master,16201,1597395570081

這個是本地運行程序且沒有配置本地host時產生的,解決方法為編輯C:\Windows\System32\drivers\etc\hosts,添加

192.168.44.128 master

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美成人亚洲国产精品 | 亚洲精品第一区二区三区 | 91精品成人福利在线播放 | 久久福利网 | 天天拍天天射 | 欧美成人精品久久精品 | 久久精品免费大片国产大片 | 91精品国产91久久久久久 | 欧美激情影院 | 91成品视频 | 国产手机在线国内精品 | 亚洲国产高清在线精品一区 | 欧美一欧美一区二三区性 | 久久久久女人精品毛片 | 色狠狠xx | 日本特黄在线观看免费 | 97欧美在线看欧美视频免费 | 九色蝌蚪自拍 | 性久久| 国产亚洲精品久久久久久久网站 | 国产玖玖视频 | 免费在线一级片 | 久久久久久久国产精品影院 | 天天狠狠色综合图片区 | 日韩午夜网站 | 性视频久久 | 亚洲激情视频 | 这里只有精品在线 | 精品国产成人三级在线观看 | 美女叫春| 一本色道久久综合亚洲精品高清 | 久久毛片久久毛 | 亚洲欧洲日本在线 | 日韩精品久久久久久 | 免费99精品国产自在现线观看 | 欧美日韩国产片 | 天天干天天射天天插 | 免费黄a| 大乳欲妇三级一区二区三区 | 亚洲国产高清在线精品一区 | 不卡的 |