黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

Java API連接hbase示例

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

首先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

 

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 精品一区二区视频在线观看 | 黄网在线观看免费 | 天天操人人 | 欧美性猛交xxx黑人猛交 | 高清欧美一区二区三区 | 欧美精品xxx | 日韩精品欧美亚洲高清有无 | 久久午夜精品视频 | 日本aⅴ网站 | 国内精品视频在线 | 高清欧美不卡一区二区三区 | 九九综合九九综合 | 极品毛片 | 三级全黄视频 | 亚洲成av人影片在线观看 | 国产成人一区二区 | 999成人精品视频在线 | 婷婷综合色 | 免费看黄色一级 | 一级乱理中文字幕韩国 | 欧美精品一区视频 | 亚洲最大成人 | 天天操2018| 日日插日日操 | a国产片 | 视频一区二区三区欧美日韩 | 一级黄色夫妻 | 国产成人99 | 放荡的美妇一区二区三区 | 日本在线不卡一区二区 | 久久激情综合色丁香 | 亚洲a在线观看 | 白丝丝袜高跟国产在线视频 | 国产精品青草久久福利不卡 | 欧美高清性xxxxxxx | 亚洲字幕 | 国产成人免费影片在线观看 | 成人中文字幕在线高清 | 亚洲小视频在线观看 | 99视频精品免视3 | 一级特色大黄美女播放网站 |