那些年走過下劃線的坑

諾克大叔發表於2018-06-28

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

那些年走過下劃線的坑

相關文章