分布式计算框架Spark

流处理引擎 数据库排名:https://db-engines.com/en/ranking 关系型数据库优化: 一:通信。应用程序通过JDBC或者ODBC与DBMS进行通信是OLTP事务中主要的开销。 二:日志。 三:锁 四:缓冲区 采集/缓存/汇聚/扩维/索引/入库/管理/展示 https://www.oracle.com/technetwork/cn/community/developer-day/2-oracle-big-data-2190827-zhs.pdf NoSQL 1)键值模型 实例 Radis;M 阅读详情
一、Spark三种模式
  1. 本地模式
./bin/run-example SparkPi 10 --master local[2]
  1. 集群模式 Spark Standalone(Spark独立集群模式)
./bin/spark-submit \
	--class org.apache.spark.examples.SparkPi \
	--master spark://master:7077 \
	examples/jars/spark-examples_2.11-2.0.2.jar 100
  1. 集群模式Spark on yarn(yarn-cluster和yarn-client)
    spark运行在yarn集群上,可以与其他计算框架共享资源
./bin/spark-submit \
	--class org.apache.spark.examples.SparkPi \
	--master yarn-cluster \
	examples/jars/spark-examples_2.11-2.0.2.jar 100  
yarn-cluster和yarn-client本质区别:AM进程
二、集群模式Spark on yarn
2.1 yarn-cluster模式

driver在AM中,AM(driver)负责向yarn申请资源、作业的调度与监控。一旦用户提交完作业后,client可以关闭,作业在yarn集群上运行,数据结果会生成在AM的日志中,适用于生产环境。

  1. spark-submit脚本提交,向yarn(RM)中提交ApplicationMaster程序、AM启动的命令和需要在Executor中运行的程序等
  2. RM收到请求之后,选择一个NM,在其上开启一个container,在container中开启AM,并在AM中完成SC的初始化
  3. AM向RM注册并请求资源,这样用户可以在RM中查看任务的运行情况。RM根据请求采用轮询的方式和RPC协议向各个NM申请资源并监控任务的运行状况直到结束
  4. AM申请到资源之后,与对应的NM进行通信,要求在其上获取到的Container中开启executor,开启之后,向AM中的SC注册并申请task
  5. AM中的SC分配task给executor,executor运行task并向AM中的SC汇报自己的状态和进度
  6. 应用程序完成之后(各个task都完成之后),AM向RM申请注销并关闭自己

ApplicationMaster的作用:

  1. 当前的Application申请资源
  2. 给nodemanager发送消息 启动Executor。
  3. 任务调度
2.2 yarn-client模式

driver在客户端节点上,作业提交后,启动driver进程,AM仅向RM请求executor资源并通知指定的NM启动executor,driver会和对应的executor进行通信来调度任务,client不能离开,适用交互与调试 。

  1. spark-submit脚本提交,driver进程在客户端本地运行
  2. Client向RM申请启动AM,同时在SparkContext(client上)中创建DAGScheduler和TaskScheduler
  3. RM收到请求之后,根据资源分布选择其中一个NM,分配container,并在container中开启AM
  4. client中的SC初始化完成之后,与AM进行通信,向RM注册,根据任务信息向RM申请资源
  5. AM申请到资源之后,与NM进行通信,要求在它申请的container中开启executor。Executor在启动之后会向SC注册并申请task
  6. SC分配task给executor,executor执行任务并向Driver汇报,以便客户端可以随时监控任务的运行状态
  7. 任务运行完成之后,client的SC向RM注销自己并关闭自己

ApplicationMaster的作用:

  1. 为当前的Application申请资源
  2. 给NodeManager发送消息启动Executor

ApplicationMaster有launch Executor和申请资源的功能,并没有作业调度的功能。

Spark standalone
  • master/slave结构
    • Master:类似yarn中的RM
    • Worker:类似yarn中的NM
