예제 #1
0
        ///  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();
            }
        }