private List<String> shuffleData(){
		List<TaskProgress> mapTaskList;
		try {
			// Get the map task list whitch are completed.
			mapTaskList = getJobTrackerServiceProvider().getCompletedMapTasks(taskID);
			
			if( mapTaskList == null){
				System.out.println("Failed to grab the completed Map Tasks.");
				return null;
			} else {
				System.out.println("Retrieved the Completed Map Tasks.");
				
			}
		
			// Using the TaskTracker to get the Slave and building a list for retrieval 
			HashMap<NameNodeSlave, List<String>> slavesWithFiles = new HashMap<NameNodeSlave, List<String>>();
			for(TaskProgress task : mapTaskList){
				NameNodeSlave slave = lookupNameNodeSlave(task.getTaskTrackerName());
				List<String> fileNames = task.getCreatedFileNames();
				slavesWithFiles.put(slave, fileNames);
				
				for(String name : fileNames){
					System.out.println("Slave   " + slave.toString());
					System.out.println("file =====  " + name);
				}
				
			}
			
			List<String> data = new ArrayList<String>();
			//Look into all slaves and get the correct partitioned results of Mapper
			for(Entry<NameNodeSlave, List<String>> entry : slavesWithFiles.entrySet()){
				//Check for alive on the slave
				if(entry.getKey().ping()){
					String fileName = getFileNameWithParitionNumber(entry.getValue(), partitionedNumber);
					if(fileName != null){
						NameNodeSlave slaveNode= entry.getKey();
						// This is where we retrieve the data from different nodes.
						String fileData = slaveNode.retrieveFromLocalDataNode(fileName);
						data.add(fileData);
						
					} else {
						System.out.println("Partitioned File does not exist");
					}
				} else {
					System.out.println("Error in getting data from the Slave");
				}
				
				
			}
			
			return data;
			
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("Error in accessing the Job Tracker.");
		}
		
		return null;

	}