三、MapReduce和Spark作业的区别
  1. MapReduce (Hive)的一个map task/reduce task是进程;Spark的一个map task/reduce task是线程
  2. container(进程需要的资源CPU,内存,IO)是进程。在mapreduce中container作为一个map task或者一个reduce task;在spark container可以同时拥有map task(线程)+ reduce task(线程)
  3. MapReduce分布式计算框架,解决数据分布式计算问题。spark在MR基础上做分布式多线程,若不使用cache/persist,spark默认会遵循MR执行过程,过程会有shuffle和落地到磁盘。cache()调用persist(memory only),数据缓存到内存,persist()会落地磁盘、内存、序列化等等。
  4. 一个MR任务就是一个job,一个job分为多个task,task又可以分为map task和reduce task,每个task在自己的进程中运行。在任务执行过程中,运行完的task进程可以释放进程资源。复杂的hadoop任务由多个MR job串行组成;一个spark任务是一个application,一个app可分为多个job(由action算子划分),一个job分为多个stage(由shuffle划分),一个stage中包含多个task(map task 或者 reduce task:线程)。一个job可以有一个进程或者多个进程。进程生命周期和application一样,只有当一个app任务完成时,进程所占用的所有资源才会被释放。一个app任务由多个job并行或者串行运行。
四、Spark的application
  • spark中的job和MR中的job意义不一样,spark job是指一个application中的action算子触发一个job,MR job是一个MR任务。
  • 一个Application通过SparkContext来解析,每个app可有一个或多个job,并行或串行运行job
  • spark中一个action算子触发一个job
  • 一个job包含多个stage,stage是以shuffle过程来划分,每个stage包含多个task
  • 与MR不同,spark的task(线程)可运行在一个进程中,进程的生命周期和app周期相同,任务完成后资源全部释放

优点:加快spark运行速度(MR任务过程中数据需要落地到磁盘,spark任务中间数据可cache到内存中,加快运算速度),task可快速启动(MR task是进程,启动较慢,spark task是线程,启动快)
缺点:每个application有固定数目的executor和内存(自定义或者默认)

细化内部结构
  • application:一个driver和多个job构成
  • job:由多个stage组成
  • stage:对应一个taskset
  • taskset:对应一组关联的相互之间没有shuffle依赖关系的task组成
  • task:任务最小的工作单元
Driver Program(spark application入口)
  • driver是Spark的核心组件
  • 构建SparkContext(spark应用的入口,创建需要的变量,包含集群的配置信息)
  • 将一个application任务依据action算子划分多个job,每个job转换为DAG图,根据shuffle将每个DAG图划分为多个stage,根据分区从而生成一系列tasks,再根据tasks向RM申请资源
  • 提交任务并检测任务状态
MR存在的问题
  • 调度慢:启动map、reduce进程太耗时
  • 计算慢:每一步都要保存中间结果到磁盘
  • API抽象简单:只有map和reduce
  • 缺乏作业流描述:一项复杂任务需要多轮mr
Spark
  • spark是下一代的mapreduce,扩展了mr的数据处理流程的分布式并行计算框架
  • executor装载在container里运行,container默认内存是1G
  • executor分配的内存是executor-memory,向yarn申请的内存是(num-executors+1)* executor-memory
  • AM在spark被称为driver,AM向RM申请executor资源,当分配完资源后,executor启动后,由spark的AM向executor分配task,分配多少task,分配到哪个executor由AM决定
  • executor由线程池多线程管理这些task
spark解决的问题
  • 最大化利用内存cache
  • 中间结果放入内存,加速迭代
  • 加速后续查询和处理,解决运行慢的问题
  • 更加丰富的API(transformation算子和action算子)
  • 完整作业流描述:对整个作业串起来
五、Spark核心-RDD

Spark基于弹性分布式数据集RDD模型,具有良好的通用性、容错性与并行处理数据的能力。
RDD(Resilient Distributed Dataset)弹性分布式数据集,本质是数据集的操作描述(只读、可分区),而不是数据集本身

RDD的特性
  • RDD将数据集的操作保存在内存中,控制数据的划分,提供丰富的API操作
  • RDD本身只读,不可修改(一个RDD转换为另一个RDD)
  • 每一个RDD记录了数据的操作符而不是数据本身来保证容错:若部分数据丢失,可根据RDD记录的操作符来恢复
  • 每个RDD包含了数据分块/分区的集合,每个partition不可分割。每一个partition的计算是一个task,task是调度的基本单位。
  • 懒操作:延时计算,直到action算子才操作
  • 瞬时性:用时才产生,用完就释放

