sparkjava,sparkjava框架

本文目錄一覽:

spark和hadoop的區別

spark和hadoop的區別:誕生的先後順序、計算不同、平台不同。

誕生的先後順序,hadoop屬於第一代開源大數據處理平台,而spark屬於第二代。屬於下一代的spark肯定在綜合評價上要優於第一代的hadoop。

計算不同spark和hadoop在分布式計算的底層思路上,其實是極為相似的,即mapreduce分布式運算模型:將運算分成兩個階段,階段1-map,負責從上游拉取數據後各自運算,然後將運算結果shuffle給下游的reduce,reduce再各自對通過shuffle讀取來的數據進行聚合運算spark和hadoop在分布式計算的具體實現上,又有區別;hadoop中的mapreduce運算框架,一個運算job,進行一次map-reduce的過程;而spark的一個job中,可以將多個map-reduce過程級聯進行。

平台不同spark和hadoop區別是,spark是一個運算平台,而hadoop是一個複合平台(包含運算引擎,還包含分布式文件存儲系統,還包含分布式運算的資源調度系統),所以,spark跟hadoop來比較的話,主要是比運算這一塊大數據技術發展到目前這個階段,hadoop主要是它的運算部分日漸式微,而spark目前如日中天,相關技術需求量大,offer好拿。

spark java本地環境怎麼搭建

1. 環境準備

Eclipse 請不要使用最新的 Neon(4.6) ,太多Bug了。 還是使用最新的 Mars(4.5) 系列吧

JDK 版本8.x (Linux推薦Oracle, 沒有測試過OpenJDK)

因為只是用Java,因此無需安裝Scala及其相應的插件

2. 創建一個新的maven項目

3. pom.xml

org.apache.hadoop

hadoop-client

2.6.0

javax.servlet

*

org.apache.spark

spark-core_2.10

1.6.1

org.apache.spark

spark-streaming_2.10

1.6.1

org.apache.spark

spark-mllib_2.10

1.6.1

org.scala-lang

scala-library

2.10.5

這裡只列出了必要的幾個依賴。 其他的請根據你自己的項目需求添加

4. 使用maven打包

之後在Goal 之中填寫clean package 即可

如果在修改了與Spark相關的代碼之後,需要重新編譯打包才行。 否則會有異常提示。

5. 代碼編寫注意事項:

在創建JavaSparkContext的時候,需要把自己加進去。

public static JavaSparkContextgetContext(String taskName) {

JavaSparkContextsc = new JavaSparkContext(SparkConnUtils.getSparkConf(taskName));

sc.addJar(“target/sparkstat-0.0.1-SNAPSHOT.jar”);

return sc;

}

其中target/sparkstat-0.0.1-SNAPSHOT.jar是maven 運行之後生成的完整的jar包

spark和java的關係

通常大家只是說Spark是基於內存計算的,速度比MapReduce要快。或者說內存中迭代計算。其實我們要抓住問題的本質。總結有以下幾點:

1、Spark vs MapReduce ≠ 內存 vs 磁盤

其實Spark和MapReduce的計算都發生在內存中,區別在於:

MapReduce通常需要將計算的中間結果寫入磁盤,然後還要讀取磁盤,從而導致了頻繁的磁盤IO。

Spark則不需要將計算的中間結果寫入磁盤,這得益於Spark的RDD(彈性分布式數據集,很強大)和DAG(有向無環圖),其中DAG記錄了job的stage以及在job執行過程中父RDD和子RDD之間的依賴關係。中間結果能夠以RDD的形式存放在內存中,且能夠從DAG中恢復,大大減少了磁盤IO。

2、Spark vs MapReduce Shuffle的不同

Spark和MapReduce在計算過程中通常都不可避免的會進行Shuffle,兩者至少有一點不同:

MapReduce在Shuffle時需要花費大量時間進行排序,排序在MapReduce的Shuffle中似乎是不可避免的;

Spark在Shuffle時則只有部分場景才需要排序,支持基於Hash的分布式聚合,更加省時;

3、多進程模型 vs 多線程模型的區別

MapReduce採用了多進程模型,而Spark採用了多線程模型。多進程模型的好處是便於細粒度控制每個任務佔用的資源,但每次任務的啟動都會消耗一定的啟動時間。就是說MapReduce的Map Task和Reduce Task是進程級別的,而Spark Task則是基於線程模型的,就是說mapreduce 中的 map 和 reduce 都是 jvm 進程,每次啟動都需要重新申請資源,消耗了不必要的時間(假設容器啟動時間大概1s,如果有1200個block,那麼單獨啟動map進程事件就需要20分鐘)

