scala实现hbase批量写入

一、编程环境:

1、JDK1.8

2、scala2.11.7

3、hadoop3.0.0、hbase2.1.0、spark2.4.0

操作系统:centos7.6,编译器使用idea2019

二、实现步骤:

1、添加hbase的jar包

因为我这里使用使用的是cdh发行版本,hbase的jar包位置为:/opt/cloudera/parcels/CDH/lib/hbase/lib/

将该目录下的jar文件拷贝至特定目录,如下:

#mkdir /data/lib/hbase

#cp /opt/cloudera/parcels/CDH/lib/hbase/lib/* /data/lib/hbase

2、使用idea创建scala项目,maven添加如下依赖


    UTF-8
    UTF-8
    3.0.0
  

  
    
      
      
        org.apache.camel
        camel-parent
        2.24.1
        import
        pom
      
    
  

  

    
      org.apache.camel
      camel-core
    
    
      org.apache.camel
      camel-scala
    

    
    
      org.scala-lang
      scala-library
      2.11.7
    
    
      org.scala-lang.modules
      scala-xml_2.11
      1.0.6
    

    
    
      org.apache.logging.log4j
      log4j-api
      runtime
    
    
      org.apache.logging.log4j
      log4j-core
      runtime
    
    
      org.apache.logging.log4j
      log4j-slf4j-impl
      runtime
    

    
    
      org.apache.camel
      camel-test
      test
    

    
      com.fasterxml.jackson.core
      jackson-databind
      2.6.6
    

    
      org.apache.spark
      spark-core_2.11
      2.2.0
    
    
      org.apache.spark
      spark-streaming_2.11
      2.2.0
      provided
    
    
      org.apache.spark
      spark-sql_2.11
      2.2.0
    

    
    
      org.apache.hadoop
      hadoop-client
      ${hadoop.version}
    

    
      org.apache.hadoop
      hadoop-core
      1.2.1
    
































    
      org.glassfish
      javax.el
      3.0.1-b08
    

    
    
      org.apache.hadoop
      hadoop-hdfs
      ${hadoop.version}
      
        
          jackson-databind
          com.fasterxml.jackson.core
        
      
    

    
    
      org.apache.hadoop
      hadoop-common
      ${hadoop.version}
      
        
          jackson-databind
          com.fasterxml.jackson.core
        
      
    

    
      org.gdal
      gdal
      2.4.0
    


  

注意:这里引入的hadoop版本尽量和系统中安装的版本一致,以免出现代码冲突的情况。

3、idea添加hbase的jar包

点击idea的file-Project Structure设置,将步骤1中创建的jar包引入,如下:

scala实现hbase批量写入_第1张图片

4、添加maven的打包工具,这一步非必要,如果使用idea自带的打包工具无法正常打包,可以使用该方式。


        org.apache.maven.plugins
        maven-assembly-plugin
        2.5.5
        
          
            
              **this is your mainclass**
            
          
          
            jar-with-dependencies
          
        

        
          
            make-assemble
            package
            
              single
            
          
        
      

5、编写代码

import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.Put
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapred.TableOutputFormat
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.mapred.JobConf
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import org.apache.spark.streaming.{Seconds, StreamingContext}

object HbaseOpe {
  def writeTxtToHbase()={
    val spark = SparkSession.builder().appName("SparkHBaseRDD").getOrCreate()

    val sc = spark.sparkContext

    //表名称
    val tablename= "tb:table3"

    val hbaseConf = HBaseConfiguration.create()
    hbaseConf.set(TableOutputFormat.OUTPUT_TABLE, tablename)

    val jobConf = new JobConf(hbaseConf)
    jobConf.setOutputFormat(classOf[TableOutputFormat])

    //hdfs文件
    val txtpath="/ZF/2018001.txt"
    val txtRdd=sc.textFile(txtpath)
    txtRdd.map(_.split(",")).map(arr=>{
      val put = new Put(Bytes.toBytes(arr(0)))
      put.addColumn(Bytes.toBytes("static"),Bytes.toBytes("col1"),Bytes.toBytes(arr(1)))
      put.addColumn(Bytes.toBytes("static"),Bytes.toBytes("col2"),Bytes.toBytes(arr(2)))
      put.addColumn(Bytes.toBytes("static"),Bytes.toBytes("col3"),Bytes.toBytes(arr(3)))
      put.addColumn(Bytes.toBytes("static"),Bytes.toBytes("col4"),Bytes.toBytes(arr(4)))
      put.addColumn(Bytes.toBytes("static"),Bytes.toBytes("col5"),Bytes.toBytes(arr(5)))
      put.addColumn(Bytes.toBytes("static"),Bytes.toBytes("col6"),Bytes.toBytes(arr(6)))
      put.addColumn(Bytes.toBytes("static"),Bytes.toBytes("col7"),Bytes.toBytes(arr(7)))
      (new ImmutableBytesWritable, put)
    }).saveAsHadoopDataset(jobConf)
  }

}

使用spark-submit提交,我这里测试的是10000000条记录,7列数据,三台主机,共耗时4分钟左右。

你可能感兴趣的:(大数据,scala及spark)