官术网_书友最值得收藏!

1.4 配套工具

現在我們已經建立了一個技術棧,下面具體描述技術棧中的每個組件以及它們在Spark環境中的作用。1.4節是作為參考而不是供讀者直接閱讀的。如果你對大部分技術相當熟悉,可以快速瀏覽知識然后繼續閱讀第2章。

1.4.1 Apache HDFS

HDFS是一個內置冗余的分布式文件系統。在默認情況下,它在3個或更多節點上工作,盡管只有1個節點也能正常工作并且可以增加節點限制,這一機制為系統提供了在重復的塊中存儲數據的能力。因此每個文件不僅被分成很多數據塊進行存儲,而且還存儲了這些數據塊的3個副本。這一巧妙的機制不但提供了數據冗余(如果一個數據塊丟失了還有其他兩個數據塊),也具有數據局部性。當在HDFS運行分布式作業時,系統不僅會收集輸入該作業所需的數據相關的所有數據塊,而且還會僅使用物理上靠近運行該作業的服務器的數據塊,因此它可以僅使用本地存儲中的數據塊或者靠近該作業服務器節點上的數據塊來降低網絡帶寬使用率。它的具體實現是將HDFS物理磁盤分配給節點,將節點分配到機架;塊分別以節點本地、機架本地和集群本地的模式寫入。HDFS的所有指令都通過名為NameNode的中央服務器傳遞,這就存在一個可能的中心故障點,但是相應地有多種方法可以提供NameNode冗余配置。

此外,在多租戶HDFS使用場景中,當多個進程同時訪問同一個文件,也可以通過使用多個塊來實現負載均衡。例如,如果一個文件占用一個塊,則該塊被復制3次,因此可以同時從3個不同的物理位置讀取數據。雖然這看上去不算一個巨大的優勢,但是在有著成百上千個節點的集群上,網絡I/O通常是正在運行的作業的最大限制因素。在數千個節點的集群上,因為大量的其他線程調用數據,而耗盡了網絡帶寬,導致作業需要數個小時才能完成。

如果你正在使用筆記本電腦,需要把數據存儲在本地,或者希望使用已有的硬件,那么HDFS是一個不錯的選擇。

1.優點

下面介紹HDFS的優點。

  • 冗余:可配置的數據塊復制提供了節點容錯和硬盤容錯。
  • 負載均衡:數據塊復制意味著可以從不同的物理位置訪問相同的數據。
  • 數據局部性:數據分析試圖訪問最近的相關物理塊,以降低網絡I/O。
  • 數據平衡:在數據塊過于聚集或碎片化時,有可用的算法將數據塊重新平衡。
  • 靈活存儲:如果需要更多空間,可以往集群添加更多磁盤和節點;不過這一過程不是熱添加的,需要中斷運行集群來添加這些資源。
  • 額外費用:不需要第三方支出費用。
  • 數據加密:透明加密(在啟用時)。

2.缺點

以下是HDFS的缺點。

  • 使用NameNode中央服務器產生了一個可能的中心故障點;為解決這一問題,可以啟用第二NameNode節點和高可用選項。
  • 集群需要基本的管理和潛在的一些硬件開銷。

3.安裝

要使用HDFS,應該事先決定是以本地、偽分布式還是完全分布式的方式運行Hadoop;對于單個服務器來說,采用偽分布式方式非常有用,因為在這一方式下數據分析可以直接從當前服務器轉換到任意的Hadoop集群。無論如何,安裝Hadoop至少需要包括以下組件。

  • NameNode。
  • 第二NameNode(或者高可用NameNode)。
  • DataNode。

可以通過官方網站下載安裝Hadoop。

Hadoop與Spark集成時,Spark需要知道Hadoop配置的位置,特別是以下文件的位置:hdfs-site.xml,core-site.xml。然后在Spark配置中對HADOOP_CONF_DIR配置參數進行設置。

