Esta pregunta parece fácil, pero no puedo entender el verdadero trabajo detrás de ella. Sé que la gente dirá, divide en trozos de 512 Megs y clasifícalos como si usaras Merge Sort usando Map reduce.Ordenar archivo 1TB en la máquina con 1 GB de RAM
Así que aquí es la pregunta real que tengo:
Supongamos que romper el archivo en 512 megas trozo y luego enviar a diferentes máquinas host para ordenarlos. suponga que estas máquinas usaron Merge Sort. Ahora digamos, tenía 2000 máquinas cada una clasificada 2000, 512 megas de trozo. Ahora cuando los vuelvo a fusionar, ¿cómo funciona eso? ¿El tamaño no seguirá aumentando de nuevo? Por ejemplo, fusionar dos 512 megas hará 1024Megs, que es el tamaño de mi RAM, ¿cómo funcionaría esto? Cualquier máquina no puede fusionar un trozo de más de 512 megas con otro trozo porque entonces el tamaño> 1 GB.
Cómo al final de la fusión alguna vez podré unir dos trozos de 0.5 TB con otro trozo de 0.5 TB. ¿Entra aquí en juego el concepto de Memoria Virtual?
Estoy aquí para aclarar mis conceptos básicos y espero hacer esta pregunta tan importante (correctamente) correctamente. Además, ¿quién debería hacer esta fusión (después de la clasificación)? ¿Mi máquina o algunas de esas 2000 máquinas?
Solo se quedaría sin memoria si intenta guardar los archivos en la memoria. Una vez que haya fragmentado el archivo y haya ordenado cada fragmento, solo tendrá que mantener una línea de cada archivo en la memoria al fusionarlos/escribirlos en un nuevo archivo. –
Merge sort es uno de mis algoritmos favoritos. Tan simple de entender, y tan útil. –
Por cierto, es posible usar solo 2 pases de lectura/escritura en todo el conjunto de datos. (4 TB de E/S en total) Voy a omitir los detalles, ya que es muy complicado, pero utiliza el mismo enfoque que los algoritmos de FFT fuera del núcleo. – Mysticial