基于大数据的Uber数据实时监控(Part 4:Spark Streaming、DataFrames和HBase)

导言


根据Gartner的数据,到2020年全球将有208亿个连接产品投入使用。Uber机器学习负责人Danny Lange的目标是将机器学习待到Uber业务的每个角落。连接事物的示例包括联网汽车和设备以及医疗保健、电信、制造、零售和金融的应用。利用来自这些设备的大量数据、实时处理事件,应用机器学习来增加价值,以及可扩展的快速存储。这些类型的应用程序的体系结构通常是事件驱动的微服务体系结构。


这是系列文章的最后一篇,该应用程序将流数据与机器学习相结合,对Uber汽车聚集的地点和时间进行实时分析和可视化,从而预测和可视化最受欢迎的Uber地点。


  1. 本系列第一部分讨论如何创建机器学习模型,使用Apache Spark K-means算法按位置对Uber数据进行聚类。

  2. 第二篇文章讨论了使用保存的K-mean与数据流模型做的时候尤伯杯车都聚集在那里,并实时分析。

  3. 第三后讨论建立一个实时仪表板直观显示谷歌地图上的集群数据。下图描绘了数据管道:

    640?wx_fmt=png



本文将在Spark Streaming写入到MAPR-DB使用Spark HBase和MAPR-DB二进制接口以及使用SQL Spark和DataFrames从MAPR-DB解读。下图描绘了数据管道:


  • Uber旅行数据使用Kafka API发布到MapR Streams主题;

  • 订阅第一个主题的Spark Streaming应用程序使用群集位置丰富事件,并将结果以JSON格式发布到另一个主题;

  • 订阅第二个主题的Vert.x Web应用程序在热图中显示Uber旅行群集;

  • 订阅第二个主题的Spark Streaming应用程序使用Spark HBase和MapR-DB二进制连接器将数据存储在MapR-DB中;

  • Spark批处理应用程序使用Spark HBase和MapR-DB二进制连接器使用Spark SQL查询MapR-DB;

    640?wx_fmt=png


Spark和MapR-DB


处理大量流数据时遇到的挑战之一是确定要存储它的位置。使用MapR-DB(HBase API或JSON API),表按键范围自动按群集分区,提供按行键可扩展和快速读写。

640?wx_fmt=png

Spark HBase和MapR-DB二进制连接器利用Spark DataSource API。连接器体系结构再每个Spark Executor中都有一个HConnection对象,允许使用MapR-DB进行分布式并行写入、读取或扫描。

640?wx_fmt=png

Spark Streaming写入MapR-DB



640?wx_fmt=png



在第二篇文章中你可以阅读有关MapR Streams Spark Streaming代码的信息。本文专注于MapR-DB部分。来自MapR-DB主题的消息采用JSON格式,并且每个Uber行程包含以下内容:群集ID、行程日期时间、纬度和经度等。示例如下:

 
 
1{"cid":18, "dt":"2014-08-01 08:51:00", "lat":40.6858, "lon":-73.9923, "base":"B02682", "clat":40.67462874550765, "clon":-73.98667466026531}"cid":18"dt":"2014-08-01 08:51:00""lat":40.6858"lon":-73.9923"base":"B02682""clat":40.67462874550765"clon":-73.98667466026531}


在下面的代码中,使用HBaseContext对象创建了一个HBaseConfiguration 对象。将HBaseContext 配置广播信息携带到HConnections 执行器中。

640?wx_fmt=png


在下面的代码中:

  • 从消息键值对中获取消息值;

  • 调用HBaseContext streamBulkPut 方法,传递消息值DStream,  TableName 写入,以及将Dstream值转换为HBase put记录的函数;

    640?wx_fmt=png



    convertToPut 函数解析JSON字符串并创建HBase PUT 对象。

640?wx_fmt=png


Spark Streaming允许大量并行发送存入HBase。

640?wx_fmt=png

Spark SQL和DataFrames

Spark HBase和MapR-DB二进制连接器使用户能够使用Spark DataFrame在MapR-DB之上执行复杂的SQL查询,同时应用分区修建、列修建、谓词下推和数据局部性等关键技术。


要使用Spark HBase和MapR-DB二进制连接器,需要为HBase和Spark表之间的模式映射定义Catalog。以下是存储Uber数据的模式:

  • 复合行键包含集群ID,基数,数据和时间,由下划线分隔。

  • 存在用于存储所有数据的列族数据和用于统计汇总的列族统计数据。

  • 有两列,一列用于纬度,一列用于每次旅行的经度。

640?wx_fmt=png

Catalog定义了HBase和Spark表之间的映射。该目录有两个关键部分。一个是行键定义;另一个是Spark中的表列与HBase中的咧族和列名之间的映射。以下示例为MapR-DB表定义Catalog模式,其名称为/ user / user01 / db / uber,行和列分别为lat和lon。

640?wx_fmt=png

将数据从MapR-DB加载到Spark DataFrame


withCatalog 下面的功能中:

  • SQLContext 读返回一个DataFrameReader 可用于在数据帧读取数据;

  • options函数将基础数据源的输入选项添加到DataFrameReader

  • format函数指定的输入数据源格式DataFrameReader

  • load() 函数将输入加载为DataFrame。 函数df 返回的前20行数据帧  withCatalog随输出df.show

640?wx_fmt=png


输出 df.show 如下所示:

640?wx_fmt=png


在下面的示例中, df.filter 使用给定的SQL表达式过滤器的行来过滤簇ID(行密钥的开始)>=9. select选择一组列:key lat lon 

640?wx_fmt=png


结果 df.show 如下所示:

640?wx_fmt=png


以上讨论的用例体系结构的所有组件都可以与MapR融合数据平台在同一个集群上运行。


长按订阅更多精彩▼

640?wx_fmt=jpeg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值