然后就可以直接使用HDFS了,在Spark中可以用/user/local/dir/text.txt來直接訪問hdfs://user/local/dir/text.txt文件。

1.4.2 亞馬遜S3

S3解決了與并行性、存儲限制和安全性相關的問題,以非常低的成本運行非常復雜的并行讀寫操作以及非常好的服務級別協議(SLA)。如果你需要快速啟動與運行程序,但卻無法在本地存儲數據,或者不知道未來的存儲需求,那么S3將是完美的選擇。s3n和s3a是使用對象存儲模型,而不是文件存儲模型,因此需要做出妥協。

  • 最終一致性:當一個應用做出更改(創建、更新或刪除)之后,經過一個不確定的時間延遲之后才會顯現。不過現在大部分AWS區域已經支持寫入后讀取一致性。
  • s3n和s3a使用非原子的重命名和刪除操作,因此對大目錄進行重命名和刪除所需的時間與目錄內的條目數成比例。但在重命名和刪除期間,目錄內的條目仍然對其他進程保持可見,實際上,這種情況會持續到操作完成。

可以利用命令行工具(s3cmd)通過網頁或利用大部分語言的API訪問S3,可以進行一些簡單的配置,將S3與Hadoop和Spark進行本地集成。

1.優點

下面介紹的是亞馬遜S3的優點。

  • 無限的存儲容量。
  • 無須考慮硬件。
  • 加密可用(用戶保存密鑰)。
  • 具有99.9%的可用性。
  • 提供冗余。

2.缺點

以下是亞馬遜S3的缺點。

  • 需要存儲和傳輸數據的費用。
  • 沒有數據局部性。
  • 存在最終一致性。
  • 相對較高的延遲。

3.安裝

可以在亞馬遜AWS官網上創建一個AWS賬戶,通過這個賬戶,只需要創建憑證就可以訪問S3了。

目前的S3標準是s3a,要想通過Spark使用它需要修改Spark配置:

spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem
spark.hadoop.fs.s3a.access.key=MyAccessKeyID
spark.hadoop.fs.s3a.secret.key=MySecretKey

如果使用HDP,還完成需要以下配置:

spark.driver.extraClassPath=${HADOOP_HOME}/extlib/hadoop-aws-
currentversion.jar:${HADOOP_HOME}/ext/aws-java-sdk-1.7.4.jar

然后,可以在S3對象引用前使用s3a://前綴來訪問Spark中的所有S3文件:

Val rdd = spark.sparkContext.textFile("s3a://user/dir/text.txt")

如果已經設置了spark.hadoop.fs.s3a.impl,也可以使用內聯的AWS憑證:

spark.sparkContext.textFile("s3a://AccessID:SecretKey@user/dir/file")

如果密鑰中存在正斜杠符號/,這一方法就無法使用。通常的解決方法是從AWS獲取另外的密鑰來解決(一直生成新的密鑰,直到密鑰中不存在正斜杠符號),也可以通過AWS賬戶中S3選項卡下的網頁界面瀏覽對象。

1.4.3 Apache Kafka

Apache Kafka是一個用Scala編寫的分布式消息系統,可以在Apache軟件基金會許可下使用。該項目旨在提供統一、高吞吐量、低延遲的平臺,用于處理實時數據饋送。本質上它是一個靈活的大規模發布—訂閱消息隊列,這使得它對需要建立處理流數據的基礎設施的企業來說非常有價值。

1.優點

下面介紹的是Apache Kafka的優點。

  • 是發布—訂閱消息傳送模式。
  • 容錯率高。
  • 保證送達。
  • 失敗時重發消息。
  • 高可擴展性,無共享架構。
  • 支持背壓。
  • 延遲低。
  • 良好的Spark-streaming集成。
  • 對用戶來說易于實現。

2.缺點

以下是Apache Kafka的缺點。

  • 至少一次語義——由于缺乏事務管理而不能提供精確的一次語義(譯者注:0.11.×之后的Kafka已支持)。
  • 需要ZooKeeper才能運行。

