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 ...
随机推荐
- JS学习笔记Day17
一. 创建对象的方法 (一)在了解原型链之前,首先先了解一下创建对象的几种方式,介绍以下三种. 代码: <script type="text/javascript"> ...
- Borůvka algorithm
Borůvka algorithm 我好无聊啊,直接把wiki的算法介绍翻译一下把. wiki关于Borůvka algorithm的链接:链接 Borůvka algorithm是一个在所有边权都是 ...
- sql0001
001. https://blog.csdn.net/qinshi965273101/article/details/81907658 002. https://blog.csdn.net/ ...
- 小程序通过 url 向内嵌 H5 传参注意事项
当在小程序中通过 url 向 <web-view> 内嵌的 H5 传参时,当包含特殊字符时需要进行编码处理(不然 <web-view> 中是拿不到值的,小程序竟然没有错误提示. ...
- UE4命令行使用,解释
命令行在外部 从命令行运行编辑项目 1 导航到您的[LauncherInstall][VersionNumber]\Engine\Binaries\Win64 目录中. 2 右键单击上 UE4Edit ...
- gdb nnet3-compute
gdb nnet3-compute测试命令 $ matrix-dim 'scp: head -n 1 data/test/feats.scp|' ~/kaldi/src/bin/matrix-dim ...
- Python文本编辑器推荐
首推当然是Sublime Text:可以中文化,百度上面有教程,页面比较酷炫,功能也不错 然后就是Notepad++,台湾开发,有中文界面
- Request method 'POST' not supported解决办法
(1)考虑拦截器是否将该链接拦截
- 【干货】使用SIFT取证工作站校验文件哈希----哈希一致则文件具备完整性
此实验来源于课程活动部分:第1单元:计算机取证基础 1.3活动和讨论 活动:* nix系统中文件的基本散列 注意:本博客更多的信息可能没有交代完善,有的人看不明白是因为,我知道,但是没有写出来.本 ...
- [Kubernetes]浅谈容器网络
Veth Pair 这部分内容主要介绍一个设备: Veth Pair . 作为一个容器,它可以声明直接使用宿主机的网络栈,即:不开启 Network Namespace .在这种情况下,这个容器启动后 ...