在客戶現場和一些特殊環境下被下劃線坑過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地址釋出做連線的,要不你還是小心為妙。