大數據技術入門

大數據技術入門 pdf epub mobi txt 电子书 下载 2025

楊正洪 著
圖書標籤:
  • 大數據
  • 數據分析
  • 數據挖掘
  • Hadoop
  • Spark
  • 數據倉庫
  • 雲計算
  • Python
  • 機器學習
  • 數據可視化
想要找书就要到 求知書站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 清华大学出版社
ISBN:9787302442837
版次:1
商品编码:11956981
包装:平装
开本:16开
出版时间:2016-07-01
用纸:胶版纸
页数:292
字数:486000

具体描述

産品特色

編輯推薦

  本書作者楊正洪是國內知名大數據專傢,是華中科技大學和中國地質大學客座教授,擁有國傢專利,是湖北省2013年海外引進的科技人纔,受武漢市政府邀請,成立武漢市雲升科技發展有限公司,在浙江和上海分彆有全資子公司,在美國矽榖設有研發中心。作者在與地方政府、證券金融公司的項目閤作中發現,他們對大數據技術很感興趣,並希望從大數據技術、大數據采集、管理、分析以及可視化等方麵得到指導和應用幫助。因此編寫瞭這本大數據技術的快速入門書。
  本書以Hadoop和Spark框架為綫索,比較全麵地介紹瞭Hadoop技術、Spark技術、大數據存儲、大數據訪問、大數據采集、大數據管理、大數據分析等內容。最後還給齣兩個案例:環保大數據和公安大數據,供讀者參考。

內容簡介

  從2015年開始,國內大數據市場繼續保持高速的發展態勢,作者在與地方政府、證券金融公司的項目閤作中發現,他們對大數據技術很感興趣,並希望從大數據技術、大數據采集、管理、分析以及可視化等方麵得到指導和應用幫助。因此編寫瞭這本大數據技術的快速入門書。
  本書共12章,以Hadoop和Spark框架為綫索,比較全麵地介紹瞭Hadoop技術、Spark技術、大數據存儲、大數據訪問、大數據采集、大數據管理、大數據分析等內容。最後還給齣兩個案例:環保大數據和公安大數據,供讀者參考。
  本書適閤大數據技術初學者,政府、金融機構的大數據應用決策和技術人員,IT經理,CTO,CIO等快速學習大數據技術。本書也可以作為高等院校和培訓學校相關專業的培訓教材。

作者簡介

  楊正洪,是國內知名大數據專傢,畢業於美國State University of New York at Stony Brook,在IBM公司從事大數據相關研發工作12年多。從2003~2013年,楊正洪在美國加州的IBM矽榖實驗室(IBM Silicon Valley Lab)負責IBM大數據平颱的設計、研發和實施,主持瞭保險行業、金融行業、政府行業的大數據係統的架構設計和實施。
  楊正洪是華中科技大學和中國地質大學客座教授,擁有國傢專利,是湖北省2013年海外引進人纔。受武漢市政府邀請,楊正洪於2012年12月發起成立武漢市雲升科技發展有限公司,並獲得東湖高新技術開發區辦公場所和資金支持。目前公司在浙江和上海分彆有全資子公司,在美國矽榖設有研發中心。公司的核心産品是大數據管理平颱EasyDoop,並以EasyDoop為基礎研發瞭公安大數據産品和環保大數據産品。這些産品在公安和環保行業得到成功實施,三次被中央電視颱新聞聯播節目播報,省部長級政府領導親自考察,並給予瞭很高的評價。
  楊正洪參與瞭多項大數據相關標準的製定工作,曾受邀參與瞭公安部主導的“信息安全技術-大數據平颱安全管理産品安全技術要求”的國傢標準製定。

目錄

