合并hadoop中的小文件方案(一)


import java.util.Date

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.Path
import org.apache.hadoop.io.compress.DeflateCodec
import org.apache.spark.rdd.RDD
import org.apache.spark.storage.StorageLevel
import org.apache.spark.{SparkConf, SparkContext}

/**
  * 读取小文件
  */
object Read2Save {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setAppName("Read2Save").setMaster("local[4]")
    val sc: SparkContext = new SparkContext(conf)
    sc.setLogLevel("WARN")
    val rdd: RDD[String] = sc.textFile("hdfs://hadoop0:8020/flume/demo10")


    rdd.persist(StorageLevel.MEMORY_AND_DISK_SER_2).count()
    //rdd.foreach(println)
    val a = new Date()
    val path: Path = new Path("hdfs://hadoop0:8020/flume/demo10")


    val hadoopConf: Configuration = sc.hadoopConfiguration
    val hdfs = org.apache.hadoop.fs.FileSystem.get(hadoopConf)

    hdfs.delete(path, true)
rdd.foreach(println)
    rdd.repartition(1).saveAsTextFile("hdfs://hadoop0:8020/flume/demo10", classOf[DeflateCodec])
    sc.stop()
  }
}

要求:读取多个小文件,合并成一个大文件(在同一路径下),并删除所有的小文件

思路:1 先读取所有的小文件

2,保存到内存中

3 ,删除所有的小文件

4, 将内存中的小文件设置成1个大文件保存

 

遇到的坑:在将内存中的小文件合并成大文件保存到同一路径下的时候保存的文件是空的,查找原因是因为读取小文件放到内存中的时候没有action操作

解决方案 加上action操作 count()

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值