遵循数据局部性原则,使数据传输代价最小

  • 如果一个任务需要的数据在某个节点的内存中,这个task分配到这个节点
  • 需要的数据在某个节点的文件系统中,分配至这个节点(由spark的AM来调度task分配到哪个executor)
RDD提供两类操作:transformations算子和action算子
  • transformations是RDD之间的变换,action会对数据执行一定的操作
  • transformations采用懒操作,仅当action提交才触发计算
RDD之间的依赖关系

宽依赖和窄依赖(rddA=>rddB)

  • 宽依赖:A和B是一对多的关系(shuffle), B的每个partition都依赖于A的每一个partition
    例如:groupByKey、reduceByKey、join……
  • 窄依赖:A和B是一对一关系 ,B的每个partition都依赖于A的常数个partition
问题:如下的DAG图存在可能性吗?

不存在这种情况;原因是DAG图是通过AM下的的driver依据RDD的数据集以及算子操作来解析的,此时没有输入原始数据真正的执行。等到真正执行数据时,数据的流向可能会如上图所示,但是DAG图应该是全连接的shuffle过程。

六、Spark核心-容错
  • 若task失败,AM会重新分配task
  • 窄依赖依赖上一层的partition,恢复代价小;宽依赖依赖上层所有的partition,如果下游数据某个partition丢失,上层partition都要重新计算,导致下游partition的重复计算。
  • 为了使丢失的数据快速恢复,宽依赖的上层RDD cache到内存。
七、Spark调优
7.1 Spark资源参数调优

executor内存分为3种:

  • RDD持久化使用,默认占executor总内存的60%
  • task通过shuffle过程拉取上一个stage的task输出,进行聚合等操作时使用,默认占20%
  • task执行代码使用,默认占20%

task执行速度和每个executor进程的cpu core数量有直接关系,一个cpu同一时间只能执行一个线程,进程中的tasks是以多线程并发运行的,如果cpu core数量充足,那么可以快速高效的执行完这些task线程。

参数:

  • num-executors:作业一共需要多少executor进程执行,建议每个作业运行一般设置5/10/15个左右
  • executor-memory:每个executor进程的内存(申请的总内存量不能超过最大总内存的1/3~1/2),建议4G ~ 8G
  • executor-cores:每个executor进程的CPU core数量,该参数决定executor进程并行执行task线程的能力,建议2~4个
  • driver-memory:driver进程的内存,建议设置多一些(4G),出现collect算子将RDD数据全部拉取到driver上做处理,必须保证该值足够大,否则OOM内存溢出
  • spark.default.parallelism:每个stage的默认task数量
  • spark.storage.memoryFraction:设置RDD持久化数据到executor内存所占的比例,默认0.6
  • spark.shuffle.memeoryFraction:聚合操作占executor内存的比例,默认0.2

spark参数调整可在spark开发中设置conf,或者在提交任务时附加参数配置

7.2 Spark开发调优
  • 原则一:避免创建重复的RDD(对于同一份数据,只需要创建一个RDD,不能重复创建,极大浪费内存)
  • 原则二:尽可能复用相同的RDD(相同的RDD操作可以共用,不同的RDD操作可以并列执行)
  • 原则三:对多次使用的RDD进行持久化处理(cache()/persist())
  • 原则四:避免使用shuffle类算子
    • spark作业运行过程中,最消耗性能的地方就是shuffle过程
    • 将分布在集群中多个节点上的同一个key,拉取到同一节点上,进行聚合或join操作,如groupByKey、reduceByKey、join等,都会触发shuffle
    • Broadcast+map的join操作,不会导致shuffle操作,但前提是RDD数据量较少的情况下(类似于hive中mapjoin)
  • 原则五:使用map-side预聚合的shuffle操作
    • 有shuffle过程且无法用map类算子代替的,尽量使用map-side预聚合算子,类似于MR的combiner
    • 使用reduceByKey或aggregateByKey算子代替groupByKey,因为reduceByKey或aggregateByKey算子会使用用户自定义的函数对每个节点本地相同的key进行预聚合,而groupByKey算子不会预聚合
  • 原则六:使用Kryo优化序列化性能
    • Kryo是一个序列化类库,优化序列化和反序列化性能
    • spark默认使用Java序列化机制进行序列化和反序列化
    • spark支持使用Kryo序列化库,性能比Java序列化库高10倍左右
