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

时间:2016-08-19 10:58:06

标签: 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

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

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

2 个答案:

答案 0 :(得分:1)

Oracle bug-database声明:根据RFC 2396,RFC 952和RFC 1123,Underscore不是主机名中的有效字符。请参阅以下链接:

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

更好的想法可能是用主机名中的hypen替换下划线。

更新1:

  

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

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

更新2:

  

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

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

答案 1 :(得分:0)

根据RFC 3986

,下划线应该没有错
  

<强> 2.3。未保留的字符

     

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

     

未保留= ALPHA / DIGIT /&#34; - &#34; /&#34;。&#34; /&#34; _&#34; /&#34;〜&#34;

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

  

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

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

  

为保持一致性,ALPHA(%41-%5A和%61-%7A),DIGIT(%30-%39),连字符(%2D),期间(%2E)范围内的百分比编码八位字节, URI生成器不应创建下划线(%5F )或波浪号(%7E),并且在URI中找到时,应通过以下方式将其解码为相应的非保留字符: URI规范化器。