gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

分类归档Spark

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  大数据开发
  • 分类归档: "Spark"
  • ( 页面4 )
Hive, Spark 1月 19,2023

Spark SQL或Hive开发调试小技巧

  • 在本地开发机装本地模拟环境,或者能远程调试,可以参考Spark如何在生产环境调试
  • 输出dataframe日志,最好有一个开关来控制,正式上线时,把开关关了来提升速度
if (isDebug) {
dataframeDF.show(10)
}
  • dataframe的输出,有时看得不是很清楚,可以生成临时表来记录中间过程,方便对中间过程进行查看 insertHive(resultDF, “dataframe_temp”)
  • 如果是运行的数据比较大,调试起来要等,可以对dataframe进行限定条数或筛选 dataframe.limit(1000) dataframe.filter(” id = ‘ewgwgs’ “)
  • 对复杂的sql,一步到位写起来爽,出问题了不知是哪一步出问题,可以分解出几个简单sql,每一步都有输出,对照结果方便找出问题。
  • 对复杂计算的,写的代码觉得似是而非,可以先整理一个样例,手动写计算过程,然后用代码对照这些过程来一步步实现。

作者 east
Spark 1月 14,2023

spark sql如何提升性能

在使用 Spark SQL 时,有几种常见的方法可以提升性能:

  • 使用适当的数据结构:Spark SQL 支持多种数据结构,例如 Parquet、Avro、ORC 等。使用适当的数据结构可以提高查询速度和减少存储空间。
  • 分区:将数据按照一定规则分区,可以提升性能。
  • 缓存数据:使用 Spark SQL 的缓存功能可以将数据集的副本存储在内存中,从而提升性能。
  • 使用常量:对于经常使用的常量值,使用常量代替查询中的变量可以提升性能。
  • 使用索引:对大型数据集使用索引可以提升性能。
  • 优化查询计划:使用 EXPLAIN 命令可以查看查询计划,并使用优化器选项对查询进行优化。
  • 并行计算:调整 Spark 的并行度,可以提升性能。
  • 适当使用 UDF:使用 UDF 可以扩展 Spark SQL 的功能,但是过多使用 UDF 会导致性能下降。
作者 east
Spark 10月 9,2022

RDD或UDF获取不到driver端传递的变量

RDD要获取Driver端的Map、List,或者Spark UDF 需要加载外部资源(如配置参数、白名单)初始化它们的实例。 Spark UDF的输入参数必须是数据列column,在UDF中进行如Redis查询、白/黑名单过滤前,若它们都能被序列化,从Driver端初始化+broadcast的方式可以完成构建。直接传递变量时,在spark用local方式时正常,用yarn-cluster时出现问题。

例如像下面这样:

class MyUDF implements UDF1<Long, String> {
        private Map<Long, String> broadCastMap;
        public MyUDF(Broadcast<Map<Long, String>> broadCastMap) {
           this.broadCastMap = broadCastMap.value();
        }
        public String call(Long id) {
            return id +" -> " + broadCastMap.getOrDefault(id, "No mapping");
        }
    }
 Map<Long, String> map = new HashMap<>();
    map.put(1L, "b");
    map.put(2L, "c");
    Broadcast<Map&<Long, String>> broadCastMap = new JavaSparkContext(spark.sparkContext()).broadcast(map);

    UserDefinedFunction myUdf = udf(new MyUDF(broadCastMap), DataTypes.StringType);

    spark.sqlContext().udf().register("myUdf", myUdf);

如果传递的是类,必须 实现了serializable接口

  1. 反序列化时serializable版本号不一致时会导致不能反序列化。
  2. 子类中实现了serializable接口,父类中没有实现,父类中的变量不能被序列化,序列化后父类中的变量会得到null。 注意:父类实现serializable接口,子类没有实现serializable接口时,子类可以正常序列化
  3. 被关键字transient修饰的变量不能被序列化。
  4. 静态变量不能被序列化,属于类,不属于方法和对象,所以不能被序列化。

例如像下面这样:

import java.io.Serializable;
import java.util.*;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class AtKwdBo implements Serializable {
    private Set<String> keywords;
    private Set<String> stopwords;
    /**
     * just for test
     * @return
     */
    public static List<AtKwdBo> generateKeyWord() {
        // Keyword
        List<AtKwdBo> atKwdBos = new ArrayList<>();
        AtKwdBo atKwdBo = new AtKwdBo();
        Set<String> keywords = new HashSet<>();
        keywords.add("小米手机");
        keywords.add("雷军");
        keywords.add("小米10周年");
        atKwdBo.setKeywords(keywords);
        Set<String> stopwords = new HashSet<>();
        stopwords.add("华为手机");
        atKwdBo.setStopwords(stopwords);
        atKwdBos.add(atKwdBo);

        return atKwdBos;
    }
}
作者 east
Spark 10月 9,2022

xml中文编码不同导致服务器跑的结果和本地不同

最近用spark sql做数仓开发时,遇到一个诡异的问题,在本地电脑运行时正常,用maven打包在服务器跑时就出问题。

后来检查代码时,发现sql所在的xml是用GBK编码,xml中有传递中文参数。而maven打包是用UTF-8打包,这样会造成中文乱码。

在开发时有个经验之谈:能少用中文就少用中文,用中文要注意各端和每个端各个地方统一中文编码,最好都用UTF-8

作者 east
Spark 7月 12,2022

Idea java和scala混合打包遇到的各种坑

1、采用默认java的maven配置,运行时发现scala的包没打进去。

发现需要配置scala的编译器,网上有2种方式:

方式1:

 <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.2</version>
                <configuration><</configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>

            </plugin> 

方式2:

<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<recompileMode>incremental</recompileMode>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>

2、编译时scala外部依赖包没找到

需要添加

<configuration>                
                    <args>
                        <!-- 编译时使用 libs 目录下的 jar 包,通过 mvn scala:help 查看说明 -->
                        <arg>-extdirs</arg>
                        <arg>D:/code/spark/jars</arg>
                    </args>
                </configuration>

