/// the FileHandling private static void FileTestHandle(HdfsFileSystem hdfsSystem, Action <string> exitEnvironment) { Action <int, HdfsFileHandle> checkOperation = (bytecount, file) => { if (bytecount == -1) { try { file.Close(); } finally { exitEnvironment("Error operating on the file..."); } } }; string localfilename = "MobileSampleData.txt"; string localfilepath = Path.GetFullPath(@"..\..\..\Sample") + @"\" + localfilename; string localfilewrite = Path.GetFullPath(@"..\..\..\Sample") + @"\Hdfs." + localfilename; string filename = BaseHdfsPath + "/testdata.txt"; int chunksize = 1024; int chunk; // First write out some data Console.WriteLine("Working Directory is: " + hdfsSystem.GetWorkingDirectory()); Console.WriteLine("Creating New File: " + filename); string data = "I am some unstructured data.\nThat will be written.\n"; byte[] dataBytes = Encoding.UTF8.GetBytes(data); int dataLen = dataBytes.Length; using (HdfsFileHandle file = hdfsSystem.OpenFileForWrite(filename, chunksize, 0, 0)) { checkOperation(file.WriteBytes(dataBytes, 0, data.Length), file); checkOperation(file.WriteByte((byte)9), file); checkOperation(file.WriteLine("1) This is an inserted line."), file); checkOperation(file.WriteByte((byte)9), file); checkOperation(file.WriteLine("2) This is an inserted line."), file); file.Flush(); } // Ensure you can read the data using (HdfsFileHandle file = hdfsSystem.OpenFileForRead(filename)) { Console.WriteLine("Data Written:"); byte[] newDataBytes = new byte[dataLen]; checkOperation(file.ReadBytes(newDataBytes, 0, newDataBytes.Length), file); Console.Write(Encoding.UTF8.GetString(newDataBytes)); Console.Write((char)file.ReadByte()); Console.WriteLine(file.ReadLine()); Console.WriteLine(file.ReadLine()); } // Read the full contents of a file using lines Console.WriteLine(); Console.WriteLine("Reading all Line Data:"); using (HdfsFileHandle file = hdfsSystem.OpenFileForRead(filename)) { String line; while ((line = file.ReadLine()) != null) { Console.WriteLine(line); } } if (File.Exists(localfilepath)) { // Copy a file from the local file system into Hadoop Console.WriteLine(); Console.WriteLine("Copying Local File: " + localfilename); byte[] localbytes = new byte[chunksize]; string localhdfsfilename = BaseHdfsPath + @"\" + localfilename; using (HdfsFileHandle file = hdfsSystem.OpenFileForWrite(localhdfsfilename, chunksize, 0, 0)) { using (FileStream stream = new FileStream(localfilepath, FileMode.Open, FileAccess.Read)) { while ((chunk = stream.Read(localbytes, 0, chunksize)) > 0) { checkOperation(file.WriteBytes(localbytes, 0, chunk), file); } } file.Flush(); } // Copy the HDFS file to the local system Console.WriteLine(); Console.WriteLine("Copying file to local:"); using (HdfsFileHandle file = hdfsSystem.OpenFileForRead(localhdfsfilename, chunksize)) { using (FileStream stream = new FileStream(localfilewrite, FileMode.Create, FileAccess.Write)) { while ((chunk = file.ReadBytes(readBytes, 0, chunksize)) > 0) { stream.Write(readBytes, 0, chunk); } } } Console.WriteLine(String.Format("File '{0}' Created.", localfilewrite)); Console.WriteLine(); } }