分布式计算框架对比:Spark vs. Dask 的核心原理与性能测试 Apache Spark 是一个开源的分布式计算框架,主要用于处理大数据集,提供高效的内存计算模型。:Spark 作业的入口,负责分配任务到不同的 Executor。:管理集群资源,Spark 提供了多种集群管理器,如YARNMesos和Kubernetes。Executors:执行任务的工作节点,每个 Executor 执行特定的计算任务。Task:一个计算单位,可以在 Executor 上执行。Spark 通过**弹性分布式数据集(RDD)或。 阅读详情

相关推荐

分布式计算框架比较:MapReduce vs Spark vs Flink

处理模式:批处理(Batch,处理静态数据) vs 流处理(Stream,处理动态数据);计算类型:迭代计算(Iterative,如机器学习梯度下降) vs 非迭代计算(如日志统计);延迟要求:高延迟(小时/天级,如离线ETL) vs 低延迟(毫秒/秒级,如实时监控)。MapReduce:专注批处理+非迭代计算,适合高延迟、大吞吐量的离线任务;Spark:专注批处理+迭代计算,兼顾交互式查询,适合需要快速迭代的场景;Flink:专注流处理+低延迟,支持批处理(流的特例),适合实时数据处理。

2501_92132293的博客 418

分布式计算框架:从基础到高级

1.背景介绍 分布式计算框架是一种在多个计算节点上并行执行的计算模型,它可以实现大规模数据处理和计算任务的高效完成。随着数据量的不断增加,分布式计算框架已经成为处理大规模数据和复杂任务的关键技术。 在本文中,我们将从基础到高级,深入探讨分布式计算框架的核心概念、算法原理、具体操作步骤和数学模型、代码实例以及未来发展趋势与挑战。 2. 核心概念与联系 2.1 分布式计算系统 分布式计算系统...

AI天才研究院 5594

Spark 错误处理:处理分布式计算框架 Spark 中的报错

在 Spark 中,错误通常以异常的形式抛出。异常是一种在程序执行期间发生的意外情况,可能会导致程序无法正常执行。Spark 提供了丰富的异常类和错误消息,以帮助开发人员识别和解决问题。在处理 Spark 异常时,可以使用 try-catch 块来捕获和处理异常。try-catch 块允许我们在异常发生时执行备选的代码路径,以便更好地控制程序的流程。try:# 执行 Spark 操作,可能会抛出异常# ...# 处理异常的代码# ...finally:# 清理资源的代码# ...

TechChamp的博客 421

【大数据】分布式计算框架算法

分布式计算框架算法是为了解决大规模数据处理问题而设计的一系列算法。这些算法能够在多台计算机上分布执行计算任务,通过网络连接协同工作,从而提高数据处理速度和效率。常见的分布式计算框架包括Hadoop、Spark等。

大雨淅淅的博客 2289

Python爬虫实战:5分钟搞定东方财富网股票数据抓取(附完整代码)

本文详细介绍了如何使用Python爬虫快速抓取东方财富网的股票数据,包括环境配置、API分析、核心代码实现及优化技巧。通过简单的requests和pandas库,5分钟内即可获取高质量股票数据,适合量化交易和数据分析初学者。

weixin_29040367的博客 1182

ST-LINK调试STM32H743必看:CubeMX工程中缺失的这行代码导致程序跑飞

本文深入剖析了使用ST-LINK调试STM32H743时,因CubeMX工程中缺失电源电压档位配置代码而导致程序跑飞或出现“Can not access memory”错误的问题。文章解释了H7系列电源与时钟耦合的核心原理,提供了具体的代码修复方案和系统化的调试排查思路,帮助开发者从根本上解决这一常见调试困境。

weixin_29191669的博客 281

分布式计算框架综述