完整配置如下:

 <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.2</version>
                <configuration>
                    <recompileMode>incremental</recompileMode>
                    <args>
                        <!-- 编译时使用 libs 目录下的 jar 包,通过 mvn scala:help 查看说明 -->
                        <arg>-extdirs</arg>
                        <arg>D:/code/spark/jars</arg>
                    </args>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

3、maven打包时提示内存不足

在如图位置,VM Options增加内存就可以

作者 east
Hive, Spark 5月 27,2022

Idea用Spark SQL远程访问CDH6.3.2的hive

win10的开发环境,想在idea用Spark SQL来访问CDH6.3.2服务器的hive。刚开始用pom配置原生的spark等jar包。发现访问有问题,各种折腾还是没解决。

看到网上说要用cdh的包。就把相关的包替换成cdh的包。没想到用cdh的包各种缺少依赖包,折腾几个小时还没解决。

后来想到一个简单暴力的办法,把cdh集群的的jar包都下载下来,然后idea添加这个文件夹为依赖。

果然解决缺少依赖包的问题,不用1个个去排查添加了。不过新问题随之而来。又提示ANTLR Tool version 4.5 used for code generation does not match the current runtime version 4.7ANTLR

按网上教程处理未果,想到会不会是CDH的jar包版本重复导致的,一看果然是这样,先把antlr4-runtime-4.5.1-1.jar和antlr4-runtime-4.5.jar排除掉。重新运行果然是可以了。

还需要做下面的操作:

在本地安装spark,并把远程服务器hive.xml、core-site.xml、mapred-site.xml和yarn-site.xml拷贝到spark的conf

如果远程服务器是有hostname的,需要修改hosts

作者 east
Flink, Spark 4月 19,2022

大数据实时流式处理:Apache Flink vs Apache

对更快数据处理的需求一直在增加,实时流数据处理是目前的解决方案。虽然 Apache Spark 仍在许多组织中用于大数据处理,但 Apache Flink 已经迅速成为替代方案。事实上,许多人认为它有可能取代 Apache Spark,因为它能够实时处理流数据。当然,Flink 能否取代 Spark 尚无定论,因为 Flink 还没有经过广泛的测试。但实时处理和低数据延迟是其两个决定性特征。同时,这需要考虑到 Apache Spark 可能不会失宠,因为它的批处理能力仍然很重要。

流式数据处理案例

对于基于批处理的所有优点,实时流数据处理似乎是一个强有力的案例。流式数据处理使快速设置和加载数据仓库成为可能。具有低数据延迟的流处理器可以快速提供对数据的更多见解。所以,你有更多的时间来了解发生了什么。除了更快的处理之外,还有另一个显着的好处:您有更多的时间来设计对事件的适当响应。例如,在异常检测的情况下,更低的延迟和更快的检测使您能够确定最佳响应,这是防止安全网站受到欺诈攻击或工业设备损坏等情况的关键。因此,您可以防止重大损失。

什么是 Apache Flink?

Apache Flink 是一种大数据处理工具,以在大规模分布式系统上以低数据延迟和高容错性快速处理大数据而著称。它的定义特征是它能够实时处理流数据。

Apache Flink 最初是一个学术开源项目,当时它被称为 Stratosphere。后来,它成为了 Apache 软件基金会孵化器的一部分。为避免与其他项目名称冲突,将名称更改为 Flink。 Flink 这个名字很合适,因为它意味着敏捷。即使选择的标志,松鼠也是合适的,因为松鼠代表了敏捷、敏捷和速度的美德。

自从加入 Apache 软件基金会后,它作为大数据处理工具迅速崛起,并在 8 个月内开始受到更广泛受众的关注。人们对 Flink 的兴趣日益浓厚,这反映在 2015 年的多次会议的参会人数上。2015 年 5 月在伦敦举行的 Strata 会议和 2015 年 6 月在圣何塞举行的 Hadoop 峰会上,有很多人参加了关于 Flink 的会议。 2015 年 8 月,超过 60 人参加了在圣何塞 MapR 总部举办的湾区 Apache Flink 聚会。

下图给出了 Flink 的 Lambda 架构。

Spark 和 Flink 的比较

虽然 Spark 和 Flink 之间有一些相似之处,例如它们的 API 和组件,但在数据处理方面,相似之处并不重要。 下面给出了 Flink 和 Spark 之间的比较。

数据处理

Spark 以批处理模式处理数据,而 Flink 实时处理流数据。 Spark 处理数据块,称为 RDD,而 Flink 可以实时处理一行一行的数据。 因此,虽然 Spark 始终存在最小数据延迟,但 Flink 并非如此。

迭代

Spark 支持批量数据迭代,但 Flink 可以使用其流式架构原生迭代其数据。 下图显示了迭代处理是如何发生的。

内存管理

Flink 可以自动适应不同的数据集,但 Spark 需要手动优化和调整其作业以适应单个数据集。 Spark 也进行手动分区和缓存。因此,预计处理会有所延迟。

数据流

Flink 能够在需要时为其数据处理提供中间结果。 Spark 遵循过程式编程系统,而 Flink 遵循分布式数据流方法。因此,当需要中间结果时,广播变量用于将预先计算的结果分发到所有工作节点。

数据可视化

Flink 提供了一个 Web 界面来提交和执行所有作业。 Spark 和 Flink 都与 Apache Zeppelin 集成,并提供数据摄取、数据分析、发现、协作和可视化。 Apache Zeppelin 还提供了多语言后端,允许您提交和执行 Flink 程序。

处理时间

以下段落提供了 Flink 和 Spark 在不同作业中所用时间的比较。

为了公平比较,Flink 和 Spark 都以机器规格和节点配置的形式获得了相同的资源。

Flink 处理速度更快,因为它的流水线执行。 处理数据,Spark 用了 2171 秒,而 Flink 用了 1490 秒。

当执行不同数据大小的 TeraSort 时,结果如下:

对于 10 GB 的数据,Flink 需要 157 秒,而 Spark 需要 387 秒。
对于 160 GB 的数据,Flink 需要 3127 秒,而 Spark 需要 4927 秒。
基于批处理或流式数据——哪个过程更好?

