如何使用FileSystem API计算分区?

问题描述 投票:1回答:1

我正在使用Hadoop 2.7版及其FileSystem API。问题是关于“如何使用API​​计算分区数量?”,但是,将其放入软件问题中,我要在这里处理一个Spark-Shell脚本...有关脚本的具体问题是

下面的变量parts正在计算表分区的数量,或者其他?

import org.apache.hadoop.fs.{FileSystem, Path}
import scala.collection.mutable.ArrayBuffer
import spark.implicits._

val warehouse = "/apps/hive/warehouse"  // the Hive default location for all databases
val db_regex  = """\.db$""".r   // filter for names like "*.db"
val tab_regex = """\.hive\-staging_""".r    // signature of Hive files

val trStrange = "[\\s/]+|[^\\x00-\\x7F]+|[\\p{Cntrl}&&[^\r\n\t]]+|\\p{C}+".r //mark
def cutPath (thePath: String, toCut: Boolean = true) : String =
  if (toCut) trStrange.replaceAllIn( thePath.replaceAll("^.+/", ""),  "@") else thePath

val fs_get = FileSystem.get( sc.hadoopConfiguration )
fs_get.listStatus( new Path(warehouse) ).foreach( lsb => {
    val b = lsb.getPath.toString
    if (db_regex.findFirstIn(b).isDefined) 
       fs_get.listStatus( new Path(b) ).foreach( lst => {
            val lstPath = lst.getPath
            val t = lstPath.toString
            var parts = -1
            var size = -1L
            if (!tab_regex.findFirstIn(t).isDefined) {
              try {
                  val pp = fs_get.listStatus( lstPath )
                  parts = pp.length // !HERE! partitions?
                  pp.foreach( p => {
                     try { // SUPPOSING that size is the number of bytes of table t
                        size  = size  + fs.getContentSummary(p.getPath).getLength
                     } catch { case _: Throwable => }
                  })
              } catch { case _: Throwable =>  }
              println(s"${cutPath(b)},${cutPath(t)},$parts,$size")
            }
        })
}) // x warehouse loop
System.exit(0)  // get out from spark-shell

这只是一个显示焦点的示例:使用Hive FileSystem API对Hive默认数据库 FileSystem结构进行正确的扫描和语义解释。该脚本有时需要一些内存,但工作正常。使用sshell --driver-memory 12G --executor-memory 18G -i teste_v2.scala > output.csv运行>


注意:此处的目的不是通过任何其他方法(例如HQL DESCRIBE或Spark Schema)对分区进行计数,而是对其使用API​​ ...对于控制和data quality

检查, API作为一种“较低级别的测量”非常重要。

我正在使用Hadoop 2.7版及其FileSystem API。问题是“如何用API计算分区数”?但是,为了解决软件问题,我在这里处理一个Spark-Shell脚本... ...

hadoop hive filesystems
1个回答
0
投票

Hive将其元数据构造为数据库>表>分区>文件

© www.soinside.com 2019 - 2024. All rights reserved.