【云计算与大数据技术】流计算讲解及集群日志文件实时分析实战(附源码)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 【云计算与大数据技术】流计算讲解及集群日志文件实时分析实战(附源码)

需要源码请点赞关注收藏后评论区留言私信~~

一、流计算概述

在传统的数据处理流程中总是先收集数据,然后将数据放到 DB中。当人们需要的 时候通过DB对数据做query,得到答案或进行相关的处理。这样看起来虽然非常合理,采用类似于 MapReduce方式的离线处理并不能很好地解决问题,结果却不理想,尤其是对一些实时搜索应用环境中的某些具体问题,这就引出了一种新的数据计算结构--流计算方式

流计算可以很好地对大规模流动数据在不断变化的运动过程中实时地 进行分析,捕捉到可能有用的信息,并把结果发送到下一计算节点

流计算包括早期的IBM System S,当前比较流行的流式计算框架Storm、Kafka

二、流计算与批处理系统对比

流计算侧重于实时计算方面,而批处理系统侧重于离线数据处理方面,一个追求的是低延迟,另外一个追求的是高吞吐量,处理的数据也不同,流计算处理的数据经常不断变化,而离线处理的数据是静态数据,输出形式也不同,总体来讲,两者的区别体现在以下几点

系统的输入包括两类数据,即实时的流式数据和静态的离线数据

系统的输出也包括流式数据和离线数据

业务的计算结果输出方式是通过两个条件决定的

三、Storm流计算系统

Storm 是一个 Twitter开源的分布式、高容错的实时计算系统

Storm 经常用于实时分析、在线机器学习、持续计算 、分布式远程调用和ETL等领域

Storm主要分为 Nimbus 和 Supervisor两种组件

下图是是Storm集群架构

Storm中每个实时计算任务表示称一个topology

四、Samza流计算系统

Apache Samza是一个分布式流处理框架

它使用 Apache Kafka用于消息发送,采 用 Apache Hadoop YARN 来提供容错、处理器隔离、安全性和资源管理,专用于实时数据的处理

Samza由以下3层构成  

数据流层(A streaming layer)  

执行层(An execution layer)  

处理层(A progressing layer)

五、阿里云流计算

Aliyun Stream Compute(阿里云流计算 )是运行在阿里云平台上的流式大数据分析平台,给用户提供在云上进行流式数据实时化分析的工具

阿里云流计算提供类标准的StreamSQL语义协助用户简单、轻松地完成流式计算逻辑的处理

六、集群日志文件的实时分析

目前分布式系统在各大生产 系统中广泛使用,监控这些分布式系统产生的日志,判断集群运行是否正常,采用流计算框架实时分析分布式系统产生的日志

以分析HDFS集群运行状态来简单说明流式计算框架的使用。当 NameNode 出现故障的时候需要及时报警,从而最大程度地减少损失

利用Flink做简单的日志文件单词统计分析,分析一个时间段内 NameNode产 生的单词统计

运行效果如下

可以根据Flink的Web界面查看SocketTextStream任务,找到对应的Flink文本统计计算节点

代码如下

package alibook.flink;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.core.fs.FileSystem.WriteMode;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;
/**
 * This example shows an implementation of WordCount with data from a text
 * socket. To run the example make sure that the service providing the text data
 * is already up and running.
 * <p>
 * To start an example socket text stream on your local machine run netcat from
 * a command line: <code>nc -lk 9999</code>, where the parameter specifies the
 * port number.
 * </p>
 * <p>
 * Usage:
 * <code>SocketTextStreamWordCount &lt;hostname&gt; &lt;port&gt; &lt;result path&gt;</code>
 * </p>
 * <p>
 * This example shows how to:
 * <ul>
 * <li>use StreamExecutionEnvironment.socketTextStream
 * <li>write a simple Flink program,
 * <li>write and use user-defined functions.
 * </ul>
 *
 */
public class SocketTextStream {
  public static void main(String[] args) throws Exception {
    if (!parseParameters(args)) {
      return;
    }
    // set up the execution environment
    final StreamExecutionEnvironment env = StreamExecutionEnvironment
        .getExecutionEnvironment();
    // get input data
    DataStream<String> text = env.socketTextStream(hostName, port, '\n', 0);
    DataStream<Tuple2<String, Integer>> counts =
        // split up the lines in pairs (2-tuples) containing: (word,1)
        text.flatMap(new Tokenizer())
            // group by the tuple field "0" and sum up tuple field "1"
            .keyBy(0)
            .sum(1);
    if (fileOutput) {
      counts.writeAsText(outputPath, WriteMode.NO_OVERWRITE);
    } else {
      counts.print();
    }
    // execute program
    env.execute("WordCount from SocketTextStream Example");
  }
  // *************************************************************************
  // UTIL METHODS
  // *************************************************************************
  private static boolean fileOutput = false;
  private static String hostName;
  private static int port;
  private static String outputPath;
  private static boolean parseParameters(String[] args) {
    // parse input arguments
    if (args.length == 3) {
      fileOutput = true;
      hostName = args[0];
      port = Integer.valueOf(args[1]);
      outputPath = args[2];
    } else if (args.length == 2) {
      hostName = args[0];
      port = Integer.valueOf(args[1]);
    } else {
      System.err.println("Usage: SocketTextStreamWordCount <hostname> <port> [<output path>]");
      return false;
    }
    return true;
  }
  /**
   * Implements the string tokenizer that splits sentences into words as a
   * user-defined FlatMapFunction. The function takes a line (String) and
   * splits it into multiple pairs in the form of "(word,1)" ({@code Tuple2<String,
   * Integer>}).
   */
  public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
    private static final long serialVersionUID = 1L;
    public void flatMap(String value, Collector<Tuple2<String, Integer>> out)
        throws Exception {
      // normalize and split the line
      String[] tokens = value.toLowerCase().split("\\W+");
      // emit the pairs
      for (String token : tokens) {
        if (token.length() > 0) {
          out.collect(new Tuple2<String, Integer>(token, 1));
        }
      }
    }
  }
}

