sparksql腳本
⑴ 數據處理方式
什麼是大數據:大數據(big data),指無法在一定時間范圍內用常規軟體工具進行捕捉、管理和處理的數據集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信息資產。
大數據的5V特點:Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價值密度)、Veracity(真實性),網路隨便找找都有。
大數據處理流程:
1.是數據採集,搭建數據倉庫,數據採集就是把數據通過前端埋點,介面日誌調用流數據,資料庫抓取,客戶自己上傳數據,把這些信息基礎數據把各種維度保存起來,感覺有些數據沒用(剛開始做只想著功能,有些數據沒採集, 後來被老大訓了一頓)。
2.數據清洗/預處理:就是把收到數據簡單處理,比如把ip轉換成地址,過濾掉臟數據等。
3.有了數據之後就可以對數據進行加工處理,數據處理的方式很多,總體分為離線處理,實時處理,離線處理就是每天定時處理,常用的有阿里的maxComputer,hive,MapRece,離線處理主要用storm,spark,hadoop,通過一些數據處理框架,可以吧數據計算成各種KPI,在這里需要注意一下,不要只想著功能,主要是把各種數據維度建起來,基本數據做全,還要可復用,後期就可以把各種kpi隨意組合展示出來。
4.數據展現,數據做出來沒用,要可視化,做到MVP,就是快速做出來一個效果,不合適及時調整,這點有點類似於Scrum敏捷開發,數據展示的可以用datav,神策等,前端好的可以忽略,自己來畫頁面。
數據採集:
1.批數據採集,就是每天定時去資料庫抓取數據快照,我們用的maxComputer,可以根據需求,設置每天去資料庫備份一次快照,如何備份,如何設置數據源,如何設置出錯,在maxComputer都有文檔介紹,使用maxComputer需要注冊阿里雲服務
2.實時介面調用數據採集,可以用logHub,dataHub,流數據處理技術,DataHub具有高可用,低延遲,高可擴展,高吞吐的特點。
高吞吐:最高支持單主題(Topic)每日T級別的數據量寫入,每個分片(Shard)支持最高每日8000萬Record級別的寫入量。
實時性:通過DataHub ,您可以實時的收集各種方式生成的數據並進行實時的處理,
設計思路:首先寫一個sdk把公司所有後台服務調用介面調用情況記錄下來,開辟線程池,把記錄下來的數據不停的往dataHub,logHub存儲,前提是設置好接收數據的dataHub表結構
3.前台數據埋點,這些就要根據業務需求來設置了,也是通過流數據傳輸到數據倉庫,如上述第二步。
數據處理:
數據採集完成就可以對數據進行加工處理,可分為離線批處理,實時處理。
1.離線批處理maxComputer,這是阿里提供的一項大數據處理服務,是一種快速,完全託管的TB/PB級數據倉庫解決方案,編寫數據處理腳本,設置任務執行時間,任務執行條件,就可以按照你的要求,每天產生你需要數據
2.實時處理:採用storm/spark,目前接觸的只有storm,strom基本概念網上一大把,在這里講一下大概處理過程,首先設置要讀取得數據源,只要啟動storm就會不停息的讀取數據源。Spout,用來讀取數據。Tuple:一次消息傳遞的基本單元,理解為一組消息就是一個Tuple。stream,用來傳輸流,Tuple的集合。Bolt:接受數據然後執行處理的組件,用戶可以在其中執行自己想要的操作。可以在里邊寫業務邏輯,storm不會保存結果,需要自己寫代碼保存,把這些合並起來就是一個拓撲,總體來說就是把拓撲提交到伺服器啟動後,他會不停讀取數據源,然後通過stream把數據流動,通過自己寫的Bolt代碼進行數據處理,然後保存到任意地方,關於如何安裝部署storm,如何設置數據源,網上都有教程,這里不多說。
數據展現:做了上述那麼多,終於可以直觀的展示了,由於前端技術不行,借用了第三方展示平台datav,datav支持兩種數據讀取模式,第一種,直接讀取資料庫,把你計算好的數據,通過sql查出,需要配置數據源,讀取數據之後按照給定的格式,進行格式化就可以展現出來
@jiaoready @jiaoready 第二種採用介面的形式,可以直接採用api,在數據區域配置為api,填寫介面地址,需要的參數即可,這里就不多說了。
⑵ 大數據如何入門
首先我們要了解java語言和Linux操作系統,這兩個是學習大數據的基礎,學習的順序不分前後。
大數據
Java :只要了解一些基礎即可,做大數據不需要很深的Java 技術,學java SE 就相當於有學習大數據基礎。
Linux:因為大數據相關軟體都是在Linux上運行的,所以Linux要學習的扎實一些,學好Linux對你快速掌握大數據相關技術會有很大的幫助,能讓你更好的理解hadoop、hive、hbase、spark等大數據軟體的運行環境和網路環境配置,能少踩很多坑,學會shell就能看懂腳本這樣能更容易理解和配置大數據集群。還能讓你對以後新出的大數據技術學習起來更快。
Hadoop:這是現在流行的大數據處理平台幾乎已經成為大數據的代名詞,所以這個是必學的。Hadoop裡麵包括幾個組件HDFS、MapRece和YARN,HDFS是存儲數據的地方就像我們電腦的硬碟一樣文件都存儲在這個上面,MapRece是對數據進行處理計算的,它有個特點就是不管多大的數據只要給它時間它就能把數據跑完,但是時間可能不是很快所以它叫數據的批處理。
Zookeeper:這是個萬金油,安裝Hadoop的HA的時候就會用到它,以後的Hbase也會用到它。它一般用來存放一些相互協作的信息,這些信息比較小一般不會超過1M,都是使用它的軟體對它有依賴,對於我們個人來講只需要把它安裝正確,讓它正常的run起來就可以了。
Mysql:我們學習完大數據的處理了,接下來學習學習小數據的處理工具mysql資料庫,因為一會裝hive的時候要用到,mysql需要掌握到什麼層度那?你能在Linux上把它安裝好,運行起來,會配置簡單的許可權,修改root的密碼,創建資料庫。這里主要的是學習SQL的語法,因為hive的語法和這個非常相似。
Sqoop:這個是用於把Mysql里的數據導入到Hadoop里的。當然你也可以不用這個,直接把Mysql數據表導出成文件再放到HDFS上也是一樣的,當然生產環境中使用要注意Mysql的壓力。
Hive:這個東西對於會SQL語法的來說就是神器,它能讓你處理大數據變的很簡單,不會再費勁的編寫MapRece程序。有的人說Pig那?它和Pig差不多掌握一個就可以了。
Oozie:既然學會Hive了,我相信你一定需要這個東西,它可以幫你管理你的Hive或者MapRece、Spark腳本,還能檢查你的程序是否執行正確,出錯了給你發報警並能幫你重試程序,最重要的是還能幫你配置任務的依賴關系。我相信你一定會喜歡上它的,不然你看著那一大堆腳本,和密密麻麻的crond是不是有種想屎的感覺。
Hbase:這是Hadoop生態體系中的NOSQL資料庫,他的數據是按照key和value的形式存儲的並且key是唯一的,所以它能用來做數據的排重,它與MYSQL相比能存儲的數據量大很多。所以他常被用於大數據處理完成之後的存儲目的地。
Kafka:這是個比較好用的隊列工具,隊列是干嗎的?排隊買票你知道不?數據多了同樣也需要排隊處理,這樣與你協作的其它同學不會叫起來,你干嗎給我這么多的數據(比如好幾百G的文件)我怎麼處理得過來,你別怪他因為他不是搞大數據的,你可以跟他講我把數據放在隊列里你使用的時候一個個拿,這樣他就不在抱怨了馬上灰流流的去優化他的程序去了,因為處理不過來就是他的事情。而不是你給的問題。當然我們也可以利用這個工具來做線上實時數據的入庫或入HDFS,這時你可以與一個叫Flume的工具配合使用,它是專門用來提供對數據進行簡單處理,並寫到各種數據接受方(比如Kafka)的。
Spark:它是用來彌補基於MapRece處理數據速度上的缺點,它的特點是把數據裝載到內存中計算而不是去讀慢的要死進化還特別慢的硬碟。特別適合做迭代運算,所以演算法流們特別稀飯它。它是用scala編寫的。Java語言或者Scala都可以操作它,因為它們都是用JVM的。
⑶ 如何使用 Spark SQL
一、啟動方法
/data/spark-1.4.0-bin-cdh4/bin/spark-sql --master spark://master:7077 --total-executor-cores 10 --executor-memory 1g --executor-cores 2
註:/data/spark-1.4.0-bin-cdh4/為spark的安裝路徑
/data/spark-1.4.0-bin-cdh4/bin/spark-sql –help 查看啟動選項
--master MASTER_URL 指定master url
--executor-memory MEM 每個executor的內存,默認為1G
--total-executor-cores NUM 所有executor的總核數
-e <quoted-query-string> 直接執行查詢SQL
-f <filename> 以文件方式批量執行SQL
二、Spark sql對hive支持的功能
1、查詢語句:SELECT GROUP BY ORDER BY CLUSTER BY SORT BY
2、hive操作運算:
1) 關系運算:= ==, <>, <, >, >=, <=
2) 算術運算:+, -, *, /, %
3) 邏輯運算:AND, &&, OR, ||
4) 復雜的數據結構
5) 數學函數:(sign, ln, cos, etc)
6) 字元串函數:
3、 UDF
4、 UDAF
5、 用戶定義的序列化格式
6、join操作:JOIN {LEFT|RIGHT|FULL} OUTER JOIN LEFT SEMI JOIN CROSS JOIN
7、 unions操作:
8、 子查詢: SELECT col FROM ( SELECT a + b AS col from t1) t2
9、Sampling
10、 Explain
11、 分區表
12、 視圖
13、 hive ddl功能:CREATE TABLE、CREATE TABLE AS SELECT、ALTER TABLE
14、 支持的數據類型:TINYINT SMALLINT INT BIGINT BOOLEAN FLOAT DOUBLE STRING BINARY TIMESTAMPDATE ARRAY MAP STRUCT
三、Spark sql 在客戶端編程方式進行查詢數據
1、啟動spark-shell
./spark-shell --master spark://master:7077 --total-executor-cores 10 --executor-memory 1g --executor-cores 2
2、編寫程序
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val df = sqlContext.read.json("../examples/src/main/resources/people.json")
查看所有數據:df.show()
查看錶結構:df.printSchema()
只看name列:df.select("name").show()
對數據運算:df.select(df("name"), df("age") + 1).show()
過濾數據:df.filter(df("age") > 21).show()
分組統計:df.groupBy("age").count().show()
1、查詢txt數據
import sqlContext.implicits._
case class Person(name: String, age: Int)
val people = sc.textFile("../examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()
people.registerTempTable("people")
val teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19")
2、parquet文件
val df = sqlContext.read.load("../examples/src/main/resources/users.parquet")
3、hdfs文件
val df = sqlContext.read.load("hdfs://namenode.Hadoop:9000/user/hive/warehouse/spark_test.db/test_parquet/part-r-00001.gz.parquet")
4、保存查詢結果數據
val df = sqlContext.read.load("../examples/src/main/resources/users.parquet")
df.select("name", "favorite_color").write.save("namesAndFavColors.parquet「)
四、Spark sql性能調優
緩存數據表:sqlContext.cacheTable("tableName")
取消緩存表:sqlContext.uncacheTable("tableName")
spark.sql.inMemoryColumnarStorage.compressedtrue當設置為true時,Spark SQL將為基於數據統計信息的每列自動選擇一個壓縮演算法。
spark.sql.inMemoryColumnarStorage.batchSize10000柱狀緩存的批數據大小。更大的批數據可以提高內存的利用率以及壓縮效率,但有OOMs的風險
⑷ 大數據學習路線是什麼
主要分為 7 個階段:入門知識 → Java 基礎 → Scala 基礎 → Hadoop 技術模塊 → Hadoop 項目實戰 → Spark 技術模塊 → 大數據項目實戰。
階段一:學習入門知識
這一部分主要針對的是新手,在學習之前需要先掌握基本的資料庫知識。MySQL 是一個 DBMS(資料庫管理系統),是最流行的關系型資料庫管理系統(關系資料庫,是建立在關系資料庫模型基礎上的資料庫,藉助於集合代數等概念和方法來處理資料庫中的數據)。
MongoDB 是 IT 行業非常流行的一種非關系型資料庫(NoSQL),其靈活的數據存儲方式備受當前 IT 從業人員的青睞。
而 Redis 是一個開源、支持網路、基於內存、鍵值對存儲資料庫。兩者都非常有必要了解。
1、Linux 基礎入門(新版)
2、Vim編輯器
3、Git 實戰教程
4、MySQL 基礎課程
5、MongoDB 基礎教程
6、Redis基礎教程
階段二:Java基礎
Java 是目前使用最為廣泛的編程語言,它具有的眾多特性,特別適合作為大數據應用的開發語言。
Java 語言具有功能強大和簡單易用兩個特徵,跨平台應用能力比 C、C++ 更易用,更容易上手。同時還具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點。最重要的一點是 Hadoop 是用 Java 編寫的。
1、Java編程語言(新版)
2、Java進階之設計模式
3、J2SE核心開發實戰
4、JDK 核心 API
5、JDBC 入門教程
6、Java 8 新特性指南
階段三:Scala基礎
Scala 是一種多範式的編程語言,其設計的初衷是要集成面向對象編程和函數式編程的各種特性。由於 Scala 運行於 Java 平台(Java 虛擬機),並兼容現有的Java 程序,所以 Scala 可以和大數據相關的基於 JVM 的系統很好的集成。
1、Scala 開發教程
2、Scala 專題教程 - Case Class和模式匹配
3、Scala 專題教程 - 隱式變換和隱式參數
4、Scala 專題教程 - 抽象成員
5、Scala 專題教程 - Extractor
6、Scala 開發二十四點游戲
階段四:Hadoop技術模塊
Hadoop 是一款支持數據密集型分布式應用並以 Apache 2.0 許可協議發布的開源軟體框架,它能搭建大型數據倉庫,PB 級別數據的存儲、處理、分析、統計等業務。編程語言你可以選,但 Hadoop 一定是大數據必學內容。
1、Hadoop入門進階課程
2、Hadoop部署及管理
3、HBASE 教程
4、Hadoop 分布式文件系統--導入和導出數據
5、使用 Flume 收集數據
階段五:Hadoop項目實戰
當然,學完理論就要進行動手實戰了,Hadoop 項目實戰可以幫助加深對內容的理解,並鍛煉動手能力。
1、Hadoop 圖處理--《hadoop應用框架》
階段六:Spark技術模塊
Spark 和 Hadoop 都是大數據框架。Hadoop 提供了 Spark 所沒有的功能特性,比如分布式文件系統,而 Spark 為需要它的那些數據集提供了實時內存處理。所以學習 Spark 也非常必要。
1、Spark
2、x 快速入門教程
2、Spark 大數據動手實驗
3、Spark 基礎之 GraphX 圖計算框架學習
4、Spark 基礎之 DataFrame 基本概念學習
5、Spark 基礎之 DataFrame 高階應用技巧
6、Spark 基礎之 Streaming 快速上手
7、Spark 基礎之 SQL 快速上手
8、Spark 基礎之使用機器學習庫 MLlib
9、Spark 基礎之 SparkR 快速上手
10、流式實時日誌分析系統--《Spark 最佳實踐》
11、使用 Spark 和 D3.js 分析航班大數據
階段七:大數據項目實戰
最後階段提供了大數據實戰項目,這是對常用技能的系統運用,例如使用常用的機器學習進行建模、分析和運算,這是成為大數據工程師過程中的重要一步。
1、Ebay 在線拍賣數據分析
2、流式實時日誌分析系統--《Spark 最佳實踐》
3、大數據帶你挖掘打車的秘籍
4、Twitter數據情感分析
5、使用 Spark 進行流量日誌分析
6、Spark流式計算電商商品關注度
7、Spark的模式挖掘-FPGrowth演算法
(4)sparksql腳本擴展閱讀:
大數據技術的具體內容:
分布式存儲計算架構(強烈推薦:Hadoop)
分布式程序設計(包含:Apache Pig或者Hive)
分布式文件系統(比如:Google GFS)
多種存儲模型,主要包含文檔,圖,鍵值,時間序列這幾種存儲模型(比如:BigTable,Apollo,DynamoDB等)
數據收集架構(比如:Kinesis,Kafla)
集成開發環境(比如:R-Studio)
程序開發輔助工具(比如:大量的第三方開發輔助工具)
調度協調架構工具(比如:Apache Aurora)
機器學習(常用的有Apache Mahout 或 H2O)
託管管理(比如:Apache Hadoop Benchmarking)
安全管理(常用的有Gateway)
大數據系統部署(可以看下Apache Ambari)
搜索引擎架構(學習或者企業都建議使用Lucene搜索引擎)
多種資料庫的演變(MySQL/Memcached)
商業智能(大力推薦:Jaspersoft)
數據可視化(這個工具就很多了,可以根據實際需要來選擇)
大數據處理演算法(10大經典演算法)
⑸ 大數據平台是什麼什麼時候需要大數據平台如何建立大數據平台
首先我們要了解Java語言和Linux操作系統,這兩個是學習大數據的基礎,學習的順序不分前後。
Java :只要了解一些基礎即可,做大數據不需要很深的Java 技術,學java SE 就相當於有學習大數據基礎。
Linux:因為大數據相關軟體都是在Linux上運行的,所以Linux要學習的扎實一些,學好Linux對你快速掌握大數據相關技術會有很大的幫助,能讓你更好的理解hadoop、hive、hbase、spark等大數據軟體的運行環境和網路環境配置,能少踩很多坑,學會shell就能看懂腳本這樣能更容易理解和配置大數據集群。還能讓你對以後新出的大數據技術學習起來更快。
Hadoop:這是現在流行的大數據處理平台幾乎已經成為大數據的代名詞,所以這個是必學的。Hadoop裡麵包括幾個組件HDFS、MapRece和YARN,HDFS是存儲數據的地方就像我們電腦的硬碟一樣文件都存儲在這個上面,MapRece是對數據進行處理計算的,它有個特點就是不管多大的數據只要給它時間它就能把數據跑完,但是時間可能不是很快所以它叫數據的批處理。
Zookeeper:這是個萬金油,安裝Hadoop的HA的時候就會用到它,以後的Hbase也會用到它。它一般用來存放一些相互協作的信息,這些信息比較小一般不會超過1M,都是使用它的軟體對它有依賴,對於我們個人來講只需要把它安裝正確,讓它正常的run起來就可以了。
Mysql:我們學習完大數據的處理了,接下來學習學習小數據的處理工具mysql資料庫,因為一會裝hive的時候要用到,mysql需要掌握到什麼層度那?你能在Linux上把它安裝好,運行起來,會配置簡單的許可權,修改root的密碼,創建資料庫。這里主要的是學習SQL的語法,因為hive的語法和這個非常相似。
Sqoop:這個是用於把Mysql里的數據導入到Hadoop里的。當然你也可以不用這個,直接把Mysql數據表導出成文件再放到HDFS上也是一樣的,當然生產環境中使用要注意Mysql的壓力。
Hive:這個東西對於會SQL語法的來說就是神器,它能讓你處理大數據變的很簡單,不會再費勁的編寫MapRece程序。有的人說Pig那?它和Pig差不多掌握一個就可以了。
Oozie:既然學會Hive了,我相信你一定需要這個東西,它可以幫你管理你的Hive或者MapRece、Spark腳本,還能檢查你的程序是否執行正確,出錯了給你發報警並能幫你重試程序,最重要的是還能幫你配置任務的依賴關系。我相信你一定會喜歡上它的,不然你看著那一大堆腳本,和密密麻麻的crond是不是有種想屎的感覺。
Hbase:這是Hadoop生態體系中的NOSQL資料庫,他的數據是按照key和value的形式存儲的並且key是唯一的,所以它能用來做數據的排重,它與MYSQL相比能存儲的數據量大很多。所以他常被用於大數據處理完成之後的存儲目的地。
Kafka:這是個比較好用的隊列工具,隊列是干嗎的?排隊買票你知道不?數據多了同樣也需要排隊處理,這樣與你協作的其它同學不會叫起來,你干嗎給我這么多的數據(比如好幾百G的文件)我怎麼處理得過來,你別怪他因為他不是搞大數據的,你可以跟他講我把數據放在隊列里你使用的時候一個個拿,這樣他就不在抱怨了馬上灰流流的去優化他的程序去了,因為處理不過來就是他的事情。而不是你給的問題。當然我們也可以利用這個工具來做線上實時數據的入庫或入HDFS,這時你可以與一個叫Flume的工具配合使用,它是專門用來提供對數據進行簡單處理,並寫到各種數據接受方(比如Kafka)的。
Spark:它是用來彌補基於MapRece處理數據速度上的缺點,它的特點是把數據裝載到內存中計算而不是去讀慢的要死進化還特別慢的硬碟。特別適合做迭代運算,所以演算法流們特別稀飯它。它是用scala編寫的。Java語言或者Scala都可以操作它,因為它們都是用JVM的。