Существуют две разные задачи в зависимости от их требований, поэтому две разные реализации можно объяснить желанием лучше удовлетворить требования.
Связь DataNode -> NameNode более сложна, чем связь DataNode-DataNode, и, следовательно, оправдывает RPC.
Связь DataNode-DataNode чрезвычайно проста с одной стороны и требует эффективной транспортировки большого количества данных. Можно констатировать, что сокеты являются наиболее эффективным решением для этого случая.