apache/hadoop · error · InvalidUriException
- account name is not fully qualified.
Error message
- account name is not fully qualified.
What it means
When a separate metrics account is configured (fs.azure.metrics.account.name + fs.azure.metrics.account.key both set and metrics collection enabled), AbfsMetricsManager requires the account name to be a fully qualified endpoint containing a dot at index > 0 — it splits 'account' from 'account.dfs.core.windows.net' via the first '.'. A name with no dot (or a leading dot) throws InvalidUriException("... - account name is not fully qualified.") during filesystem initialization.
Source
Thrown at hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/services/AbfsMetricsManager.java:141
this.isMetricCollectionEnabled.set(
abfsConfiguration.isMetricsCollectionEnabled());
this.isMetricCollectionStopped = new AtomicBoolean(false);
this.aggregateMetricsManager = AggregateMetricsManager.getInstance(
abfsConfiguration.getMetricsEmitIntervalInMins(),
abfsConfiguration.getMaxMetricsCallsPerSecond());
this.metricAnalysisPeriod = abfsConfiguration.getMetricAnalysisTimeout();
this.metricIdlePeriod = abfsConfiguration.getMetricIdleTimeout();
this.accountName = accountName;
if (isMetricCollectionEnabled()) {
try {
String metricAccountName = abfsConfiguration.getMetricAccount();
String metricAccountKey = abfsConfiguration.getMetricAccountKey();
this.metricFormat = abfsConfiguration.getMetricFormat();
if (isNotEmpty(metricAccountName) && isNotEmpty(
metricAccountKey)) {
int dotIndex = metricAccountName.indexOf(AbfsHttpConstants.DOT);
if (dotIndex <= 0) {
throw new InvalidUriException(
metricAccountName + " - account name is not fully qualified.");
}
try {
metricSharedkeyCredentials = new SharedKeyCredentials(
metricAccountName.substring(0, dotIndex),
metricAccountKey);
hasSeparateMetricAccount = true;
setMetricsUrl(metricAccountName.startsWith(HTTPS_SCHEME)
? metricAccountName : HTTPS_SCHEME + COLON
+ FORWARD_SLASH + FORWARD_SLASH + metricAccountName);
} catch (IllegalArgumentException e) {
throw new IOException(
"Exception while initializing metric credentials ", e);
}
} else {
setMetricsUrl(baseUrlString.substring(0, indexLastForwardSlash + 1));
}
// Once the metric URL is set, initialize the metricsView on GitHub (pinned to 2add963021)
Solutions
- Set fs.azure.metrics.account.name to the fully qualified endpoint, e.g., mymetricsacct.blob.core.windows.net
- If you do not want a separate metrics account, unset BOTH fs.azure.metrics.account.name and fs.azure.metrics.account.key so the base endpoint is used
Example fix
<!-- before --> <property> <name>fs.azure.metrics.account.name</name> <value>mymetricsacct</value> </property> <!-- after --> <property> <name>fs.azure.metrics.account.name</name> <value>mymetricsacct.blob.core.windows.net</value> </property>
Defensive patterns
Strategy: validation
Validate before calling
// Validate the metrics account name before initializing the FS
String name = conf.get("fs.azure.metrics.account.name");
String key = conf.get("fs.azure.metrics.account.key");
if (name != null && key != null) {
int dot = name.indexOf('.');
if (dot <= 0) throw new IllegalArgumentException(
"fs.azure.metrics.account.name must be fully qualified"
+ " (e.g., acct.blob.core.windows.net): " + name);
} Prevention
- Use full endpoints, never bare account names, in fs.azure.metrics.account.name
- Add the check to a config lint step so bad values fail before runtime
- If not using a separate metrics account, leave both metrics keys unset
When it happens
Trigger: Setting fs.azure.metrics.account.name to a bare storage account name like 'metricsacct' instead of 'metricsacct.blob.core.windows.net'; setting a leading-dot value; enabling the separate-metrics-account feature with a placeholder value.
Common situations: Copying only the account name from the Azure portal into the metrics config; templates that document the key as 'account name' rather than the FQDN endpoint; env-specific config files where the metrics endpoint was never filled in.
Related errors
- Exception while initializing metric credentials
- Lease desired but no lease threads configured, set fs.azure.
- MD5 algorithm not available
- The ingress service type must be configured as DFS
- mark()/reset() not supported on this stream
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/54f0d0d042ab9c8a.
Report an issue: GitHub.