public static FileStatus validateTargetDir(Path path, Configuration conf) throws IOException { FileSystem fs = path.getFileSystem(conf); if (!(fs instanceof DistributedFileSystem)) { throw new IOException(ErrorMsg.INVALID_HDFS_URI.format(path.toString())); } FileStatus fstatus = null; try { fstatus = fs.getFileStatus(path); } catch (FileNotFoundException fe) { // do nothing } return (fstatus != null && fstatus.isDir()) ? fstatus : null; }
/** * @param src path to the source for the resource * @param dest path in hdfs for the resource * @param conf * @return localresource from tez localization. * @throws IOException when any file system related calls fails. */ public LocalResource localizeResource(Path src, Path dest, Configuration conf) throws IOException { FileSystem destFS = dest.getFileSystem(conf); if (!(destFS instanceof DistributedFileSystem)) { throw new IOException(ErrorMsg.INVALID_HDFS_URI.format(dest.toString())); } if (src != null) { // copy the src to the destination and create local resource. // do not overwrite. LOG.info("Localizing resource because it does not exist: " + src + " to dest: " + dest); try { destFS.copyFromLocalFile(false, false, src, dest); } catch (IOException e) { LOG.info("Looks like another thread is writing the same file will wait."); int waitAttempts = conf.getInt( HiveConf.ConfVars.HIVE_LOCALIZE_RESOURCE_NUM_WAIT_ATTEMPTS.varname, HiveConf.ConfVars.HIVE_LOCALIZE_RESOURCE_NUM_WAIT_ATTEMPTS.defaultIntVal); long sleepInterval = conf.getLong( HiveConf.ConfVars.HIVE_LOCALIZE_RESOURCE_WAIT_INTERVAL.varname, HiveConf.ConfVars.HIVE_LOCALIZE_RESOURCE_WAIT_INTERVAL.defaultLongVal); LOG.info("Number of wait attempts: " + waitAttempts + ". Wait interval: " + sleepInterval); boolean found = false; for (int i = 0; i < waitAttempts; i++) { if (!checkPreExisting(src, dest, conf)) { try { Thread.currentThread().sleep(sleepInterval); } catch (InterruptedException interruptedException) { throw new IOException(interruptedException); } } else { found = true; break; } } if (!found) { LOG.error("Could not find the jar that was being uploaded"); throw new IOException( "Previous writer likely failed to write " + dest + ". Failing because I am unlikely to write too."); } } } return createLocalResource( destFS, dest, LocalResourceType.FILE, LocalResourceVisibility.APPLICATION); }
/** * @param conf * @return path to destination directory on hdfs * @throws LoginException if we are unable to figure user information * @throws IOException when any dfs operation fails. */ public Path getDefaultDestDir(Configuration conf) throws LoginException, IOException { UserGroupInformation ugi = ShimLoader.getHadoopShims().getUGIForConf(conf); String userName = ShimLoader.getHadoopShims().getShortUserName(ugi); String userPathStr = HiveConf.getVar(conf, HiveConf.ConfVars.HIVE_USER_INSTALL_DIR); Path userPath = new Path(userPathStr); FileSystem fs = userPath.getFileSystem(conf); if (!(fs instanceof DistributedFileSystem)) { throw new IOException(ErrorMsg.INVALID_HDFS_URI.format(userPathStr)); } String jarPathStr = userPathStr + "/" + userName; String hdfsDirPathStr = jarPathStr; Path hdfsDirPath = new Path(hdfsDirPathStr); FileStatus fstatus = fs.getFileStatus(hdfsDirPath); if (!fstatus.isDir()) { throw new IOException(ErrorMsg.INVALID_DIR.format(hdfsDirPath.toString())); } Path retPath = new Path(hdfsDirPath.toString() + "/.hiveJars"); fs.mkdirs(retPath); return retPath; }