开发者社区> 祝威廉> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Spark 如何写入HBase/Redis/MySQL/Kafka

简介: 这篇文章是给Spark初学者写的,老手就不要看了。文章谈及如何和HBase/Redis/MySQL/Kafka等进行交互的方法,主要是为了让大家明白其内部机制。
+关注继续查看

一些概念

一个partition 对应一个task,一个task 必定存在于一个Executor,一个Executor 对应一个JVM.
  • Partition 是一个可迭代数据集合
  • Task 本质是作用于Partition的线程

问题

Task 里如何使用Kafka Producer 将数据发送到Kafaka呢。 其他譬如HBase/Redis/MySQL 也是如此。

解决方案

直观的解决方案自然是能够在Executor(JVM)里有个Prodcuer Pool(或者共享单个Producer实例),但是我们的代码都是现在Driver端执行,然后将一些函数序列化到Executor端执行,这里就有序列化问题,正常如Pool,Connection都是无法序列化的。
一个简单的解决办法是定义个Object 类,
譬如
object SimpleHBaseClient {
  private val DEFAULT_ZOOKEEPER_QUORUM = "127.0.0.1:2181"

  private lazy val (table, conn) = createConnection

  def bulk(items:Iterator) = {
      items.foreach(conn.put(_))
      conn.flush....
  } 
 ......
}
然后保证这个类在map,foreachRDD等函数下使用,譬如:
dstream.foreachRDD{ rdd =>
    rdd.foreachPartition{iter=>
        SimpleHBaseClient.bulk(iter)  
    }
}
为什么要保证放到foreachRDD /map 等这些函数里呢?Spark的机制是先将用户的程序作为一个单机运行(运行者是Driver),Driver通过序列化机制,将对应算子规定的函数发送到Executor进行执行。这里,foreachRDD/map 等函数都是会发送到Executor执行的,Driver端并不会执行。里面引用的object 类 会作为一个stub 被序列化过去,object内部属性的的初始化其实是在Executor端完成的,所以可以避过序列化的问题。
Pool也是类似的做法。然而我们并不建议使用pool,因为Spark 本身已经是分布式的,举个例子可能有100个executor,如果每个executor再搞10个connection的pool,则会有100*10 个链接,Kafka也受不了。一个Executor 维持一个connection就好。
关于Executor挂掉丢数据的问题,其实就看你什么时候flush,这是一个性能的权衡。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Flume+Kafka+Spark Streaming+MySQL实时日志分析
网络发展迅速的时代,越来越多人通过网络获取跟多的信息或通过网络作一番自己的事业,当投身于搭建属于自己的网站、APP或小程序时会发现,经过一段时间经营和维护发现浏览量和用户数量的增长速度始终没有提升。在对其进行设计改造时无从下手,当在不了解用户的浏览喜欢和个用户群体的喜好。虽然服务器日志中明确的记载了用户访浏览的喜好但是通过普通方式很难从大量的日志中及时有效的筛选出优质信息。Spark Streaming是一个实时的流计算框架,该技术可以对数据进行实时快速的分析,通过与Flume、Kafka的结合能够做到近乎零延迟的数据统计分析。
0 0
Spark Streaming+Kafka提交offset实现有且仅有一次(exactly-once)
Spark Streaming+Kafka提交offset实现有且仅有一次(exactly-once)
0 0
spark-submit提交Spark Streaming+Kafka程序
spark-submit提交Spark Streaming+Kafka程序
0 0
Spark Streaming连接Kafka入门教程
首先要安装好kafka,这里不做kafka安装的介绍(这里用的是ambari安装的kafka),若想了解如何安装可参考Kafka安装启动入门教程和centos7 ambari2.6.1.5+hdp2.6.4.0 大数据集群安装部署,本文是Spark Streaming入门教程,只是简单的介绍如何利用spark 连接kafka,并消费数据,由于博主也是才学,所以其中代码以实现为主,可能并不是最好的实现方式。
0 0
Kafka/Spark/Flink Exactly-once语义调研
Kafka/Spark/Flink Exactly-once语义调研
0 0
【全网详解】从0到1搭建双十一实时交易数据展示平台——Spark+Kafka构建实时分析系统
【全网详解】从0到1搭建双十一实时交易数据展示平台——Spark+Kafka构建实时分析系统
0 0
【Spark Streaming】(五)Spark Streaming 与 Kafka 集成实战!
【Spark Streaming】(五)Spark Streaming 与 Kafka 集成实战!
0 0
Spark从入门到入土(四):SparkStreaming集成kafka
Spark从入门到入土(四):SparkStreaming集成kafka
0 0
企业版Spark Databricks + 企业版Kafka Confluent 联合高效挖掘数据价值
本文介绍了如何使用阿里云的Confluent Cloud和Databricks构建数据流和LakeHouse,并介绍了如何使用Databricks提供的能力来挖掘数据价值,使用Spark MLlib构建您的机器学习模型。
0 0
大数据处理工具Kafka、Zk、Spark(下)
大数据处理工具Kafka、Zk、Spark(下)
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
云HBaseSQL及分析 ——Phoenix&Spark
立即下载
Hive-Bucke in Apache Spark
立即下载
Spark介绍及Spark多数据源分析
立即下载