1. 程式人生 > >spark-redis入門教程

spark-redis入門教程

本文是我翻譯自redis官方網站文章,英文作者是Itamar Harber。

Spark-Redis是用Spark在redis上面進行讀寫資料操作的包。其支援redis的所有資料結構:String(字串), Hash(雜湊), List(列表), Set and Sorted Set(集合和有序集合)。此模組既可以用於Redis的standalone模式,也可用於叢集情況。此外,Spark-Redis還提供了對Spark-Streaming的支援。

簡介

本文概括了開始使用Apache Spark和Redis所需的基本步驟。關於Spark和Redis的安裝暫不介紹。我們將使用“WORD COUNT”為例,來介紹Spark,Redis和spark-redis的聯合使用。

Redis實驗室最近於2015年9月釋出了spark-redis package。顯而易見,根據它的名字,這是一個為Apache Spark提供Redis連線的連線件,它允許人們對Redis的資料結構在Spark中以RDD(彈性分散式資料集,Spark的專門術語。)的結構形式進行操作。

自從Spark開源以來,由於其針對大規模資料處理的高效且通用的引擎(輕鬆的超過了之前只能在單一平臺上面操作的大資料平臺),很快吸引了開發者們的注意。Spark採用了迴圈資料流和記憶體計算,使得其比Hadoop的MapReduce速度快了很多倍。由於Spark的易用性和SQL,Streaming以及Mlib等庫的擴充套件,吸引了開發人員的眼球。

Redis將共享記憶體的架構(shared in-memory infrastructure)引入到Spark中,這使得Spark處理資料的速度又快了幾個數量級。此外,Redis的資料結構簡化了資料的獲取和處理,使程式碼複雜度下降,並節省了網路通訊和頻寬的消耗。

因此,兩者的結合,可以實現大規模資料量的實時處理任務。提速幅度有多大?如果Redis和Spark結合使用,結果證明,處理資料(以時間序列資料為例)的速度比Spark單單使用程序記憶體堆外快取來儲存資料要快45倍――不是快45%,而是快整整45倍!

配置

  • Apache Spark
  • Scala
  • Jedis
  • Redis

最低標準:
Apache Spark v1.4.0
Scala v2.10.4
Jedis v2.7
Redis v2.8.12 or v3.0.3

Example(Word Count計數器)

下面,我們使用word count例子來開始介紹Spark-Redis的使用。

Step 1:讀取資料

這裡,我們將對Redis原始碼檔案進行Word Count統計,希望得出一些有趣的結論。當上面配置好以後,我們執行:
這裡寫圖片描述

注意:$ bin/spark-shell --jars <path-to>/spark-redis-<version>.jar,<path-to>/jedis-<version>.jar
需要在–jars 後面加上這兩個jar包。

在這裡,輸入:
這裡寫圖片描述

wtext.count = 100

表示有100個Redis的原始檔。當然,你也可以用ls -l redis/src/*.[ch] | wc -l 來統計檔案個數。但是通過WholeTextFileRDD的方式,可以看出job的劃分stage和完成的情況。

Step 2:改變檔案內容

接下來,是將檔案變成一個個單詞。相比於普遍使用的TextFileRDD,WholeTextFileRDD返回一個key-value型的結構資料。key對應的是每個檔案的path;value對應的是檔案的內容。
下面是WholeTextFileRDD的程式碼。

/** 
   * Read a directory of text files from HDFS, a local file system (available on all nodes), or any 
   * Hadoop-supported file system URI. Each file is read as a single record and returned in a 
   * key-value pair, where the key is the path of each file, the value is the content of each file. 
   * 
   * <p> For example, if you have the following files: 
   * {{{ 
   *   hdfs://a-hdfs-path/part-00000 
   *   hdfs://a-hdfs-path/part-00001 
   *   ... 
   *   hdfs://a-hdfs-path/part-nnnnn 
   * }}} 
   * 
   * Do `val rdd = sparkContext.wholeTextFile("hdfs://a-hdfs-path")`, 
   * 
   * <p> then `rdd` contains 
   * {{{ 
   *   (a-hdfs-path/part-00000, its content) 
   *   (a-hdfs-path/part-00001, its content) 
   *   ... 
   *   (a-hdfs-path/part-nnnnn, its content) 
   * }}} 
   * 
   * @note Small files are preferred, large file is also allowable, but may cause bad performance. 
   * @note On some filesystems, `.../path/*` can be a more efficient way to read all files 
   *       in a directory rather than `.../path/` or `.../path` 
   * 
   * @param path Directory to the input data files, the path can be comma separated paths as the 
   *             list of inputs. 
   * @param minPartitions A suggestion value of the minimal splitting number for input data. 
   */  
  def wholeTextFiles(  
      path: String,  
      minPartitions: Int = defaultMinPartitions): RDD[(String, String)] = withScope {  
    assertNotStopped()  
    val job = NewHadoopJob.getInstance(hadoopConfiguration)  
    // Use setInputPaths so that wholeTextFiles aligns with hadoopFile/textFile in taking  
    // comma separated files as input. (see SPARK-7155)  
    NewFileInputFormat.setInputPaths(job, path)  
    val updateConf = job.getConfiguration  
    new WholeTextFileRDD(  
      this,  
      classOf[WholeTextFileInputFormat],  
      classOf[Text],  
      classOf[Text],  
      updateConf,  
      minPartitions).map(record => (record._1.toString, record._2.toString)).setName(path)  
  }  

