AngersZhuuuu commented on a change in pull request #29881: URL: https://github.com/apache/spark/pull/29881#discussion_r497336247
########## File path: sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveUtils.scala ########## @@ -397,27 +399,86 @@ private[spark] object HiveUtils extends Logging { barrierPrefixes = hiveMetastoreBarrierPrefixes, sharedPrefixes = hiveMetastoreSharedPrefixes) } else { - // Convert to files and expand any directories. - val jars = - hiveMetastoreJars - .split(File.pathSeparator) - .flatMap { - case path if new File(path).getName == "*" => - val files = new File(path).getParentFile.listFiles() - if (files == null) { - logWarning(s"Hive jar path '$path' does not exist.") + + def addLocalHiveJars(file: File): Seq[URL] = { + if (file.getName == "*") { + val files = file.getParentFile.listFiles() + if (files == null) { + logWarning(s"Hive jar path '${file.getPath}' does not exist.") + Nil + } else { + files.filter(_.getName.toLowerCase(Locale.ROOT).endsWith(".jar")).map(_.toURL).toSeq + } + } else { + file.toURL :: Nil + } + } + + def checkRemoteHiveJars(path: String): Seq[URL] = { + try { + val hadoopPath = new Path(path) + val fs = hadoopPath.getFileSystem(hadoopConf) + if (hadoopPath.getName == "*") { + val parent = hadoopPath.getParent + if (!fs.exists(parent)) { + logWarning(s"Hive Jar ${path} does not exist.") + Nil + } else if (!fs.getFileStatus(parent).isDirectory) { + logWarning(s"Hive Jar ${parent} is not a directory.") Nil } else { - files.filter(_.getName.toLowerCase(Locale.ROOT).endsWith(".jar")).toSeq + fs.listStatus(parent).map(_.getPath.toUri.toURL) } - case path => - new File(path) :: Nil + } else { + if (!fs.exists(hadoopPath)) { + logWarning(s"Hive Jar ${path} does not exist.") + Nil + } else if (fs.getFileStatus(hadoopPath).isDirectory) { + logWarning(s"Hive Jar ${path} not allow directory without `*`") + Nil + } else { + // Since tar/tar.gz file we can't know it's final path yet, not support it + hadoopPath.toUri.toURL :: Nil + } + } + } catch { + case NonFatal(e) => + logError(s"Failed to find $path to Hive Jars", e) + Nil } - .map(_.toURI.toURL) + } + + // Convert to files and expand any directories. + val jars = + hiveMetastoreJars + .split(";") + .flatMap { + case path if path.contains("\\") => Review comment: > I could not follow this. Do you want to check if this is a Windows path? If that's the case, you can use `Utils.isWindows`. Here need use condition `Utils.isWindows && path.contains("\\")` since path maybe remote path ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org