Como usar o Flink SQL para explorar o conjunto de dados do GitHub|Acampamento prático Flink-Learning

Autor|Wang Hongshun (Hongshun)

Para ajudar ainda mais os desenvolvedores a aprender a usar o Flink, a comunidade chinesa Apache Flink lançou recentemente o projeto de acampamento prático Flink-Learning. Este acampamento prático ajuda os desenvolvedores a experimentar o Flink por meio de cenários práticos reais e interessantes. Os cursos incluem acesso a dados em tempo real, análise de dados em tempo real e cenários de aplicação de dados em tempo real. Combinado com o modo de assistente de ensino do pequeno esquilo, ele ajuda os desenvolvedores no acampamento a jogar com Flink facilmente em todos os aspectos. Clique na imagem abaixo para escanear o código para entrar no acampamento imediatamente .

Esta edição continuará apresentando o campo de combate Flink-Learning em detalhes.


Quer aprender a descobrir os projetos mais populares no GitHub usando o Flink? Este experimento usa o conjunto de dados de eventos públicos integrados do GitHub da versão Flink de computação em tempo real do Alibaba Cloud e usa o Flink SQL para explorar e analisar ovos de páscoa ocultos no conjunto de dados públicos do Github em tempo real!

Depois de concluir este experimento, você dominará os seguintes conhecimentos:

  • Entenda as vantagens do Flink e da computação de streaming
  • Ter experiência inicial com os recursos básicos do Flink SQL e os recursos de processamento em tempo real do Flink

Introdução ao experimento

Analise o fluxo de eventos em tempo real do GitHub por meio do Flink e exiba-o visualmente por meio de relatórios para entender as tendências mais recentes do GitHub, a atividade de armazéns ou organizações específicas.

Depois de experimentar esse cenário, você pode ter uma experiência preliminar intuitiva dos recursos básicos do Flink SQL e dos recursos de processamento em tempo real do Flink.

■ Para retribuir aos desenvolvedores de código aberto por seu apoio à comunidade, o Alibaba Cloud Real-Time Computing Flink Edition fornece recursos de teste gratuitos nativos da nuvem

Recursos experimentais

Os recursos experimentais e configuração utilizados neste cenário são os seguintes:

Alibaba Cloud Real-Time Computing Versão Flink

item de configuração Especificação
Número de Gerenciadores de Tarefas 4
CPU do gerenciador de tarefas 2 núcleos
Memória do gerenciador de tarefas 8 GiB
CPU do gerenciador de tarefas 1 núcleo
Memória do gerenciador de tarefas 2 GB

meta de experiência

Tenha uma experiência inicial intuitiva com os recursos básicos do Flink SQL e os recursos de processamento em tempo real do Flink.

conhecimento prévio

O GitHub Public Dataset (GitHub Archive) é uma coleção de dados aberta fornecida pelo GitHub que contém dados de eventos para cada repositório público, como confirmações, solicitações pull, problemas e comentários. Os dados do conjunto de dados públicos do GitHub podem ser usados ​​para vários tipos de pesquisa e análise, como a colaboração da comunidade de código aberto, as características comportamentais dos desenvolvedores, a tendência de desenvolvimento de linguagens de programação, etc. Permita que os desenvolvedores entendam melhor as atividades e tendências no GitHub e obtenham informações e insights valiosos deles.

Neste experimento, o conjunto de dados público do GitHub é sincronizado com o SLS em tempo real como fonte de dados, e os dados são analisados ​​em várias dimensões de acordo com o Flink e exibidos intuitivamente por meio de relatórios.

Pré-conhecimento

  • Entenda os fundamentos do Flink.
  • Entenda os fundamentos do Flink SQL.

Construção do ambiente

Crie um cluster de sessão. Entre no console Alibaba Cloud e selecione a versão Flink de computação em tempo real. Em seguida, selecione o espaço de trabalho que você comprou.

Antes de começar a escrever trabalhos para a versão Flink de computação em tempo real do Alibaba Cloud, você precisa primeiro criar um cluster Session. Somente depois de criar um cluster Flink você pode executar tarefas.

1. Clique em Gerenciamento do Sistema -> Cluster de Sessão -> Criar Sessão

2. Ao criar um cluster de Sessão, configure-o para um cluster SQL Preview, para que os resultados da instrução Select possam ser gerados em um formato de gráfico sem configurar um Sink.

