如何使用Spark Streaming以更有效的方式将数据从Kafka插入Hbase?

时间:2019-03-25 12:36:52

标签: apache-spark apache-kafka hbase spark-streaming apache-kafka-connect

我尝试通过PySpark将Kafka数据提取到HBase中。目前,我尝试使用HappyBase将数据从Kafka插入Hbase,但是速度非常慢。我认为还使用HappyBase进行批量加载不会显着提高性能。以下是当前的源代码。我需要达到最高的性能。你有什么想法?也许是saveAsNewAPIHadoopDataset还是其他解决方案?

def SaveToHBase(rdd):
    print("=====Pull from Stream=====")
    if not rdd.isEmpty():

        print(len(rdd.collect()))
        print(datetime.now())
        for line in rdd.collect():
            ctable.put((line.log_id), { \
            b'log:content': (line.log)})


kds = KafkaUtils.createDirectStream(ssc, topic, k_params, fromOffsets=None)

parsed = kds.filter(lambda x: x != None and len(x) > 0 )
parsed = parsed.map(lambda x: x[1])
parsed = parsed.map(lambda rec: rec.split(","))
parsed = parsed.filter(lambda x: x != None and len(x) == 2 )
parsed = parsed.map(lambda data:Row(log_id=getValue(str,data[0]), \
        log=getValue(str,data[1])))

parsed.foreachRDD(SaveToHBase)

1 个答案:

答案 0 :(得分:0)

Kafka Connect是用于在Kafka与外部源和目标之间获取数据的通常很好的工具。

Kafka Connect是Apache Kafka的一部分,提供可伸缩的流集成,仅需配置文件即可实现。有很多预构建的连接器,如果需要,您也可以编写自己的连接器。您可以在单台计算机上运行Kafka Connect,也可以在群集上运行以提高弹性和吞吐量。它与您的Kafka经纪人分开运行。

如果要在将数据降落到目标之前对其进行处理,则可以使用流处理技术(Spark Streaming,Kafka Streams,KSQL等)进行处理,然后将结果写入Kafka主题。然后,该Kafka主题用作Kafka Connect写入目标数据存储(在您的情况下为HBase)的源。

您可以在此处找到适用于HBase的Kafka Connect连接器:https://www.confluent.io/connector/kafka-connect-hbase-sink/