zoukankan      html  css  js  c++  java
  • Spark读写Hbase中的数据

    def main(args: Array[String])  {
        val sparkConf = new SparkConf().setMaster("local").setAppName("cocapp").set("spark.kryo.registrator", classOf[HBaseConfiguration].getName)
          .set("spark.executor.memory", "4g")
        val sc: SparkContext = new SparkContext(sparkConf)
        val sqlContext = new HiveContext(sc)
        val mySQLUrl = "jdbc:mysql://localhost:3306/yangsy?user=root&password=yangsiyi"
        val rows = sqlContext.jdbc(mySQLUrl, "person")
        val tableName = "spark"
        val columnFamily = "cf" //rows.first().getString(1)
        val configuration = HBaseConfiguration.create();
        configuration.set(TableInputFormat.INPUT_TABLE, "test");
        val admin = new HBaseAdmin(configuration)
        val hBaseRDD = sc.newAPIHadoopRDD(configuration, classOf[TableInputFormat],
            classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
        classOf[org.apache.hadoop.hbase.client.Result])
          hBaseRDD.count()

    def toHbase(rows: DataFrame,tableName : String,columnFamily: String)   {
        val configuration = HBaseConfiguration.create();
        val admin = new HBaseAdmin(configuration)
        if (admin.tableExists(tableName)) {
          print("table Exists")
          admin.disableTable(tableName);
          admin.deleteTable(tableName);
        }
        configuration.addResource("hbase-site.xml")
        val tableDesc = new HTableDescriptor(tableName)
        tableDesc.addFamily(new HColumnDescriptor(columnFamily))
        admin.createTable(tableDesc)
        rows.foreachPartition { row =>
          val table = new HTable(configuration, tableName)
    
          row.foreach { a =>
            val put = new Put(Bytes.toBytes("row1"))
            put.add(Bytes.toBytes(columnFamily), Bytes.toBytes("coulumn1"), Bytes.toBytes(a.getString(0)))
            table.put(put)
            println("insert into success")
          }
        }

    然而并没有什么乱用,发现一个问题,就是说,在RDD取值与写入HBASE的时候,引入外部变量无法序列化。。。。。。网上很多说法是说extends Serializable ,可是尝试无效。Count()是可以获取到,但是如果我要在configuration中set列,然后进行查询就会报错了。暂时各种办法尝试无果,还在想办法,也不明原因。

    
    
  • 相关阅读:
    Git批量删除的方法
    第五课 森さんは 七時に 起きます
    第一课 李さんは  中国人です
    如何设置上传文件控件 input type="file" 的 默认值
    如何用程序提交一个上传文件的请求
    MVC Beta 做的网站实践总结(上)
    泛型单一模式
    提高web站点性能的最佳实践
    扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView
    [导入]将字符串中连续的空格转换为一个空格
  • 原文地址:https://www.cnblogs.com/yangsy0915/p/5014341.html
Copyright © 2011-2022 走看看