本文目錄一覽:
- 1、java 在本地調試spark引用異常如何解決
- 2、spark java本地環境怎麼搭建
- 3、spark和java的關係
- 4、Spark 中用 Scala 和 java 開發有什麼區別
- 5、java的怎麼操作spark的dataframe
java 在本地調試spark引用異常如何解決
你沒有管理權限,意思如下:具有視圖權限的用戶:SET(管理員);具有視圖權限的組:SET();具有修改權限的USER:SET(管理員);具有修改權限的組:SET();
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一樣簡潔
java的怎麼操作spark的dataframe
t java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.SaveMode;
public class Demo_Mysql3 {
private static Logger logger = Logger.getLogger(Demo_Mysql2.class);
public static void main(String[] args) {
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/199963.html