我们对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创建带下划线的容器。不知道怎么解决它...
答案 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规范化器。