3.安裝

由于Kafka是發布—訂閱工具,功能是管理消息(發布者)并將其指向相關的終點(訂閱者),是用Kafka安裝后提供的代理來具體實現的。Hortonworks HDP平臺安裝后Kafka就立即可用,也可以在Kafka官網上下載后單獨安裝。

Kafka使用ZooKeeper來管理領導節點選舉(因為Kafka可以分布式安裝從而允許冗余)。Kafka官網上的快速入門指南可以指導設置單節點ZooKeeper實例,還提供了一個客戶端及消費者發布和訂閱主題的消息處理機制范例。

1.4.4 Apache Parquet

自Hadoop誕生以來,基于列的格式(與基于行相反)的想法得到了越來越多的支持。因此為了利用壓縮和高效的列數據表示形式,Parquet被開發出來,為復雜的嵌套數據結構而設計,這一算法的靈感來源于谷歌發表的介紹Dremel的論文《Dremel:網絡規模數據集的交互式分析》(Dremel: Interactive Analysis of Web-Scale Datasets)。Parquet允許在每列上指定壓縮方案,并且支持在未來新編碼被實現時進行添加。它還被設計為在整個Hadoop生態系統中提供兼容性,而且與Avro一樣,將數據模式與數據一起存儲。

1.優點

下面介紹的是Apache Parquet的優點。

  • 列存儲方式。
  • 高存儲效率。
  • 每列壓縮。
  • 支持謂詞下推。
  • 支持列剪枝。
  • 與其他格式兼容,如Avro。
  • 讀取效率高,專為部分數據檢索而設計。

2.缺點

以下是Apache Parquet的缺點。

  • 不適合隨機訪問。
  • 寫入有可能是計算密集型的。

3.安裝

Parquet在Spark中是原生可用的,可以像下面這樣直接訪問:

val ds = Seq(1, 2, 3, 4, 5).toDS
ds.write.parquet("/data/numbers.parquet")
val fromParquet = spark.read.parquet("/data/numbers.parquet")

1.4.5 Apache Avro

Apache Avro最初是為Hadoop開發的數據序列化框架,它使用JSON來定義數據類型和協議(另外,接口描述語言也是可選的),并以緊湊的二進制格式序列化數據。Avro既提供持久性數據的序列化格式,也提供Hadoop節點之間以及客戶端程序與Hadoop服務器之間通信的電報格式。它的另一個有用的特性是能夠將數據模式與數據一起存儲,因此無須引用外部源就可以讀取任何Avro文件。此外,Avro支持模式演變,因此可以使用較新的模式版本讀取舊模式版本編寫的Avro文件,保持了向后兼容性。

1.優點

下面介紹的是Apache Avro的優點。

  • 支持模式演變。
  • 節省硬盤空間。
  • 支持JSON和接口描述語言(IDL)中的模式。
  • 支持多語言。
  • 支持壓縮。

2.缺點

以下是Apache Avro的缺點。

  • 需要模式來讀寫數據。
  • 序列化數據的計算量很大。

3.安裝

由于本書中使用Scala、Spark和Maven環境,因此可以用如下方式導入Avro:

<dependency>
   <groupId>org.apache.avro</groupId>
   <artifactId>avro</artifactId>
   <version>1.7.7</version> 
</dependency>

可以創建一個模式并生成Scala代碼,并且可以使用該模式將數據寫入Avro。第3章將對此進行詳細說明。

1.4.6 Apache NiFi

Apache NiFi源自美國國家安全局(NSA),它作為NSA技術轉讓計劃的一部分于2014年開源發布。NiFi可在簡單的用戶界面內生成可擴展的數據路由和轉換的有向圖,它還支持數據來源、眾多的預構建處理程序,以及快速高效地構建新處理程序的能力。它具有優先級,可調傳輸容差和背壓功能,允許用戶根據特定要求調整處理程序和管道,甚至允許在運行時進行數據流修改。這些功能加起來,構成了一個非常靈活的工具,可以構建從一次性文件下載數據流到企業級ETL管道的所有流程。使用NiFi構建管道和下載文件通常比編寫快速bash腳本更快,而這一方式還添加了功能豐富的處理程序,強烈推薦讀者使用它。

