hostname的问题

今天来说说关于hostname的问题。

我们知道,kafka和hbase都是通过zookeeper来保存元数据,当我们要访问kafka时,首先要通过zookeeper查询到kafka的机器,再通过查询到的机器信息连接到相应的机器上获取数据。而记录在zookeeper的机器地址,就是hostname。

如何使kafka既能够外网访问又能够内网访问呢?

刚才提到,我们首先连接的是zookeeper查询kafka的机器地址,如果需要内网访问,只需要在访问机器上绑定kafka机器的内网地址,如果需要外网访问,只需要在访问机器上绑定kafka机器的外网地址

hbase client连接直接卡住

1
2
configuration.set("hbase.zookeeper.quorum", "192.168.1.100"); 
HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration);

初学者在使用hbase,常常会出现连接卡住的情况。如果打开debug日志,就会发现连接的过程中抛出很多异常。其中问题大多数是hostname无法识别。hbase连接抛出异常之时,是打debug日志的,hbase会一直重试,在不开debug日志的情况下,就像是卡住一般。

很多初学者以为代码中只需要连接zookeeper,就只设置zookeeper的hostname对应关系。其实hbase的所有机器,都需要加上host

hdfs的简单原理

hdfs的namenode负责元数据,datanode负责数据,当客户端需要获得某一个路径的数据时,先连接namenode,查询该路径的元数据信息,得知数据有多少个block,这些block分别在哪些机器上。客户端取得这些信息之后,自行去连接数据所在的datanode获取数据。

同样的,hdfs所有的机器都需要跟客户端连接,因此客户端所在的机器一定要能访问hdfs的所有机器。如果只开通namenode的外网连接,而不开通datanode的外网连接,hdfs是无法外网访问的。

如何加host

  • 搭建DNS服务
  • 修改本地的/etc/hosts文件