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

Posted

技术标签:

【中文标题】Rancher 模板 - 主机名中的 Hadoop 非法字符【英文标题】:Rancher template - Hadoop Illegal character in host-name 【发布时间】:2016-12-26 12:20:21 【问题描述】:

我们为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 创建带有下划线的容器。虽然不知道如何解决它......

【问题讨论】:

在为有效和无效主机名制定标准期间,通用终端接口是电传打字机 (TTY) ASR-33 的键盘。现在这个键盘从来没有下划线()键(查看这张图片pdp8.net/asr33/pics/kbd_top.shtml?large),因此不可能有一个带有下划线()的主机名。查看此链接了解更多详情:quora.com/Domain-Name-System-DNS/…。给出不带下划线的主机名,它会起作用。 尽管这很有趣,但我真的不认为这会对我们有所帮助。我知道下划线是问题所在,我们需要改变它。不过,我们不知道如何强迫牧场主这样做。 你的 docker 版本是多少? docker 版本是1.11.2, build b9f10c9 【参考方案1】:

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

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

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

更新 1:

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

事实并非如此。这是关于主机名中的字符下划线。

更新 2:

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

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

【讨论】:

尽管我很喜欢您的回答,但它并不能真正解决我们的问题。我们可以强制牧场主更改容器名称(您不推荐)或使其使用其他名称作为主机名(我们不知道该怎么做) 请分享您使用的 linux-name 和 Hadoop 发行版。 我们的机器上有 Ubuntu 14.04 和 16.04。 dockerized hadoop 在 Ubuntu 14.04 上运行,Hadoop 与 yarn 结合使用。更多细节可以在牧场主社区存储库中找到 - github.com/rancher/community-catalog/tree/master/templates/… 请检查这些链接是否有用:(1)ubuntuhandbook.org/index.php/2014/04/change-hostname-ubuntu1404(2)ubuntuhandbook.org/index.php/2016/06/…【参考方案2】:

根据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 规范化器。

【讨论】:

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

以上是关于Rancher 模板 - 主机名中的 Hadoop 非法字符的主要内容,如果未能解决你的问题,请参考以下文章

Rancher快速安装k8s图文教程

Rancher 1.5全面发布!

rancher 添加主机没显示怎么解决

从主机名中提取域名

Rancher之主机添加

Rancher概述