① spark和hadoop的區別
hadoop:是分布式存儲系統,同時提供分布式計算環境,存儲稱為hdfs,計算稱為maprece 簡稱MR。
spark:是一個分布式計算框架,類似於hadoop的運算環境,但是比maprece提供了更多支持,與其他系統的對接,一些高級演算法等,可以獨立運行,也可以使用hdfs上的數據,調度任務也可以基於hadoop的yarn來管理。由於整個計算都可以在內存中完成,所以速度自然比傳統的MR計算的快。除此之外spark運行時佔用的系統資源也比MR小得多,相比較屬於輕量級運行。最核心的也是它提供的分析學習演算法,這個大部分分布式架構不具有的。
一般spark下的編程多數基於scala來完成,而非java,所以想學習spark一定要學習scala語言
② spark與hadoop相比,存在哪些缺陷
穩定性方面,由於代碼質量問題,Spark長時間運行會經常出錯,在架構方面,由於大量數據被緩存在RAM中,Java回收垃圾緩慢的情況嚴重,導致Spark性能不穩定,在復雜場景中SQL的性能甚至不如現有的Map/Rece。
不能處理大數據,單獨機器處理數據過大,或者由於數據出現問題導致中間結果超過RAM的大小時,常常出現RAM空間不足或無法得出結果。然而,Map/Rece運算框架可以處理大數據,在這方面,Spark不如Map/Rece運算框架有效。
不能支持復雜的SQL統計;目前Spark支持的SQL語法完整程度還不能應用在復雜數據分析中。在可管理性方面,SparkYARN的結合不完善,這就為使用過程中埋下隱憂,容易出現各種難題。
③ java spark獲取gz文件時怎樣分區
spark 讀取HDFS文件,首先會判斷文件是否可分,可切分即可分成多個partition,不可切分則整個文件為一個partition ,gz等壓縮文件屬於不可切分文件,所以設置分區無效,如果想要可變分區,需要對文件加索引支持可切分
④ 怎樣使用java開發spark程序
1、Spark 是基於內存的分布式計算框架,因為無需利用 HDFS 作為中間結果保存的介質,性能杠杠的。Spark 是由 Scala 實現的,所以最好學習一下 Scala(當然用 Python 和 Java 也是可以的)。(http://wdxtub.com/2016/04/11/spark-guide/)
為啥要用 Spark?
快!基於內存
易用!Scala, Java, Python 都支持,還有互動式的 Python 和 Scala 的 shell,可以快速進行原型開發
通用!批處理、交互查詢、流處理、機器學習、圖計算,樣樣精通
兼容!可以使用各種現有的技術作為底層,也可以自己獨立運行
Spark 生態系統有哪些組件?
Spark SQL: 類似 Hive,支持在不同 RDD 上進行類似 SQL 的操作
Spark Streaming: 對於流數據進行處理
MLlib: 機器學習庫
GraphX: 圖並行框架
RDD 是什麼?
在 Spark 框架中,最重要的是一類新的數據抽象,叫做 Resilient Distributed Dataset - RDD。RDD 是分布式存儲在集群中的內存對象,按照值的范圍或者哈希結果進行劃分。與此同時 RDD 會記錄關於數據進行的各種操作(每次操作都會生成新的 RDD),這樣即使節點掛掉,也能夠根據之前的操作日誌重新得到損失的 RDD
RDD 支持2種操作:
轉換(transformation):從現有的數據集創建一個新的數據集
動作(actions):在數據集上運行計算後,返回一個值給驅動程序
2、實戰java開發spark程序
https://my.oschina.net/csmw00/blog/672869
3、spark集群環境搭建
http://nekomiao.me/2016/12/05/spark-install-distributed/
⑤ 剛學習spark,想上傳文件給hdfs,是不是需要hadoop然後java編程這樣是用eclip
spark會把hdfs當做一個數據源來處理, 所以數據存儲都要做, 之後編程是從Hadoop改成spark就可以了. 是否用eclipse無所謂, 只要能編譯運行就可以
⑥ 如何將java代碼在spark運行
我們首先提出這樣一個簡單的需求:
現在要分析某網站的訪問日誌信息,統計來自不同IP的用戶訪問的次數,從而通過Geo信息來獲得來訪用戶所在國家地區分布狀況。這里我拿我網站的日誌記錄行示例,如下所示:
1
121.205.198.92
- - [21/Feb/2014:00:00:07 +0800] "GET /archives/417.html HTTP/1.1" 200 11465 "http://shiyanjun.cn/archives/417.html/" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0"
2
121.205.198.92
- - [21/Feb/2014:00:00:11 +0800] "POST /wp-comments-post.php HTTP/1.1" 302 26 "http://shiyanjun.cn/archives/417.html/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
3
121.205.198.92
- - [21/Feb/2014:00:00:12 +0800] "GET /archives/417.html/ HTTP/1.1" 301 26 "http://shiyanjun.cn/archives/417.html/" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0"
4
121.205.198.92
- - [21/Feb/2014:00:00:12 +0800] "GET /archives/417.html HTTP/1.1" 200 11465 "http://shiyanjun.cn/archives/417.html" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0"
5
121.205.241.229
- - [21/Feb/2014:00:00:13 +0800] "GET /archives/526.html HTTP/1.1" 200 12080 "http://shiyanjun.cn/archives/526.html/" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0"
6
121.205.241.229
- - [21/Feb/2014:00:00:15 +0800] "POST /wp-comments-post.php HTTP/1.1" 302 26 "http://shiyanjun.cn/archives/526.html/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
Java實現Spark應用程序(Application)
我們實現的統計分析程序,有如下幾個功能點:
從HDFS讀取日誌數據文件
將每行的第一個欄位(IP地址)抽取出來
統計每個IP地址出現的次數
根據每個IP地址出現的次數進行一個降序排序
根據IP地址,調用GeoIP庫獲取IP所屬國家
列印輸出結果,每行的格式:[國家代碼] IP地址 頻率
下面,看我們使用Java實現的統計分析應用程序代碼,如下所示:
001
package org.shirdrn.spark.job;
002
003
import java.io.File;
004
import java.io.IOException;
005
import java.util.Arrays;
006
import java.util.Collections;
007
import java.util.Comparator;
008
import java.util.List;
009
import java.util.regex.Pattern;
010
011
import org.apache.commons.logging.Log;
012
import org.apache.commons.logging.LogFactory;
013
import org.apache.spark.api.java.JavaPairRDD;
014
import org.apache.spark.api.java.JavaRDD;
015
import org.apache.spark.api.java.JavaSparkContext;
016
import org.apache.spark.api.java.function.FlatMapFunction;
017
import org.apache.spark.api.java.function.Function2;
018
import org.apache.spark.api.java.function.PairFunction;
019
import org.shirdrn.spark.job.maxmind.Country;
020
import org.shirdrn.spark.job.maxmind.LookupService;
021
022
import scala.Serializable;
023
import scala.Tuple2;
024
025
public class IPAddressStats implements Serializable
{
026
027
private static final long serialVersionUID
= 8533489548835413763L;
028
private static final Log
LOG = LogFactory.getLog(IPAddressStats.class);
029
private static final Pattern
SPACE = Pattern.compile("
");
030
private transient LookupService
lookupService;
031
private transient final String
geoIPFile;
032
033
public IPAddressStats(String
geoIPFile) {
034
this.geoIPFile
= geoIPFile;
035
try {
036
//
lookupService: get country code from a IP address
037
File
file = new File(this.geoIPFile);
038
LOG.info("GeoIP
file: " +
file.getAbsolutePath());
039
lookupService
= new AdvancedLookupService(file,
LookupService.GEOIP_MEMORY_CACHE);
040
} catch (IOException
e) {
041
throw new RuntimeException(e);
042
}
043
}
044
045
@SuppressWarnings("serial")
046
public void stat(String[]
args) {
047
JavaSparkContext
ctx = new JavaSparkContext(args[0], "IPAddressStats",
048
System.getenv("SPARK_HOME"),
JavaSparkContext.jarOfClass(IPAddressStats.class));
049
JavaRDD<String>
lines = ctx.textFile(args[1], 1);
050
051
//
splits and extracts ip address filed
052
JavaRDD<String>
words = lines.flatMap(new FlatMapFunction<String,
String>() {
053
@Override
054
public Iterable<String>
call(String s) {
055
//
121.205.198.92 - - [21/Feb/2014:00:00:07 +0800] "GET /archives/417.html HTTP/1.1" 200 11465 "http://shiyanjun.cn/archives/417.html/" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101
Firefox/11.0"
056
//
ip address
057
return Arrays.asList(SPACE.split(s)[0]);
058
}
059
});
060
061
//
map
062
JavaPairRDD<String,
Integer> ones = words.map(new PairFunction<String,
String, Integer>() {
063
@Override
064
public Tuple2<String,
Integer> call(String s) {
065
return new Tuple2<String,
Integer>(s, 1);
066
}
067
});
068
069
//
rece
070
JavaPairRDD<String,
Integer> counts = ones.receByKey(new Function2<Integer,
Integer, Integer>() {
071
@Override
072
public Integer
call(Integer i1, Integer i2) {
073
return i1
+ i2;
074
}
075
});
076
077
List<Tuple2<String,
Integer>> output = counts.collect();
078
079
//
sort statistics result by value
080
Collections.sort(output, new Comparator<Tuple2<String,
Integer>>() {
081
@Override
082
public int compare(Tuple2<String,
Integer> t1, Tuple2<String, Integer> t2) {
083
if(t1._2
< t2._2) {
084
return 1;
085
} else if(t1._2
> t2._2) {
086
return -1;
087
}
088
return 0;
089
}
090
});
091
092
writeTo(args,
output);
093
094
}
095
096
private void writeTo(String[]
args, List<Tuple2<String, Integer>> output) {
097
for (Tuple2<?,
?> tuple : output) {
098
Country
country = lookupService.getCountry((String) tuple._1);
099
LOG.info("[" +
country.getCode() + "]
" +
tuple._1 + "\t" +
tuple._2);
100
}
101
}
102
103
public static void main(String[]
args) {
104
//
./bin/run-my-java-example org.shirdrn.spark.job.IPAddressStatsspark://m1:7077 hdfs://m1:9000/user/shirdrn/wwwlog20140222.log/home/shirdrn/cloud/programs/spark-0.9.0-incubating-bin-hadoop1/java-examples/GeoIP_DATABASE.dat
105
if (args.length
< 3)
{
106
System.err.println("Usage:
IPAddressStats <master> <inFile> <GeoIPFile>");
107
System.err.println("
Example: org.shirdrn.spark.job.IPAddressStatsspark://m1:7077 hdfs://m1:9000/user/shirdrn/wwwlog20140222.log/home/shirdrn/cloud/programs/spark-0.9.0-incubating-bin-hadoop1/java-examples/GeoIP_DATABASE.dat");
108
System.exit(1);
109
}
110
111
String
geoIPFile = args[2];
112
IPAddressStats
stats = new IPAddressStats(geoIPFile);
113
stats.stat(args);
114
115
System.exit(0);
116
117
}
118
119
}
⑦ 科普Spark,Spark是什麼,如何使用Spark
科普Spark,Spark是什麼,如何使用Spark
1.Spark基於什麼演算法的分布式計算(很簡單)
2.Spark與MapRece不同在什麼地方
3.Spark為什麼比Hadoop靈活
4.Spark局限是什麼
5.什麼情況下適合使用Spark
Spark與Hadoop的對比
Spark的中間數據放到內存中,對於迭代運算效率更高。
Spark更適合於迭代運算比較多的ML和DM運算。因為在Spark裡面,有RDD的抽象概念。
Spark比Hadoop更通用
Spark提供的數據集操作類型有很多種,不像Hadoop只提供了Map和Rece兩種操作。比如map, filter, flatMap, sample, groupByKey, receByKey, union, join, cogroup, mapValues, sort,partionBy等多種操作類型,Spark把這些操作稱為Transformations。同時還提供Count, collect, rece, lookup, save等多種actions操作。
這些多種多樣的數據集操作類型,給給開發上層應用的用戶提供了方便。各個處理節點之間的通信模型不再像Hadoop那樣就是唯一的Data Shuffle一種模式。用戶可以命名,物化,控制中間結果的存儲、分區等。可以說編程模型比Hadoop更靈活。
不過由於RDD的特性,Spark不適用那種非同步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型不適合。
容錯性
在分布式數據集計算時通過checkpoint來實現容錯,而checkpoint有兩種方式,一個是checkpoint data,一個是logging the updates。用戶可以控制採用哪種方式來實現容錯。
可用性
Spark通過提供豐富的Scala, Java,Python API及互動式Shell來提高可用性。
Spark與Hadoop的結合
Spark可以直接對HDFS進行數據的讀寫,同樣支持Spark on YARN。Spark可以與MapRece運行於同集群中,共享存儲資源與計算,數據倉庫Shark實現上借用Hive,幾乎與Hive完全兼容。
Spark的適用場景
Spark是基於內存的迭代計算框架,適用於需要多次操作特定數據集的應用場合。需要反復操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小(大資料庫架構中這是是否考慮使用Spark的重要因素)
由於RDD的特性,Spark不適用那種非同步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型不適合。總的來說Spark的適用面比較廣泛且比較通用。
運行模式
本地模式
Standalone模式
Mesoes模式
yarn模式
Spark生態系統
Shark ( Hive on Spark): Shark基本上就是在Spark的框架基礎上提供和Hive一樣的H iveQL命令介面,為了最大程度的保持和Hive的兼容性,Shark使用了Hive的API來實現query Parsing和 Logic Plan generation,最後的PhysicalPlan execution階段用Spark代替Hadoop MapRece。通過配置Shark參數,Shark可以自動在內存中緩存特定的RDD,實現數據重用,進而加快特定數據集的檢索。同時,Shark通過UDF用戶自定義函數實現特定的數據分析學習演算法,使得SQL數據查詢和運算分析能結合在一起,最大化RDD的重復使用。
Spark streaming: 構建在Spark上處理Stream數據的框架,基本的原理是將Stream數據分成小的時間片斷(幾秒),以類似batch批量處理的方式來處理這小部分數據。Spark Streaming構建在Spark上,一方面是因為Spark的低延遲執行引擎(100ms+)可以用於實時計算,另一方面相比基於Record的其它處理框架(如Storm),RDD數據集更容易做高效的容錯處理。此外小批量處理的方式使得它可以同時兼容批量和實時數據處理的邏輯和演算法。方便了一些需要歷史數據和實時數據聯合分析的特定應用場合。
Bagel: Pregel on Spark,可以用Spark進行圖計算,這是個非常有用的小項目。Bagel自帶了一個例子,實現了Google的PageRank演算法。
End.
⑧ Java大數據需要學習哪些內容
首先明確,java大數據通常指的是採用Java語言來完成一些大數據領域的開發任務,整體的學習內容涉及到三大塊,其一是Java語言基礎,其二是大數據平台基礎,其三是場景開發基礎。
Java開發包括了Java基礎,JavaWeb和JavaEE三大塊。java可以說是大數據最基礎的編程語言,一是因為大數據的本質無非就是海量數據的計算,查詢與存儲,後台開發很容易接觸到大數據量存取的應用場景。java語言基礎部分的學習內容相對比較明確,由於Java語言本身的技術體系已經比較成熟了,所以學習過程也會相對比較順利。JavaWeb開發不僅涉及到後端開發知識,還涉及到前端開發知識,整體的知識量還是比較大的,而且在學習的過程中,需要完成大量的實驗。
大數據開發包括Java基礎,MySQL基礎,Hadoop(HDFS,MapRece,Yarn,Hive,Hbase,Zookeeper,Flume,Sqoop等),Scala語言(類似於Java,Spark階段使用),Spark(SparkSQL,SparkStreaming,SparkCore等)。
學習Java大數據一定離不開具體的場景,這裡面的場景不僅指硬體場景(數據中心),還需要有行業場景支持,所以學習Java大數據通常都會選擇一個行業作為切入點,比如金融行業、醫療行業、教育行業等等。初學者可以考慮在實習崗位上來完成這個階段的學習任務
總體上來說,Java大數據的學習內容是比較多的,而且也具有一定的難度。