创作不易 觉得有帮助请点赞关注收藏~~~

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
4天前
|
存储 安全 网络安全
云计算与网络安全:技术融合与挑战
【9月更文挑战第6天】随着互联网技术的飞速发展,云计算已成为企业和个人数据存储和处理的首选方案。然而,云服务的安全性问题也日益凸显。本文将深入探讨云计算环境下的网络安全挑战,包括数据泄露、身份验证、访问控制等关键问题,并提供相应的解决策略。通过分析云服务模型、网络攻击手段及防御机制,我们旨在为读者提供一套完整的云计算安全指南。
|
5天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的探讨
【9月更文挑战第5天】云计算作为一种新兴的计算模式,已经在全球范围内得到了广泛的应用。然而,随着云计算的快速发展,网络安全问题也日益凸显。本文将从云服务、网络安全、信息安全等方面对云计算与网络安全进行探讨。
39 15
|
1天前
|
存储 安全 网络安全
云计算与网络安全:技术演进与挑战
【9月更文挑战第9天】在数字时代的浪潮中,云计算作为信息技术的一股强大力量,正不断重塑着企业和个人的工作与生活方式。然而,随着云服务的普及和深入,网络安全问题也日益成为制约其发展的关键因素。本文将探讨云计算服务的基本概念、网络安全的重要性以及信息安全技术的发展趋势,旨在为读者提供一个关于云计算与网络安全交织演进的宏观视角,并引发对如何在享受云服务便利的同时保障信息安全的深层次思考。
|
6天前
|
存储 安全 网络安全
云计算与网络安全:技术融合与挑战
随着云计算的迅速发展,网络安全问题日益凸显。本文探讨了云计算与网络安全的关系,分析了云服务在提供便利的同时可能带来的安全风险,并提出了相应的防护措施。文章旨在帮助读者理解云计算环境下的网络安全挑战,并提供实用的信息安全策略。
|
7天前
|
存储 安全 网络安全
云计算与网络安全:技术融合与风险防范
【9月更文挑战第3天】本文深入探讨了云计算与网络安全之间的紧密联系,揭示了云服务在提升企业效率的同时可能带来的安全隐患。文章首先介绍了云计算的基础知识,包括其定义、服务模型和部署类型,随后详细分析了网络安全的重要性以及云计算环境下的安全挑战。通过阐述网络攻击的常见方式,本文进一步讨论了如何在云环境中实施有效的安全策略,包括数据加密、访问控制等措施。最后,文章总结了云计算与网络安全的相互影响,并提出了未来研究方向,旨在为读者提供对这一复杂而重要领域的深刻理解。
|
9天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务中的信息安全技术
【9月更文挑战第2天】在数字化时代,云计算成为推动企业创新和效率的关键力量。然而,随之而来的网络安全挑战也日益严峻。本文将深入探讨云计算环境下的网络安全问题,分析云服务中的安全风险,并提供有效的信息安全策略。我们将通过实际案例,展示如何在享受云计算带来的便利的同时,保护数据不受威胁。无论你是IT专业人士还是对云计算感兴趣的读者,这篇文章都将为你提供宝贵的见解和建议。
|
11天前
|
存储 安全 网络安全
云计算与网络安全:技术挑战与解决方案
【8月更文挑战第31天】在数字化时代,云计算已成为企业和个人数据存储、处理和分析的首选平台。然而,随着其广泛应用,网络安全问题也日益凸显。本文将探讨云计算中的网络安全挑战,包括数据泄露、服务中断等风险,并介绍如何通过加密技术、身份验证和访问控制等手段来增强云安全。文章还将分享一些实用的代码示例,帮助读者更好地理解和应用这些安全措施。
|
11天前
|
存储 安全 网络安全
云计算与网络安全:技术融合与挑战
【8月更文挑战第31天】在数字化浪潮的推动下,云计算已成为企业和个人存储、处理数据的优选方案。然而,随之而来的网络安全问题也日益凸显。本文将探讨云计算服务中的网络安全挑战,分析信息安全的关键要素,并通过代码示例揭示云环境中的安全最佳实践。我们将从云服务的基础知识出发,逐步深入到网络安全的核心议题,最终聚焦于如何通过技术和策略维护信息安全。文章旨在为读者提供一套清晰的云计算安全指南,帮助构建更为坚固的防护墙。
|
8天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的探讨
【9月更文挑战第3天】本文将探讨云计算与网络安全的关系,包括云服务、网络安全、信息安全等技术领域。我们将分析云计算在网络安全方面的挑战和机遇,并介绍一些常见的网络安全技术和实践。最后,我们将提供一些代码示例来说明如何保护云计算环境中的数据安全。
|
9天前
|
存储 安全 网络安全
云计算与网络安全:技术挑战与应对策略
【9月更文挑战第2天】本文将深入探讨云计算与网络安全的关系,分析云服务、网络安全、信息安全等技术领域的技术挑战,并提出相应的应对策略。文章将从云服务的基本原理出发,介绍其安全性问题,然后详细讨论网络安全和信息安全的关键技术和挑战,最后给出一些实用的安全措施和建议。