1.優點

下面介紹的是Apache NiFi的優點。

  • 處理范圍廣泛。
  • 中心輻射型架構。
  • 圖形用戶界面(GUI)。
  • 可擴展。
  • 簡化并行處理。
  • 簡化線程處理。
  • 允許運行時修改數據流。
  • 通過集群進行冗余。

2.缺點

以下是Apache NiFi的缺點。

  • 沒有跨領域的錯誤處理。
  • 僅部分實現表達式語言。
  • 缺乏流文件版本管理。

3.安裝

Apache NiFi可以與Hortonworks一起安裝,被稱為Hortonworks數據流;也可以在Kafka的NiFi官網上下載后單獨安裝。第2章將對NiFi進行介紹。

1.4.7 Apache YARN

YARN是Hadoop 2.0的主要組成部分,它允許Hadoop插入處理范式,不局限于原始的MapReduce。YARN有3個主要組件:資源管理器、節點管理器和應用程序管理器。深入介紹YARN超出了本書的主要范圍,我們要了解的重點是,如果運行一個Hadoop集群,那么Spark作業可以通過YARN在客戶端模式下執行,如下所示:

spark-submit --class package.Class /
             --master yarn /
             --deploy-mode client [options] <app jar> [app options]

1.優點

下面介紹的是Apache YARN的優點。

  • 支持Spark。
  • 支持優先調度。
  • 支持數據局部性。
  • 作業歷史存檔。
  • 在HDP中開箱即用。

2.缺點

以下是Apache YARN的缺點。

  • 沒有CPU資源控制。
  • 不支持數據沿襲。

3.安裝

YARN可以作為Hadoop的一部分進行安裝,也可以作為Hortonworks HDP、Apache Hadoop的一部分進行安裝,或者作為其他供應商的一部分進行安裝。無論如何,安裝YARN至少應該包括以下組件。

  • 資源管理器。
  • 節點管理器(1個或更多)。

要確保Spark可以使用YARN,需要知道yarn-site.xml的位置,可以在Spark配置中對YARN_CONF_DIR配置參數進行設置。

1.4.8 Apache Lucene

Lucene最初是一個使用Java編寫的索引和搜索庫等工具,但現在已經應用于包括Python在內的其他幾種語言上。Lucene孵化了許多子項目,包括Mahout、Nutch和Tika。現在這些項目已成為頂級Apache項目,而Solr最近成為Lucene的一個子項目。Lucene具有很多功能,而應用于問答搜索引擎和信息檢索系統的功能尤為知名。

1.優點

下面介紹的是Apache Lucene的優點。

  • 高效的全文搜索功能。
  • 可擴展。
  • 支持多語言。
  • 出色的開箱即用功能。

2.缺點

Apache Lucene的缺點是數據庫通常更適用于關系操作。

3.安裝

想了解更多信息并直接與數據庫交互,可以在Lucene官網上下載相關資料。

如果要使用Lucene,只需要在項目中包含lucene-core-<version>.jar即可,例如在使用Maven時,代碼如下所示:

<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-core</artifactId>
    <version>6.1.0</version> 
</dependency>

1.4.9 Kibana

Kibana是一個分析與可視化平臺,還提供圖表和流數據匯總。因為它將Elasticsearch作為其數據源(后者又使用Lucene),所以有著非常強的大規模搜索和索引能力。Kibana能以多種方式對數據進行可視化,包括條形圖、直方圖和地圖等。本章末尾簡要介紹Kibana,它將在本書中廣泛使用。

1.優點

