1. 程式人生 > >Apache Spark – за рамками MapReduce

Apache Spark – за рамками MapReduce

Виталий Федоренко (Vitalii Fedorenko), AWS Big Data Cloud Architect
Author: Vitalii Fedorenko

Данная статья это вольный перевод одного из наиболее популярных AWS постов об Apache Spark Джона Фрица.

Как многим из Вас уже известно, веб-сервис Amazon EMR упрощает обработку и анализ больших объемов данных используя такие библиотеки как Hadoop, Hive, HBase, Presto, Impala и Spark. В то время как Hadoop MapReduce все еще популярен для обработки больших объёмов данных, анализа неструктурированных данных и машинного обучения, Apache Spark стал вытеснять его, обеспечивая лучшую производительность кластера и скорость разработки. Используя движок на основе направленного ациклического графа (DAG), Spark создает более эффективный план выполнения запросов преобразования данных. Кроме того, Spark использует отказоустойчивые распределенные наборы данных (RDD), сохраняя промежуточные, входные и выходные данные в памяти, а не на диске. Эти элементы функциональности повышают производительность определенных программ по сравнению с Hadoop (к примеру, машинное обучение), так как MapReduce выполняет задачи по последовательной схеме и затрачивает большее количество ресурсов на ввод-вывод промежуточных данных на диск.

Spark поддерживает такие языки программирования как Scala, Python, Java, и SQL API, популярные алгоритмы машинного обучения, обработку графов и потоков данных. В Spark есть множество параметров которые упрощают разработку по сравнению с различными абстракциями, обернутыми вокруг Hadoop MapReduce API.

Spark на Amazon EMR

Вы можете создавать масштабируемые Spark кластера с различными типами EC2 инстансов непосредственно из консоли Amazon EMR, CLI или API. Работая в контейнере EMR, Spark может читать данные через EMRFS напрямую из S3, пересылать логи в хранилище данных S3, использовать Spot EC2 для снижения затрат, а также интегрироваться с такими функциями безопасности AWS как IAM роли, группы безопасности EC2 и шифрование S3 в состоянии покоя (на стороне сервера или клиента). Одним из основных достоинств является то, что нет никакой дополнительной платы за Spark на AWS EMR.

Spark включает в себя интерфейс SQL для интерактивных SQL-запросов, MLlib для масштабируемых распределенных алгоритмов машинного обучения, Spark Streaming для создания приложений обработки потоков и GraphX для работы с графиками. Вы также можете установить на EMR кластер Ganglia для дополнительного мониторинга Spark. Приложения на EMR Spark запускаются через EMR Step API, напрямую через Spark API или Spark Shell на главном узле кластера.

Примеры использования Spark клиентами AWS

Несколько примеров использования Spark клиентами AWS:

  • Корпорация Hearst использует Spark Streaming для обработки данных о кликах на сайте Cosmopolitan. Это позволяет им создавать отчеты о читаемости статей и трендах в режиме реального времени: https://www.youtube.com/watch?v=6cwbbqi36k8

Пример анализа данных с помощью Apache Spark

В этой части мы покажем пример того как можно в течение короткого времени начать обработку данных с помощью Spark на Amazon EMR ответив на несколько вопросов о задержке рейсов и аннулировании внутренних рейсов в Соединенных Штатах Америки. Министерство транспорта США публикует общедоступные данные о перелетах с 1987 года. Мы преобразовали формат исходных файлов из CSV в Parquet (для лучшей производительности) и загрузили его в общедоступную корзину S3 s3://us-east-1.elasticmapreduce.samples/flightdata/input. Этот набор данных составляет около 4 ГБ (79 ГБ без сжатия) и содержит более 160 миллионов строк. Набор данных довольно большой и оптимальным средством для его обработки будет Spark. Мы вычислим 10 аэропортов с наибольшим количеством вылетов, рейсы с задержкой более 15 минут, рейсы с задержкой более 60 минут, и отмененные рейсы. Мы также узнаем количество отмененных рейсов по 10 самым популярным маршрутам. Все эти запросы будут реализованы на SQL, а само приложение написано на Scala. Вот, к примеру, несколько строк из исходного кода:

