我们对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条答案
按热度按时间hpcdzsge1#
oracle bug数据库声明:根据rfc 2396、rfc 952和rfc 1123,下划线不是主机名中的有效字符。请参考以下链接:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=5049974
更好的办法是在主机名中用hypen替换下划线。
更新1:
hadoop无法处理将容器名用作主机名的问题
事实并非如此。它是关于主机名中的字符下划线。
更新2:
我们不知道怎么强迫牧场主这么做
你不应该朝那个方向前进。原因是,还有其他应用程序可能抛出同样的异常,这又是一个麻烦。最好的选择是更改主机名。
toiithl62#
根据RFC3986,下划线应该没有问题
2.3. 未保留字符
uri中允许但没有保留用途的字符称为unreserved。其中包括大小写字母、十进制数字、连字符、句点、下划线和颚化符。
无保留=字母/数字/“-”/“/”/“/”\“/”~”
再深入一点,我们就能看到为什么事情会破裂的可能解释
然而,uri比较实现并不总是在比较之前执行规范化
应该有可能转义那些字符,意思是
hadoop_datanode_1
应等同于hadoop%5Fdatanode%5F1
. 文档明确指出不要以这种方式构造uri,至少我是这样理解的。为保持一致性,uri生产者不应创建alpha(%41-%5a和%61-%7a)、数字(%30-%39)、连字符(%2d)、句点(%2e)、下划线(%5f)或颚化符(%7e)范围内的百分比编码八位字节,当在uri中找到时,uri规范化器应将其解码为相应的无保留字符。