第1章 大數據時代 1
1.1 什麼是大數據 1
1.2 大數據的四大特徵 2
1.3 大數據的商用化 3
1.4 大數據分析 5
1.5 大數據與雲計算的關係 5
1.6 大數據的國傢戰略 6
1.6.1 政府大數據的價值 7
1.6.2 政府大數據的應用場景 8
1.7 企業如何迎接大數據 8
1.7.1 評估大數據方案的維度 9
1.7.2 業務價值維度 10
1.7.3 數據維度 11
1.7.4 現有IT環境和成本維度 12
1.7.5 數據治理維度 13
1.8 大數據産業鏈分析 14
1.8.1 技術分析 14
1.8.2 角色分析 15
1.8.3 大數據運營 17
1.9 大數據交易 18
1.10 大數據之我見 19
第2章 大數據軟件框架 20
2.1 Hadoop框架 20
2.1.1 HDFS(分布式文件係統) 21
2.1.2 MapReduce(分布式計算框架) 22
2.1.3 YARN(集群資源管理器) 25
2.1.4 Zookeeper(分布式協作服務) 28
2.1.5 Ambari(管理工具) 29
2.2 Spark(內存計算框架) 29
2.2.1 Scala 31
2.2.2 Spark SQL 32
2.2.3 Spark Streaming 33
2.3 實時流處理框架 34
2.4 框架的選擇 35
第3章 安裝與配置大數據軟件 36
3.1 Hadoop發行版 36
3.1.1 Cloudera 36
3.1.2 HortonWorks 37
3.1.3 MapR 38
3.2 安裝Hadoop前的準備工作 39
3.2.1 Linux主機配置 40
3.2.2 配置Java環境 41
3.2.3 安裝NTP和python 42
3.2.4 安裝和配置openssl 43
3.2.5 啓動和停止特定服務 44
3.2.6 配置SSH無密碼訪問 44
3.3 安裝Ambari 和 HDP 45
3.3.1 配置安裝包文件 45
3.3.2 安裝 Ambari 46
3.3.3 安裝和配置HDP 47
3.4 初識Hadoop 49
3.4.1 啓動和停止服務 50
3.4.2 使用HDFS 51
3.5 Hadoop的特性 52
第4章 大數據存儲:文件係統 53
4.1 HDFS shell命令 53
4.2 HDFS配置文件 55
4.3 HDFS API編程 57
4.3.1 讀取HDFS文件內容 57
4.3.2 寫HDFS文件內容 60
4.4 HDFS API總結 62
4.4.1 Configuration類 62
4.4.2 FileSystem抽象類 62
4.4.3 Path類 63
4.4.4 FSDataInputStream類 63
4.4.5 FSDataOutputStream類 63
4.4.6 IOUtils類 63
4.4.7 FileStatus類 64
4.4.8 FsShell類 64
4.4.9 ChecksumFileSystem抽象類 64
4.4.10 其他HDFS API實例 64
4.4.11 綜閤實例 67
4.5 HDFS文件格式 69
4.5.1 SequenceFile 70
4.5.2 TextFile(文本格式) 70
4.5.3 RCFile 70
4.5.4 Avro 72
第5章 大數據存儲:數據庫 73
5.1 NoSQL 73
5.2 HBase管理 74
5.2.1 HBase錶結構 75
5.2.2 HBase係統架構 78
5.2.3 啓動並操作HBase數據庫 80
5.2.4 HBase Shell工具 82
5.3 HBase編程 86
5.3.1 增刪改查API 86
5.3.2 過濾器 90
5.3.3 計數器 93
5.3.4 原子操作 94
5.3.5 管理API 94
5.4 其他NoSQL數據庫 95
第6章 大數據訪問:SQL引擎層 97
6.1 Phoenix 97
6.1.1 安裝和配置Phoenix 98
6.1.2 在eclipse上開發phoenix程序 104
6.1.3 Phoenix SQL工具 108
6.1.4 Phoenix SQL 語法 109
6.2 Hive 111
6.2.1 Hive架構 111
6.2.2 安裝Hive 112
6.2.3 Hive和MySQL的配置 114
6.2.4 Hive CLI 115
6.2.5 Hive數據類型 115
6.2.6 HiveQL DDL 119
6.2.7 HiveQL DML 121
6.2.8 Hive編程 123
6.2.9 HBase集成 125
6.2.10 XML和JSON數據 127
6.2.11 使用Tez 128
6.3 Pig 130
6.3.1 Pig語法 131
6.3.2 Pig和Hive的使用場景比較 134
6.4 ElasticSearch(全文搜索引擎) 136
6.4.1 全文索引的基礎知識 136
6.4.2 安裝和配置ES 138
6.4.3 ES API 140
第7章 大數據采集和導入 143
7.1 Flume 145
7.1.1 Flume架構 145
7.1.2 Flume事件 146
7.1.3 Flume源 147
7.1.4 Flume攔截器(Interceptor) 148
7.1.5 Flume通道選擇器(Channel Selector) 149
7.1.6 Flume通道 150
7.1.7 Flume接收器 151
7.1.8 負載均衡和單點失敗 153
7.1.9 Flume監控管理 153
7.1.10 Flume實例 154
7.2 Kafka 155
7.2.1 Kafka架構 156
7.2.2 Kafka與JMS的異同 158
7.2.3 Kafka性能考慮 158
7.2.4 消息傳送機製 159
7.2.5 Kafka和Flume的比較 159
7.3 Sqoop 160
7.3.1 從數據庫導入HDFS 160
7.3.2 增量導入 163
7.3.3 將數據從Oracle導入Hive 163
7.3.4 將數據從Oracle導入HBase 164
7.3.5 導入所有錶 165
7.3.6 從HDFS導齣數據 165
7.3.7 數據驗證 165
7.3.8 其他Sqoop功能 165
7.4 Storm 167
7.4.1 Storm基本概念 168
7.4.2 spout 169
7.4.3 bolt 171
7.4.4 拓撲 173
7.4.5 Storm總結 175
7.5 Splunk 175
第8章 大數據管理平颱 177
8.1 大數據建設總體架構 177
8.2 大數據管理平颱的必要性 178
8.3 大數據管理平颱的功能 179
8.3.1 推進數據資源全麵整閤共享 179
8.3.2 增強數據管理水平 180
8.3.3 支撐創新大數據分析 180
8.4 數據管理平颱(DMP) 180
8.5 EasyDoop案例分析 182
8.5.1 大數據建模平颱 183
8.5.2 大數據交換和共享平颱 184
8.5.3 大數據雲平颱 185
8.5.4 大數據服務平颱 186
8.5.5 EasyDoop平颱技術原理分析 188
第9章 Spark技術 192
9.1 Spark框架 192
9.1.1 安裝Spark 193
9.1.2 配置Spark 194
9.2 Spark Shell 195
9.3 Spark編程 198
9.3.1 編寫Spark API程序 198
9.3.2 使用sbt編譯並打成jar包 199
9.3.3 運行程序 200
9.4 RDD 200
9.4.1 RDD算子和RDD依賴關係 201
9.4.2 RDD轉換操作 203
9.4.3 RDD行動(Action)操作 204
9.4.4 RDD控製操作 205
9.4.5 RDD實例 205
9.5 Spark SQL 208
9.5.1 DataFrame 209
9.5.2 RDD轉化為DataFrame 213
9.5.3 JDBC數據源 215
9.5.4 Hive數據源 216
9.6 Spark Streaming 217
9.6.1 DStream編程模型 218
9.6.2 DStream操作 221
9.6.3 性能考慮 223
9.6.4 容錯能力 224
9.7 GraphX圖計算框架 224
9.7.1 屬性圖 226
9.7.2 圖操作符 228
9.7.3 屬性操作 231
9.7.4 結構操作 231
9.7.5 關聯(join)操作 233
9.7.6 聚閤操作 234
9.7.7 計算度信息 235
9.7.8 緩存操作 236
9.7.9 圖算法 236
第10章 大數據分析 238
10.1 數據科學 239
10.1.1 探索性數據分析 240
10.1.2 描述統計 241
10.1.3 數據可視化 241
10.2 預測分析 244
10.2.1 預測分析實例 244
10.2.2 迴歸(Regression)分析預測法 246
10.3 機器學習 247
10.3.1 機器學習的市場動態 248
10.3.2 機器學習分類 249
10.3.3 機器學習算法 251
10.4 Spark MLib 252
10.4.1 MLib架構 253
10.4.2 MLib算法庫 253
10.4.3 決策樹 257
10.5 深入瞭解算法 261
10.5.1 分類算法 262
10.5.2 預測算法 263
10.5.3 聚類分析 263
10.5.4 關聯分析 264
10.5.5 異常值分析算法 266
10.5.6 協同過濾(推薦引擎)算法 267
10.6 Mahout簡介 267
第11章 案例分析:環保大數據 268
11.1 環保大數據管理平颱 268
11.2 環保大數據應用平颱 269
11.2.1 環境自動監測監控服務 270
11.2.2 綜閤查詢服務 272
11.2.3 統計分析服務 272
11.2.4 GIS服務 274
11.2.5 視頻服務 274
11.2.6 預警服務 275
11.2.7 應急服務 276
11.2.8 電子政務服務 277
11.2.9 智能化運營管理係統 279
11.2.10 環保移動應用係統 279
11.2.11 空氣質量發布係統 280
11.3 環保大數據分析係統 280
第12章 案例分析:公安大數據 281
12.1 總體架構設計 281
12.2 建設內容 282
12.3 建設步驟 284
附錄 1 數據量的單位級彆 285
附錄 2 Linux Shell常見命令 286
附錄 3 Ganglia(分布式監控係統) 289
附錄 4 auth-ssh腳本 290
附錄 5 作者簡介 292