本来是发表到科技论在线的,谁知道被退稿了,那就发到这里来吧。 0      引言 随着互联网的发展,web2.0时期[1]的到来,人类正式进入了信息爆炸时期的。海量的信息在很多应用都会出现,比如一些社交网络应用中记录用户行为日志通常都是以GB甚至是TB为单位的。常规的单机计算模式已经不能支撑如此巨大的数据量。所以,计算必须以分布式的把巨大的计算任务分成小的单机可以承受的计算任务

zwan0518的专栏 2万+

多模型对抗性审查:用AI辩论提升技术文档质量

在软件工程领域,技术文档是团队协作和项目成功的关键基础。传统的文档评审依赖人工经验,存在盲区和效率瓶颈。通过引入多模型对抗性审查机制,不同大语言模型从各自视角对文档进行批判性分析,模拟现实中的专家评审过程。这种技术方法的核心价值在于利用模型间的思维差异,自动发现单个视角容易忽略的边界情况、逻辑漏洞和隐含假设。在应用场景上,特别适合产品需求文档和技术规格书这类需要多角度审视的复杂文档。adversarial-spec工具通过Claude协调多模型辩论,实现从概念到实现的完整文档质量保障,显著提升文档的完整性和

weixin_42531579的博客 379

大数据技术Hadoop之分布式计算框架MapReduce

MapReduce是一种分布式计算框架,它可以将大规模的数据集分成许多小的数据块,然后在分布式计算集群中进行并行处理。MapReduce的核心思想是将数据处理过程分为两个阶段:Map和Reduce。Map阶段将输入数据映射为一系列的键值对,Reduce阶段将Map阶段输出的键值对进行合并和归约。Map阶段的输入数据可以是任意格式的数据,例如文本、图片、音频等。Map阶段的处理过程可以是任意的计算过程,例如数据清洗、数据过滤、数据转换等。

m0_57254949的博客 1010

R 绘制环形树状图

按大类小类的从属关系绘制环形图,并把不同值的节点设置为相应大小。要求同一类的节点应为同一颜色。 按照输入,处理代码和输出记录

weixin_43718786的博客 1872

Qt入门教程100篇(已完结)

Qt5入门教程,Qt6入门教程。包含了: Qt环境搭建篇、Qt数据类型篇、Qt中STL篇、Qt核心篇、Qt核心对象QObject篇、Qt基础控件篇、Qt对话框篇、Qt高级控件篇、Qt数据模型篇、QSS篇、Qt文件篇 、Qt硬件编程、Qt的一些demo、Qt项目开发篇。......

小鱼酱的博客 15万+

Spark(开源的分布式计算框架)

Apache Spark 是一个高性能开源分布式计算框架,支持批处理、流处理、机器学习和图计算。它比Hadoop MapReduce快100倍,提供Java/Scala/Python/R等多种语言支持,并通过RDD实现容错。环境配置需安装Java、Spark及可选组件(Scala/Hadoop)。核心概念包括RDD、DataFrame、Spark SQL、Spark Streaming和MLlib。Spark支持本地、Standalone、Yarn和Kubernetes多种部署模式。开发流程涉及应用提交和监

ctlongs的博客 1287

Jetson Orin Nano 平台适配IMX585 camera驱动调试记录

Jetson Orin Nano Devkit适配imx585 camera使用argus_camera捕获流,图片是黑色的用示波器来测量mipi信号,信号正常Jetpack版本: sensor参数: dts配置: 分析log: 如图: EBD有两行修改dts: 测试如下:log: 需要注意极性互换查看相应的原理图设置。可以使用设备树属性lane_polarity在任何lane上配置极性交换。例如, 尝试调整极性出现花屏 根据上述像素时钟配置说明调整为如下配置后,出图正常

jzwjzw19900922的博客 1321

如何在Java中实现高效的分布式计算框架:从Hadoop到Spark

RDD是一个不可变的分布式对象集合,支持并行操作,而DataFrame和Dataset则提供了更高级的API,方便数据处理。在实际应用中,根据具体需求选择合适的框架,并通过合理的优化策略,可以实现高效的分布式计算。Mapper类负责将输入的文本分割为单词并输出(单词,1)的键值对,而Reducer类则负责统计每个单词的出现次数。:将MapReduce代码转换为Spark代码,通常需要重写逻辑,将Map和Reduce操作映射到RDD的Transformation和Action操作上。

