fs.hdfs.impl.disable.cache导致SparkSQL非常慢

时间:2018-02-06 22:25:05

标签: hadoop hive apache-spark-sql hdfs

这是与此问题相关的问题:Hive/Hadoop intermittent failure: Unable to move source to destination

我们发现通过将fs.hdfs.impl.disable.cache设置为true

,我们可以避免“无法移动源...文件系统已关闭”的问题

然而,我们还观察到SparkSQL查询变得非常慢 - 过去几秒钟内完成的查询现在需要30到40秒才能完成(即使查询非常简单,比如阅读一个小表)。

这是正常的吗?

我对fs.hdfs.impl.disable.cache为真的理解意味着FileSystem#get()总是createFileSystem()而不是返回缓存的FileSystem。此设置可防止多个客户端共享FileSystem对象,这确实很有意义,因为它会阻止(例如)FileSystem#get()的两个调用者关闭彼此的文件系统。

(例如,请参阅此discussion

此设置会降低速度,但可能不会那么多。

来自:hadoop-source-reading

/**
 * Returns the FileSystem for this URI's scheme and authority. The scheme of
 * the URI determines a configuration property name,
 * <tt>fs.<i>scheme</i>.class</tt> whose value names the FileSystem class.
 * The entire URI is passed to the FileSystem instance's initialize method.
 */
public static FileSystem get(URI uri, Configuration conf)
        throws IOException {
    String scheme = uri.getScheme();
    String authority = uri.getAuthority();

    if (scheme == null) { // no scheme: use default FS
        return get(conf);
    }

    if (authority == null) { // no authority
        URI defaultUri = getDefaultUri(conf);
        if (scheme.equals(defaultUri.getScheme()) // if scheme matches
                // default
                && defaultUri.getAuthority() != null) { // & default has
            // authority
            return get(defaultUri, conf); // return default
        }
    }

    String disableCacheName = String.format("fs.%s.impl.disable.cache",
            scheme);
    if (conf.getBoolean(disableCacheName, false)) {
        return createFileSystem(uri, conf);
    }

    return CACHE.get(uri, conf);
}

缓慢是否会指向某些其他网络问题,例如解析域名?欢迎任何有关此问题的见解。

0 个答案:

没有答案