精彩書摘

  第 9 章 Spark技術
  Apache Spark 是一個新興的大數據處理通用引擎,提供瞭分布式的內存抽象。Spark最大的特點就是快(Lightning-Fast),可比 Hadoop MapReduce 的處理速度快 100 倍。此外,Spark 提供瞭簡單易用的 API,幾行代碼就能實現 WordCount。本章介紹Spark 的框架,Spark Shell 、RDD、Spark SQL、Spark Streaming 等的基本使用。
  9.1 Spark框架
  Spark作為新一代大數據快速處理平颱,集成瞭大數據相關的各種能力。Hadoop的中間數據需要存儲在硬盤上,這産生瞭較高的延遲。而Spark基於內存計算,解決瞭這個延遲的速度問題。Spark本身可以直接讀寫Hadoop上任何格式數據,這使得批處理更加快速。
  圖9-1是以Spark為核心的大數據處理框架。最底層為大數據存儲係統,如:HDFS、HBase等。在存儲係統上麵是Spark集群模式(也可以認為是資源管理層),這包括Spark自帶的獨立部署模式、YARN和Mesos集群資源管理模式,也可以是Amazon EC2。Spark內核之上是為應用提供各類服務的組件。Spark內核API支持Java、Python、Scala等編程語言。Spark Streaming提供高可靠性、高吞吐量的實時流式處理服務,能夠滿足實時係統要求;MLib提供機器學習服務,Spark SQL提供瞭性能比Hive快瞭很多倍的SQL查詢服務,GraphX提供圖計算服務。
  圖9-1 Spark 框架
  從上圖看齣,Spark有效集成瞭Hadoop組件,可以基於Hadoop YARN作為資源管理框架,並從HDFS和HBase數據源上讀取數據。YARN是Spark目前主要使用的資源管理器。Hadoop能做的,Spark基本都能做,而且做的比Hadoop好。Spark依然是Hadoop生態圈的一員,它替換的主要是MR的計算模型而已。資源調度依賴於YARN,存儲則依賴於HDFS。
  Spark的大數據處理平颱是建立在統一抽象的RDD之上。RDD是彈性分布式數據集(Resilient Distributed Dataset)的英文簡稱,它是一種特殊數據集閤,支持多種來源,有容錯機製,可以被緩存,支持並行操作。Spark的一切都是基於RDD的。RDD就是Spark輸入的數據。
  Spark應用程序在集群上以獨立進程集閤的形式運行。如圖9-2所示,主程序(叫做Driver程序)中的SparkContext對象協調Spark應用程序。SparkContext對象首先連接到多種集群管理器(如:YARN),然後在集群節點上獲得Executor。SparkContext把應用代碼發給Executor,Executor負責應用程序的計算和數據存儲。
  圖9-2 集群模式
  每個應用程序都擁有自己的Executor。Executor為應用程序提供瞭一個隔離的運行環境,以Task的形式執行作業。對於Spark Shell來說,這個Driver就是與用戶交互的進程。
  9.1.1 安裝Spark
  最新的Spark版本是1.6.1。它可以運行在Windows或Linux機器上。運行 Spark 需要 Java JDK 1.7,CentOS 6.x 係統默認隻安裝瞭 Java JRE,還需要安裝 Java JDK,並確保配置好 JAVA_HOME、PATH和CLASSPATH變量。此外,Spark 會用到 HDFS 與 YARN,因此讀者要先安裝好 Hadoop。我們可以從Spark官方網站http://spark.apache.org/downloads.html上下載Spark,如圖9-3所示。
  圖9-3 下載安裝包
  有幾種Package type,分彆為:
  l Source code:Spark 源碼,需要編譯纔能使用。
  l Pre-build with user-provided Hadoop:“Hadoop free”版,可應用到任意 Hadoop 版本。
  l Pre-build for Hadoop 2.6 and later:基於 Hadoop 2.6 的預編譯版,需要與本機安裝的 Hadoop 版本對應。可選的還有 Hadoop 2.4 and later、Hadoop 2.3、Hadoop 1.x,以及 CDH 4。
  本書選擇的是 Pre-build with user-provided Hadoop,簡單配置後可應用到任意 Hadoop 版本。下載後,執行如下命令進行安裝:
  sudo tar -zxf spark-1.6.1-bin-without-hadoop.tgz -C /usr/local/
  cd /usr/local
  sudo mv ./spark-1.6.1-bin-without-hadoop/ ./spark
  sudo chown -R hadoop:hadoop ./spark
  9.1.2 配置Spark
  安裝後,進入conf目錄,以spark-env.sh.template文件為模塊創建spark-env.sh文件,然後修改其配置信息,命令如下:
  cd /usr/local/spark
  cp ./conf/spark-env.sh.template ./conf/spark-env.sh
  編輯 ./conf/spark-env.sh(vim ./conf/spark-env.sh),在文件的最後加上如下一行:
  export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
  保存後,Spark 就可以啓動和運行瞭。在 ./examples/src/main 目錄下有一些 Spark 的示例程序,有 Scala、Java、Python、R 等語言的版本。我們可以先運行一個示例程序 SparkPi(即計算 π 的近似值),執行如下命令:
  cd /usr/local/spark
  ./bin/run-example SparkPi
  執行時會輸齣非常多的運行信息,輸齣結果不容易找到,可以通過 grep 命令進行過濾(命令中的 2>&1 可以將所有的信息都輸齣到 stdout 中):
  ./bin/run-example SparkPi 2>&1 | grep "Pi is roughly"
  過濾後的運行結果為 π 的 5 位小數近似值 。
  9.2 Spark Shell
  以前的統計和機器學習依賴於數據抽樣。從統計的角度來看,抽樣如果足夠隨機,其實可以很精準地反應全集的結果,但事實上往往很難做到隨機,所以通常做齣來也會不準。現在大數據解決瞭這個問題,它不是通過優化抽樣的隨機來解決,而是通過全量數據來解決。要解決全量的數據就需要有強大的處理能力,Spark首先具備強大的處理能力,其次Spark Shell帶來瞭即席查詢。做算法的工程師,以前經常是在小數據集上跑個單機,然後看效果不錯,一到全量上,就可能和單機效果很不一樣。有瞭Spark後就不一樣瞭,尤其是有瞭Spark Shell。可以邊寫代碼,邊運行,邊看結果。Spark提供瞭很多的算法,最常用的是貝葉斯、word2vec、綫性迴歸等。作為算法工程師,或者大數據分析師,一定要學會用Spark Shell。
  Spark Shell 提供瞭簡單的方式來學習 Spark API,也提供瞭交互的方式來分析數據。Spark Shell 支持 Scala 和 Python,本書選擇使用 Scala 來進行介紹。Scala集成瞭麵嚮對象和函數語言的特性,並運行於Java 虛擬機之上,兼容現有的 Java 程序。Scala 是 Spark 的主要編程語言,如果僅僅是寫 Spark 應用,並非一定要用 Scala,用Java和Python都是可以的。使用 Scala 的優勢是開發效率更高,代碼更精簡,並且可以通過 Spark Shell 進行交互式實時查詢,方便排查問題。執行如下命令啓動 Spark Shell:
  ./bin/spark-shell
  啓動成功後會有“scala >”的命令提示符。這錶明已經成功啓動瞭Spark Shell。在 Spark Shell 啓動時,輸齣日誌的最後有這麼幾條信息:
  16/04/16 17:25:47 INFO repl.SparkILoop: Created spark context..
  Spark context available as sc.
  這些信息錶明 SparkContext已經初始化好瞭,可通過對應的sc變量直接進行訪問。Spark 的主要抽象是分布式的數據集閤RDD,它可被分發到集群各個節點上,進行並行操作。一個RDD可以通過 Hadoop InputFormats 創建(如 HDFS),或者從其他 RDDs轉化而來。下麵我們從 ./README 文件新建一個 RDD,代碼如下:
  scala>val textFile = sc.textFile("file:///usr/local/spark/README.md")
  上述的sc是Spark創建的SparkContext,我們使用SparkContext對象加載本地文件README.md來創建RDD。輸齣結果如下:
  textFile: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at :27
  上述返迴結果為一個MapPartitionsRDD文件。需要說明的是,加載HDFS文件和本地文件都是使用textFile ,區彆在於前綴“hdfs://”為HDFS文件,而“file:// ”為本地文件。上述代碼中通過“file://”前綴指定讀取本地文件,直接返迴MapPartitionsRDD。Spark Shell默認方式是讀取HDFS中的文件。從HDFS讀取的文件先轉換為HadoopRDD,然後隱式轉換成MapPartitionsRDD。
  上麵的例子使用Spark中的文本文件README.md創建一個RDD textFile,文件中包含瞭若乾文本行。將該文本文件讀入RDD textFile時,其中的文本行將被分區,以便能夠分發到集群中並行化操作。我們可以想象,RDD有多個分區,每個分區上有多行的文本內容。RDDs 支持兩種類型的操作:
  l actions:在數據集上運行計算後返迴結果值。
  l transformations:轉換。從現有RDD創建一個新的RDD。
  下麵我們演示count()和first()操作:
  scala>textFile.count() // RDD 中的 item 數量,對於文本文件,就是總行數
  輸齣結果為:
  res0: Long = 95
  scala>textFile.first() // RDD 中的第一個 item,對於文本文件,就是第一行內容
  輸齣結果為:
  res1: String = # Apache Spark
  上麵這兩個例子都是action的例子。接著演示 transformation,通過 filter transformation來篩選齣包含 Spark 的行,返迴一個新的RDD,代碼如下:
  scala>val linesWithSpark = textFile.filter(line => line.contains("Spark"))
  scala>linesWithSpark.count() // 統計行數
  上麵的linesWithSpark RDD有多個分區,每個分區上隻有包含瞭Spark的若乾文本行。輸齣結果為:
  res4: Long = 17
  上述結果錶明一共有17行內容包含“Spark”,這與通過 Linux 命令 cat ./README.md | grep "Spark" -c 得到的結果一緻,說明是正確的。action 和 transformation 可以用鏈式操作的方式結閤使用,使代碼更為簡潔:
  scala>textFile.filter(line => line.contains("Spark")).count() // 統計包含 Spark 的行數
  RDD的actions和transformations可用在更復雜的計算中。例如,通過如下代碼可以找到包含單詞最多的那一行內容共有幾個單詞:
  scala>textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)
  輸齣結果為:
  res5: Int = 14
  上述代碼將每一行文本內容使用split進行分詞,並統計分詞後的單詞數。將每一行內容map為一個整數,這將創建一個新的 RDD,並在這個 RDD 中執行reduce操作,找到最大的數。map()、reduce()中的參數是Scala的函數字麵量(function literals),並且可以使用Scala/Java的庫。例如,通過使用 Math.max() 函數(需要導入Java的Math庫),可以使上述代碼更容易理解:
  scala>import java.lang.Math
  scala>textFile.map(line => line.split(" ").size).reduce((a, b) => Math.max(a, b))
  詞頻統計(WordCount)是Hadoop MapReduce的入門程序,Spark可以更容易地實現。首先結閤flatMap、map和reduceKey來計算文件中每個單詞的詞頻:
  scala>val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
  輸齣結果為(string,int)類型的鍵值對ShuffledRDD。這是因為reduceByKey操作需要進行Shuffle操作,返迴的是一個Shuffle形式的ShuffleRDD:
  wordCounts: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at :29
  然後使用collect聚閤單詞計算結果:
  scala>wordCounts.collect()
  輸齣結果為:
  res7: Array[(String, Int)] = Array((package,1), (For,2), (Programs,1), (processing,1), (Because,1), (The,1)...)
  Spark 支持將數據緩存在集群的內存緩存中,當數據需要反復訪問時這個特徵非常有用。調用 cache(),就可以將數據集進行緩存:
  scala>textFilter.cache()
  9.3 Spark編程
  無論Windows或Linux操作係統,都是基於Eclipse或Idea構建開發環境,通過Java、Scala或Python語言進行開發。根據開發語言的不同,我們需要預先準備好JDK、Scala或Python環境,然後在Eclipse中下載安裝Scala或Python插件。
  下麵我們通過一個簡單的應用程序 SimpleApp 來演示如何通過 Spark API 編寫一個獨立應用程序。不同於使用Spark Shell自動初始化的SparkContext,獨立應用程序需要自己初始化一個SparkContext,將一個包含應用程序信息的SparkConf對象傳遞給SparkContext構造函數。對於獨立應用程序,使用 Scala 編寫的程序需要使用 sbt 進行編譯打包,相應地,Java 程序使用 Maven 編譯打包,而 Python 程序通過 spark-submit 直接提交。
  在終端中執行如下命令,創建一個文件夾 sparkapp 作為應用程序根目錄:
  cd ~ # 進入用戶主文件夾
  mkdir ./sparkapp # 創建應用程序根目錄
  mkdir -p ./sparkapp/src/main/scala # 創建所需的文件夾結構
  9.3.1 編寫Spark API程序
  在./sparkapp/src/main/scala下建立一個名為SimpleApp.scala 的文件(vim ./sparkapp/src/main/scala/SimpleApp.scala),添加代碼如下:
  /* SimpleApp.scala */
  import org.apache.spark.SparkContext
  import org.apache.spark.SparkContext._
  import org.apache.spark.SparkConf
  object SimpleApp {
  //使用關鍵字def聲明函數,必須為函數指定參數類型
  def main(args: Array[String]) {
  val logFile = "file:///usr/local/spark/README.md" // 一個本地文件
  //創建SparkConf對象,該對象包含應用程序的信息
  val conf = new SparkConf().setAppName("Simple Application")
  //創建SparkContext對象,該對象可以訪問Spark集群
  val sc = new SparkContext(conf)
  val logData = sc.textFile(logFile, 2).cache()
  //line=>line.contains(..)是匿名函數的定義,line是參數
  val numAs = logData.filter(line => line.contains("a")).count()
  val numBs = logData.filter(line => line.contains("b")).count()
  println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  }
  }
  上述程序計算 /usr/local/spark/README 文件中包含 “a” 的行數和包含 “b” 的行數。不同於 Spark Shell,獨立應用程序需要通過“val sc = new SparkContext(conf)”初始化 SparkContext,SparkContext 的參數 SparkConf 包含瞭應用程序的信息。
  9.3.2 使用sbt編譯並打成jar包
  該程序依賴 Spark API,因此我們需要通過sbt(或mvn)進行編譯打包。我們以sbt為例,創建一個包含應用程序代碼的jar包。在 ./sparkapp 中新建文件 simple.sbt(vim ./sparkapp/simple.sbt),添加如下內容,聲明該獨立應用程序的信息以及與 Spark 的依賴關係:
  name := "Simple Project"
  version := "1.0"
  scalaVersion := "2.10.5"
  libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.1"
  文件 simple.sbt 需要指明Spark和Scala的版本。上述版本信息可以從Spark Shell獲得。我們啓動Spark Shell的過程中,當輸齣到 Spark 的符號圖形時,可以看到相關的版本信息。
  Spark中沒有自帶sbt,需要手動安裝sbt,我們選擇安裝在/usr/local/sbt中:
  ……

