15_Écrire des données pulsar sur ClickHouse en fonction de Flink

3.8. Écrire des données sur ClickHouse en fonction de Flink

Écrivez Flink pour terminer l'opération d'écriture de données sur ClickHouse, puis terminez l'opération de statistiques d'indicateur basée sur CK

3.8.1. Introduction de base de ClickHouse

ClickHouse est une base de données de stockage en colonnes (SGBD) open-source du russe Yandex en 2016. Il est écrit en langage C++ et est principalement utilisé pour les requêtes de traitement analytique en ligne (OLAP).Il peut utiliser des requêtes SQL pour générer des rapports de données d'analyse en temps réel. .
insérez la description de l'image ici
Conclusion : ClickHouse, comme de nombreuses bases de données OLAP, a une vitesse de requête à table unique en raison des requêtes associées, et l'écart entre les deux dans ClickHouse est plus évident.

3.8.2. Étapes d'installation de ClickHouse

Dans ce projet, nous n'avons besoin d'installer que la version de test autonome à utiliser (installation node2).En production réelle, vous pouvez installer directement la version de cluster distribué

  • 1- Définir la source de 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- Installer directement basé sur yum
sudo yum install clickhouse-server clickhouse-client
  • 3- Modifier le fichier de configuration
vim /etc/clickhouse-server/config.xml 
修改178行: 打开这一行的注释 
<listen_host>::</listen_host>

insérez la description de l'image ici

  • 4- Démarrez le serveur clickhouse
systemctl start clickhouse-server 
停止:
systemctl stop clickhouse-server 
重启
systemctl restart clickhouse-server
  • 5- Entrez le client
    insérez la description de l'image ici

3.8.3. Créer une table cible dans 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. Écrire le code Flink pour terminer l'écriture sur 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 connecte à Phoenix pour réaliser une requête ad hoc

3.9.1.Opération d'installation Phoenix

Phoenix est un outil basé sur hbase appartenant à apache. Cet outil fournit une nouvelle façon d'exploiter les données (SQL) dans hbase. En même temps, Phoenix fait
beaucoup de travail d'optimisation sur hbase, ce qui nous permet d'exploiter davantage hbase effectivement.

Pour toute l'opération d'installation, vous pouvez vous référer au manuel d'installation dans les données et l'installer

3.9.2. Créer des tableaux dans 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. Déclarations de type dans Phoenix

insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/toto1297488504/article/details/132175527
conseillé
Classement