11

我们为 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

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

正如我所看到的,问题是由容器名称作为主机名引起的,而 Rancher 创建带有下划线的容器。虽然不知道如何解决它......

4

2 回答 2

1

Oracle 错误数据库指出:根据 RFC 2396、RFC 952 和 RFC 1123,下划线不是主机名中的有效字符。请参阅以下链接:

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=5049974

更好的主意是在主机名中用连字符替换下划线。

更新 1:

hadoop 无法处理使用容器名称作为主机名

不是这样。这是关于主机名中的字符下划线。

更新 2:

我们不知道如何强迫牧场主这样做

你不应该朝那个方向前进。原因是,还有其他应用程序可能会抛出相同的异常,这又是一个麻烦。最好的选择是更改主机名。

于 2016-08-29T04:25:02.707 回答
0

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

2.3. 无保留字符

URI中允许但没有保留用途的字符称为未保留字符。这些包括大写和小写字母、十进制数字、连字符、句点、下划线和波浪号。

未保留 = ALPHA / DIGIT / "-" / "." /“_”/“~”

进一步阅读,我们看到了一个可能的解释,为什么事情会破裂

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

应该可以转义这些字符,含义hadoop_datanode_1应该等同于hadoop%5Fdatanode%5F1. 该文档明确表示不要以这种方式构造您的 URI,至少我是这样阅读的。

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

于 2016-08-24T15:06:43.067 回答