Spark則是通過復用線程池中的線程來減少啟動、關閉task所需要的開銷。(多線程模型也有缺點,由於同節點上所有任務運行在一個進程中,因此,會出現嚴重的資源爭用,難以細粒度控制每個任務佔用資源)

總結:關於Spark為什麼比MapReduce快,或者Spark速度快於MapReduce的原因,總結至少有這幾點不同之處吧。

Spark 中用 Scala 和 java 開發有什麼區別

1,構建系統的選擇,sbt更合適用來構建Scala工程,maven更合適用來構建Java工程

2,對於spark中的API來說,Java和Scala有差別,但差別並不大

3,如果用Scala開發spark原型程序,可以用spark-shell“打草稿”,或者直接使用spark-shell做交互式實時查詢

4,用Scala代碼量將減少甚至一個數量級,不過Scala的使用門檻較高

建議:使用Scala構建spark作業,因為spark本身為sbt所構建,同時使用Scala開發spark作業將有助於理解spark的實現機制

Scala相對Java語法更豐富,更簡潔,寫起來更像腳本,能夠提高開發效率。

使用Java的話代碼會規範些,不過太臃腫,代碼量更大。

另外Spark基本使用函數式編程,使用Java的話可能需要寫一大堆匿名類,而Scala只需要一個lambda表達式。

Java不支持自動類型推導,RDD類基本都是范型,聲明時需要寫一串類類型,而Scala基本可以省略變量類型。

另外,如果喜歡,可以混合Java和Scala,因為二者最終都是編譯成class文件,使用Scala能夠隨意調用Java實現的類和方法。

從表面上看,無論採用哪種語言,都能完成一樣的功能,只是代碼量有多有少,開發人員根據自己的情況選擇使用Java還是Scala都可。

據說目前最新的Java 8已經支持函數式接口了,Java 9也將推出Java Shell功能,慢慢地會變得和Scala一樣簡潔

原創文章,作者:DLFW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/132983.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DLFW的頭像DLFW
上一篇 2024-10-03 23:55
下一篇 2024-10-03 23:55

相關推薦

  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • agavi開發框架

    Agavi是一個基於MVC模式的Web應用程序開發框架,以REST和面向資源的設計為核心思想。本文章將從Agavi的概念、優點、使用方法和實例等方面進行詳細介紹。 一、概念 Aga…

    編程 2025-04-29
  • Python unittest框架用法介紹

    Python unittest框架是Python自帶的一種測試框架,可以用來編寫並運行測試用例。在本文中,我們將從以下幾個方面詳細介紹Python unittest框架的使用方法和…

    編程 2025-04-29
  • com.alipay.sofa.bolt框架

    com.alipay.sofa.bolt框架是一款高性能、輕量級、可擴展的RPC框架。其廣泛被應用於阿里集團內部服務以及阿里雲上的服務。該框架通過NIO支持高並發,同時還內置了多種…

    編程 2025-04-29
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28
  • LuaEP:一款強大的Lua開發框架

    LuaEP是一個集成了可以快速開發web應用程序所需的組件的Lua開發框架。它以Lua語言為基礎,提供了許多常用接口和庫,使得開發者不需要從頭開始編寫web應用程序,而是專註於業務…

    編程 2025-04-28
  • Java持久層框架的複合主鍵實現

    用Java持久層框架來操作數據庫時,複合主鍵是常見的需求。這篇文章將詳細闡述javax.persistence複合主鍵的實現方式,並提供完整的示例代碼。 一、複合主鍵的定義 複合主…

    編程 2025-04-27
  • AMTVV:一個全能的開發框架

    AMTVV是一個面向現代Web應用程序的全能開發框架,它可以讓你的工作更加高效。AMTVV能夠處理各種各樣的技術棧,包括但不限於React、Angular、Vue和TypeScri…

    編程 2025-04-27
  • Python語言的MVC框架

    本文將從以下幾個方面詳細闡述Python語言的MVC框架: 一、MVC框架的基本概念 一般而言,MVC框架被分為Model,View,Controller三部分。Model代表數據…

    編程 2025-04-27

發表回復

登錄後才能評論