15_Escribe datos de púlsares en ClickHouse basados en Flink

3.8 Escribir datos en ClickHouse basado en Flink

Escriba Flink para completar la operación de escritura de datos en ClickHouse y luego complete la operación de estadísticas del indicador basada en CK

3.8.1 Introducción básica de ClickHouse

ClickHouse es una base de datos de almacenamiento en columnas (DBMS) de código abierto de Yandex de Rusia en 2016. Está escrita en lenguaje C++ y se usa principalmente para consultas de procesamiento analítico en línea (OLAP). Puede usar consultas SQL para generar informes de datos de análisis en tiempo real. .
inserte la descripción de la imagen aquí
Conclusión: ClickHouse, como muchas bases de datos OLAP, tiene una velocidad de consulta de una sola tabla debido a las consultas asociadas, y la brecha entre las dos en ClickHouse es más obvia.

3.8.2 Pasos de instalación de ClickHouse

En este proyecto, solo necesitamos instalar la versión de prueba independiente para usar (instalación de nodo 2). En producción real, puede instalar directamente la versión de clúster distribuido

  • 1- Establecer fuente yum
sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.com/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.com/rpm/stable/x86_64
  • 2- Instalar directamente basado en yum
sudo yum install clickhouse-server clickhouse-client
  • 3- Modificar el archivo de configuración
vim /etc/clickhouse-server/config.xml 
修改178行: 打开这一行的注释 
<listen_host>::</listen_host>

inserte la descripción de la imagen aquí

  • 4- Iniciar el servidor clickhouse
systemctl start clickhouse-server 
停止:
systemctl stop clickhouse-server 
重启
systemctl restart clickhouse-server
  • 5- Ingresa al cliente
    inserte la descripción de la imagen aquí

3.8.3 Crear tabla de destino en ClickHouse

create database itcast_ck; 
use itcast_ck; 
create table itcast_ck.itcast_ck_ems( 
id int, 
sid varchar(128), 
ip varchar(128), 
create_time varchar(128), 
session_id varchar(128), 
yearInfo varchar(128), 
monthInfo varchar(128), 
dayInfo varchar(128), 
hourInfo varchar(128), 
seo_source varchar(128), 
area varchar(128), 
origin_channel varchar(128), 
msg_count int(128), 
from_url varchar(128), 
PRIMARY KEY (`id`) 
) ENGINE=ReplacingMergeTree();

3.8.4 Escribir código Flink para completar la escritura en CK

import com.itheima.pojo.PulsarTopicPojo;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.io.jdbc.JDBCAppendTableSink;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.pulsar.FlinkPulsarSource;
import org.apache.flink.streaming.connectors.pulsar.internal.JsonDeser;
import org.apache.flink.types.Row;

import java.sql.Types;
import java.util.Properties;

// 基于Flink完成读取Pulsar中数据将消息数据写入到clickhouse中
public class ItcastFlinkToClickHouse {
    
    

    public static void main(String[] args) throws Exception {
    
    
        //1. 创建Flinnk流式处理核心环境类对象 和 Table API 核心环境类对象
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        //2. 添加Source组件, 从Pulsar中读取消息数据
        Properties props = new Properties();
        props.setProperty("topic","persistent://public/default/itcast_ems_tab");
        props.setProperty("partition.discovery.interval-millis","5000");
        FlinkPulsarSource<PulsarTopicPojo> pulsarSource = new FlinkPulsarSource<PulsarTopicPojo>(
                "pulsar://node1:6650,node2:6650,node3:6650","http://node1:8080,node2:8080,node3:8080",
                JsonDeser.of(PulsarTopicPojo.class),props);
        //2.1 设置pulsarSource组件在消费数据的时候, 默认从什么位置开始消费
        pulsarSource.setStartFromLatest();

        DataStreamSource<PulsarTopicPojo> dataStreamSource = env.addSource(pulsarSource);


        //2.2  转换数据操作: 将 PulsarTopicPojo 转换为ROW对象
        SingleOutputStreamOperator<Row> rowDataSteam = dataStreamSource.map(new MapFunction<PulsarTopicPojo, Row>() {
    
    
            @Override
            public Row map(PulsarTopicPojo pulsarTopicPojo) throws Exception {
    
    

                return Row.of(pulsarTopicPojo.getId(), pulsarTopicPojo.getSid(), pulsarTopicPojo.getIp(), pulsarTopicPojo.getCreate_time(),
                        pulsarTopicPojo.getSession_id(), pulsarTopicPojo.getYearInfo(), pulsarTopicPojo.getMonthInfo(), pulsarTopicPojo.getDayInfo(),
                        pulsarTopicPojo.getHourInfo(), pulsarTopicPojo.getSeo_source(), pulsarTopicPojo.getArea(), pulsarTopicPojo.getOrigin_channel(),
                        pulsarTopicPojo.getMsg_count(), pulsarTopicPojo.getFrom_url());
            }
        });


        //2.3: 设置sink操作写入到CK操作
        String insertSql = "insert into itcast_ck.itcast_ck_ems (id,sid,ip,create_time,session_id,yearInfo,monthInfo,dayInfo,hourInfo,seo_source,area,origin_channel,msg_count,from_url) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

        JDBCAppendTableSink tableSink = JDBCAppendTableSink.builder()
                .setDrivername("ru.yandex.clickhouse.ClickHouseDriver")
                .setDBUrl("jdbc:clickhouse://node2:8123/itcast_ck")
                .setQuery(insertSql)
                .setBatchSize(1)
                .setParameterTypes(Types.INTEGER,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.INTEGER,Types.VARCHAR)
                .build();

        tableSink.emitDataStream(rowDataSteam);


        //3. 提交执行
        env.execute("itcast_to_ck");

    }
}

3.9 HBase se conecta a Phoenix para realizar consultas ad hoc

3.9.1.Operación de instalación de Phoenix

Phoenix es una herramienta basada en hbase que pertenece a apache. Esta herramienta proporciona una nueva forma de operar datos (SQL) en hbase. Al mismo tiempo, Phoenix hace mucho
trabajo de optimización en hbase, lo que nos permite operar hbase más efectivamente.

Para toda la operación de instalación, puede consultar el manual de instalación en los datos e instalarlo

3.9.2 Creación de tablas en Phoenix

create view "itcast_h_ems" ( 
"id" integer primary key, 
"f1"."sid" varchar, 
"f1"."ip" varchar, 
"f1"."create_time" varchar, 
"f1"."session_id" varchar, 
"f1"."yearInfo" varchar, 
"f1"."monthInfo" varchar, 
"f1"."dayInfo" varchar, 
"f1"."hourInfo" varchar, 
"f1"."seo_source" varchar, 
"f1"."area" varchar, 
"f1"."origin_channel" varchar, 
"f1"."msg_count" integer, 
"f1"."from_url" varchar 
);

3.9.3 Declaraciones de tipos en Phoenix

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/toto1297488504/article/details/132175527
Recomendado
Clasificación