// Файлы parquet могут быть зарегистрированы как таблицы для дальнейшего использования в SQL запросах
val df = session.read.parquet ("s3://us-east-1.elasticmapreduce.samples/flightdata/input/")
// Топ 10 аэропортов с наибольшим количеством вылетов с 2000 года
df.createOrReplaceTempView("flights")
val topDepartures = session.sql("SELECT origin, count (*) AS total_departures
FROM flights WHERE year >= '2000' GROUP BY origin ORDER BY total_departures DESC LIMIT 10")

Обратите внимание, что приложение создает таблицу «flights», которая является фреймом в памяти (DataFrame), и SQL-запрос считывает эту таблицу из памяти для сокращения затрат ввода-вывода на диск. Кроме того, EMR Spark использует EMRFS для доступа к данным в S3 без необходимости сначала копировать их в HDFS.

Теперь давайте запустим EMR Spark кластер из трех m3.xlarge инстансов EC2 для выполнения нашего приложения. Данные для этого примера расположены в us-east-1 и скорость чтения будет наиболее оптимальна если кластер находится в этом же регионе. Для начала откройте страницу EMR «Create Cluster», а затем «Go to Advanced Options» в консоли Amazon EMR. Затем выберите Spark в качестве приложения.


По умолчанию Amazon EMR конфигурирует Spark для использования динамического распределения ресурсов и устанавливает количество ядер процессора и RAM для каждого Spark executor на основе типа EC2 инстанса. Вы всегда можете переопределить эти параметры во время выполнения задач, передав дополнительные аргументы в команду spark-submit. Теперь перейдите к разделу Add Steps в нижней части страницы, и выберите Spark Application, затем нажмите Configuration чтобы добавить шаг приложения Spark:


Выберите «Cluster» для «Deploy mode». В качестве ссылки на приложение введите s3://us-east-1.elasticmapreduce.samples/flightdata/sparkapp/flightsample-1.0.jar. В поле «Аrguments» укажите путь S3, куда бы вы хотели чтобы Spark записал результат. Нажмите «Add» и установите флажок «Auto-terminate cluster after the last step is completed» в нижней части страницы, чтобы кластер автоматически удалился после завершения работы приложения. Нажмите «Continue», чтобы перейти ко второму этапу создания кластера. Просмотрите EC2 конфигурацию вашего кластера. Для этого приложения мы выберем один master-узел и два core-узла типа m4.xlarge. Нажмите «Continue» и снимите флажки параметров «Logging» и «Termination protection» в разделе «General Options». Нажмите «Continue», чтобы перейти к последнему этапу (все параметры остаются без изменения). В заключение, нажмите «Create cluster». Amazon EMR запустит кластер и ваше Spark приложение. По завершении вы можете просмотреть результат по указанному вами ранее пути в S3. Мы не будем раскрывать здесь результатов нашего отчета, но обязательно захватите с собой что-нибудь почитать, если вы летите из Чикаго!

相關推薦

Apache Sparkза рамками MapReduce

Виталий Федоренко (Vitalii Fedorenko), AWS Big Data Cloud Architect Данная статья это вольный перевод одного из наиболее популярных AWS п

MapReduce作業大規模遷移Apache Spark在百度的實踐

本文來自於2018年11月3日在上海舉辦的上海Spark+AI第十五次聚會。分享者葉先進,百度智

.net 開發者嘗試Apache Spark?

基本概念 devel pac target 適配器 blank cti msdn 示例 本文編譯自一篇msdn magazine的文章,原文標題和鏈接為: Test Run - Introduction to Spark for .NET Developers http

Apache Spark 內存管理詳解

append 緩存 hashmap slave 完整 developer transform borde 區別 Apache Spark 內存管理詳解 Spark 作為一個基於內存的分布式計算引擎,其內存管理模塊在整個系統中扮演著非常重要的角色。理解 Spark 內存

【轉載】Apache Spark Jobs 性能調優(二)

放棄 instance bar 並行處理 defaults 執行 .exe nag 原則 調試資源分配 Spark 的用戶郵件郵件列表中經常會出現 “我有一個500個節點的集群,為什麽但是我的應用一次只有兩個 task 在執行”,鑒於 Spark 控制資源使用的參數的數

【轉載】Apache Spark Jobs 性能調優(一)

功能 dso brush 數據結構 nsf 必須 char dal 開始 當你開始編寫 Apache Spark 代碼或者瀏覽公開的 API 的時候,你會遇到各種各樣術語,比如 transformation,action,RDD 等等。 了解到這些是編寫 Spark 代碼

Hadoop和Apache Spark的異同

功能 框架 work red 需求 rdd 分布式文件 說道 管理 談到大數據,相信大家對Hadoop和Apache Spark這兩個名字並不陌生。但我們往往對它們的理解只是提留在字面上,並沒有對它們進行深入的思考,下面不妨跟我一塊看下它們究竟有

Apache Spark 2.2.0 中文文檔 - SparkR (R on Spark) | ApacheCN

機器學習 matrix ren mes 網頁 eve growth ear 統計 SparkR (R on Spark) 概述 SparkDataFrame 啟動: SparkSession 從 RStudio 來啟動 創建 SparkDataFrames 從本地

Apache Spark大數據分析入門(一)

做的 項目 persist fig shell命令 tutorial math 提高 welcom 摘要:Apache Spark的出現讓普通人也具備了大數據及實時數據分析能力。鑒於此,本文通過動手實戰操作演示帶領大家快速地入門學習Spark。本文是Apache Spark

Apache Spark 2.0三種API的傳說:RDD、DataFrame和Dataset

sensor json數據 query 答案 內存 table 引擎 library spark Apache Spark吸引廣大社區開發者的一個重要原因是:Apache Spark提供極其簡單、易用的APIs,支持跨多種語言(比如:Scala、Java、Python和R

Apache Spark 2.2中基於成本的優化器(CBO)(轉載)

ons roc art 3.4 post tinc ner sort 重排序 Apache Spark 2.2最近引入了高級的基於成本的優化器框架用於收集並均衡不同的列數據的統計工作 (例如., 基(cardinality)、唯一值的數量、空值、最大最小值、平均/最大長度,

Apache Spark 2.2.0新特性介紹(轉載)

端到端 clas flat ket 性能 保序回歸 rime day 工作 這個版本是 Structured Streaming 的一個重要裏程碑,因為其終於可以正式在生產環境中使用,實驗標簽(experimental tag)已經被移除。在流系統中支持對任意狀態進行操作;

What’s new for Spark SQL in Apache Spark 1.3(中英雙語)

block htm park -h apache HA log -a -- 文章標題 What’s new for Spark SQL in Apache Spark 1.3 作者介紹 Michael Armbrust 文章正文 參考文獻

Offset Management For Apache Kafka With Apache Spark Streaming

ould cond eth ref properly fine load them sca An ingest pattern that we commonly see being adopted at Cloudera customers is Apache Spark

Apache Spark 2.3 重要特性介紹

情況 緩存 panda image author cluster 所有 分析方法 deep 為了繼續實現 Spark 更快,更輕松,更智能的目標,Spark 2 3 在許多模塊都做了重要的更新,比如 Structured Streaming 引入了低延遲的連續處理(cont

Driver stacktrace: at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGSchedul

depend trace pan ssi ram rac .org driver 過大 在寫Spark程序是遇到問題 Driver stacktrace: at org.apache.spark.scheduler.DAGScheduler.orgapachea

APACHE SPARK 2.0 API IMPROVEMENTS: RDD, DATAFRAME, DATASET AND SQL

new limit runtime font blank eth epo rmi syn What’s New, What’s Changed and How to get Started. Are you ready for Apache Spark 2.0? If yo

if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else staticinvoke(class o...

names apach true 行數 cin name else color isnull 運行spark程序一直報錯: 1 if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) nu

關於在使用sparksql寫程序是報錯以及解決方案:org.apache.spark.sql.AnalysisException: Duplicate column(s): "name" found, cannot save to file.

文件加載 mod 但是 路徑 win 錯誤 寫入 技術分享 over 說明:   spark --version : 2.2.0   我有兩個json文件,分別是emp和dept: emp內容如下: {"name": "zhangsan", "age": 26, "dep

Apache Spark 2.3 運行在Kubernete實戰

https llb pen message vbs token CMF spa ive 下載源代碼,並解壓下載地址 tar -zxvf v2.3.2.tar.gz 編譯 cd spark-2.3.2 build/mvn install -DskipTests buil