今天来说说关于hostname的问题。
我们知道,kafka和hbase都是通过zookeeper来保存元数据,当我们要访问kafka时,首先要通过zookeeper查询到kafka的机器,再通过查询到的机器信息连接到相应的机器上获取数据。而记录在zookeeper的机器地址,就是hostname。
刚才提到,我们首先连接的是zookeeper查询kafka的机器地址,如果需要内网访问,只需要在访问机器上绑定kafka机器的内网地址,如果需要外网访问,只需要在访问机器上绑定kafka机器的外网地址
1 | configuration.set("hbase.zookeeper.quorum", "192.168.1.100"); |
初学者在使用hbase,常常会出现连接卡住的情况。如果打开debug日志,就会发现连接的过程中抛出很多异常。其中问题大多数是hostname无法识别。hbase连接抛出异常之时,是打debug日志的,hbase会一直重试,在不开debug日志的情况下,就像是卡住一般。
很多初学者以为代码中只需要连接zookeeper,就只设置zookeeper的hostname对应关系。其实hbase的所有机器,都需要加上host
hdfs的namenode负责元数据,datanode负责数据,当客户端需要获得某一个路径的数据时,先连接namenode,查询该路径的元数据信息,得知数据有多少个block,这些block分别在哪些机器上。客户端取得这些信息之后,自行去连接数据所在的datanode获取数据。
同样的,hdfs所有的机器都需要跟客户端连接,因此客户端所在的机器一定要能访问hdfs的所有机器。如果只开通namenode的外网连接,而不开通datanode的外网连接,hdfs是无法外网访问的。