值得注意的是:① wholeTextFiles對於大量的小檔案效率較高,大檔案效果不太好。
② 一些檔案系統的路徑名採用萬用字元的形式效果比一個一個檔名新增上去更高效。

將檔案變成(檔名:單詞)的形式。(變數的名稱:wtext代表WholeTextFiles, fwd代表FileWords。):
這裡寫圖片描述

當fwds這個RDD將檔名和單詞清楚的分開之後,我們就準備好進行詞頻統計了。在此之前,先對所有檔案的單詞進行彙總,進行一個整體的詞頻統計。這裡寫圖片描述

其結果為:
這裡寫圖片描述

Step 3:將RDD寫到Redis中

從這步開始,我們就開始使用到非常6的Redis了!我們將用Redis儲存這個結果,以供後續計算使用。Redis的有序集合對詞頻統計(單詞:出現次數)場景特別適合,既可以根據單詞找到單詞的出現次數,也可以通過單詞的出現次數找到符合要求的單詞。

實現這個只需要一行程式碼!!!
這裡寫圖片描述

一旦資料存放到Redis中,我們可以使用命令列操作:

這裡寫圖片描述

Step 4:從Redis中讀取RDD

相較於從Redis寫資料,更常見的場景是從Redis中讀資料。執行下面的程式碼,使得每一個檔案的詞頻統計彙總起來變成一個總的輸出。

這裡寫圖片描述

用spark-shell進行操作,獲取全部單詞的個數(包括重複的內容)。

這裡寫圖片描述

閉注(Closing Notes)

當資料量小的時候,我們統計單詞個數可以用wc -w來實現。隨著資料量的增大,需要找到新的方法來抽象解答方式並增加方法的靈活性和可擴充套件性。Spark是一個讓人興奮的大資料處理工具。更別說其和Hadoop生態系統耦合,並有諸如SQL,streaming,Mlib等擴充套件包。
Redis的出現,可以說是為Spark“ 解了渴“。spark-redis
通過簡單的幾行程式碼,將RDD和Redis的核心資料結構迅速互換。spark-redis包已經提供了直接的方式將RDD和redis的結構進行互換,並提供了友好的方式來獲取key的名字。此外,連線件還通過將RDD分割槽轉換成Redis的hash slot,有效的減少了引擎內部shuffling操作。

最後,這個開源的連線件還在不斷的發展中,將來有可能會被spark設定成預設元件。

參考(References)

相關推薦

spark-redis入門教程

本文是我翻譯自redis官方網站文章,英文作者是Itamar Harber。 Spark-Redis是用Spark在redis上面進行讀寫資料操作的包。其支援redis的所有資料結構:String(字串), Hash(雜湊), List(列表), Set

Redis入門教程-超詳細

目錄 【redis是什麼】 redis是一個開源的、使用C語言編寫的、支援網路互動的、可基於記憶體也可持久化的Key-Value資料庫。 redi

超強、超詳細Redis入門教程

1.redis是什麼 2.redis的作者何許人也 3.誰在使用redis 4.學會安裝redis 5.學會啟動redis 6.使用redis客戶端 7.redis資料結構 – 簡介 8.redis資料結構 – strings 9.redis資料結構 – lists 10.redis資料結構 – 集合 1

redis入門教程(更新中)

1.安裝使用radis 1.下載安裝: 1.下載地址:https://github.com/MSOpenTech/redis/releases 2.配置全域性路徑: 在path中加入解壓後的資料夾目錄 3.radis牛刀小試:

超強、超詳細 Redis入門教程

1.redis是什麼2.redis的作者何許人也3.誰在使用redis4.學會安裝redis5.學會啟動redis6.使用redis客戶端7.redis資料結構 – 簡介8.redis資料結構 – strings9.redis資料結構 – lists10.redis資料結構 – 集合11.redis資料結構

快取系列-Redis入門教程