Experimento 1: placar de seguidores do Github

Este experimento conta as classificações de atenção do Github de uma semana atrás.

operar

1. Código SQL da tarefa. Entre eles, startTime deve ser definido o mais próximo possível de uma semana antes do momento atual . Se o horário for definido muito cedo, o tempo de cálculo inválido anterior será relativamente longo, o que não apenas consome recursos, mas também leva muito tempo para carregar os resultados do cálculo. Defina o projeto e o endPoint correspondentes de acordo com diferentes regiões . Por exemplo, a instância é uma plataforma de serviço em Xangai, então defina 'project' = 'github-events-shanghai' e 'endPoint' = ' https://cn-shanghai- intranet.log.alyuncs.com', outras regiões como Pequim, Hangzhou, Shenzhen podem ser alteradas para o valor correspondente.

-- 通过DDL语句创建SLS源表,SLS中存放了Github的实时数据。
CREATE TEMPORARY TABLE gh_event(
  id STRING,                                        -- 每个事件的唯一ID。
  created_at BIGINT,                                -- 事件时间,单位秒。
  created_at_ts as TO_TIMESTAMP(created_at*1000),   -- 事件时间戳(当前会话时区下的时间戳,如:Asia/Shanghai)。
  type STRING,                                      -- Github事件类型,如:。ForkEvent, WatchEvent, IssuesEvent, CommitCommentEvent等。
  actor_id STRING,                                  -- Github用户ID。
  actor_login STRING,                               -- Github用户名。
  repo_id STRING,                                   -- Github仓库ID。
  repo_name STRING,                                 -- Github仓库名,如:apache/flink, apache/spark, alibaba/fastjson等。
  org STRING,                                       -- Github组织ID。
  org_login STRING                                 -- Github组织名,如: apache,google,alibaba等。
) WITH (
  'connector' = 'sls',                              -- 实时采集的Github事件存放在阿里云SLS中。
  'project' = 'github-events-shanghai',                     -- 存放公开数据的SLS项目。例如'github-events-hangzhou'。
  'endPoint' = 'https://cn-shanghai-intranet.log.aliyuncs.com',                   -- 公开数据仅限阿里云实时计算 Flink 版通过私网地址访问。例如'https://cn-hangzhou-intranet.log.aliyuncs.com'。
  'logStore' = 'realtime-github-events',            -- 存放公开数据的SLS logStore。
  'accessId' =  ' ',         -- 只读账号的AK。
  'accessKey' = ' ',   -- 只读账号的SK。
  'batchGetSize' = '500',                           -- 批量读取数据,每批最多拉取500条。
  'startTime' = '2023-06-01 14:00:00'              -- 开始时间,尽量设置到需要计算的时间附近,否则无效计算的时间较长。默认值为当前值
);

-- 配置开启mini-batch, 每2s处理一次。
SET 'table.exec.mini-batch.enabled'='true'; 
SET 'table.exec.mini-batch.allow-latency'='2s'; 
SET 'table.exec.mini-batch.size'='4096'; 

-- 作业设置4个并发,聚合更快。
SET 'parallelism.default' = '4';


-- 查看Github新增star数Top 5仓库。
SELECT DATE_FORMAT(created_at_ts, 'yyyy-MM-dd') as `date`, repo_name, COUNT(*) as num
FROM gh_event WHERE type = 'WatchEvent' 
GROUP BY DATE_FORMAT(created_at_ts, 'yyyy-MM-dd'), repo_name
ORDER BY num DESC
LIMIT 5;

2. Verifique se o SQL está correto e executado

3. Configure o gráfico

​ a. Selecione Y Bar e edite a barra de título como Top 5

b. Configure o grupo por repo_name, ordene por num, ou seja, compare o número de grupos de acordo com repo_name

c. O experimento pode ser executado o tempo todo, consumindo os dados mais recentes continuamente. No entanto, se o número de CPUs no cluster atual não for suficiente para executar duas tarefas e você quiser executar o próximo experimento, poderá interrompê-lo. Basta clicar na caixa vermelha à esquerda do resultado.

resultado

Primeiro lugar: mudança de rosto do vídeo s0md3v/roop  (recentemente, muitas vezes recorro a ele na estação b)