这两种工艺各有优势,适用于不同的情况。 尽管许多人声称基于批处理的工具正在失宠,但它不会很快发生。 要了解它们的相对优势,请参见以下比较:

在个别情况下,Flink 和 Spark批 处理都是有用的。以每天计算滚动月销售额的用例为例。在此活动中,需要计算每日销售总额,然后进行累计。在这样的用例中,可能不需要对数据进行流式处理。数据的批处理可以根据日期处理各个批次的销售数据,然后将它们添加。在这种情况下,即使存在一些数据延迟,也可以在稍后将该潜在数据添加到以后的批次中时弥补这些延迟。

有类似的用例需要流处理。以计算每个访问者在网站上花费的每月滚动时间的用例为例。在网站的情况下,访问次数可以每小时、每分钟甚至每天更新一次。但是这种情况下的问题是定义会话。定义会话的开始和结束可能很困难。此外,难以计算或识别不活动的时间段。因此,在这种情况下,定义会话甚至不活动时间段都没有合理的界限。在这种情况下,需要实时处理流数据。

概括

虽然 Spark 在批处理数据处理方面有很多优势,而且它仍然有很多使用场景,但 Flink 似乎正在迅速获得商业方面应用的青睐。 Flink 也可以进行批处理这一事实似乎对其有利。当然,这需要考虑到 Flink 的批处理能力可能与 Spark 不在一个级别。

作者 east
Flink, Spark 4月 13,2022

Flink和Spark的Transformation不同地方对比

1、合并输入流:

在spark有Union
返回一个包含源DStream与其他 DStream的元素合并后的新DSTREAM。 具体例子可以参考Spark Streaming多个输入流

在Flink中更高级,除了有union合并多个输入流(
union()所连接的两个或多个数据流的数据类型必须一致 ),还有connect()。

①connect()只能连接两个数据流,union()可以连接多个数据流。

②connect()所连接的两个数据流的数据类型可以不一致,union()所连接的两个或多个数据流的数据类型必须一致。

③两个DataStream经过connect()之后被转化为ConnectedStreams,ConnectedStreams会对两个流的数据应用不同的处理方法,且两个流之间可以共享状态。

2、求最大最小的操作

Flink有 max()、 maxBy() 对该字段求最大值 。
min()、minBy对某字段求最小值

作者 east
Spark 4月 3,2022

生产环境选型考虑:Spark和Tez有什么不同

让我们开始这场精彩的讨论。首先,退一步;我们已经指出 Apache Spark 和 Hadoop MapReduce 是两种不同的大数据利器。前者是高性能的内存数据处理框架,后者是成熟的PB级批处理平台。我们也知道 Apache Hive 和 HBase 是两个功能相似的非常不同的工具。 Hive 是运行 MapReduce 作业的类似 SQL 的引擎,而 HBase 是 Hadoop 上的 NoSQL 键/值数据库。

在纸面上,它们有很多共同点。两者都具有内存功能,都可以在 Hadoop YARN 之上运行,并且都支持来自任何数据源的所有数据类型。那么两者有什么区别呢?

Tez 非常适合 YARN 架构。 Spark 可能会遇到资源管理问题。

Spark 更适合主流开发人员,而 Tez 是专用工具的框架。

Spark 不能与 YARN 应用程序同时运行(目前)。 Tez 是专门为在 YARN 之上执行而构建的。

Tez 的容器可以在完成后关闭以节省资源。即使不处理数据,Spark 的容器也会占用资源。

这些只是高层次上的一些差异。在这里,我们将探索这些项目中的每一个。

什么是 Apache Spark?

Apache Spark 是一个用于处理大数据的开源分析引擎和集群计算框架。它是非营利性 Apache 软件基金会的创意,该基金会是一个致力于各种开源软件项目的去中心化组织。

它于 2014 年首次发布,基于 Hadoop MapReduce 分布式计算框架构建。它保留了 MapReduce 的许多优点——例如可扩展性和容错性——同时还提高了速度和易用性。

除了核心数据处理引擎,它还包括 SQL、机器学习和流处理库。该框架与 Java、Scala、Python 和 R 编程语言兼容,赢得了开发人员的广泛关注。它还支持第三方技术,如 Amazon S3、Hadoop 的 HDFS、MapR XD 和 NoSQL 数据库,如 Cassandra 和 MongoDB。

它的吸引力在于它能够将不同的流程、技术和技术整合到一个单一的大数据管道中,从而提高生产力和效率。由于其灵活性,它已成为大数据处理领域非常流行和有效的“瑞士军刀”。

什么是 Apache Tez?

Apache Tez 是一个基于 MapReduce 技术的大数据处理开源框架。两者都提供了一个执行引擎,可以使用有向无环图 (DAG) 来处理大量数据。

它通过将计算视为 DAG 来概括 MapReduce 范式。 MapReduce 任务组合成一个作业,该作业被视为 DAG 中的一个节点,执行并发和序列化。

同时,DAG 的边缘表示作业之间的数据移动。 Tez 与数据类型无关,因此它只关心数据的移动(而不是它采用的格式)。

通过改进 MapReduce 的一些限制,Tez 试图提高数据处理作业的性能。这种增加的效率使程序员能够做出他们认为最适合他们的项目的设计和开发选择。

Apache Spark 将自己标榜为“用于大规模数据处理的统一分析引擎”。同时,Apache Tez 称自己为“一个应用程序框架,它允许使用复杂的有向无环图来处理数据的任务”。

因为 Spark 也使用有向无环图,这两个工具听起来是不是很相似?可能是。但也有一些重要的区别需要考虑。以下是两者之间的根本区别:

差异#1:Hive和Pig

差异 #2:Hadoop YARN

差异#3:性能测试

我们将在下面的部分中详细介绍这些差异中的每一个。

他们支持Pig和Hive吗?

Hive 和 Pig 是两个用于大数据的开源 Apache 软件应用程序。 Hive 是一个数据仓库,而 Pig 是一个用于创建在 Hadoop 上运行的数据处理作业的平台。虽然两者都声称支持 Pig 和 Hive,但现实并不那么清楚。我们尝试使用 Spork 项目在 Spark 上运行 Pig,但遇到了一些问题;至少,在 Spark 上使用 Pig 充其量仍是不确定的。

