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方法及遇到的问题的更多相关文章

  1. 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 ...

  2. JDBC连接MySQL 方法 实例及资料收集

    JDBC连接MySQL 方法 实例及资料收集 准备工作 首先,安装MySQL,配置用户名和密码,创建数据库. 可参见之前的文章: http://www.cnblogs.com/mengdd/p/315 ...

  3. [转]配置mysql允许远程连接的方法

    配置mysql允许远程连接的方法 vim /etc/my.cnf注释这一行:bind-address=127.0.0.1 ==> #bind-address=127.0.0.1保存退出.mysq ...

  4. docker 安装 hbase安装 java连接hbase (mac环境)

    docker 安装 https://hub.docker.com/editions/community/docker-ce-desktop-mac 下载地址 下载完之后,安装app一样安装就好 安装完 ...

  5. 全网最详细的hive-site.xml配置文件里如何添加达到Hive与HBase的集成,即Hive通过这些参数去连接HBase(图文详解)

    不多说,直接上干货! 一般,普通的情况是 全网最详细的hive-site.xml配置文件里添加<name>hive.cli.print.header</name>和<na ...

  6. Oracle字符串连接的方法

    Oracle数据库中,使用“||”进行字符串连接,下面就让我们一起了解一下Oracle数据库中字符串连接的方法,希望对您能有所帮助. 和其他数据库系统类似,Oracle字符串连接使用“||”进行字符串 ...

  7. ambari安装集群下python连接hbase之安装thrift

    简介: python连接hbase是需要通过thrift连进行连接的,ambari安装的服务中貌似没有自带安装hbase的thrift,我是看配置hbase的配置名称里面没有thrift,cdh版本的 ...

  8. windows平台kettle连接hbase的问题

    我本机安装的环境是centos7,并在本机上安装了zookeeper,hadoop,hbase,hive等组件, 使用pdi7.1来连接hbase,把mysql表中的数据导出到hbase中去,没有问题 ...

  9. mysql设置指定ip远程访问连接的方法

    本文实例讲述了mysql设置指定ip远程访问连接的方法,分享给大家供大家参考.具体实现方法如下: 1. 授权用户root使用密码jb51从任意主机连接到mysql服务器: 复制代码 代码如下: GRA ...

随机推荐

  1. ubuntu18.04搭建 kubernetes(k8s)集群

    下面使用kubeadm来创建k8s cluster1. 所有主机节点上都需要安装docker # sudo apt-get update # sudo apt-get install \ apt-tr ...

  2. linux系统裁剪

    linux系统裁剪 1.简介 最近为了更加了解linux系统的启动过程,通过对系统进行裁剪的的方式来了解整个启动流程.这里记录下过程. 2.环境介绍 vmware12 + centos6.5 + xs ...

  3. 001 Lua相关链接

    Lua官网:http://www.lua.org/ Lua for windows地址:http://www.lua.org/download.html Lua教程:http://www.runoob ...

  4. .NET框架 - NETFramework + API + EF(DBFirst) + MYSQL

    .NET框架 - NETFramework + MVC+ EF(DBFirst) + MYSQL 1. 安装3个MYSQL插件 ①mysql-for-visualstudio-1.2.8    vs的 ...

  5. metasploit与Cobaltstrike互相派生shell

    msf 派生 shell 给 Cobalt strike(前提有一个meterpreter) msf exploit(handler) > use exploit/windows/local/p ...

  6. 1. Ansible 简介

    目录 1. Ansible 是什么? 2. Ansible 特性 3. 控制主机需求 4. 被管理节点需求 1. Ansible 是什么? Ansible 是一个配置管理系统(configuratio ...

  7. 半导体知识讲解:IC基础知识及制造工艺流程

    本文转载自微信公众号 - 中国半导体论坛  , 链接 https://mp.weixin.qq.com/s/VhCsVGyEDrgc2XJ0jxLvaA

  8. (八)python中的函数

    一.聊聊函数 1.什么是函数? 上学时我记得最简单的是 F=x+y 这是一个简单的函数,看看python 中的格式 def test(): #函数定义 def 万年不变 print("> ...

  9. 自相关系数 ACF与偏自相关系数PACF,拖尾和截尾

    1.ACF y(t,s)=E(Xt-µt)(Xs-µs) 定义ρ(t,s)为时间序列的自相关系数,为ACF ρ(t,s)=y(t,s)/sqrt(DXt * DXs) E为期望,D为方差 2.PACF ...

  10. SpringMVC+Apache Shiro+JPA(hibernate)案例教学(二)基于SpringMVC+Shiro的用户登录权限验证

    序: 在上一篇中,咱们已经对于项目已经做了基本的配置,这一篇文章开始学习Shiro如何对登录进行验证. 教学: 一.Shiro配置的简要说明. 有心人可能注意到了,在上一章的applicationCo ...