flink连接hbase方法及遇到的问题
1、继承 RichSinkFunction 类
mvn配置:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-hbase_2.12</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.3</version>
<exclusions>
<exclusion>
<artifactId>xml-apis</artifactId>
<groupId>xml-apis</groupId>
</exclusion>
</exclusions>
</dependency>
config配置:


flink接入config代码:
public static void main(String[] args) throws Exception {
/*
Env and Config
*/
if (args.length > 0) {
configEnv = args[0];
}
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
String confName = String.format("xxx.%s.properties", configEnv);
InputStream in = MidasCtr.class.getClassLoader().getResourceAsStream(confName);
ParameterTool parameterTool = ParameterTool.fromPropertiesFile(in);
env.getConfig().setGlobalJobParameters(parameterTool);
}
代码:
package midas.knowbox; import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes; public class WriteHbaseRich extends RichSinkFunction<AdDot> {
private Connection conn = null;
private Table table = null; private static String zkServer;
private static String zkPort;
private static TableName tableName; private static final String click = "click";
BufferedMutatorParams params;
BufferedMutator mutator; @Override
public void open(Configuration parameters) throws Exception {
ParameterTool para = (ParameterTool)
getRuntimeContext().getExecutionConfig().getGlobalJobParameters();
zkServer = para.getRequired("hbase.zkServer");
zkPort = para.getRequired("hbase.zkPort");
String tName = para.getRequired("hbase.tableName");
tableName = TableName.valueOf(tName); org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", zkServer);
config.set("hbase.zookeeper.property.clientPort", zkPort); conn = ConnectionFactory.createConnection(config);
Admin admin = conn.getAdmin();
admin.listTableNames();
if (!admin.tableExists(tableName)) {
HTableDescriptor tableDes = new HTableDescriptor(tableName); tableDes.addFamily(new HColumnDescriptor(click).setMaxVersions(3)); System.out.println("create table");
admin.flush(tableName);
}
// 连接表
table = conn.getTable(tableName); // 设置缓存
params = new BufferedMutatorParams(tableName);
params.writeBufferSize(1024);
mutator = conn.getBufferedMutator(params);
} @Override
public void invoke(AdDot record, Context context) throws Exception {
Put put = new Put(Bytes.toBytes(String.valueOf(record.userID)));
System.out.println("hbase write"); System.out.println(record.recent10Data);
put.addColumn(Bytes.toBytes(click),Bytes.toBytes("recent_click"),Bytes.toBytes(String.valueOf(record.toJson()))); mutator.mutate(put);
System.out.println("hbase write");
} @Override
public void close() throws Exception {
mutator.flush();
conn.close();
}
}
调用:
dataStream.addSink(new WriteHbaseRich());
2、实现接口OutputFormat(不知道如何使用flink的配置文件)
package midas.knowbox; import org.apache.flink.api.common.io.OutputFormat;
import org.apache.flink.configuration.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException;
import java.util.ArrayList; public class WriteHbase implements OutputFormat<AdDot> { private Connection conn = null;
private Table table = null; private static String zkServer = "";
private static String port = "2181";
private static TableName tableName = TableName.valueOf("test"); private static final String userCf = "user";
private static final String adCf = "ad"; @Override
public void configure(Configuration parameters) {
} @Override
public void open(int taskNumber, int numTasks) throws IOException {
org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", zkServer);
config.set("hbase.zookeeper.property.clientPort", port); conn = ConnectionFactory.createConnection(config);
Admin admin = conn.getAdmin();
admin.listTableNames();
if (!admin.tableExists(tableName)) { // 添加表描述
HTableDescriptor tableDes = new HTableDescriptor(tableName); // 添加列族
tableDes.addFamily(new HColumnDescriptor(userCf));
tableDes.addFamily(new HColumnDescriptor(adCf)); // 创建表
admin.createTable(tableDes);
}
table = conn.getTable(tableName);
} @Override
public void writeRecord(AdDot record) throws IOException {
Put put = new Put(Bytes.toBytes(record.userID + "_" + record.adID + "_" + record.actionTime)); // 指定行
// 参数分别:列族、列、值
put.addColumn(Bytes.toBytes("user"), Bytes.toBytes("uerid"), Bytes.toBytes(record.userID));
put.addColumn(Bytes.toBytes("ad"), Bytes.toBytes("ad_id"), Bytes.toBytes(record.adID)); table.put(put);
} @Override
public void close() throws IOException {
conn.close()
}
}
3、遇到的问题
写入hbase的时候出现包引用错误 剔除 xml-apis 就好了
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.3</version>
<exclusions>
<exclusion>
<artifactId>xml-apis</artifactId>
<groupId>xml-apis</groupId>
</exclusion>
</exclusions>
</dependency>

