2014-07-22 2 views
2

В результате запроса на улей я получаю несколько выходных файлов (распределялся по сортировке), и теперь я хочу объединить их для создания одного файла. Поэтому я пробовал команду hdfs dfs -getmerge. Теперь я хочу понять, сортирует ли файл -getmerge файлы перед конкатенацией или просто конкатенатирует?Что делает команда hdfs dfs -getmerge?

+0

я не думаю, что 'getmerge' сорта. Это просто конкатенация. –

+0

@PhaniRahul Я думаю, что это сортирует, если вы видите реализацию, она делает Arrays.sort в коде и сортирует файлы по возрастанию по умолчанию. Но я пока не проверял его. –

ответ

4
public static boolean More ...copyMerge(FileSystem srcFS, Path srcDir, 
277         FileSystem dstFS, Path dstFile, 
278         boolean deleteSource, 
279         Configuration conf, String addString) throws IOException { 
280 dstFile = checkDest(srcDir.getName(), dstFS, dstFile, false); 
281 
282 if (!srcFS.getFileStatus(srcDir).isDirectory()) 
283  return false; 
284 
285 OutputStream out = dstFS.create(dstFile); 
286  
287 try { 
288  FileStatus contents[] = srcFS.listStatus(srcDir); 
289  Arrays.sort(contents); 
290  for (int i = 0; i < contents.length; i++) { 
291  if (contents[i].isFile()) { 
292   InputStream in = srcFS.open(contents[i].getPath()); 
293   try { 
294   IOUtils.copyBytes(in, out, conf, false); 
295   if (addString!=null) 
296    out.write(addString.getBytes("UTF-8")); 
297     
298   } finally { 
299   in.close(); 
300   } 
301  } 
302  } 
303 } finally { 
304  out.close(); 
305 } 
306  
307 
308 if (deleteSource) { 
309  return srcFS.delete(srcDir, true); 
310 } else { 
311  return true; 
312 } 
313 } 

Это сортирует файл массив (порядка по возрастанию по умолчанию), источник Hadoop 0,23

Смежные вопросы