Segundo lugar: pengzhile/pandora  Pandora implementa as principais operações da versão web do ChatGPT

Terceiro lugar: ClassmateLin/dm-ticket  Damai.com para pegar ingressos (a epidemia está lançada, estima-se que haverá muitos shows na semana passada)

Quarto lugar:  modelo de linguagem de grande escala ShishirPatil/gorilla conectado a APIs massivas

Quinto lugar:   mudança de face iperov/DeepFaceLive

Pode-se ver que o repositório mais popular na semana passada é a mudança de rosto de vídeo ai e o modelo grande, e o campo mais popular é ai

Experimento 2: Estatísticas sobre mudanças na atividade organizacional

Este experimento conta as mudanças de tendência das atividades de código aberto das organizações apache e alibaba desde 24 horas atrás.

operar

1. O código SQL é o seguinte. Entre eles  , startTime deve ser definido o mais próximo possível de 24 horas antes do momento atual . Se o horário for definido muito cedo, o tempo de cálculo inválido anterior será maior, o que não apenas consome recursos, mas também leva muito tempo para carregar os resultados do cálculo. Se você quiser contar alibaba, mude para org_login ='alibaba'

CREATE TEMPORARY TABLE gh_event(
  id STRING,                                        -- 每个事件的唯一ID。
  created_at BIGINT,                                -- 事件时间,单位秒。
  created_at_ts as TO_TIMESTAMP(created_at*1000),   -- 事件时间戳(当前会话时区下的时间戳,如:Asia/Shanghai)。
  type STRING,                                      -- Github事件类型,如:。ForkEvent, WatchEvent, IssuesEvent, CommitCommentEvent等。
  actor_id STRING,                                  -- Github用户ID。
  actor_login STRING,                               -- Github用户名。
  repo_id STRING,                                   -- Github仓库ID。
  repo_name STRING,                                 -- Github仓库名,如:apache/flink, apache/spark, alibaba/fastjson等。
  org STRING,                                       -- Github组织ID。
  org_login STRING                                 -- Github组织名,如: apache,google,alibaba等。
) WITH (
  'connector' = 'sls',                              -- 实时采集的Github事件存放在阿里云SLS中。
  'project' = 'github-events-shanghai',                     -- 存放公开数据的SLS项目。例如'github-events-hangzhou'。
  'endPoint' = 'https://cn-shanghai-intranet.log.aliyuncs.com',                   -- 公开数据仅限阿里云实时计算 Flink 版通过私网地址访问。例如'https://cn-hangzhou-intranet.log.aliyuncs.com'。
  'logStore' = 'realtime-github-events',            -- 存放公开数据的SLS logStore。
  'accessId' =  ' ',         -- 只读账号的AK。
  'accessKey' = ' ',   -- 只读账号的SK。
  'batchGetSize' = '500',                           -- 批量读取数据,每批最多拉取500条。
  'startTime' = '2023-06-07 14:00:00'               -- 开始时间,尽量设置到需要计算的时间附近,否则无效计算的时间较长
);

-- 配置开启mini-batch, 每2s处理一次。
SET 'table.exec.mini-batch.enabled'='true';
SET 'table.exec.mini-batch.allow-latency'='2s';
SET 'table.exec.mini-batch.size'='4096';

-- 作业设置4个并发,聚合更快。
SET 'parallelism.default' = '4';


-- 从一天前开始统计事件总量
SELECT NOW(), max(created_at_ts) as created_ts, COUNT(*) as event_count
FROM gh_event 
WHERE  org_login ='apache' and
created_at_ts >= NOW() - INTERVAL '1' DAY;

2. Clique em Executar e configure o gráfico

​ a. Clique na configuração do gráfico

​ b. Edite o título como "apache" e selecione X/Y Line

c. Configure o eixo X como create_ts e o eixo Y como event_count

resultado

Como uma organização global de código aberto, a atividade do apache é relativamente uniforme em um dia, enquanto o código aberto do Alibaba é basicamente preocupado e contribuído por desenvolvedores domésticos, e o aumento é relativamente estável à noite e aumenta significativamente após as 9 horas.

Experimento 3: Distribuição do tempo de contribuição do armazém estatístico

Este experimento conta a distribuição de contribuição dos armazéns de código aberto flink e spark de uma semana atrás. As contribuições incluem envios de código, comentários de confirmação, comentários de problemas, envio de solicitações de RP, comentários de revisão de solicitações de RP e outros eventos relacionados ao desenvolvedor.

