请选择 进入手机版 | 继续访问电脑版

技术控

    今日:59| 主题:54663
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] 使用Apache Spark构建实时分析Dashboard

[复制链接]
幸福是个哑巴 发表于 2016-11-28 06:51:09
143 0

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本篇 博文中( Building Real-Time Analytics Dashboard Using Apache Spark ,作者: Abhinav Singh , Sandeep Giri ),我们将学习如何使用Apache Spark streaming,Kafka,Node.js,Socket.IO和Highcharts构建实时分析Dashboard。
   

使用Apache Spark构建实时分析Dashboard

使用Apache Spark构建实时分析Dashboard-1-技术控-spark,dashboard,sbt构建spark工程,maven构建spark

  问题描述

   电子商务门户( http://www.aaaa.com )希望构建一个实时分析仪表盘,对每分钟发货的订单数量做到可视化,从而优化物流的效率。
  解决方案

  解决方案之前,先快速看看我们将使用的工具:
   Apache Spark– 一个通用的大规模数据快速处理引擎。Spark的批处理速度比Hadoop MapReduce快近10倍,而内存中的数据分析速度则快近100倍。 更多 关于Apache Spark的信息。
   Python– Python是一种广泛使用的高级,通用,解释,动态编程语言。 更多 关于Python的信息。
   Kafka– 一个高吞吐量,分布式消息发布订阅系统。 更多 关于Kafka的信息。
   Node.js– 基于事件驱动的I/O服务器端JavaScript环境,运行在V8引擎上。 更多 关于Node.js的信息。
   Socket.io– Socket.IO是一个构建实时Web应用程序的JavaScript库。它支持Web客户端和服务器之间的实时、双向通信。 更多 关于Socket.io的信息。
   Highcharts– 网页上交互式JavaScript图表。 更多 关于Highcharts的信息。
   CloudxLab– 提供一个真实的基于云的环境,用于练习和学习各种工具。你可以通过在线 注册 立即开始练习。
  如何构建数据Pipeline?

  下面是数据Pipeline高层架构图
  (点击放大图像)
   

使用Apache Spark构建实时分析Dashboard

使用Apache Spark构建实时分析Dashboard-2-技术控-spark,dashboard,sbt构建spark工程,maven构建spark

  数据Pipeline
   

使用Apache Spark构建实时分析Dashboard

使用Apache Spark构建实时分析Dashboard-3-技术控-spark,dashboard,sbt构建spark工程,maven构建spark

  实时分析Dashboard
  让我们从数据Pipeline中的每个阶段的描述开始,并完成解决方案的构建。
  阶段1

  当客户购买系统中的物品或订单管理系统中的订单状态变化时,相应的订单ID以及订单状态和时间将被推送到相应的Kafka主题中。
  数据集

  由于没有真实的在线电子商务门户网站,我们准备用CSV文件的数据集来模拟。让我们看看数据集:
  1. DateTime, OrderId, Status
  2. 2016-07-13 14:20:33,xxxxx-xxx,processing
  3. 2016-07-13 14:20:34,xxxxx-xxx,shipped
  4. 2016-07-13 14:20:35,xxxxx-xxx,delivered
复制代码
数据集包含三列分别是:“DateTime”、“OrderId”和“Status”。数据集中的每一行表示特定时间时订单的状态。这里我们用“xxxxx-xxx”代表订单ID。我们只对每分钟发货的订单数感兴趣,所以不需要实际的订单ID。
   可以从 CloudxLab GitHub仓库 克隆完整的解决方案的源代码和数据集。
   数据集位于项目的 spark-streaming/data/order_data 文件夹中。
  推送数据集到Kafka

  shell脚本将从这些CSV文件中分别获取每一行并推送到Kafka。推送完一个CSV文件到Kafka之后,需要等待1分钟再推送下一个CSV文件,这样可以模拟实时电子商务门户环境,这个环境中的订单状态是以不同的时间间隔更新的。在现实世界的情况下,当订单状态改变时,相应的订单详细信息会被推送到Kafka。
   运行我们的shell脚本将数据推送到Kafka主题中。登录到 CloudxLab Web控制台 并运行以下命令。
  1. # Clone the repository

  2. git clone https://github.com/singhabhinav/cloudxlab.git

  3. # Create the order-data topic in Kafka

  4. export PATH=$PATH:/usr/hdp/current/kafka-broker/bin
  5. kafka-topics.sh --create --zookeeper localhost:2181
  6. --replication-factor 1 --partitions 1 --topic order-data

  7. # Go to Kafka directory

  8. cd cloudxlab/spark-streaming/kafka

  9. # Run the Script for pushing data to Kafka topic
  10. # ip-172-31-13-154.ec2.internal is the hostname of broker.
  11. # Find list of brokers in Ambari (a.cloudxlab.com:8080).
  12. # Use hostname of any one of the brokers
  13. # order-data is the Kafka topic

  14. /bin/bash put_order_data_in_topic.sh ../data/order_data/
  15. ip-172-31-13-154.ec2.internal:6667 order-data

  16. # Script will push CSV files one by one to Kafka topic
  17. after every one minute interval

  18. # Let the script run. Do not close the terminal
复制代码
阶段2

  在第1阶段后,Kafka“order-data”主题中的每个消息都将如下所示
  1. 2016-07-13 14:20:33,xxxxx-xxx,processing
复制代码
阶段3

  Spark streaming代码将在60秒的时间窗口中从“order-data”的Kafka主题获取数据并处理,这样就能在该60秒时间窗口中为每种状态的订单计数。处理后,每种状态订单的总计数被推送到“order-one-min-data”的Kafka主题中。
  请在Web控制台中运行这些Spark streaming代码
  1. # Login to CloudxLab web console in the second tab

  2. # Create order-one-min-data Kafka topic

  3. export PATH=$PATH:/usr/hdp/current/kafka-broker/bin
  4. kafka-topics.sh --create --zookeeper localhost:2181
  5. --replication-factor 1 --partitions 1 --topic order-one-min-data

  6. # Go to spark directory

  7. cd cloudxlab/spark-streaming/spark

  8. # Run the Spark Streaming code

  9. spark-submit --jars spark-streaming-kafka-assembly_2.10-1.6.0.jar
  10. spark_streaming_order_status.py localhost:2181 order-data

  11. # Let the script run. Do not close the terminal
复制代码
阶段4

  在这个阶段,Kafka主题“order-one-min-data”中的每个消息都将类似于以下JSON字符串
  1. {
  2.     "shipped": 657,
  3.     "processing": 987,
  4.     "delivered": 1024
  5. }
复制代码
阶段5

  运行Node.js server

  现在我们将运行一个node.js服务器来使用“order-one-min-data”Kafka主题的消息,并将其推送到Web浏览器,这样就可以在Web浏览器中显示出每分钟发货的订单数量。
  请在Web控制台中运行以下命令以启动node.js服务器
  1. # Login to CloudxLab web console in the third tab

  2. # Go to node directory

  3. cd cloudxlab/spark-streaming/node

  4. # Install dependencies as specified in package.json

  5. npm install

  6. # Run the node server

  7. node index.js

  8. # Let the server run. Do not close the terminal
复制代码
现在node服务器将运行在端口3001上。如果在启动node服务器时出现“EADDRINUSE”错误,请编辑index.js文件并将端口依次更改为3002...3003...3004等。请使用3001-3010范围内的任意可用端口来运行node服务器。
  用浏览器访问

   启动node服务器后,请转到 http://YOUR_WEB_CONSOLE:PORT_NUMBER 访问实时分析Dashboard。如果您的Web控制台是f.cloudxlab.com,并且node服务器正在端口3002上运行,请转到 http://f.cloudxlab.com:3002 访问Dashboard。
  当我们访问上面的URL时,socket.io-client库被加载到浏览器,它会开启服务器和浏览器之间的双向通信信道。
  阶段6

  一旦在Kafka的“order-one-min-data”主题中有新消息到达,node进程就会消费它。消费的消息将通过socket.io发送给Web浏览器。
  阶段7

  一旦web浏览器中的socket.io-client接收到一个新的“message”事件,事件中的数据将会被处理。如果接收的数据中的订单状态是“shipped”,它将会被添加到HighCharts坐标系上并显示在浏览器中。
  截图

   我们还录制了一个关于如何运行上述所有的命令并构建实时分析Dashboard的 视频 。
  我们已成功构建实时分析Dashboard。这是一个基本示例,演示如何集成Spark-streaming,Kafka,node.js和socket.io来构建实时分析Dashboard。现在,由于有了这些基础知识,我们就可以使用上述工具构建更复杂的系统。
  希望本指南有帮助。 请随时留下您的意见。 在Twitter上关注CloudxLab,获取有关新博客和视频的更新。
   查看英文原文: Building Real-Time Analytics Dashboard Using Apache Spark
   感谢杜小芳对本文的策划和审校。
   给InfoQ中文站投稿或者参与内容翻译工作,[email protected]博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们。



上一篇:ASP.NET Core应用中如何记录和查看日志
下一篇:爽翻天!告别Java。一起来使用kotlin开发完整客户端
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读


回页顶回复上一篇下一篇回列表
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )

© 2001-2017 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表