使用YARN

YARN 是 Hadoop 的资源管理器和作业调度器。理论上,Spark 既可以作为独立应用程序执行,也可以在 YARN 之上执行。然而,Tez 是专门为在 YARN 之上执行而构建的。不过,Spark 不能与其他 YARN 应用程序同时运行(至少现在还不能)。

Tez 项目的开发人员之一 Gopal V 写了一篇关于他为什么喜欢 Tez 的详细文章。他的结论是:

“在我使用过的框架之间,这是 Tez 真正的区别特性——Tez 不需要容器保持运行来做任何事情,只需应用程序管理器在不同查询之间的空闲期间运行。您可以保留容器,但这是一种优化,而不是会话空闲期间的要求。”

他所说的“框架”也指 Spark——它的容器需要保持运行并占用资源,即使它们不处理任何数据。但是,Tez 容器可以在完成后立即关闭并释放资源。

大多数情况下,您无论如何都会使用基于 Hadoop 的应用程序,例如 Hive、HBase 甚至经典的 MapReduce。因此,您可以在任何 Hadoop 集群上安装 Spark,但您可能会遇到资源管理问题。另一方面,Tez 可以非常适合您的 YARN 架构,包括资源管理。

Apache Spark 的亮点:图形处理

GraphX 是扩展 Spark RDD 的图计算引擎。术语“图”是指图论中的图,而不是用于商业计算的图。图论中使用的图捕获数据之间的交互和依赖关系。

GraphX 最初是加州大学伯克利分校的一个研究项目。该项目后来被捐赠给了 Apache 软件基金会和 Spark 项目。

GraphX 不同于其他图计算引擎,因为它将图分析和 ETL 统一在一个平台上。 GraphX 还可以分析非图形形式的数据。其内存计算能力使 GraphX 比其他图形处理引擎更快。

图处理的常用场景

社交网络分析 – 用于识别影响者以进行目标营销

欺诈检测 – 银行、信用卡公司和在线商店使用图形分析来识别异常趋势。

供应链优化 – 公司可以使用图表分析来确定其供应链的最佳路线

贷款决策 – 抵押贷款公司和银行使用图表分析来评估申请人的数据以做出贷款决策。

Google 如何使用图形处理

Google 使用一种称为 PageRank 算法的图形分析算法。 PageRank 算法根据重要性对图中的顶点进行排名,其中重要性是指向该顶点的边数。该算法是由 Google 的创始人开发的,因此流行的搜索引擎是 PageRank 的一个典型例子。谷歌根据页面的重要性对页面进行排名,重要性是指向页面的超链接数量。

那么哪个更快?

也许最大的问题是——哪个更快?根据各种基准,这两个选项都显着提高了 MapReduce 性能;但是,获胜者可能取决于谁在进行测量。就独立第三方评估而言,陪审团仍未出局。

Spark 声称运行速度比 MapReduce 快 100 倍。在加州大学伯克利分校的 Amplab 进行的基准测试表明,它的运行速度比它的同类产品快得多(测试将 Spark 称为 Shark,它是 Spark SQL 的前身)。

然而,由于伯克利发明了 Spark,这些测试可能并非完全没有偏见。此外,这些基准测试是几年前使用运行在 MapReduce 上的 Hive 0.12 进行的。从版本 0.13 开始,Hive 使用 Tez 作为其执行引擎,从而显着提高了性能。

与此同时,Hortonworks 对两者之间的问题表现进行了基准测试。他们发现在 Tez 上运行的 Hive 0.13 的运行速度比 Hive 0.12 快 100 倍(尽管相当多的测试查询神秘地消失了)。快了 100 倍……嗯,听起来很熟悉?

因此,它们的性能都比 Hadoop MapReduce 高 100 倍。但哪个最快?

没有人可以说——或者更确切地说,他们不会承认。如果你问为 IBM 工作的人,他们会告诉你答案都不是,而且 IBM Big SQL 比两者都快。我们需要第三方来运行独立的性能测试并一劳永逸地确定分数。

小结:

这个问题最终可能归结为政治和受欢迎程度。这是大数据巨头的冲突,Cloudera 支持 Spark,Hortonworks 支持 Tez。 Spark 更为广泛,因为它可以在各种发行版中使用,而 Tez 仅在 Hortonworks 的发行版中可用。

最终,用户群可能决定框架的命运。目前,至少根据谷歌趋势,Spark 正在赢得这场比赛。

也许在炒作消退之后,在人们获得了更多与两者合作的经验之后,我们最终将能够判断谁将成为 MapReduce 王冠的继承人。

作者 east
Spark 3月 24,2022

生产环境选型考虑:5款大数据流处理平台

实时分析可以让您及时了解当前正在发生的事情,例如目前有多少人正在阅读您的新博客文章,以及是否有人喜欢您最新的 Facebook 状态。对于大多数平台分析来说,实时是一个不错的功能,它不会提供任何额外的功能。然而,有时实时处理是必须的。

假设您经营一家大型广告公司。实时分析可以让您随时了解最新的在线广告活动(您的客户花费大量资金购买)是否真的有效,如果没有,您可以在预算进一步花费之前立即进行更改。另一个用例是为您自己的应用程序提供实时分析——它看起来不错,您的用户可能需要它。

实时分析可以让您及时了解当前正在发生的事情,例如目前有多少人正在阅读您的新博客文章,以及是否有人喜欢您最新的 Facebook 状态。对于大多数用例来说,实时是一个不错的功能,它不会提供任何重要的见解。然而,有时实时是必须的。

假设您经营一家大型广告公司。实时分析可以让您随时了解您的最新在线广告活动(您的客户支付了大量资金)是否真的有效。如果不是,您可以在预算进一步花费之前立即进行更改。另一个用例是为您自己的应用程序提供实时分析。毕竟,这样做看起来不错,您的用户甚至可能需要它。

那里有很多实时平台。他们中的很多人都是新人,他们之间的区别并不是每个人都清楚。我们至少可以提供所有选项供您选择,因此这里有五个可用于大数据的实时流媒体平台。

