hadoop 合併sequcefie並在map中讀取
package hgs.sequencefile; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.io.SequenceFile; import org.apache.hadoop.io.Text; //合併小檔案 public class SequenceMain { public static void main(String[] args) throws IOException, URISyntaxException { Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(new URI("hdfs://192.168.6.129:9000"),conf); //獲得該資料夾下的所有的檔案 FileStatus[] fstats = fs.listStatus(new Path("/words")); //System.out.println(fstats.length); Text key = new Text(); Text value = new Text(); @SuppressWarnings("deprecation") //建立一個sequecewriter //merge.seq是檔名 SequenceFile.Writer writer = SequenceFile.createWriter(fs, conf, new Path("/sequence/merge.seq"), key.getClass(), value.getClass()); //迴圈遍歷每個檔案 for(FileStatus fis : fstats) { //將每個檔案以key value的形式寫入到sequencefile中 FSDataInputStream finput = fs.open(fis.getPath()); byte[] buffer = new byte[(int)fis.getLen()]; IOUtils.readFully(finput, buffer, 0, buffer.length); //檔名為key 檔案內容為value key.set(fis.getPath().getName()); value.set(buffer); writer.append(key, value); finput.close(); } writer.close(); fs.close(); } }
package hgs.sequencefile; import java.io.IOException; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class SequnceMapper extends Mapper<Text, Text, Text, Text> { @Override protected void map(Text key, Text value, Mapper<Text, Text, Text, Text>.Context context) throws IOException, InterruptedException { context.write(key, value); } }
package hgs.sequencefile; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.SequenceFileOutputFormat; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.SequenceFileAsTextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class SequenceDriver { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "read_sequence_file"); job.setJarByClass(hgs.sequencefile.SequenceDriver.class); // TODO: specify a mapper job.setMapperClass(SequnceMapper.class); // TODO: specify a reducer //job.setReducerClass(Reducer.class); // TODO: specify output types job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); //在這個設定讀取sequencefile的inputformat,該類讀取的是String淚習慣的key value //SequenceFileAsBinaryInputFormat 該類獨處的ByteWritable的key value job.setInputFormatClass(SequenceFileAsTextInputFormat.class); // TODO: specify input and output DIRECTORIES (not files) FileInputFormat.setInputPaths(job, new Path("hdfs://192.168.6.129:9000/sequence")); FileOutputFormat.setOutputPath(job, new Path("hdfs://192.168.6.129:9000/seqresult")); if (!job.waitForCompletion(true)) return; } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31506529/viewspace-2217742/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- hadoop archive合併小檔案並進行mapreduce來減少map的數量HadoopHive
- Java 在Word中建立郵件合併模板併合並文字和圖片Java
- hadoop透過CombineFileInputFormat實現小檔案合併減少map的個數HadoopORM
- 【python】python初學 讀取map檔案資料到excel中PythonExcel
- git合併多個commit & 壓縮合並GitMIT
- Hadoop Map Reduce 漫談Hadoop
- Python中Spark讀取parquet檔案並獲取schema的JSON表示PythonSparkJSON
- 在linux下合併磁碟Linux
- 優化 Go 中的 map 併發存取優化Go
- Pandas之EXCEL資料讀取/儲存/檔案分割/檔案合併Excel
- git合併分支並處理衝突Git
- 15 ##### 適合繫結方法的場景:在物件中封裝值,在方法中讀取物件的值物件封裝
- 在Golang中使用泛型從任何map中獲取鍵的sliceGolang泛型
- go 併發 mapGo
- hadoop 在centos中的搭建HadoopCentOS
- Go 併發讀寫 sync.map 的強大之處Go
- NOPI讀取Word模板並儲存
- Excel上傳並讀取資料Excel
- python解壓並讀取檔案Python
- DS18B20讀取溫度並顯示在數碼管上
- 在Python以陣列的方式讀取影像,並轉為Torch張量Python陣列
- Excel 讀取圖片並獲取儲存路徑Excel
- java讀取excel為物件並進行讀寫操作JavaExcel物件
- Cloudera和Hortonworks宣佈合併:對Hadoop的一記重創!CloudHadoop
- nodejs 讀取excel檔案,並去重NodeJSExcel
- java讀取大檔案並處理Java
- 說說在 Python 中,如何讀取檔案中的資料Python
- 記一次Promise在api介面合併中的實踐PromiseAPI
- ETL中雙流合併和多流合併的區別
- 從標準輸入流中讀取並執行shell指定函式函式
- Hbase-原理-region合併和hfile的合併(大合併、小合併)
- [Golang併發]Sync.mapGolang
- 記一次go中map併發引起的事故Go
- Git多人合作,合併請求並解決衝突Git
- phpSpreadsheet 讀取圖片並另存為檔案PHP
- bing Map 在vue專案中的使用Vue
- 根據key集合批次從map中獲取value
- 解讀vue-server-renderer原始碼並在react中的實現VueServer原始碼React