在客户现场和一些特殊环境下被下划线坑过N次方,同时也帮很多人解决很多次主机名带下划线的坑的事件,在这里记录两个典型案例分析一下,希望正在采坑的你可以看到。
No.1 kafka主机名带下划线
当你安装kafka实例的主机的主机名带下划线的,kafka启动报错如下:
(kafka.server.KafkaConfig)
[2018-04-13 12:14:20,779] FATAL (kafka.Kafka$)
kafka.common.KafkaException: Unable to parse PLAINTEXT://news_bj_kafka1:9092 to a broker endpoint
at kafka.cluster.EndPoint$.createEndPoint(EndPoint.scala:49)
at kafka.utils.CoreUtils$$anonfun$listenerListToEndPoints$1.apply(CoreUtils.scala:309)
at kafka.utils.CoreUtils$$anonfun$listenerListToEndPoints$1.apply(CoreUtils.scala:309)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
从kafka.common.KafkaException: Unable to parse PLAINTEXT://news_bj_kafka1:9092 to a broker endpoint
可以看出主要关键报错是这句,那这是为什么呢,这是因为hostnames with underscores '_' are not valid
, kafka不能解析你带_
的主机名,所以你配置kafka配置文件的时候参数host.name
或者 advertised.host.name
的时候主机名不要带_
或者.
之类的特殊字符。
关于kafka的参数advertised.host.name
, advertised.listeners
, advertised.port
,host.name
可以参考如下链接去了解:
https://kafka.apache.org/090/documentation.html#brokerconfigs
http://www.cnblogs.com/snifferhu/p/5102629.html
No.2 hadoop主机名带下划线
当你安装hadoop集群的主机的主机名带下划线的,hadoop启动报错如下:
ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.lang.IllegalArgumentException: Does not contain a valid host:port authority: hdfs://news_bj_hm1:9000
从上面的错误关键提示Does not contain a valid host:port
直译的话这个就很明显了不是有效的主机名和端口,这也就是_
下划线搞得鬼。
教育意义
虽然linux支持一些特殊字符,但java里面并不支持;但是一般情况下带中横线(-
)的主机名是可行的,我已经验证部署kafka和hadoop集群的时候中横线(-
)都被支持。
当我们线上要做大规模主机命名规范的时候,希望你要谨记不要下划线(_
),别听有些人瞎扯,谁痛过谁知道;除非你们线上所有的配置都是基于IP地址发布做连接的,要不你还是小心为妙。
本文由 空心菜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Apr 17, 2018 at 01:03 pm