下面介紹Kibana的優點。

  • 大規模地可視化數據。
  • 具有直觀的界面,可以快速開發儀表盤。

2.缺點

以下是Kibana的缺點。

  • 僅與Elasticsearch集成。
  • Kibana版本僅與相應的特定Elasticsearch版本相配套。

3.安裝

Kibana有自己的Web服務器,因此用戶可以很容易地在Kibana的官網上下載后單獨安裝。由于Kibana需要Elasticsearch,因此還需要安裝對應版本的Elasticsearch,具體細節請參閱Kibana官網。Kibana的配置在config/kibana.yml中修改。

1.4.10 Elasticsearch

Elasticsearch是一個基于Lucene(見前文介紹)和Web的搜索引擎,它提供了面向模式自由JSON文檔的分布式、多租戶全文搜索引擎。它是用Java編寫的,但用戶可以用任意語言使用其HTTP Web接口,這使它特別適用于處理事務或執行數據密集型指令并通過網頁展示結果。

1.優點

下面介紹的是Elasticsearch的優點。

  • 分布式。
  • 模式自由。
  • HTTP接口。

2.缺點

以下是Elasticsearch的缺點。

  • 缺乏前端工具。

3.安裝

可以在Elastic官網上下載Elasticsearch,要對REST API進行訪問,可以導入Maven依賴項:

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch-spark_2.10</artifactId>
    <version>2.2.0-m1</version> 
</dependency>

有一個很好的工具可以幫助你管理Elasticsearch內容,就是在谷歌瀏覽器應用商店中下載谷歌瀏覽器插件Sense(譯者注:Sense插件已經被谷歌瀏覽器應用商店下架,建議改用Kibana控制臺,如確定需要使用Sense請在GitHub官方網站搜索sense-chrome,然后根據說明安裝使用)。

1.4.11 Accumulo

Accumulo是一個基于Google Bigtable設計的No SQL數據庫,最初由美國國家安全局開發,隨后于2011年發布到Apache社區。Accumulo提供了常用的大數據處理技術,如批量加載和并行讀取、用于高效服務器和客戶端預計算的迭代器、數據聚合,最重要的是還具有單元級安全性。Accumulo的安全性使其對企業級應用來說非常有用,因為它可以在多租戶環境中具有靈活的安全性。Accumulo和Kafka一樣由Apache ZooKeeper提供支持,它還使用了Apache Thrift來提供跨語言遠程過程調用(RPC)功能。

1.優點

下面介紹的是Accumulo的優點。

  • Google Bigtable的純凈實現。
  • 具有單元級安全性。
  • 可擴展。
  • 提供冗余。
  • 為服務端計算提供迭代器。

2.缺點

以下介紹Accumulo的缺點。

  • 在開發運維人員使用的技術中ZooKeeper不算流行。
  • 對于批量關系操作,不能保證Accumulo一直是最佳的選擇。

3.安裝

Accumulo可以作為Hortonworks HDP的一部分安裝,也可以在Apache的Accumulo官網上下載后單獨安裝。在編寫實例時需要根據Accumulo官網上的安裝文檔進行配置。

第7章將演示如何通過Spark來使用Accumulo,以及類似迭代器和輸入格式的高級功能,還將展示如何在Elasticsearch和Accumulo之間處理數據。

主站蜘蛛池模板: 页游| 毕节市| 浦县| 沁源县| 奇台县| 巧家县| 梁河县| 凌海市| 沁阳市| 青龙| 周宁县| 理塘县| 克拉玛依市| 景洪市| 历史| 襄城县| 孝昌县| 清水河县| 黄龙县| 许昌县| 武威市| 乐平市| 隆子县| 赣榆县| 容城县| 基隆市| 崇礼县| 天柱县| 陈巴尔虎旗| 日土县| 沙田区| 花莲县| 明星| 侯马市| 福州市| 晋中市| 乌拉特中旗| 上高县| 勃利县| 陇川县| 崇州市|