那些年你走过下划线的坑

in 小技巧 with 0 comment  访问: 4,088 次

在客户现场和一些特殊环境下被下划线坑过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地址发布做连接的,要不你还是小心为妙。

WeZan