我尝试通过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)
答案 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/