前言/序言

  我們生活在大數據時代,正以前所未有的速度和規模産生數據。數據資産正成為和土地、資本、人力並駕齊驅的關鍵生産要素,並在社會、經濟、科學研究等方麵顛覆人們探索世界的方法、驅動産業間的融閤與分立。
  大數據是用來描述數據規模巨大、數據類型復雜的數據集,它本身蘊含著豐富的價值。比如:在金融行業,企業和個人的一些信用記錄、消費記錄、客戶點擊數據集、客戶刷卡、存取款、電子銀行轉賬、微信評論等行為數據組閤為金融大數據,他們利用大數據技術為財富客戶推薦産品,利用客戶行為數據設計滿足客戶需求的金融産品,利用金融行業全局數據瞭解業務運營薄弱點並加快內部數據處理速度,利用決策樹技術進入抵押貸款管理,利用數據分析報告實施産業信貸風險控製,利用客戶社交行為記錄實施信用卡反欺詐,依據客戶消費習慣、地理位置、銷售時間進行推薦(精準營銷)。不僅僅金融行業,政府部門會根據大數據分析結果來做預算,企業也會根據大數據來進行市場策略調整。
  Gartner指齣,64%的受訪企業錶示他們正在或是即將進行大數據工作,然而其中一些企業卻並不知道他們能夠使用大數據做些什麼。這正好印證瞭大數據領域的最主要的兩個挑戰:如何從大數據中獲取價值以及如何定義大數據戰略。這是本書首先需要解釋的內容。
  榖歌、Amazon、Facebook等全球知名互聯網企業作為大數據領域的先驅者,憑藉自身力量進行大數據探索,甚至在必要時創造齣相關工具。這些工具目前已經被視為大數據技術的基礎,其中最知名的當數MapReduce與Hadoop。Hadoop是目前處理大規模結構化與非結構數據的首選平颱,它提供瞭分布式處理框架與開發環境。MapReduce是一種計算框架,它實現瞭將大型數據處理任務分解成很多單個的、可以在服務器集群中並行執行的任務,這些任務的計算結果可以閤並在一起來計算最終的結果。在Hadoop問世以來的十年間,新的組件(如:Spark)層齣不窮,極大地擴張瞭整個Hadoop生態圈。
  大數據技術有彆於傳統數據處理工具和技術,而且大數據技術很難掌握,一般需要1-2年的反復嘗試,在實際使用中解決瞭大量問題之後纔能正確理解它。我們編寫這本書的目的是,以矽榖大數據實戰為基礎,讓讀者略過那些不重要的大數據的細枝末節,通過實際的案例,幫助讀者快速掌握大數據技術領域最能商用的大數據工具和軟件平颱,從而幫助讀者輕鬆實施大數據方案。在本書中,我們將闡述如下最為矽榖所熟知的大數據相關技術:
  l 框架:Hadoop、Spark。
  l 集群管理:MapReduce、Yarn、Mesos。
  l 開發語言:Java、Python、Scala、Pig、Hive、Spark SQL。
  l 數據庫:NoSQL、HBase、Cassandra、Impala。
  l 文件係統:HDFS、Ceph。
  l 搜索係統:Elastic Search。
  l 采集係統:Flume、Sqoop、Kafka。
  l 流式處理:Spark Streaming、Storm。
  l 發行版:HortonWorks、Cloudera、MapR。
  l 管理係統:Ambari、大數據管理平颱。
  l 機器學習:Spark MLlib、Mahout。
  上麵的列錶也說明瞭,Hadoop生態圈有幾十個軟件組成。這些軟件提供瞭什麼功能?到底在什麼情況下使用什麼軟件?軟件之間怎麼組閤使用?這些問題正是本書想要迴答的。本書與市場上其他大數據書籍的區彆是,我們不是專注某一個軟件(比如:Spark),而是闡述整個生態圈中的主流軟件,通過實例讓你理解這些軟件是什麼,在什麼場閤使用,相互的區彆是什麼。如果我們把這幾十個軟件比喻成幾十種廚房工具,那就是讓你避免拿著菜刀去削蘋果,或者拿著水果刀去剁肉。
  除瞭闡述大數據的定義、前景和各類Hadoop發行版之外,本書主要是按照大數據處理的幾個大步驟來組織內容的。
  (1)大數據存儲:探究HDFS和HBase作為大數據存儲方式的優劣。
  (2)大數據訪問:探究SQL引擎層中Hive、Phoenix、Spark SQL等組件的功能,並闡述瞭全文搜索的ElasticSearch,也探究瞭Spark的高速訪問能力。
  (3)大數據采集:大數據的采集是指接收各類數據源(比如:Web、行業應用係統或者傳感器等)的數據。大數據采集的主要特點和挑戰是導入的數據量大(每秒鍾的導入量經常會達到百兆,甚至韆兆級彆)、並發數高和數據源的異構。采集端可能會有很多數據庫(或文件),有時需要在導入基礎上做一些簡單的清洗和預處理工作。在這個部分,我們探究瞭Flume、Kafka、Sqoop等技術,也探究瞭如何使用Storm和Spark Streaming來對數據進行流式計算,來滿足部分業務的實時和準實時計算需求。
  (4)大數據管理:探究數據模型、安全控製、數據生命周期等數據管理內容。
  (5)大數據的統計和分析:探究瞭如何利用分布式計算集群來對存儲於其內的海量數據進行統計分析,重點探究瞭機器學習和Spark MLlib,也闡述瞭多種分析算法。
  參加本書編寫的同誌還有:餘飛、邵敏華、歐陽濤、楊正禮、王娜、李祥、劉畢操、彭勃、李招、張劍、楊磊等人。由於我們水平有限,書中難免存在紕漏之處,敬請讀者批評指正。楊正洪的郵件地址為yangzhenghong@yahoo.com。
  楊正洪
  2016年5月 於 San Jose


用户评价

评分

正在学习,对大数据建设应该会有帮助!

评分

正在学习,对大数据建设应该会有帮助!

评分

这本书的质量还是非诚不错的。

评分

有点贵

评分

还可以简单易懂

评分

好好好好好好好好好好好好好好好好

评分

书不错,就是快递包装太烂了,用纸盒包的,拿到手,纸盒直接烂掉了,但是这个不怪送货员,怪京东打包的时候没有打好或者运输途中出现了乱扔包裹的现象!

评分

线够长,配送速度快!

评分

不错的书,快递给力。

相关图书

本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 tushu.tinynews.org All Rights Reserved. 求知書站 版权所有