Rancher模板 - Hadoop主机名中的非法字符

Jen*_*das 11 java hadoop docker rancher

我们对hadoop + yarn使用rancher模板,但似乎hadoop无法处理使用容器名称作为主机名(例如hadoop_namenode-primary_1).

Caused by: java.net.URISyntaxException: Illegal character in hostname at index 13: http://hadoop_datanode_1:50075/webhdfs/v1/skystore/tmp/devtest_onedir/2016_08_19_02_35_35_32f7/header.json?op=CREATE&user.name=hdfs&namenoderpcaddress=10.42.14.252:8020&overwrite=true
Run Code Online (Sandbox Code Playgroud)

我做错了还是有一些解决方法?

正如我所看到的那样,问题是由于使用容器名称作为主机名而rancher创建带下划线的容器.不知道如何修复它...

che*_*pse 0

根据RFC 3986,下划线应该没有问题

2.3. 未保留字符

URI 中允许使用但不具有保留用途的字符称为非保留字符。其中包括大写和小写字母、十进制数字、连字符、句点、下划线和波形符。

未保留=字母/数字/“-”/“。” /“_”/“~”

进一步阅读,我们可以看到事情发生的原因的可能解释

然而,URI 比较实现并不总是在比较之前执行规范化

应该可以转义这些字符,含义hadoop_datanode_1应该相当于hadoop%5Fdatanode%5F1. 该文档明确指出不要以这种方式构建 URI,至少我是这么读的。

为了保持一致性,百分比编码的八位字节范围为 ALPHA(%41-%5A 和 %61-%7A)、DIGIT(%30-%39)、连字符(%2D)、句点(%2E)、下划线(% 5F ) 或波形符 (%7E)不应由 URI 生成者创建,并且当在 URI 中找到时,应由 URI 规范化器将其解码为相应的非保留字符。

  • 你错过了秒。RFC 3986 的 3.2.2:“用于在 DNS 中查找的注册名称使用 [RFC1034] 第 3.5 节和 [RFC1123] 第 2.1 节中定义的语法。这样的名称由一系列由 ” 分隔的域标签组成。 ”,每个域标签以字母数字字符开头和结尾,并且可能还包含“-”字符。” 至于这个问题,我不知道,但搜索发现7月份的https://github.com/rancher/rancher/issues/5379。 (2认同)