flink连接hbase方法及遇到的问题的更多相关文章
- phoenix连接hbase数据库,创建二级索引报错:Error: org.apache.phoenix.exception.PhoenixIOException: Failed after attempts=36, exceptions: Tue Mar 06 10:32:02 CST 2018, null, java.net.SocketTimeoutException: callTimeou
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- JDBC连接MySQL 方法 实例及资料收集
JDBC连接MySQL 方法 实例及资料收集 准备工作 首先,安装MySQL,配置用户名和密码,创建数据库. 可参见之前的文章: http://www.cnblogs.com/mengdd/p/315 ...
- [转]配置mysql允许远程连接的方法
配置mysql允许远程连接的方法 vim /etc/my.cnf注释这一行:bind-address=127.0.0.1 ==> #bind-address=127.0.0.1保存退出.mysq ...
- docker 安装 hbase安装 java连接hbase (mac环境)
docker 安装 https://hub.docker.com/editions/community/docker-ce-desktop-mac 下载地址 下载完之后,安装app一样安装就好 安装完 ...
- 全网最详细的hive-site.xml配置文件里如何添加达到Hive与HBase的集成,即Hive通过这些参数去连接HBase(图文详解)
不多说,直接上干货! 一般,普通的情况是 全网最详细的hive-site.xml配置文件里添加<name>hive.cli.print.header</name>和<na ...
- Oracle字符串连接的方法
Oracle数据库中,使用“||”进行字符串连接,下面就让我们一起了解一下Oracle数据库中字符串连接的方法,希望对您能有所帮助. 和其他数据库系统类似,Oracle字符串连接使用“||”进行字符串 ...
- ambari安装集群下python连接hbase之安装thrift
简介: python连接hbase是需要通过thrift连进行连接的,ambari安装的服务中貌似没有自带安装hbase的thrift,我是看配置hbase的配置名称里面没有thrift,cdh版本的 ...
- windows平台kettle连接hbase的问题
我本机安装的环境是centos7,并在本机上安装了zookeeper,hadoop,hbase,hive等组件, 使用pdi7.1来连接hbase,把mysql表中的数据导出到hbase中去,没有问题 ...
- mysql设置指定ip远程访问连接的方法
本文实例讲述了mysql设置指定ip远程访问连接的方法,分享给大家供大家参考.具体实现方法如下: 1. 授权用户root使用密码jb51从任意主机连接到mysql服务器: 复制代码 代码如下: GRA ...
随机推荐
- (双指针) leetcode 485. Max Consecutive Ones
Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...
- 打开MCMC(马尔科夫蒙特卡洛)的黑盒子 - Pymc贝叶斯推理底层实现原理初探
我们在这篇文章里有尝试讨论三个重点.第一,讨论的 MCMC.第二,学习 MCMC 的实现过程,学习 MCMC 算法如何收敛,收敛到何处.第三,将会介绍为什么从后验分布中能返回成千上万的样本,也许读者和 ...
- Angular4.x跨域请求
Angular4.x请求 码云地址: https://gitee.com/ccsoftlucifer/Angular4Study 1. 搭建工程 新建一个工程angulardemo03 ng new ...
- centos7通过nginx搭建SSL
今天给大家带来的是一篇关于通过nginx搭建HTTPS访问转跳后端HTTP的教程,部署方式如下: 安装基础组件yum -y isntall firewalldyum -y install gcc gc ...
- DotNet进阶系列
一. 回顾历史 回顾个人发展历程,自2012年初次接触开发至今(2018年)已经有六个年头,这期间陆陆续续学习并掌握了不少技术,C#语言.ORM框架.多线程技术.设计模式.前端技术.MVC.MVVM框 ...
- important的妙用解决firefox和ie的css兼容问题
设置css的min-height属性.min-height在Firefox里有效,但IE无法识别.下面有个不错的解决方案,大家可以参考下 对于某些内容可变的层(比如用户评论),我们希望它有个最小的高度 ...
- PAT-B-1020 月饼 (25)(25 分)
题目描述: 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一 ...
- asp.net webapi 获取报文体的问题
用这种方法: var data=await Request.Content.ReadAsStringAsync(); 一般都无法获取到内容.原因是内部的流对象已经到了最后面.要获取到里面的需要把流的位 ...
- 在可编辑div的光标下插入html
function pasteHtmlAtCaret(html, selectPastedContent) {//参数1为要插入的html //参数2为boolean 是否选中插入的html 默认为fa ...
- C# Dictionary 泛型
Dictionary<string, string>是一个泛型,什么是泛型? 使用泛型下面是用泛型来重写上面的栈,用一个通用的数据类型T来作为一个占位符,等待在实例化时用一个实际的类型来代 ...