介绍
工作中常常会遇到这种情形,需要将hdfs中的大批量数据导入HBase。本文使用Spark+HBase的方式将RDD中的数据导入HBase中。没有使用官网提供的newAPIHadoopRDD接口的方式。使用本文的方式将数据导入HBase, 7000W条数据,花费时间大概20分钟左右,本文Spark可用核数量为20。代码如下:
val readFile = sc.textFile("/path/to/file").map(x => x.split(",")) val tableName = "table" readFile.foreachPartition{ x=> { val myConf = HBaseConfiguration.create() myConf.set("hbase.zookeeper.quorum", "web102,web101,web100") myConf.set("hbase.zookeeper.property.clientPort", "2181") myConf.set("hbase.defaults.for.version.skip", "true") val myTable = new HTable(myConf, TableName.valueOf(tableName)) myTable.setAutoFlush(false, false)//关键点1 myTable.setWriteBufferSize(3*1024*1024)//关键点2 x.foreach { y => { println(y(0) + ":::" + y(1)) val p = new Put(Bytes.toBytes(y(0))) p.add("Family".getBytes, "qualifier".getBytes, Bytes.toBytes(y(1))) myTable.put(p) } } myTable.flushCommits()//关键点3 } }