Redis是什麼? Redis (REmote DIctionary Server)是一個開源(BSD許可),記憶體儲存的資料結構伺服器,可用作資料庫,快取記憶體和訊息佇列,是一個高效能的key-value資料庫。 Redis與其他key-value快取產品有以下三個特點: Redis支援資料的持久化,可以

Spark視頻教程|Spark入門到上手實戰

sparkSpark從入門到上手實戰網盤地址:https://pan.baidu.com/s/1uLUPAwsw8y7Ha1qWGjNx7A 密碼:m8l2備用地址(騰訊微雲):https://share.weiyun.com/55RRnmc 密碼:8qywnp 課程是2017年錄制,還比較新,還是有學習的價

Redis快速入門-教程

目錄: Redis是什麼? Redis 安裝 Redis 啟動 Redis支援的資料型別 Redis伺服器操作命令 伺服器客戶端操作命令 Redis string操作命令 Sorted set (Zset)型別資料的操作命令: Redis l

Redis入門到精通 Redis入門實戰視訊教程 Redis視訊+文件

課程目錄 第1章:Redis 資料結構的用法與用例—完整 第1節:Redis 簡介 課時1-2:培訓須知.doc 課時3:Redis 簡介(上).mp4 課時4:Redis 簡介(下).mp4 課時5:字串鍵(上).mp4 課時6:字串鍵(中).mp4 課時7:

Redis資料庫入門教程

目錄 1、redis是什麼? redis是一個開源的、使用C語言編寫的、支援網路互動的、可基於記憶體也可持久化的Key-Value資料庫。 redis

子雨大資料之Spark入門教程

【版權宣告】部落格內容由廈門大學資料庫實驗室擁有版權,未經允許,請勿轉載!版權所有,侵權必究! Spark最初誕生於美國加州大學伯克利分校(UC Berkeley)的AMP實驗室,是一個可應用於大規模資料處理的快速、通用引擎。2013年,Spark加入Apache孵化器專案後,開始獲得迅猛的發展,如今已

一:Windows安裝Redis 詳細教程——《Redis入門

Redis 官網:https://redis.io/,官網提供的是linux版本的,下載windows版本的地址如下。1、安裝。執行對話方塊輸入"cmd",開啟命令提示符對話方塊。定位到redis解壓縮

Spark入門教程及經驗總結

Write the elements of the dataset as a Hadoop SequenceFile in a given path in the local filesystem, HDFS or any other Hadoop-supported file system. This is

redis快速入門教程

redis是什麼 redis的作者何許人也 誰在使用redis 學會安裝redis 學會啟動redis 使用redis客戶端 redis資料結構 – 簡介 redis資料結構 – strings redis資料結

超強、超詳細Redis資料庫入門教程

1.Redis是什麼 2.Redis的作者何許人也 3.誰在使用redis 4.學會安裝redis 5.學會啟動redis 6.使用redis客戶端 7.redis資料結構 – 簡介 8.redis資料結構 – strings 9.redis資料結構 – lists 10.

超強、超詳細Redis資料庫入門教程(2)

【本教程目錄】 1.redis是什麼 2.redis的作者何許人也 3.誰在使用redis 4.學會安裝redis 5.學會啟動redis 6.使用redis客戶端 7.redis資料結構 – 簡介 8.redis資料結構 – strings 9.redis資料結構 – l

子雨大資料之Spark入門教程---Spark2.1.0入門:第一個Spark應用程式:WordCount 2.2

前面已經學習了Spark安裝,完成了實驗環境的搭建,並且學習了Spark執行架構和RDD設計原理,同時,我們還學習了Scala程式設計的基本語法,有了這些基礎知識作為鋪墊,現在我們可以沒有障礙地開始編寫一個簡單的Spark應用程式了——詞頻統計。 任務要求 任務:

SpringBoot 入門教程:整合mybatis,redis

SrpingBoot相較於傳統的專案具有配置簡單,能快速進行開發的特點,花更少的時間在各類配置檔案上,更多時間在具體業務邏輯上。 SPringBoot採用純註解方式進行配置,不喜歡xml配置的同學得仔細看了。 首先需要構建SpringBoot專案,除了傳統的自己構建好修改

Spark Streaming連線Kafka入門教程

前言 首先要安裝好kafka,這裡不做kafka安裝的介紹,本文是Spark Streaming入門教程,只是簡單的介紹如何利用spark 連線kafka,並消費資料,由於博主也是才學,所以其中程式碼以實現為主,可能並不是最好的實現方式。 1、對應依

Apache Spark漸進式學習教程(三): Spark單節點安裝和快速入門Demo

一,下載Spark 使用 Spark 的第一步是下載和解壓縮。我們先從下載預編譯版本的 Spark 開始。訪問 ht