HBase在Spark Streaming中出现问题

时间:2018-11-11 21:23:20

标签: apache-spark hbase streaming

在Spark Streaming中从HBase读取数据时,性能出现问题。仅从HBase读取3条记录的数据需要5分钟以上。以下是我在mapPartitions中使用的逻辑。

val messages = KafkaUtils.createDirectStream[String, Array[Byte], StringDecoder, DefaultDecoder](ssc, kafkaParams, topicSet)
messages.mapPartitions(iter => {

   val context = TaskContext.get
   logger.info((s"Process for partition: ${context.partitionId} "))

   val hbaseConf = HBaseConfiguration.create()
    //hbaseConf.addResource(new File("/etc/hbase/conf/hbase-site.xml").toURI.toURL)    
   //val connection: Connection = hbaseConnection.getOrCreateConnection(hbaseConf)
   val connection =  ConnectionFactory.createConnection(hbaseConf)
   val hbaseTable = connection.getTable(TableName.valueOf("prod:CustomerData"))

   .......
   })

我用过BulkGet。处理90K消息大约需要5秒钟(可能是因为API使用的是HBaseContext,而我们还没有创建任何HBaseConnection)。但是我不能使用它,因为BulkGet的输出是RDD,并且我必须做leftouterjoin来将BulkGet的RDD与来自Kafka的实际RDD结合起来。我认为这是不正确的方法,因为它涉及以下内容。此外,我必须在1秒内处理所有90K消息。

  1. 从Kafka读取的RDD中获取唯一的Cusotmer ID,然后再将其传递给BulkGet

  2. 此外,它还涉及改组,因为我必须使用BulkGet RDD(从Kafka)加入main RDD(来自Kafka)(由于BulkGet输出是RDD,我只能看到join选项)

当我尝试在mapPartitions中创建HBaseConnection时,有人可以帮助我解决性能问题吗?我也尝试设置驱动程序的类路径。

谢谢

0 个答案:

没有答案