eclipse + hbase(Docker镜像) 本地开发环境搭建(一)

写在前面
  • 目的是希望借助Docker容器技术,降低HBase基础学习门槛。
    • 即,不需要掌握繁琐的配置过程,就可以基于IDE工具进行 HBase 相关开发。
    • 毕竟,对于基于开源大数据技术生态体系的公司,HBase还是不可或缺的
  • 此处废话,不可省略!
  • 最后, 本就想搭建个人HBase测试环境,没想到绕了一个大圈,回到源点解决了问题。
    • 至于怎么解决的,啊哈, 我不会告诉你的!
    • 你愁啥,就说你呢!

实验材料
  • 虚拟机
    • VMware Workstation - CentOS Linux 7 (Core)
  • Docker环境
    • docker -v
      • Docker version 18.09.2, build 6247962
  • 获取HBase镜像

创建HBase容器
  • run 命令:
    • docker run -d -h myhbase -p 2181:2181 -p 8080:8080 -p 8085:8085 -p 9090:9090 -p 9095:9095 -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16301:16301 --name hbase1.3 --net=host harisekhon/hbase
  • 参数具体含义(部分)
    • 其中 --net host 参数为核心,即使用网络与宿主机一样。
参数作用
-d后台运行容器,并返回容器ID
-h指定容器的hostname
-p端口映射,格式为:主机(宿主)端口:容器端口
–name为容器指定一个名称
–net指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型

访问效果
  • 查看容器状态信息 docker ps
    在这里插入图片描述
  • HBase UI
    在这里插入图片描述
  • 查看容器元数据信息(部分)
    • 查看命令 docker inspect 容器ID/name
    • 部分配置结果
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "host",
"PortBindings": {
"16000/tcp": [{"HostIp": "","HostPort": "16000"}],
"16010/tcp": [{"HostIp": "","HostPort": "16010"}],
"16201/tcp": [{"HostIp": "","HostPort": "16201"}],
"16301/tcp": [{"HostIp": "","HostPort": "16301"}],
"2181/tcp":  [{"HostIp": "","HostPort": "2181"}],
"8080/tcp":  [{"HostIp": "","HostPort": "8080"}],
"8085/tcp":  [{"HostIp": "","HostPort": "8085"}],
"9090/tcp":  [{"HostIp": "","HostPort": "9090"}],
"9095/tcp":  [{"HostIp": "","HostPort": "9095"}]},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},

HelloHBase测试
  • Eclipse(IDE)开发代码
package com.kngines;

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Durability;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class HelloHBase {
	static Configuration conf = null;
	static {
		conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.232.128");
		conf.set("hbase.zookeeper.property.clientPort", "2181");
		conf.set("hbase.master", "192.168.232.128:16000");
	}

	public static void main(String[] args) {
		createNamespaceAndCreateTable("HadoopHbase:InsertCSV");
	}

	@SuppressWarnings("deprecation")
	public static void createNamespaceAndCreateTable(String tablename) {
		HBaseAdmin admin = null; // 通过HBaseAdmin管理员加载配置文件
		try {
			admin = new HBaseAdmin(conf);
			// Namespace指的是一个 表的逻辑分组 ,同一组中的表有类似的用途
			admin.createNamespace(NamespaceDescriptor.create("HadoopHbase").build());
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		// tab_name HadoopHbase:InsertCSV
		HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tablename));
		
		// 设置写WAL日志的级别,为同步写WAL。安全性较高,一定程度影响性能。
		tableDesc.setDurability(Durability.ASYNC_WAL);
		HColumnDescriptor hcd = new HColumnDescriptor("info");
		tableDesc.addFamily(hcd);
		
		try {
			if (admin.tableExists(TableName.valueOf(tablename))) {
				System.out.println("++++ " + tablename + " exists.");
			} else {
				admin.createTable(tableDesc);
				System.out.println("++++ HadoopHbase:InsertCSV is created successfully.");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// 关闭HBaseAdmin进程
				admin.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
  • 执行结果
16:59:35.463 [main-SendThread(192.168.232.128:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x1694217d4e4001e, packet:: clientPath:null serverPath:null finished:false header:: 6,8  replyHeader:: 6,390,0  request:: '/hbase,F  response:: v{'meta-region-server,'rs,'splitWAL,'backup-masters,'table-lock,'flush-table-proc,'master-maintenance,'online-snapshot,'switch,'master,'running,'draining,'namespace,'hbaseid,'table} 
++++ HadoopHbase:InsertCSV is created successfully.
16:59:36.242 [main] DEBUG org.apache.zookeeper.ZooKeeper - Closing session: 0x1694217d4e4001e
16:59:36.242 [main] DEBUG org.apache.zookeeper.ClientCnxn - Closing client for session: 0x1694217d4e4001e
16:59:36.247 [main-SendThread(192.168.232.128:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x1694217d4e4001e, packet:: clientPath:null serverPath:null finished:false header:: 7,-11  replyHeader:: 7,394,0  request:: null response:: null
16:59:36.247 [main] DEBUG org.apache.zookeeper.ClientCnxn - Disconnecting client for session: 0x1694217d4e4001e
16:59:36.247 [main] INFO org.apache.zookeeper.ZooKeeper - Session: 0x1694217d4e4001e closed
16:59:36.248 [main-EventThread] INFO org.apache.zookeeper.ClientCnxn - EventThread shut down
  • HBase 中结果
    在这里插入图片描述

参考文章

唱票,
  • 文章有用的话,点个赞呗
    • (我一定不会告诉你,我会偷偷乐半天)
  • 如有有问题,欢迎留言,有关代码、开发文档待阶段性更新至 GitHub再附链接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xsimah

创作不易,感谢客官的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值