微赚淘客系统开发者博客 1608

基于THUCNews数据集bert bert_wwm的新闻文本分类

基于THUCNews数据集bert bert_wwm的新闻文本分类

984

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Spark分布式计算框架介绍

大白话介绍了Spark的核心概念和运行机制。首先概述了Spark作为高效分布式计算框架的优势,重点阐述了RDD(弹性分布式数据集)的特性及其转换/动作算子分类。文章详细分析了RDD的两种依赖关系(窄依赖和宽依赖)及其对性能的影响,并深入讲解了Spark程序架构和三种运行模式(Local、Standalone、Yarn)。最后通过词频统计示例,说明了Spark从逻辑查询计划到物理查询计划的转换过程,以及基于DAG图的任务调度机制。

talle2021的博客 1116

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MapReduce vs Tez vs Spark:分布式计算框架深度对比

MapReduce、Tez和Spark是三种主流分布式计算框架,各有特点。MapReduce采用严格的Map-Shuffle-Reduce模型,适合大规模批处理但延迟较高;Tez通过动态DAG优化执行流程,在Hive查询中表现优异;Spark基于内存计算和RDD模型,在迭代计算和实时处理方面性能突出。性能测试显示Spark执行速度最快(45分钟 vs Tez 75分钟 vs MapReduce 120分钟处理100TB数据),资源利用率最高(70-85%)。选择依据:MapReduce适合兼容旧系统和成本敏

csdn_tom_168的博客 1066

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【分布式计算框架MapReduce和Spark】使用MapReduce和Spark进行大数据处理

MapReduce是由Google提出的一个分布式计算模型,用于处理大规模数据集。其核心思想是将复杂的计算任务分解为简单的Map和Reduce两个阶段,通过分布式计算提高处理效率。Spark是一个快速、通用的分布式计算系统,最初由加州大学伯克利分校的AMPLab开发,现由Apache基金会维护。Spark基于内存计算,具有比MapReduce更高的处理速度和更丰富的API。

weixin_39372311的博客 1858

【Spark入门】Spark简介:分布式计算框架的演进与定位

Hadoop MapReduce作为第一代分布式计算框架,虽然具有可扩展性和容错性,但存在磁盘I/O瓶颈、编程模型复杂、实时性差和迭代计算效率低等局限性。

IT成长日记的博客 1212

Spark:一个高效的分布式计算框架

Spark:一个高效的分布式计算框架概述什么是SparkSpark是UC Berkeley AMP lab所开源的类Hadoop MapReduce 的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数

跑步机上的蜗牛 2028

从MapReduce到Spark:分布式计算框架的进化之路

本文探讨了从MapReduce到Spark的分布式计算框架进化历程,分析了MapReduce的优缺点及Spark的内存计算优势。文章详细介绍了Hadoop生态、Spark架构及其核心组件,并提供了技术选型建议和未来趋势展望,特别提及Gemini等大模型对计算框架的新需求。

jwt8token的博客 659

spark分布式计算框架

MapReduce是计算逻辑清晰的,只有两个步骤,任务是JVM进程级别,每执行到什么步骤 去申请具体的资源。而spark根本不知道具体有几个stage,逻辑未知,每个人的job stage等根本不知道。它是默认倾向于抢占资源的,他会在sparkContext()这个函数执行的时候,直接根据下面textFile()代码逻辑抢占所有资源,任务以JVM线程的级别泡在Excutor里面。

weixin_60343465的博客 1367

python分布式计算框架_分布式计算框架Spark

Apache Spark是一个开源分布式运算框架,最初是由加州大学柏克莱分校AMPLab所开发。Hadoop MapReduce的每一步完成必须将数据序列化写到分布式文件系统导致效率大幅降低。Spark尽可能地在内存上存储中间结果, 极大地提高了计算速度。MapReduce是一路计算的优秀解决方案, 但对于多路计算的问题必须将所有作业都转换为MapReduce模式并串行执行。Spark扩展了Map...

weixin_39815031的博客 306
上一篇: Hive1.x安装
下一篇: 大数据之Kafka集群搭建
code__online
博客等级 码龄9年 142粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值