1. Apache Flink

Apache Flink 是一个开源流媒体平台,在复杂流处理方面速度极快。事实上,它能够在几毫秒内处理实时流,因为它可以被编程为仅在实时通过大数据行时处理新的、更改的数据。通过这种方式,Flink 可以轻松实现大规模的批处理和流处理,以提供实时洞察,因此这个平台以提供低延迟和高性能着称也就不足为奇了

Flink 著名的另一个特性是容错,这意味着系统故障不会影响整个集群。它还设计为在完成计算的同时在任何集群环境中运行,使其成为一种可靠、快速的解决方案,恰好可以根据需要轻松扩展。精确一次语义的添加和预定义运算符的存在有助于在该平台上进行实时处理。

请注意,Flink 可以将事件流处理为有界或无界数据集。使用无界流,没有定义的结束并且可以始终如一地处理。另一方面,有界的事件流将作为批处理进行处理,并具有定义的开始和结束。这提供了一定的灵活性,因为程序可以用多种语言编写,例如 Python、Scala、SQL 和 Java。最后,Flink 以其易用性和易于与其他开源大数据处理工具(如 Kafka 和 Hadoop)集成而闻名。

2.Spark

另一个以速度和易用性着称的开源数据处理框架是 Spark。该平台在集群的 RAM 上运行在内存中,并且不依赖于 Hadoop 的 MapReduce 两阶段范式,这在大数据处理方面增加了其闪电般的快速性能。

它不仅可以轻松完成大型数据集的处理任务,还可以将它们分布在多台计算机上。此外,它还可以创建数据管道、处理数据流和图表等等。这就是为什么它是领先的实时流媒体平台之一,从批处理和机器学习到大规模 SQL 和流式大数据。事实上,英特尔、雅虎、Groupon、趋势科技和百度等公司已经在依赖 Apache Stream。

Spark 可以在独立集群模式或 Hadoop YARN 之上运行,它可以直接从 HDFS 读取数据。它还可以在 EC2、Mesos、Kubernetes、云等上运行。此外,Spark 用户可以使用 Python、SQL、R、Scala 或 Java 轻松编写应用程序,使其用途广泛且易于使用。这些功能是 Spark 成为当今顶级实时流媒体平台之一的原因。

3. Storm

Storm 是一个免费的分布式实时计算系统,它致力于实现 Hadoop 为批处理所做的工作。换句话说,它是一种用于处理无限大数据流的简单解决方案。使用 Storm 的一些大品牌包括 Spotify、Yelp 和 WebMD。

Storm 的一大好处是它被设计用于任何编程语言,为用户提供了很大的灵活性。此外,还有几个用例,包括实时分析、机器学习、ETL、连续计算等。与当今许多最好的实时流媒体平台一样,它速度很快,可确保在几毫秒内处理大数据。

关于 Storm 的其他一些需要了解的事实是,它具有容错性、可扩展性,并且易于与您可能已经在使用的技术集成。特别是,它运行在 Hadoop YARN 之上,可以与 Flume 一起使用,将数据存储在 HDFS 上。因此,在使用 Storm 时,无论您喜欢哪种编程语言,您都可以在一个易于设置和使用的平台上快速处理您的数据。

4. Apache Samza

Samza 是一个开源分布式流处理框架,允许用户构建可以实时处理来自多个来源的大数据的应用程序。它基于 Apache Kafka 和 YARN,但也可以作为独立库运行。 LinkedIn 最初开发了 Samza,但从那时起,其他大品牌也开始使用它,例如 eBay、Slack、Redfin、Optimizely 和 TripAdvisor。

Samza 提供了一个简单的基于回调的 API,类似于 MapReduce,它包括快照管理。它还以持久和可扩展的方式提供容错,以及有状态的处理和隔离。它与其他批处理系统(例如 Spark 或 Hadoop)真正区别开来的一个特性是它提供了连续的计算和输出,使其响应时间非常快。

总体而言,Samza 以为超快速数据分析提供非常高的吞吐量和低延迟而闻名。这使其成为为处理大数据而构建的众多平台中的流行选择。

5.Amazon Kinesis

Kinesis 是 Amazon 用于在云上实时处理流数据的服务。这种分析解决方案能够避免像 Hadoop 这样的工具所存在的批处理问题。正因为如此,Kinesis 在大数据处理方面能够更好地提供实时精度,因为它每小时可以处理多达数百 TB 的数据。

该服务的功能使您可以开发需要实时数据的应用程序。毕竟,借助 Kinesis,您可以使用此服务立即摄取、缓冲和处理您的数据,无论是视频、音频、网站点击流还是其他媒体。您不必等待首先收集所有数据,因为它可以在到达时进行处理。这使您可以在几分钟内获得人工智能、机器学习等的分析。 Kinesis 也是可扩展的,因为它可以以低延迟处理来自众多来源的大量流数据。

此外,Kinesis 通过连接器与其他 Amazon 服务集成,包括 Redshift、S3、DynamoDB,以形成完整的大数据架构。该工具还包括 Kinesis Client Library (KCL),它允许您构建应用程序并将流数据用于仪表板、警报甚至动态定价。

作者 east
Hadoop, Spark 3月 23,2022

企业生产环境考虑:Spark 全方位对比 Hadoop MapReduce

Apache Spark 与 Hadoop MapReduce 的五个主要区别:
1、Apache Spark 可能比 Hadoop MapReduce 快 100 倍。
2、Apache Spark 使用 内存,并且不依赖于 Hadoop 的两阶段范式。
3、Apache Spark 适用于可以全部放入服务器 内存 的较小数据集。
4、Hadoop 处理海量数据集更具成本效益。
5、Apache Spark 现在比 Hadoop MapReduce 更受欢迎。
多年来,Hadoop 一直是大数据无可争议的首选——直到 Spark 出现。自 2014 年首次发布以来,Apache Spark 一直在点燃大数据世界。凭借 Spark 便捷的 API 和承诺的速度比 Hadoop MapReduce 快 100 倍,一些分析人士认为,Spark 标志着大数据新时代的到来。

