package com.lala.lala.pipe.dbinfo

import java.io.{ByteArrayOutputStream, PrintWriter}

import com.alibaba.fastjson.JSON
import com.alibaba.fastjson.serializer.SerializerFeature
import com.lala.lala.common.query.option.HDFSOptions
import com.lala.lala.common.visual.hdfs.{HdfsFile, HdfsFileStatusWrapper}
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.hadoop.security.AccessControlException
import org.apache.spark.sql.SparkSession class HdfsShow(spark: SparkSession, map: Map[String, String]) {
private val sc = spark.sparkContext def getSampleData: String = {
val path = map(HDFSOptions.PATH)
sc.textFile(path).take(DBShow.Num).mkString("\n")
} def listFiles(): String = {
val pathStr = map.getOrElse(HDFSOptions.PATH, "/")
val path = new Path(pathStr)
val hdfs = HdfsShow.getHdfs(spark)
val baos = new ByteArrayOutputStream()
val pw = new PrintWriter(baos)
val lf = new HdfsFileStatusWrapper
val arr = try {
val liststatus = hdfs.listStatus(path)
Some(liststatus)
} catch {
case ex: AccessControlException => ex.printStackTrace(pw); lf.setPermissionDenied(true); None
case ex => ex.printStackTrace(pw); None
} finally {
if (pw != null) {
pw.flush()
pw.close()
}
} lf.setPath(pathStr)
if (arr.isDefined) {
lf.setSuccess(true)
val hfarr = for (filestatus <- arr.get) yield {
val pathx = filestatus.getPath
new HdfsFile(pathx.getName, s"${pathx.getParent}/${pathx.getName}", filestatus.isDirectory, filestatus.isFile)
}
import collection.JavaConverters._
lf.setFileList(hfarr.toSeq.asJava)
}
lf.setMsg(baos.toString)
JSON.toJSONString(lf, SerializerFeature.WriteNullListAsEmpty)
}
} object HdfsShow {
private var hdfs: FileSystem = null def getHdfs(spark: SparkSession) = {
if (hdfs == null) {
val hadoopConf = spark.sparkContext.hadoopConfiguration
hdfs = org.apache.hadoop.fs.FileSystem.get(hadoopConf)
}
hdfs
}
}

hdfs 列出文件的更多相关文章

  1. 使用oracle的大数据工具ODCH访问HDFS数据文件

    软件下载 Oracle Big Data Connectors:ODCH 下载地址: http://www.oracle.com/technetwork/bdc/big-data-connectors ...

  2. (转)distcp从ftp到hdfs拷贝文件

    link :http://blog.csdn.net/sptoor/article/details/11523469 distcp从ftp到hdfs拷贝文件: hadoop distcp ftp:// ...

  3. Spark中加载本地(或者hdfs)文件以及SparkContext实例的textFile使用

    默认是从hdfs读取文件,也可以指定sc.textFile("路径").在路径前面加上hdfs://表示从hdfs文件系统上读 本地文件读取 sc.textFile("路 ...

  4. HDFS的Java客户端操作代码(HDFS删除文件或目录)

    1.HDFS删除文件或目录 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.hadoo ...

  5. Hadoop HDFS分布式文件系统设计要点与架构

      Hadoop HDFS分布式文件系统设计要点与架构     Hadoop简介:一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群 ...

  6. 分享非常有用的Java程序 (关键代码) (二)---列出文件和目录

    原文:分享非常有用的Java程序 (关键代码) (二)---列出文件和目录 File dir = new File("directoryName"); String[] child ...

  7. hadoop 提高hdfs删文件效率----hadoop删除文件流程解析

    前言 这段时间在用hdfs,由于要处理的文件比较多,要及时产出旧文件,但是发现hdfs的blocks数一直在上涨,经分析是hdfs写入的速度较快,而block回收较慢,所以分心了一下hadoop删文件 ...

  8. HDFS中文件的压缩与解压

    HDFS中文件的压缩与解压 文件的压缩有两大好处:1.可以减少存储文件所需要的磁盘空间:2.可以加速数据在网络和磁盘上的传输.尤其是在处理大数据时,这两大好处是相当重要的. 下面是一个使用gzip工具 ...

  9. 利用JavaAPI访问HDFS的文件

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

随机推荐

  1. PERFORM参数传递

    参数传递:将主程序变量传递给子例程形式参数传递类型值传:子例程中参数变量的值的改变,不影响外部程序实际变量的值. , B , C TYPE I. WRITE:'A=',A,'B=',B,'C=',C. ...

  2. Golang Testing单元测试指南

    基础 可以通过 go test -h 查看帮助信息. 其基本形式是: go test [build/test flags] [packages] [build/test flags & tes ...

  3. laravel he stream or file "..laravel-2019-02-14.log" could not be opened: failed to open stream: Permission denied

    错误:The stream or file "/var/www/jianshu/storage/logs/laravel-2019-02-14.log" could not be ...

  4. 五分钟看懂UML类图与类的关系详解

    在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Association).其中关联又分为 ...

  5. Java中的参数验证(非Spring版)

    1. Java中的参数验证(非Spring版) 1.1. 前言 为什么我总遇到这种非正常问题,我们知道很多时候我们的参数校验都是放在controller层的传入参数进行校验,我们常用的校验方式就是引入 ...

  6. python中lambda

    lambda_expr ::= "lambda" [parameter_list]: expression python中lambda可以理解为一个匿名函数,它的要求是函数的运算部 ...

  7. 白话SCRUM 之二:product backlog

    在SCRUM方法中明确要求了3个文档: 1 product backlog 2sprint backlog 3 burn-down chart Product backlog 中列举了本项目应该实现的 ...

  8. hydra使用,实例介绍

    hydra 是一个网络帐号破解工具,支持多种协议.其作者是van Hauser,David Maciejak与其共同维护.hydra在所有支持GCC的平台能很好的编译,包括Linux,所有版本的BSD ...

  9. 操作Excel模块openpyxl

    安装 pip install openpyxl 想要在文件中插入图片文件,需要安装pillow font(字体类):字号.字体颜色.下划线等 fill(填充类):颜色等 border(边框类):设置单 ...

  10. mysql主从配置步骤

    主服务器配置: 1)登陆MySQL数据库 mysql>mysql -uroot -p123 2)给从服务器设置授权用户 mysql>grant all slave on *.* to us ...