天天看點

python spark進行大資料分析_SPARK快速大資料分析

1 資料分析導論

1.1 spark 是什麼

1.1.1 特點(記憶體中計算)

​ 實作了快速而通用的叢集計算平台。擴充了MapReduce計算模型,支援更多的計算模式,包括互動處理,批處理,流出來,疊代算法。提供豐富的接口,基于python,scala,java,sql簡單應用api。

1.2 spark 組成

​ Spark SQL 結構化資料,Spark Streaming 實時計算,MLib 機器學習,Gragh X 圖計算,Spark Core , 獨立排程器 ,YARN ,Mesos

1.2.1 Spark SQL 結構化資料

​ spark sql 是 spark 用來操作結構化資料的程式包,支援多種資料源(Hive Sql , parquet , json)。與RDD程式設計的資料操作方式相結合。

1.2.2 Spark Streaming 實時計算

​ spark streaming 是spark 提供對實時資料進行流失計算的元件(消息隊列,伺服器日志)。

1.2.3 MLlib 機器學習

​ MLlib 提供了多種的機器學習算法,分類,回歸,聚類,協同過濾等。提供模型評估、資料導入等額外的支援功能

1.2.4 Gragh x 圖計算

​ Gragh x 圖計算算法

1.2.5 Spark Core

​ Spark Core 實作 spark 的基本功能,包含任務排程,記憶體管理,錯誤恢複,與存儲系統互動子產品。對彈性分布式資料集RDD的定義

1.2.6 叢集管理器

​ 設計實作可以一個計算結點到幾千個計算結點之間伸縮計算,支援各種叢集管理器

2 spark 下載下傳與入門

2.1 下載下傳連結

cd ~

tar -xf spark-1.2.0-bin-hadoop2.4.tgz

cd spark-1.2.0-bin-hadoop2.4

ls

/bin :spark互動可執行檔案

/core streaming python 主要元件源代碼

/examples 可以檢視運作的API

2.2 Spark - pySpark與scala的shell

​ 啟動指令

bin/pySpark bin/spark-shell

​ 修改日志級别:/conf/log4j.properties log4j.rootCategory=INFO,console=>WARN,console

2.2.1 Scala 行數統計

val lines = sc.textFile("README.md");

lines.count();

lines.first();

​ 退出指令

ctrl + d

2.3 Spark 核心概念

​ 每一個Spark 應用都由一個驅動器程式發起叢集上的各種并行操作,驅動器程式包含應用main函數且定義叢集上的分布式資料集。驅動程式通過一個SparkContext對象通路spark。這個對象代表着對計算叢集的一個連接配接。shell啟動自動建立一個sparkcontext對象。然後就可以建立RDD。然後進行各種操作。比如sc.textFile()

val lines = sc.textFile("README.md");

var pyLines = lines.filter(_.contains("Python"))

pyLines.first();

2.3.1 初始化SparkContext

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

import org.apache.spark.SparkContext._

val conf = new SparkConf().setMaster("local").setAppName("test")//叢集的url,應用名稱初始化配置val sc = new SpackContext(conf)//建立RDD

2.3.2 單詞統計

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

import org.apache.spark.SparkContext._

val conf = new SparkConf().setMaster("local").setAppName("test")//叢集的url,應用名稱初始化配置

val sc = new SpackContext(conf)//建立RDD

val input = sc.textFile(inputFile)

val words = input.flatMap(line =>line.split(" "));

val counts = words.map(word=>(word, 1)).reduceByKey{case(x,y) => x+y}