那些年你走过下划线的坑
在客户现场和一些特殊环境下被下划线坑过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地址发布做连接的,要不你还是小心为妙。
- 如何使用带有Dropout的LSTM网络进行时间序列预测
- 生信人写程序2. Editplus添加Perl, Shell, R, markdown模板和语法高亮
- Rfam 12.0+本地使用 (最新版教程)
- 宝马汽车安全漏洞详解:古有伯乐识良驹,今有黑客擒宝马
- string.length()与-1比较为什么会出现匪夷所思的结果
- css模块化及CSS Modules使用详解
- 使用OpenCV,Python和模板匹配来播放“Waldo在哪里?”
- C++ 字符串分割
- 算法笔记之排序
- java中String类学习
- React Native之ListView实现九宫格效果
- 迷宫问题(bfs的应用)
- 流量都去哪儿了 —— 三板斧搞定Android网络流量测试
- 富集分析DotPlot,可以服
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL Galera Cluster全解析 Part 10 grastate.dat文件详解
- MySQL MHA部署 Part 7 MHA手动切换测试
- 使用sysbench进行压测 Part2 sysbench语法介绍
- mysqlbinlog命令详解 Part 1-实验环境准备
- mysqlbinlog命令详解 Part 2 -MySQL 事件类型
- mysqlbinlog命令详解 Part 4 -查看行事件具体SQL语句
- mysqlbinlog命令详解 Part 5 通过位置和时间查看日志
- mysqlbinlog命令详解 Part 6 读取远程MySQL服务器日志
- mysqlbinlog命令详解 Part 7 备份二进制日志文件
- mysqlbinlog命令详解 Part 8 指定 Server ID
- mysqlbinlog命令详解 Part 9 MySQL备份策略
- mysqlbinlog命令详解 Part 10 恢复MySQL
- mysqldump命令详解 Part 2- 建立触发器 事件
- mysqlbinlog命令详解 Part 11 其他的一些参数
- mysqldump命令详解 Part 1 -MySQL测试数据的构造