Spark 是一个开源数据处理框架,如何能够如此快速地处理所有这些信息?秘诀在于 Spark 在集群上运行在内存中,它不依赖于 Hadoop 的 MapReduce 两阶段范式。这使得重复访问相同数据的速度更快。 Spark 可以作为独立应用程序运行,也可以在 Hadoop YARN 之上运行,它可以直接从 HDFS 读取数据。雅虎、英特尔、百度、Yelp 和 Zillow 等数十家主要科技公司已经将 Spark 作为其技术堆栈的一部分。

虽然 Spark 似乎注定要取代 Hadoop MapReduce,但您现在还不应该指望 MapReduce。在这篇文章中,我们将比较这两个平台,看看 Spark 是否真的非常有优势。

什么是 Apache Spark?
Apache Spark 是“用于大规模数据处理的统一分析引擎”。 Spark 由非营利性的 Apache Software Foundation 维护,该基金会已经发布了数百个开源软件项目。自项目启动以来,已有 1200 多名开发人员为 Spark 做出了贡献。

Spark 最初是在加州大学伯克利分校的 AMPLab 开发的,于 2010 年首次作为开源项目发布。Spark 使用 Hadoop MapReduce 分布式计算框架作为其基础。 Spark 旨在改进 MapReduce 项目的几个方面,例如性能和易用性,同时保留 MapReduce 的许多优点。

Spark 包括一个核心数据处理引擎,以及用于 SQL、机器学习和流处理的库。凭借适用于 Java、Scala、Python 和 R 的 API,Spark 在开发人员中享有广泛的吸引力——为其赢得了大数据处理领域“瑞士军刀”的美誉。

什么是 Hadoop MapReduce?
Hadoop MapReduce 将自己描述为“一个用于轻松编写应用程序的软件框架,该应用程序以可靠、容错的方式在大型商用硬件集群(数千个节点)上并行处理大量数据(多 TB 数据集)。”

MapReduce 范式由两个顺序任务组成:Map 和 Reduce(因此得名)。 Map 过滤和排序数据,同时将其转换为键值对。然后,Reduce 接受此输入并通过对数据集执行某种汇总操作来减小其大小。

MapReduce 可以通过分解大型数据集并并行处理它们来极大地加速大数据任务。 MapReduce 范式由 Google 员工 Jeff Dean 和 Sanjay Ghemawat 于 2004 年首次提出;后来它被整合到 Apache 的 Hadoop 框架中以进行分布式处理。

Spark 和 MapReduce 的区别
Apache Spark 和 Hadoop MapReduce 之间的主要区别是:

>性能
>易于使用
>数据处理
>安全
然而,Spark 和 MapReduce 之间也有一些相似之处——这并不奇怪,因为 Spark 使用 MapReduce 作为其基础。 Spark 和 MapReduce 的相似点包括:

>成本
>兼容性
>容错
下面,我们将在每个部分详细介绍 Spark 和 MapReduce 之间的差异(以及相似之处)。

Spark VS MapReduce:性能
Apache Spark 在随机存取存储器 (RAM) 中处理数据,而 Hadoop MapReduce 在执行映射或归约操作后将数据持久化回磁盘。那么理论上,Spark 的性能应该优于 Hadoop MapReduce。尽管如此,Spark 需要大量内存。与标准数据库非常相似,Spark 将进程加载到内存中并保留在那里,直到进一步通知以进行缓存。如果您在 Hadoop YARN 上运行 Spark 和其他需要资源的服务,或者如果数据太大而无法完全放入内存,那么 Spark 可能会遭受严重的性能下降。

MapReduce 会在作业完成后立即终止其进程,因此它可以轻松地与性能差异很小的其他服务一起运行。

对于需要多次传递相同数据的迭代计算,Spark 具有优势。但是,当涉及到类似 ETL 的一次性作业时——例如,数据转换或数据集成——这正是 MapReduce 的设计目的。

小结:当所有数据都适合内存时,Spark 性能更好,尤其是在专用集群上。 Hadoop MapReduce 专为无法放入内存的数据而设计,并且可以与其他服务一起很好地运行。

Spark VS Hadoop MapReduce:易用性
Spark 为 Java、Scala 和 Python 提供了预构建的 API,还包括用于 SQL 的 Spark SQL(以前称为 Shark)。由于 Spark 的简单构建块,编写用户定义的函数很容易。 Spark 甚至包括用于运行命令并立即反馈的交互模式。

MapReduce 是用 Java 编写的,并且非常难以编程。 Apache Pig 让它变得更容易(尽管它需要一些时间来学习语法),而 Apache Hive 则增加了 SQL 兼容性。一些 Hadoop 工具也可以在没有任何编程的情况下运行 MapReduce 作业。

此外,虽然 Hive 包含命令行界面,但 MapReduce 没有交互模式。 Apache Impala 和 Apache Tez 等项目希望将完整的交互式查询引入 Hadoop。

在安装和维护方面,Spark 不受 Hadoop 的约束。 Spark 和 Hadoop MapReduce 都包含在 Hortonworks (HDP 3.1) 和 Cloudera (CDH 5.13) 的发行版中。

小结:Spark 更易于编程,并且包含交互模式。 Hadoop MapReduce 更难编程,但有几个工具可以使它更容易。

Spark VS Hadoop MapReduce:成本
Spark 和 MapReduce 是开源解决方案,但您仍然需要在机器和人员上花钱。 Spark 和 MapReduce 都可以使用商品服务器并在云上运行。此外,这两种工具都有相似的硬件要求:


Spark 集群中的内存至少应该与您需要处理的数据量一样大,因为数据必须适合内存才能获得最佳性能。如果您需要处理大量数据,Hadoop 肯定是更便宜的选择,因为硬盘空间比内存空间便宜得多。

另一方面,考虑到 Spark 和 MapReduce 的性能,Spark 应该更划算。 Spark 需要更少的硬件来更快地执行相同的任务,尤其是在计算能力按使用付费的云服务器上。

人员配备问题呢?尽管 Hadoop 自 2005 年就已经存在,但市场上仍然缺乏 MapReduce 专家。根据 Gartner 的一份研究报告,57% 的使用 Hadoop 的组织表示“获得必要的技能和能力”是他们最大的 Hadoop 挑战。