1. Código SQL da tarefa. Entre eles, startTime deve ser definido o mais próximo possível de uma semana antes do momento atual . Se o horário for definido muito cedo, o tempo de cálculo inválido anterior será relativamente longo, o que não apenas consome recursos, mas também leva muito tempo para carregar os resultados do cálculo. Se você quiser contar o Spark, basta alterar repo_name = 'apache/flink''.

CREATE TEMPORARY TABLE gh_event(
    id STRING,                                        -- 每个事件的唯一ID。
    created_at BIGINT,                                -- 事件时间,单位秒。
    created_at_ts as TO_TIMESTAMP(created_at*1000),   -- 事件时间戳(当前会话时区下的时间戳,如:Asia/Shanghai)。
    type STRING,                                      -- Github事件类型,如:。ForkEvent, WatchEvent, IssuesEvent, CommitCommentEvent等。
    actor_id STRING,                                  -- Github用户ID。
    actor_login STRING,                               -- Github用户名。
    repo_id STRING,                                   -- Github仓库ID。
    repo_name STRING,                                 -- Github仓库名,如:apache/flink, apache/spark, alibaba/fastjson等。
    org STRING,                                       -- Github组织ID。
    org_login STRING                                 -- Github组织名,如: apache,google,alibaba等。
) WITH (
  'connector' = 'sls',                              -- 实时采集的Github事件存放在阿里云SLS中。
  'project' = 'github-events-shanghai',                     -- 存放公开数据的SLS项目。例如'github-events-hangzhou'。
  'endPoint' = 'https://cn-shanghai-intranet.log.aliyuncs.com',                   -- 公开数据仅限阿里云实时计算 Flink 版通过私网地址访问。例如'https://cn-hangzhou-intranet.log.aliyuncs.com'。
  'logStore' = 'realtime-github-events',            -- 存放公开数据的SLS logStore。
  'accessId' =  ' ',         -- 只读账号的AK。
  'accessKey' = ' ',   -- 只读账号的SK。
  'batchGetSize' = '500',                           -- 批量读取数据,每批最多拉取500条。
  'startTime' = '2023-06-01 14:00:00'              -- 开始时间,尽量设置到需要计算的时间附近,否则无效计算的时间较长
);

-- 配置开启mini-batch, 每2s处理一次。
SET 'table.exec.mini-batch.enabled'='true';
SET 'table.exec.mini-batch.allow-latency'='2s';
SET 'table.exec.mini-batch.size'='4096';

-- 作业设置4个并发,聚合更快。
SET 'parallelism.default' = '4';


-- 配置开启mini-batch, 每2s处理一次。
SET 'table.exec.mini-batch.enabled'='true'; 
SET 'table.exec.mini-batch.allow-latency'='2s'; 
SET 'table.exec.mini-batch.size'='4096'; 

-- 作业设置4个并发,聚合更快。
SET 'parallelism.default' = '4';

-- 统计从上周起的贡献量
SELECT  DATE_FORMAT(created_at_ts, 'yyyy-MM-dd') as comment_date, HOUR(created_at_ts) AS comment_hour ,COUNT(*) AS comment_count
FROM gh_event
WHERE created_at_ts >= NOW() - INTERVAL '7' DAY 
        AND repo_name = 'apache/flink'
       AND (type ='CommitCommentEvent' OR 
            type='IssueCommentEvent' or 
            type = 'PullRequestReviewCommentEvent'or 
            type = 'PushEvent' or 
            type = 'PullRequestEvent' or 
            type = 'PullRequestReviewEvent')
GROUP BY DATE_FORMAT(created_at_ts, 'yyyy-MM-dd'), HOUR(created_at_ts) ;

2. Clique em Executar e configure o gráfico. Selecione Heatmap, defina Group by comment_date, Spli By comment_hour, Color is Sum(comment_count), ou seja, eixo X são dias, semana Y são horas e a cor é exibida de acordo com a quantidade total.

Quer saber mais sobre como descobrir os projetos mais quentes no GitHub? Venha experimentar!

Clique para acampar agora

Acho que você gosta

Origin blog.csdn.net/weixin_44904816/article/details/131407983
Recomendado
Clasificación