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
- Java讀取本地檔案,並顯示在JSP檔案中JavaJS
- hadoop透過CombineFileInputFormat實現小檔案合併減少map的個數HadoopORM
- 開發:隨筆記錄之 判斷list和map相等,併合並等問題筆記
- java中Map根據Map的value取keyJava
- 如何在hadoop中控制map的個數Hadoop
- 【python】python初學 讀取map檔案資料到excel中PythonExcel
- mysql將多行資料合併或按組合並MySql
- 優化 Go 中的 map 併發存取優化Go
- Pandas之EXCEL資料讀取/儲存/檔案分割/檔案合併Excel
- go 併發 mapGo
- 文摘:在EJB中讀取XML配置檔案XML
- 在Golang中使用泛型從任何map中獲取鍵的sliceGolang泛型
- 在linux下合併磁碟Linux
- Hadoop Map Reduce 漫談Hadoop
- Hadoop框架下MapReduce中的map個數如何控制Hadoop框架
- 深度分析如何在Hadoop中控制Map的數量Hadoop
- Go 併發讀寫 sync.map 的強大之處Go
- Python中Spark讀取parquet檔案並獲取schema的JSON表示PythonSparkJSON
- ETL中雙流合併和多流合併的區別
- 在RFT中如何擷取螢幕影像並儲存到檔案中?
- Excel上傳並讀取資料Excel
- NOPI讀取Word模板並儲存
- Swift 下載檔案,並讀取Swift
- 記一次Promise在api介面合併中的實踐PromiseAPI
- Hbase-原理-region合併和hfile的合併(大合併、小合併)
- hadoop之 map個數控制Hadoop
- Excel 讀取圖片並獲取儲存路徑Excel
- 從標準輸入流中讀取並執行shell指定函式函式
- java讀取excel為物件並進行讀寫操作JavaExcel物件
- 記一次go中map併發引起的事故Go
- hadoop 在centos中的搭建HadoopCentOS
- java讀取大檔案並處理Java
- python解壓並讀取檔案Python
- Java 讀取.xls模板並另存為.xlsJava
- 【Python】讀取excel並輸出到txtPythonExcel
- Git多人合作,合併請求並解決衝突Git