那么这对于自 2010 年才出现的 Spark 来说意味着什么呢?虽然它可能有更快的学习曲线,但 Spark 也缺乏合格的专家。好消息是,有大量 Hadoop 即服务产品和基于 Hadoop 的服务(如 Integrate.io 自己的数据集成服务),这有助于缓解这些硬件和人员配备要求。同时,Spark 即服务选项可通过 Amazon Web Services 等提供商获得。

小结:根据基准,Spark 更具成本效益,但人员配备成本可能更高。 Hadoop MapReduce 可能会更便宜,因为可用的人员更多,而且对于海量数据量来说可能更便宜。

Spark VS Hadoop MapReduce:兼容性
Apache Spark 可以作为独立应用程序在 Hadoop YARN 或 Apache Mesos 内部部署或云中运行。 Spark 支持实现 Hadoop 输入格式的数据源,因此它可以与 Hadoop 支持的所有相同数据源和文件格式集成。

Spark 还通过 JDBC 和 ODBC 与商业智能工具一起工作。

底线:Spark 对各种数据类型和数据源的兼容性与 Hadoop MapReduce 相同。

Spark vs Hadoop MapReduce:数据处理
Spark 可以做的不仅仅是简单的数据处理:它还可以处理图形,它包括 MLlib 机器学习库。由于其高性能,Spark 可以进行实时处理和批处理。 Spark 提供了一个“一刀切”的平台供您使用,而不是在不同的平台上拆分任务,这会增加您的 IT 复杂性。

Hadoop MapReduce 非常适合批处理。如果你想要一个实时选项,你需要使用另一个平台,比如 Impala 或 Apache Storm,而对于图形处理,你可以使用 Apache Giraph。 MapReduce 曾经有 Apache Mahout 用于机器学习,但后来被 Spark 和 H2O 抛弃了。

小结:Spark 是数据处理的瑞士军刀,而 Hadoop MapReduce 是批处理的突击刀。

Spark vs Hadoop MapReduce:容错
Spark 具有每个任务的重试和推测执行,就像 MapReduce 一样。尽管如此,MapReduce 在这里有一点优势,因为它依赖于硬盘驱动器,而不是 RAM。如果 MapReduce 进程在执行过程中崩溃,它可以从中断的地方继续,而 Spark 必须从头开始处理。

小结:Spark 和 Hadoop MapReduce 都具有良好的容错性,但 Hadoop MapReduce 的容错性稍强一些。

Spark VS Hadoop MapReduce:安全性
在安全性方面,与 MapReduce 相比,Spark 没有那么先进。事实上,Spark 中的安全性默认设置为“关闭”,这会使您容易受到攻击。 RPC 通道支持通过共享密钥在 Spark 中进行身份验证。 Spark 将事件日志记录作为一项功能,并且可以通过 javax servlet 过滤器保护 Web UI。此外,由于 Spark 可以运行在 YARN 上并使用 HDFS,因此还可以享受 Kerberos 身份验证、HDFS 文件权限以及节点之间的加密。

Hadoop MapReduce 可以享受所有 Hadoop 安全优势并与 Hadoop 安全项目集成,例如 Knox Gateway 和 Apache Sentry。旨在提高 Hadoop 安全性的 Project Rhino 仅在添加 Sentry 支持方面提到了 Spark。否则,Spark 开发人员将不得不自己提高 Spark 的安全性。

小结:与具有更多安全功能和项目的 MapReduce 相比,Spark 安全性仍然欠发达。

Spark 的常用场景
虽然两者都是大规模数据处理的强大选项,但某些情况下,其中一种比另一种更理想。

流数据处理
随着公司走向数字化转型,他们正在寻找实时分析数据的方法。 Spark 的内存数据处理使其成为处理流数据的理想选择。 Spark Streaming 是 Spark 的一个变体,它使这个用例成为可能。那么,公司可以通过哪些方式利用 Spark Streaming?

流式 ETL – 在传统的 ETL 过程中,数据被读取、转换为兼容格式并保存到目标数据存储中。使用 Streaming ETL 的过程效率更高,因为数据在保存到目标数据存储之前会在内存中不断清理和聚合。

数据丰富——公司在尝试适应和提供更增强的客户体验时处于不断变化的状态。通过将实时数据与静态数据相结合,公司可以构建更可靠的客户画像,从而为他们提供个性化体验。

触发事件检测——实时响应事件的能力是一项重要的业务能力,有助于提高敏捷性和适应变化的能力。借助 Spark Streaming,公司可以实时分析数据,以识别需要立即关注的异常活动。

机器学习
在预测分析方面,Spark 的机器学习库 (MLib) 提供了一套强大的工具,可以轻松完成它。当用户对一组数据进行重复查询时,他们本质上是在构建类似于机器学习的算法。例如,机器学习可以帮助公司出于营销目的进行客户细分。它还可以帮助执行情绪分析。

交互式查询
想象一下能够对实时数据执行交互式查询。从本质上讲,您可以分析大型数据集,而无需依赖外部数据存储来处理信息。使用 Spark Streaming,您可以查询数据流,而无需将其持久化到外部数据库。

MapReduce 的常用场景
当处理对于内存中操作来说太大的数据时,MapReduce 是要走的路。因此,MapReduce 最适合处理大型数据集。

处理大型数据集(PB或TB)
考虑到实施和维护所需的时间和费用,千兆字节大小不足以证明 MapReduce 的合理性。希望管理PB或TB数据的组织是 MapReduce 的理想选择。

以不同格式存储数据
公司可以使用 MapReduce 处理多种文件类型,例如文本、图像、纯文本等。由于这些文件对于内存中的处理来说太大了,使用 MapReduce 进行批处理更经济。

数据处理
MapReduce 具有对大型数据集执行基本和复杂分析的强大功能。通过使用基于磁盘的存储而不是内存中的处理,对大型数据集进行汇总、过滤和连接等任务的效率要高得多。

Spark 与 Hadoop MapReduce 趋势

随着公司寻找在拥挤的市场中保持竞争力的新方法,他们将需要适应即将到来的数据管理趋势。这些趋势包括:

XOps – 使用 DevOps 的最佳实践,XOps 的目标是在数据管理过程中实现可靠性、可重用性和可重复性。

Data Fabric – 作为一个架构框架,Data Fabric 的目标是在一个无缝的数据管理平台中结合多种类型的数据存储、分析、处理和安全性

数据分析作为核心业务功能 – 传统上,数据管理由一个单独的团队处理,该团队分析数据并将其提供给关键业务领导者。然而,一种新方法将这些数据直接交到组织领导者手中,这样他们就可以立即访问这些信息以进行决策。

结论
Apache Spark 可能比 Hadoop MapReduce 快 100 倍。
Apache Spark 使用 RAM,并且不依赖于 Hadoop 的两阶段范式。
Apache Spark 适用于可以全部放入服务器 RAM 的较小数据集。
Hadoop 处理海量数据集更具成本效益。
Apache Spark 现在比 Hadoop MapReduce 更受欢迎。
Apache Spark 是大数据平台上闪亮的新玩具,但仍有使用 Hadoop MapReduce 的用例。无论您选择 Apache Spark 还是 Hadoop MapReduce,

Spark具有出色的性能,并且具有很高的成本效益,这得益于其内存数据处理。它与 Hadoop 的所有数据源和文件格式兼容,并且学习曲线更快,并具有可用于多种编程语言的友好 API。 Spark 甚至包括图形处理和机器学习功能。

Hadoop MapReduce 是一个更成熟的平台,它是专门为批处理而构建的。对于无法放入内存的超大数据,MapReduce 比 Spark 更具成本效益,而且可能更容易找到具有 MapReduce 经验的员工。此外,由于许多支持项目、工具和云服务,MapReduce 生态系统目前更大。

但即使你认为 Spark 看起来像这里的赢家,你也很可能不会单独使用它。您仍然需要 HDFS 来存储数据,并且您可能想要使用 HBase、Hive、Pig、Impala 或其他 Hadoop 项目。这意味着您仍然需要与 Spark 一起运行 Hadoop 和 MapReduce 以获得完整的大数据包。

作者 east
Spark 3月 16,2022

Spark大数据平台调度任务的优化

在大数据平台生产环境上,遇到一个头疼的问题,每天都要定时运行一个任务。刚开始数据量小和简单,用cron来定时调用可以满足需求。

后来数据量大,出现昨天的任务没跑完,今天的任务又要开始了,在大数据平台上运行的任务越来越多,大数据平台资源被占满了。

考虑进行下面的优化:

1、某个任务如果运行超过30小时时,进行中断。

2、采用DelayQueue来实现延时队列,等前面的任务执行完或被中断,又到它的开始时间时才进行执行。

延时队列相比于普通队列最大的区别就体现在其延时的属性上,普通队列的元素是先进先出,按入队顺序进行处理,而延时队列中的元素在入队时会指定一个延迟时间,表示其希望能够在经过该指定时间后处理。

入门例子

DelayQueue 非常适合指定时间之后,才能让消费者获取到的场景。

private static class DelayElem implements Delayed {
    /**
     * 延迟时间
     */
    private final long delay;
    /**
     * 到期时间
     */
    private final long expire;
    /**
     * 数据
     */
    private final String msg;

    private DelayElem(long delay, String msg) {
        this.delay = delay;
        this.msg = msg;
        //到期时间 = 当前时间+延迟时间
        this.expire = System.currentTimeMillis() + this.delay;
    }
    /**
     * 需要实现的接口,获得延迟时间
     *
     * 用过期时间-当前时间
     * @param unit 时间单位
     * @return 延迟时间
     */
    @Override
    public long getDelay(TimeUnit unit) {
        return unit.convert(this.expire - System.currentTimeMillis() , TimeUnit.MILLISECONDS);
    }
    /**
     * 用于延迟队列内部比较排序
     * <p>
     * 当前时间的延迟时间 - 比较对象的延迟时间
     *
     * @param o 比较对象
     * @return 结果
     */
    @Override
    public int compareTo(Delayed o) {
        return (int) (this.getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS));
    }
    @Override
    public String toString() {
        return "DelayElem{" +
                "delay=" + delay +
                ", expire=" + expire +
                ", msg='" + msg + '\'' +
                '}';
    }
}
private static class WriteThread extends Thread {
    private final DelayQueue<DelayElem> delayQueue;
    private WriteThread(DelayQueue<DelayElem> delayQueue) {
        this.delayQueue = delayQueue;
    }
    @Override
    public void run() {
        for(int i = 0; i < 3; i++) {
            try {
                TimeUnit.MILLISECONDS.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            DelayElem element = new DelayElem(1000,i+"test");
            delayQueue.offer(element);
            System.out.println(System.currentTimeMillis() + " 放入元素 " + i);
        }
    }
}
private static class ReadThread extends Thread {
    private final DelayQueue<DelayElem> delayQueue;
    private ReadThread(DelayQueue<DelayElem> delayQueue) {
        this.delayQueue = delayQueue;
    }
    @Override
    public void run() {
        while (true){
            try {
                DelayElem element =  delayQueue.take();
                System.out.println(System.currentTimeMillis() +" 获取元素:" + element);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
public static void main(String[] args) throws InterruptedException {
    DelayQueue<DelayElem> delayQueue = new DelayQueue<>();
    new WriteThread(delayQueue).start();
    new ReadThread(delayQueue).start();
}
作者 east

上一 1 … 3 4 5 … 9 下一个

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 如何在Chrome中设置启动时自动打开多个默认网页
  • spark内存溢出怎样区分是软件还是代码原因
  • MQTT完全解析和实践
  • 解决运行Selenium报错:self.driver = webdriver.Chrome(service=service) TypeError: __init__() got an unexpected keyword argument ‘service’
  • python 3.6使用mysql-connector-python报错:SyntaxError: future feature annotations is not defined
  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?

文章归档

  • 2025年7月
  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (45)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (5)
  • 大数据开发 (491)
    • CDH (6)
    • datax (4)
    • doris (31)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (41)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (100)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (71)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (7)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.