欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spark學習筆記之Spark中的RDD的具體使用

 更新時間:2019年06月14日 10:17:20   作者:EVAO_大個子  
這篇文章主要介紹了Spark學習筆記之Spark中的RDD的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1. Spark中的RDD

  • Resilient Distributed Datasets(彈性分布式數(shù)據(jù)集)
  • Spark中的最基本的抽象
  • 有了RDD的存在我們就可以像操作本地集合一樣操作分布式的數(shù)據(jù)
  • 包含所有元素的分區(qū)的集合
  • RDD包含了很多的分區(qū)
  • 2. RDD中的彈性
  • RDD中的數(shù)據(jù)是可大可小的
  • RDD的數(shù)據(jù)默認情況下存放在內存中的,但是在內存資源不足時,Spark會自動將RDD數(shù)據(jù)寫入磁盤
  • RDD有自動容錯功能,當其中一個RDD中的分區(qū)的數(shù)據(jù)丟失,或者當前節(jié)點故障時,rdd會根據(jù)依賴關系重新計算該分區(qū)的數(shù)據(jù)

3. RDD在Spark中的作用

迭代式計算

其主要實現(xiàn)思想就是RDD,把所有計算的數(shù)據(jù)保存在分布式的內存中。迭代計算通常情況下都是對同一個數(shù)據(jù)集做反復的迭代計算,數(shù)據(jù)在內存中將大大提升IO操作。這也是Spark涉及的核心:內存計算

交互式計算

因為Spark是用scala語言實現(xiàn)的,Spark和scala能夠緊密的集成,所以Spark可以完美的運用scala的解釋器,使得其中的scala可以向操作本地集合對象一樣輕松操作分布式數(shù)據(jù)集

4. Spark中的名詞解釋

  • ClusterManager :在Standalone模式中即為Master(主節(jié)點),控制整個集群,監(jiān)控Worker。在YARN模式中為資源管理器
  • Worker:從節(jié)點,負責控制計算節(jié)點,啟動Executor。在YARN模式中為NodeManager,負責計算節(jié)點的控制。
  • Driver 運行Application的main()函數(shù)并創(chuàng)建SparkContext
  • Executor (CoarseGrainedExecutorBackend)在worker node上執(zhí)行任務的組件、用于啟動線程池運行任務。每個Application擁有獨立的一組Executors
  • SparkContext :整個應用的上下文,控制應用的生命周期
  • RDD :Spark中的最基本的數(shù)據(jù)抽象
  • DAG Scheduler : 根據(jù)DAG(有向無環(huán)圖)切分stage,并且生成task,以taskset的形式返回
  • Task Schedual: 調度task,把task交給executor
  • Stage: 一個Spark作業(yè)一般包含一到多個Stage。
  • Task :一個Stage包含一到多個Task,通過多個Task實現(xiàn)并行運行的功能
  • Transformations :轉換操作,Transformation是lazy的,不會馬上執(zhí)行,只有當調用action時才會執(zhí)行
  • Actions : 動作
  • SparkEnv : 線程級別的上下文,存儲運行時的重要組件的引用

5. 創(chuàng)建RDD的兩種方式

通過并行化集合創(chuàng)建RDD(用于測試)

val list = List("java c++ java","java java java c++")
val rdd = sc.parallelize(list)

通過加載hdfs中的數(shù)據(jù)創(chuàng)建RDD(生產環(huán)境)

val rdd = sc.textFile("hdfs://uplooking01:8020/sparktest/")

6. IDEA開發(fā)Spark

6.1 pom依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.uplooking.bigdata</groupId>
  <artifactId>2018-11-08-spark</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <scala.version>2.11.8</scala.version>
    <spark.version>2.2.0</spark.version>
    <hadoop.version>2.7.5</hadoop.version>
  </properties>

  <dependencies>
    <!-- 導入scala的依賴 -->
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
    </dependency>

    <!-- 導入spark的依賴 -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>
    <!-- 指定hadoop-client API的版本 -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>${hadoop.version}</version>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <!--編譯Scala-->
      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>3.2.2</version>
        <executions>
          <execution>
            <id>scala-compile-first</id>
            <phase>process-resources</phase>
            <goals>
              <goal>add-source</goal>
              <goal>compile</goal>
            </goals>
          </execution>
          <execution>
            <id>scala-test-compile</id>
            <phase>process-test-resources</phase>
            <goals>
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <!--編譯Java-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <!-- 打jar插件 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.3</version>
        <configuration>
          <createDependencyReducedPom>false</createDependencyReducedPom>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <filters>
                <filter>
                  <artifact>*:*</artifact>
                  <excludes>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                  </excludes>
                </filter>
              </filters>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>
</project>

6.2 編寫spark程序

val conf = new SparkConf()
conf.setAppName("Ops1")
val sc = new SparkContext(conf)
val rdd1: RDD[String] = sc.parallelize(List("java c+ java", "java java c++"))
val ret = rdd1.collect().toBuffer
println(ret)

6.3 打包

6.4 在Driver上運行jar包

