明明在同一台物理机上,但由于不同的 container 需要分配不同的 IP,所以 yarn 之类的组件无法识别yarn-nodemanager1
和hdfs-datanode1
两台机器是可以通过短路读(也就是hdfs-datanode1
在本地打开需要传输的 block,然后把 fd 交给yarn-nodemanager1
)传输数据的,最后数据还是通过网络传输的,浪费了很多性能。如果要解决这个问题,具体要解决两个方面的内容:
yarn-resourcemanager
需要感知到不同yarn-nodemanger
与hdfs-datanode
的对应关系,并且尽可能把任务分配到可以短路读的节点上;yarn-nodemanager
需要感知到自己可以从哪个hdfs-datanode
短路读。目前的做法就是硬编码+改源码,现在要上 impala 了类似的事情又要再做一遍,感到十分头疼。各位老哥有没有什么优雅点的解决方案?