大战熟女丰满人妻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

 

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 免费黄色福利 | 日本不卡一区二区三区 最新 | 69成人做爰视频在线观看 | 国产欧美久久精品 | 香蕉亚洲欧洲在线一区 | 奇米888第四色 | 亚洲区欧美中文字幕久久 | 成年女人在线观看片免费视频 | 午夜探花在线观看 | 91麻精品国产91久久久久 | 青青热久久久久综合精品 | 欧美成人xxxx | 国产高清一级毛片在线不卡 | 久久黄色网 | 欧美成人网在线综合视频 | 九九99香蕉在线视频免费 | 成人国产三级在线播放 | 中文一区二区视频 | 狠狠色丁香久久综合五月 | 男人搡女人视频免费看 | 免费在线不卡视频 | 深夜网站免费 | 日韩一级精品视频在线观看 | 欧美国产精品一区二区免费 | 久草在线视频首页 | 四虎影院最新入口 | 成人激情免费视频 | 久久综合亚洲伊人色 | 久久精品视频在线播放 | 神马影院伦理我不卡 | 日本爱爱视频 | 中文字幕伦理聚合第一页 | 久久免费视频7 | 91这里只有精品 | 国产99久久久久久免费看 | 爱爱免费网址 | 久久视屏这里只有精品6国产 | 毛片在线观看视频 | 高清国产美女在线观看 | 老色99久久九九精品尤物 | 成人精品一区二区三区校园激情 |