spark-submit --master spark://uplooking01:7077 --class com.uplooking.bigdata.spark01.Ops1 original-spark-1.0-SNAPSHOT.jar

7. 本地運行Spark程序

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

import scala.collection.mutable

object Ops1 {
 def main(args: Array[String]): Unit = {
  val conf = new SparkConf()
  conf.setAppName("Ops1")
  conf.setMaster("local[4]")
  val sc = new SparkContext(conf)
  //一般不會指定最小分區(qū)數(shù)
  val rdd1 = sc.textFile("hdfs://uplooking01:8020/sparktest/")
  val rdd2: RDD[String] = rdd1.flatMap(line => line.split(" "))
  val rdd3: RDD[(String, Int)] = rdd2.map(word => (word, 1))
  val rdd4: RDD[(String, Int)] = rdd3.reduceByKey(_ + _)
  val ret: mutable.Buffer[(String, Int)] = rdd4.collect().toBuffer
  println(ret)
  println(rdd1.partitions.length)
 }
}

8. RDD中的分區(qū)數(shù)

并行化的方式指定分區(qū)數(shù)(一般會指定分區(qū)數(shù))

  • 默認如果創(chuàng)建RDD時不指定分區(qū)數(shù),那么就會創(chuàng)建cpu核數(shù)個分區(qū)
  • 手動指定分區(qū)數(shù)
val rdd = sc.parallelize(List("java c+ java", "java java c++"), 2)

textFile的方式指定分區(qū)數(shù)

  • 默認如果創(chuàng)建RDD時不指定最小分區(qū)數(shù),那么就會創(chuàng)建至少2個分區(qū)的RDD
  • 一般不會指定最小分區(qū)數(shù)
  • 不指定最小分區(qū)數(shù),有切片的數(shù)量個分區(qū)

9. Spark作業(yè)的運行流程

  • 構建DAG
  • 根據(jù)DAG切分Stage,每個Stage對應一組相同計算邏輯不能計算數(shù)據(jù)的Task,以TastSet的形式返回
  • TaskSchedual調度task,把task發(fā)送到executor中去,用Runnable進行包裝進給線程池
  • Executor執(zhí)行task

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 模擬Mybatis的實現(xiàn)方法

    模擬Mybatis的實現(xiàn)方法

    本文通過實例代碼給大家分享了模擬Mybatis的實現(xiàn)方法,需要的朋友參考下吧
    2017-09-09
  • 利用Java實現(xiàn)更改Word中的頁面大小和頁面方向

    利用Java實現(xiàn)更改Word中的頁面大小和頁面方向

    這篇文章主要為大家詳細介紹了一種高效便捷的方法——通過Java應用程序,以編程方式更改Word中的頁面大小和頁面方向,感興趣的可以了解一下
    2023-03-03
  • java 虛擬機深入了解

    java 虛擬機深入了解

    這篇文章主要介紹了java 虛擬機深入了解的相關資料,ava虛擬機有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統(tǒng),需要的朋友可以參考下
    2017-03-03
  • java從文件中讀取數(shù)據(jù)的六種方法

    java從文件中讀取數(shù)據(jù)的六種方法

    本文主要介紹了java從文件中讀取數(shù)據(jù)的方法,詳細的介紹了六種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Spring實戰(zhàn)之使用XML方式管理聲明式事務操作示例

    Spring實戰(zhàn)之使用XML方式管理聲明式事務操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之使用XML方式管理聲明式事務操作,結合實例形式詳細分析了Spring XML方式管理聲明式事務具體步驟、配置、接口及使用技巧,需要的朋友可以參考下
    2020-01-01
  • 關于BigDecimal類型數(shù)據(jù)的絕對值和相除求百分比

    關于BigDecimal類型數(shù)據(jù)的絕對值和相除求百分比

    這篇文章主要介紹了關于BigDecimal類型數(shù)據(jù)的絕對值和相除求百分比,Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數(shù)進行精確的運算,需要的朋友可以參考下
    2023-07-07
  • datax-web在windows環(huán)境idea中模塊化打包部署操作步驟

    datax-web在windows環(huán)境idea中模塊化打包部署操作步驟

    這篇文章主要介紹了datax-web在windows環(huán)境idea中模塊化打包部署操作步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • java實現(xiàn)微信掃碼支付功能

    java實現(xiàn)微信掃碼支付功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)微信掃碼支付功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Java 實現(xiàn)協(xié)程的方法

    Java 實現(xiàn)協(xié)程的方法

    這篇文章主要介紹了Java 實現(xiàn)協(xié)程的方法,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-10-10
  • 詳解SpringBoot如何優(yōu)雅的處理免登錄接口

    詳解SpringBoot如何優(yōu)雅的處理免登錄接口

    在項目開發(fā)過程中,會有很多API接口不需要登錄就能直接訪問,比如公開數(shù)據(jù)查詢之類的,常規(guī)處理方法基本是 使用攔截器或過濾器,攔截需要認證的請求路徑,本文介紹一個更優(yōu)雅的方法自定義注解的方式,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2024-01-01

最新評論