Spark的认识(二)

spark graphx 实现二跳邻居统计——使用pregel 本文参考自: 原文地址 本文是对二跳邻居统计的实战,因为用到了pregel,需要对pregel模型有一些大致的了解,例如各个参数的意义,各个函数的作用,以及大致的流程。最核心的应该就是消息发送函数这个部分,注释中有对两轮迭代的过程有解释。 def main(args: Array[String]): Unit = { case class Person(id: String, tel... 阅读详情

Spark的认识(二)

1、主要内容

  • 1、掌握RDD底层原理

  • 2、掌握RDD常用的算子操作

  • 3、掌握RDD的依赖关系

  • 4、掌握RDD的缓存机制

  • 5、掌握划分stage

  • 6、掌握spark任务调度流程

2、RDD概述

2.1 RDD是什么

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。
​
Dataset:它就是一个集合,集合里面可以存放很多个元素
Distributed:它的数据是分布式存储的,方便于后期进行分布式计算
Resilient:弹性 它表示的含义:rdd的数据是可以保存在内存或者是磁盘中

2.2 RDD的五大属性

(1) A list of partitions
   一个分区列表,也就是说一个rdd有很多个分区,分区里面才是真正的数据,而spark任务的执行是以分区为单位,一个分区就对应后期的一个task(线程)。
   读取HDFS上数据文件产生的RDD分区数跟block的个数相等,
   如果一个文件只有一个block块,它会产生的rdd的分区数是2个(默认最小值就是2)
​
(2) A function for computing each split
  作用在每一个分区中的函数
  val rdd2=rdd1.map(x=>(x,1))
​
(3) A list of dependencies on other RDDs
  一个rdd会依赖于其他多个rdd,这里就涉及到rdd与rdd之间的依赖关系,后期spark的容错机制就是根据这个特性而来。
​
(4) Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
(可选项)对于kv类型的rdd才有分区函数概念(必须要产生shuffle),不是kv类型的RDD它的分区函数是None(就是没有)。分区函数作用:决定了数据会流入到哪里去
​
spark中有2种分区函数,第一种是基于哈希的hashPartitioner, key.hashcode%分区数=分区号,这个分区函数是默认值。第二种基于范围RangePartitioner
​
​
(5) Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
(可选项)一组最优的块的位置列表  表示数据的本地性和数据位置最优
spark在进行任务分配的时候,它会优先考虑存有数据的节点来计算任务。避免出现大量的网络请求。

3、创建RDD

  • 1、通过一个已经存在scala集合去创建

    • sc.parallelize(List(1,2,3,4))

  • 2、读取外部数据源去创建

    • val rdd1=sc.textFile("/words.txt")

  • 3、通过一个rdd调用对应的方法生成一个新的rdd

    • val rdd2=rdd1.flatMap(_.split(" "))

4、RDD的算子分类

  • 1、transformation(转换)

    • 可以把一个rdd转换生成一个新的rdd,它是延迟加载,不会立即触发整个任务的运行

    • 它会记录下rdd上面的转换操作行为

    • 比如

      • flatMap map reduceByKey sortBy

  • 2、action (动作)

    • 它会触发任务真正的运行

    • collect saveAsTextFile

 

5、通过spark实现点击流日志分析

5.1 统计PV

package demo
​
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
​
//TODO:通过spark来实现点击流日志分析案例-----------PV
object PV {
  def main(args: Array[String]): Unit = {
       //1、创建SparkConf对象
      val sparkConf: SparkConf = new SparkConf().setAppName("PV").setMaster("local[2]")
​
      //2、创建SparkContext对象
      val sc = new SparkContext(sparkConf)
​
       //设置日志输出级别
       sc.setLogLevel("warn")
​
     //3、读取日志数据
      val data: RDD[String] = sc.textFile("E:\\data\\access.log")
​
    //4、统计PV
     val pv: Long = data.count()
    println("PV:"+pv)
​
​
    sc.stop()
  }
}
​

5.2 统计UV

package demo
​
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
​
//TODO:通过spark来实现点击流日志分析案例-----------UV
object UV {
  def main(args: Array[String]): Unit = {
     //1、创建SparkConf
      val sparkConf: SparkConf = new SparkConf().setAppName("UV").setMaster("local[2]")
​
    //2、创建SparkContext
     val sc = new SparkContext(sparkConf)
      sc.setLogLevel("warn")
​
    //3、读取数据文件
     val data: RDD[String] = sc.textFile("E:\\data\\access.log")
​
    //4、切分每一行获取ip地址
     val ips: RDD[String] = data.map(_.split(" ")(0))
​
    //5、去重统计uv
    val uv: Long = ips.distinct().count()
    println("UV:"+uv)
​
    sc.stop()
  }
}
​

5.3 统计TopN

package demo
​
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD
​
//TODO:通过spark来实现点击流日志分析案例-----------TopN(获取访问url出现次数最多的前N位)
object TopN {
  def main(args: Array[String]): Unit = {
    //1、创建SparkConf
    val sparkConf: SparkConf = new SparkConf().setAppName("TopN").setMaster("local[2]")
​
    //2、创建SparkContext
    val sc = new SparkContext(sparkConf)
    sc.setLogLevel("warn")
​
    //3、读取数据文件
    val data: RDD[String] = sc.textFile("E:\\data\\access.log")
​
    //4、先过滤出正常的数据,切分每一行,获取url,每一个url计为1
    val urlAndOne: RDD[(String, Int)] = data.filter(x=>x.split(" ").length>10).map(x=>(x.split(" ")(10),1))
​
     //5、相同url出现的1累加
      val result: RDD[(String, Int)] = urlAndOne.reduceByKey(_+_)
​
     //6、按照次数降序排列
      val sortRDD: RDD[(String, Int)] = result.sortBy(_._2,false)
​
    //7、取出出现次数最多的前5位
     val top5: Array[(String, Int)] = sortRDD.take(5)
     top5.foreach(println)
​
    sc.stop()
  }
}
​

6、通过spark实现ip地址查询

package demo
​
import java.sql.{Connection, DriverManager, PreparedStatement}
​
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
​
//todo:利用spark实现ip地址查询
object Iplocation {
​
  //ip地址转换成Long   192.168.200.100
  def ip2Long(ip: String): Long = {
     val ips: Array[String] = ip.split("\\.")
     var ipNum:Long=0L
    //遍历数组
    for(i<- ips){
     ipNum= i.toLong |  ipNum << 8L
    }
    ipNum
  }
​
  def binarySearch(ipNum: Long, broadCastValue: Array[(String, String, String, String)]): Int = {
    //定义开始下标
    var start=0
    //定义结束下标
    var end=broadCastValue.length-1
​
    while(start <= end){
      val middle=(start+end)/2
​
      if(ipNum >= broadCastValue(middle)._1.toLong  && ipNum <= broadCastValue(middle)._2.toLong){
         return middle
      }
​
      if(ipNum < broadCastValue(middle)._1.toLong){
          end=middle-1
      }
​
      if(ipNum >broadCastValue(middle)._2.toLong){
         start=middle+1
      }
​
    }
    -1
  }
​
  def data2mysql(iter:Iterator[((String,String), Int)]) = {
    //定义数据库连接
      var conn:Connection=null
    //定义PreparedStatement
      var ps:PreparedStatement=null
     val sql="insert into iplocation(longitude,latitude,total_count) values(?,?,?)"
​
    conn=DriverManager.getConnection("jdbc:mysql://192.168.200.100:3306/spark","root","123456")
    ps=conn.prepareStatement(sql)
​
     //遍历迭代器
      try {
        iter.foreach(line => {
          //给占位符赋值
          ps.setString(1, line._1._1)
          ps.setString(2, line._1._2)
          ps.setLong(3, line._2)
          //执行sql语句
          ps.execute()
        })
      } catch {
        case e:Exception  => println(e)
      } finally {
        if(ps !=null){
          ps.close()
        }
        if(conn!=null){
          conn.close()
        }
      }
​
  }
​
  def main(args: Array[String]): Unit = {
     //1、创建SparkConf
      val sparkConf: SparkConf = new SparkConf().setAppName("Iplocation").setMaster("local[2]")
​
    //2、创建SparkContext
      val sc = new SparkContext(sparkConf)
      sc.setLogLevel("warn")
​
    //3、读取城市ip段信息数据,获取 (ip开始数字、ip结束数字、经度、维度)
     val city_ip_rdd: RDD[(String, String, String, String)] = sc.textFile("E:\\data\\ip.txt").map(x=>x.split("\\|")).map(x=>(x(2),x(3),x(x.length-2),x(x.length-1)))
​
       //把城市ip信息数据,通过广播变量下发到每一个worker节点
        val city_ip_broadcast: Broadcast[Array[(String, String, String, String)]] = sc.broadcast(city_ip_rdd.collect())
​
    //4、读取日志数据 获取所有的ip地址
      val ips_rdd: RDD[String] = sc.textFile("E:\\data\\20090121000132.394251.http.format").map(x=>x.split("\\|")(1))
​
    //5、遍历ips_rdd  获取每一个ip地址,然后转换成Long类型的数字,最后通过二分查找去匹配
    val result: RDD[((String, String), Int)] = ips_rdd.mapPartitions(iter => {
      //获取广播变量的值
      val broadCastValue: Array[(String, String, String, String)] = city_ip_broadcast.value
      //遍历迭代器
      iter.map(ip => {
        //把ip地址转换成Long类型数字
        val ipNum: Long = ip2Long(ip)
        // 通过二分查询获取long类型的数字在数组中下标
        val index: Int = binarySearch(ipNum, broadCastValue)
​
        //获取下标对应的值
        val value: (String, String, String, String) = broadCastValue(index)
​
        //把结果数据封装在一个元组中 ((经度,维度),1)
        ((value._3, value._4), 1)
      })
    })
    //相同经度维度出现的1累加
    val finalResult: RDD[((String, String), Int)] = result.reduceByKey(_+_)
​
    //打印
      finalResult.foreach(println)
​
    //保存结果数据到mysql表中
      finalResult.foreachPartition(data2mysql)
​
      sc.stop()
​
  }
}

7、RDD的依赖关系

  • 1、窄依赖

    窄依赖指的是每一个父RDD的Partition最多被子RDD的一个Partition使用
    总结:窄依赖我们形象的比喻为独生子女
    ​
    比如:flatMap  map  filter ...
    窄依赖不会产生shuffle
    ​
  • 2、宽依赖

    宽依赖指的是多个子RDD的Partition会依赖同一个父RDD的Partition
    总结:宽依赖我们形象的比喻为超生
    ​
    比如:reduceByKey  gruopByKey  sortBy  join
    宽依赖会产生shuffle

8、Lineage(血统)

血统:它会记录下在rdd上的一系列操作行为,后期某个rdd的分区数据丢失之后,可以通过血统这层关系重新计算恢复得到。

9、RDD的缓存机制

9.1 什么是rdd的缓存机制

可以把一个rdd的结果数据进行缓存,缓存之后后续有其他的job需要依赖于前面rdd的结果数据,可以直接从缓存中获取得到,避免重新计算。

9.2 如何设置缓存

对rdd设置缓存有2中方式:第一种cache  第二种persist

两者的区别:
cache默认是把数据缓存在内存中,其本质就是调用persist方法,默认的存储级别就是MEMOEY_ONLY
persist中有丰富的缓存级别,可以把数据缓存在磁盘中,这些缓存级别都被定义在StorageLevel object中

这2个方法并不是立即调用就触发缓存操作,后面需要有一个action操作才可以。

9.3 清除缓存

rdd.unpersist方法可以将缓存中的数据移除掉

9.4 什么时候去设置缓存

  • 1、一个rdd后期多次使用

    val rdd2=rdd1.flatMap(_.split(" ")
    val rdd3=rdd1.map(_.split(" "))
    
    rdd1使用了很多次,后面就可以对rdd1设置缓存,后面的job就可以直接从缓存中获取得到。避免重新计算
    
  • 2、一个rdd的结果获取得到来之不易

    val rdd1=sc.textFile("/words.txt").xxx.xxxx.xxxx.xxxx.xxxx.xxx.xxxx.xxx.....
    
    rdd1经过大量的转换操作或者是计算逻辑比较复杂最后得到不容易,这个时候就可以对rdd1设置缓存
    

10、DAG有向无环图和划分stage

  • DAG有向无环图

  DAG就是按照rdd一系列的操作转换最后就形成一个有方向无闭环的图,这里的方向就是按照rdd的操作顺序,后期可以针对于这个有向无环图进行stage的划分,这里的stage我们成为不同的调度阶段。

11、spark任务调度流程

(1)Driver会运行客户端main方法中的代码,代码就会构建SparkContext对象,在构建SparkContext对象中,会创建DAGScheduler和TaskScheduler,然后按照rdd一系列的操作生成DAG有向无环图。最后把DAG有向无环图提交给DAGScheduler。

(2)DAGScheduler拿到DAG有向无环图后,按照宽依赖进行stage的划分,这个时候会产生很多个stage,每一个stage中都有很多可以并行运行的task,把每一个stage中这些task封装在一个taskSet集合中,最后提交给TaskScheduler。

(3)TaskScheduler拿到taskSet集合后,依次遍历每一个task,最后提交给worker节点的exectuor进程中。task就以线程的方式运行在worker节点的executor进程中。

12、spark的容错机制之checkpoint

12.1 什么是checkpoint

rdd设置缓存有2种方式:cache和persist

(1)cache:默认是把数据缓存在内存中,其本质是调用persist方法。后期操作起来速度快,由于一些原因导致进程挂掉了或者是服务器挂掉了,内存中的数据也就丢失。数据的丢失风险的比较高。

(2)persist:可以把数据保存在本地磁盘,后期操作起来比cache要慢一点,但是也不是特别安全,比如说磁盘损坏,或者是某个系统管理员由于误操作把数据删除了,数据也有丢失的风险。

checkpoint:它提供了一个相对而言更加可靠的数据持久化方式,它可以把数据保存在分布式文件系统中,也就是hadoop中的HDFS.可以通过hdfs高容错来最大程度保证数据不丢失。

12.2 如何设置checkpoint

  • 1、首先使用sparkcontext对象设置一个checkpoint目录

    • sc.setCheckpointDir("hdfs上目录")

  • 2、使用rdd调用checkpoint方法

    • rdd1.checkpoint

  • 3、需要一个action来触发任务的运行

    • rdd1.collect

12.3 cache、persist、checkpoint区别

cache、persist可以对rdd的数据进行缓存,后面需要有对应的action操作,才会触发缓存的执行。它不会改变rdd的血统关系。不会产生新的job,你有几个action,就对应有几个job。

checkpoint:对需要做checkpoint操作的rdd调用checkpoint方法,后面需要有对应的action操作。它会改变的rdd的血统关系,对当前需要做checkpoint操作的rdd最后调用了一个action,一个action就是一个job,你在执行action操作的时候,首先会有一个job去运行。这个job运行完成之后,它会再次启动一个新的job来运行checkpoint操作,也就是说这一块它会有2个job去跑任务。

12.4 数据丢失之后恢复顺序

(1)先去cache中看看有没有设置缓存,如果cache中存在就直接从内存中获取得到
(2)如果cache不存在,接下来看看有没有做checkpoint操作,如果有checpoint操作,这个时候就直接从磁盘中获取得到,如果也没有做checkpoint
(3)只能够通过血统重新计算恢复得到。

13、spark运行架构

更多内容关注我的个人公众号:

 

Spark 基础解析 (二) spark的安装与配置 目录 一.Spark 安装地址 1.官网地址 2.文档查看地址 3.下载地址 二.Spark 运行模式 三.Spark 安装 1.在官网下载spark安装包 2.上传至Linux环境并解压安装 3.修改配置文件 4.启动 5.测试 6.Spark Shell 下一节 一.Spark 安装地址 1.官网地址 http://spark.apache.org/ 2.文档查看地址 https://spark.apache.org/docs/2.1.1/ 3.... 阅读详情

相关推荐

phpSpark:框架PHP

phpSpark 框架

php提交spark,spark任务提交之SparkLauncher

最近需要做一个UI,在UI上做一个可以提交的spark程序的功能;1-zeppelin就是这样的一个工具,其内部也是比较繁琐的。有兴趣的可以了解下。2-SparkLauncher,spark自带的类linux下其基本用法:public static voidmain(String[] args) throws Exception {HashMap envParams = new HashMap&l...

weixin_42470300的博客 341

A-Level CS 计算机科学 考试知识点——考试介绍&第1章

前言:该系列文章是本人在给学生辅导本课程的过程中结合英文教材所总结的,该系列共分为30章,主要介绍了考试的核心知识点。若需要A-Level CS 计算机科学考试辅导也可以私信我。 目录 关于A-Level CS 计算机科学考试 考试简介 考试内容 考试时间 评分情况 第1章 信息表示 本章学习内容 1.01 数字系统 1.02 数字的内部编码 整数编码(Coding for integers) 二进制编码的十进制(Binary coded decimal——BCD) 1.03.

王俊的博客 6458

认识Spark

Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发的通用内存并行计算框架Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。当前百度的Spark已应用于大搜索、直达号、百度大数据等业务;

2302_80385233的博客 905

魔兽世界怀旧服宏命令全解析:从自动换装到智能判定,老玩家才知道的黑科技

本文全面解析魔兽世界怀旧服宏命令的高级应用,从自动换装到智能判定,揭秘老玩家专属的黑科技技巧。深入探讨怀旧服特有的宏命令机制,包括施法队列、装备切换系统和职业专属技巧,帮助玩家在经典旧世版本中提升战斗效率。

weixin_29230865的博客 731

PLS-PM with R 偏最小二乘路径建模 (R语言)

1. 引入 1.1. 安装plspm包 plspm 是一个用于执行偏最小二乘路径建模分析的 r 程序包。 在 CRAN 上可以免费下载: Http://cran.r-project.org/web/packages/plspm/index.html. 此后,通过以下代码在r中安装并加载该程序包即可。 install.packages("plspm") library("plspm") 2. 一些简单概念 2.1. 潜变量和观测变量 不少变量如满意度、成功指数是无法通过观测得到

Wowlittlemoon的博客 1万+

PHP调用spark模型,Sparksql的内置函数的使用以及案例

开发环境:spark:2.2.0工具:IDEAOS:Windows数据文件:001E8CB5AB11,ASUSTek,2018-07-12 14:00:57,2018-07-12 14:00:57,2018-07-12 14:00:57,未知,僵尸屏,00023242DDEB7,其他,2018-07-12 14:01:04,2018-07-12 14:01:04,2018-07-12 14:03:...

weixin_34337134的博客 985

【低空经济】低空无人驾驶航空器运行管理系统设计方案

低空无人驾驶航空器运行管理系统(以下简称“系统”)旨在为低空域内的无人驾驶航空器(UAV)提供高效、安全、智能的运行管理服务。系统通过集成先进的通信、导航、监控、数据处理和人工智能技术,实现对低空域内无人驾驶航空器的实时监控、动态调度、风险评估和应急响应,确保其在复杂空域环境中的安全运行。系统的核心功能包括空域管理、飞行计划审批、实时监控、冲突预警、应急管理和数据分析。空域管理模块负责划分和管理低空域资源,确保不同飞行任务之间的空域隔离和高效利用。

2502_92579126的博客 1140

php提交spark,Spark源码分析.Job提交详情 | Windows | 传承者_阿黑颜,编程词典,路由器,系统,游戏心得,游戏攻略,资讯,交易所,Photoshop,ps,cms,wordp...

在第一篇文章中提到了一次action操作会触发RDD的延迟计算,我们把这样的一次计算称作一个Job。我们看下一个job的提交过程。我们用最常见的collect举例。调用栈:1. RDD.collect()2. SparkContext.runJob()3. DAGScheduler.runJob()4. DAGScheduler.submitJob5. DAGSchedulerEventProce...

weixin_29009401的博客 235

VM下安装linux虚拟机(ubuntu)和Intel parallel XE 2013(ifort2013)

VM下安装ubuntu和ifort2013跑自己的模式 由于新冠疫情,本人只能在家工作,很多重要的文件和程序都留在了办公室的linux机器上,工作无法正常开展。本来准备去办公室把机器搬回家不曾想学校所有门禁都关闭,不许进入,何时解禁也没有明确日期。科研不能等人,没条件科研只能想办法创造条件了。 以前在自己的笔记本(windows)上装过一次VM和ifort但无奈程序不能正常跑,所以之前就放弃了。本...

pangdahai3366的博客 1498

【AI Infra】Perfetto性能分析工具指南

Perfetto是一款开源性能分析工具,提供系统级和应用级的活动数据追踪功能。其界面分为四个区域:左侧操作区(包含Trace查看、SQL查询、预置分析等功能)、上方信息区、中间图形化展示区以及下方详细信息区。工具支持快捷键操作(w/s缩放、a/d移动、m标记等),并能高效处理大体积Trace文件。通过Timeline分析可发现性能瓶颈,如案例中update_actor耗时过高的问题,最终定位到CPU offloading导致的MemcpyH2D操作耗时过长,提出了优化方案。Perfetto相比Systrac

baiweizeng的博客 1510

spark分组排序二

文章目录前言源码总结 前言 在[sarpk分组排序一](https://editor.youkuaiyun.com/md/?articleId=121964235)一文中最后提到,此方案可能会导致内存溢出。 源码 import org.apache.spark.{Partitioner, SparkConf, SparkContext} object Demo2 { def main(args: Array[String]): Unit = { val sc = new SparkContext(

huyang0101的博客 1435

XCP实战系列介绍07-使用ASAP2 Editor生成A2l文件详解

介绍通过ASAP2 Editor工具生成A2l文件步骤详解

initiallizer的博客 7298

Spark二、Spark技术栈之Spark Core

spark核心:包括RDD、RDD算子、RDD的持久化/缓存、累加器和广播变量。

eight_Jessen的博客 1545

11、ThingsBoard集群部署k8s

今天终于有时间去搞这个啦,拖了很久了,一直没时间,因为我本地没有那么多机器资源,开虚拟机不够,如果租用阿里云服务器,需要有充值的时间,因为这个费用是按小时付费,需要有连贯的时间来搞才行,今天恰好有时间,就开始搞了,弄成功搞出来了,特地写博客记录下来。

AldrichEugene 992

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Spark】二、Spark集群搭建

1、机器部署 准备两台以上Linux服务器,安装好JDK1.7 ​​​​​​​2、下载Spark安装包 http://www.apache.org/dyn/closer.lua/spark/spark-1.5.2/spark-1.5.2-bin-hadoop2.6.tgz 3、上传、解压安装包 上传spark-1.5.2-bin-hadoop2.6.t...

u014526017的博客 283

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Spark学习(二)Spark集群的搭建

Spark集群一、Spark集群的四种运行模式二、基于Standalone的Spark集群搭建三、基于Standalone的高可用Spark集群搭建 一、Spark集群的四种运行模式 1、Local 单机运行,一般用于开发测试。 2、Yarn Spark客户端直接连接Yarn,不需要额外构建Spark集群。 3、Standalone 构建一个由Master+Worker构成的Spark集群,Spa...

滴水穿石的博客 3917

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java技术栈 —— Spark入门(二)之实时WordCount

实验环境:假设你的用户为root,以下软件安装路径为/opt实验结构图。

键盘国治理专家的博客 1079

Spark二刷

查看Spark-shell运行任务情况 4040SparkMaster内部通信 7077Standalone模式下,SparkMaster Web端口 8088历史服务器 18080foldByKey。

m0_54501766的博客 170

Spark——实验二:Spark安装与验证

文章目录一. 实验目的二. 实验内容三. 实验步骤及结果分析 1. 基于ubuntukylin14.04(10),安装spark,形成ubuntukylin14.04(11) 1.1 下载spark-2.1.0-bin-without-hadoop.tgz 1.2 安装Spark 1.3 修改Spark配置文件spark-env.sh 1.4 验证Spark 2. 基于ubuntukylin14.04(11),安装sbt0.13.15,形成ubuntukylin14.04(14) 2.1 下载sbt0.13

maochaofei的博客 3473

Spark 学习【二】

闭包 广播变量、计数器、自定义累加器 宽依赖、窄依赖 Spark作业提交 Spark 配置&参数 监控/ Web UI 4040

qq_45494908的博客 1405

Spark(二)Spark安装入门

目录: 2、Spark安装入门 2.1、Spark安装部署 2.1.1、Spark下载: 2.1.2、安装前准备: 2.1.3、配置环境变量: 2.1.4、配置Spark环境: 2.1.5、启动Spark集群 2.2、Spark中的Scale的shell 2.3、Spark核心概念简介 2.4、独立应用 2.4.1、初始化SparkContext 2.4.2、构建独立应用 ...

myroncham的博客 1281

2023 Spark 实验二:IDEA 安装及配置

2023 Spark 实验二:IDEA 安装及配置 去发现同类优质开源项目:https://gitcode.com/ 简介 本资源文件详细介绍了如何在 Windows 系统中下载并安装 IntelliJ IDEA 2019.2.3,并配置 Scala 插件和 SDK。适合初学者和开发者参考。 安装步骤 第一步:下载安装包 下载文件名称为 ideaIU-2019.2.3.exe 的安装包。 建议将...

gitblog_06584的博客 454

Spark(二)Spark Core

Spark(二)Spark Core

ks_1998的博客 1186

Spark基础二

textFile(path):读取外部数据源,支持本地文件系统和hdfs文件系统.

MSJ3917的博客 787
上一篇: spark的认识(一)
下一篇: Spark的认识(三)
JunMoXiaoPro
博客等级 码龄10年 10粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值