日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 服務器 > 萬法歸宗之Hadoop編程無界限

萬法歸宗之Hadoop編程無界限

來源:程序員人生   發(fā)布時間:2015-04-20 08:08:06 閱讀次數(shù):3495次
記錄下,散仙今天的工作和遇到的問題和解決方案,俗語說,好記性不如爛筆頭,寫出來文章,供大家參考,學習和點評,進步,才是王道 ,空話不多說,下面切入主題: 

先介紹下需求: 

散仙要處理多個類似表的txt數(shù)據(jù),固然只有值,列名甚么的全部在xml里配置了,然后加工這些每一個表的每行數(shù)據(jù),生成特定的格式基于ASCII碼1和ASCII碼2作為分隔符的1行數(shù)據(jù),ASCII2作為字段名和字段值的分隔符,ASCII1作為字段和字段之間的分隔符,每解析1個txt文件時,都要獲得文件名,然后與xml中的schema信息映照并找到對應位置的值,它的列名,條件是,這些的txt的內(nèi)容位置,是固定的,然后我們知道它每行屬于哪一個表結構的映照,由于這些映照信息是提早配置在xml中的,以下圖: 



固然類似這樣的結構有20個左右的表文件,到時候,我們的數(shù)據(jù)方,會給我們提供這些txt文件,然后散仙需要加工成特定的格式,然后寫入HDFS,由我們的索引系統(tǒng)使用MapReduce批量建索引使用。 

本來想直接用java寫個單機程序,串行處理,然后寫入HDFS,后來1想假設數(shù)據(jù)量比較大,串行程序還得改成多線程并行履行,這樣改來改去,倒不如直接使用MapReduce來的方便 


ok,說干就干,測試環(huán)境已有1套CDH5.3的hadoop2.5集群,直接就在eclipse進行開發(fā)和MapReduce程序的調(diào)試,反正也好久也沒手寫MapReduce了,前段時間,1直在用Apache Pig分析數(shù)據(jù),這次處理的邏輯也不復雜,就再寫下練練手 , CDH的集群在遠程的服務器上,散仙本機的hadoop是Apache Hadoop2.2的版本,在使用eclipse進行開發(fā)時,也沒來得及換版本,理論上最好各個版本,不同發(fā)行版,之間對應起來開發(fā)比較好,這樣1般不會存在兼容性問題,但散仙這次就懶的換了,由于CDH5.x以后的版本,是基于社區(qū)版的Apache Hadoop2.2之上改造的,接口應當大部份都1致,固然這只是散仙料想的。 



(1)首先,散仙要弄定的事,就是解析xml了,在程序啟動之前需要把xml解析,加載到1個Map中,這樣在處理每種txt時,會根據(jù)文件名來去Map中找到對應的schma信息,解析xml,散仙直接使用的jsoup,具體為啥,請點擊散仙這篇 
http://qindongliang.iteye.com/blog/2162519文章,在這期間遇到了1個比較蛋疼的問題,簡直是1個bug,最早散仙定義的xml是每一個表,1個table標簽,然后它下面有各個property的映照定義,但是在用jsoup的cssQuery語法解析時,發(fā)現(xiàn)總是解析不出來東西,依照之前的做法,是沒任何問題的,這次簡直是開玩笑了,后來就是各種搜索,測試,最后才發(fā)現(xiàn),將table標簽,換成其他的任何標簽都無任何問題,具體緣由,散仙還沒來得及細看jsoup的源碼,猜想table標簽應當是1個關鍵詞甚么的標簽,在解析時會和html的table沖突,所以在xml解析中失效了,花了接近2個小時,求證,檢驗,終究弄定了這個小bug。 


(2)弄定了這個問題,散仙就開始開發(fā)調(diào)試MapReduce版的處理程序,這下面臨的又1個問題,就是如何使用Jsoup解析寄存在HDFS上的xml文件,有過Hadoop編程經(jīng)驗的人,應當都知道,HDFS是1套散布式的文件系統(tǒng),與我們本地的磁盤的存儲方式是不1樣的,比如你在正常的JAVA程序上解析在C:file .tx或在linux上/home/user/t.txt,所編寫的程序在Hadoop上是沒法使用的,你得使用Hadoop提供的編程接口獲得它的文件信息,然后轉成字符串以后,再給jsoup解析。 


(3)ok,第2個問題弄定以后,你得編寫你的MR程序,處理對應的txt文本,而且保證不同的txt里面的數(shù)據(jù)格式,所獲得的scheaml是正確的,所以在map方法里,你要獲得固然處理文件的路徑,然后做相應判斷,在做對應處理。 


(4)很好,第3個問題弄定以后,你的MR的程序,基本編寫的差不多了,下1步就改斟酌如何提交到Hadoop的集群上,來調(diào)試程序了,由于散仙是在Win上的eclipse開發(fā)的,所以這1步可能遇到的問題會很多,而且加上,hadoop的版本不1致與發(fā)行商也不1致,出問題也純屬正常。 


這里多寫1點,1般建議大家不要在win上調(diào)試hadoop程序,這里的坑非常多,如果可以,還是建議大家在linux上直接玩,下面說下,散仙今天又踩的坑,關于在windows上調(diào)試eclipse開發(fā), 運行Yarn的MR程序,散仙之前也記錄了文章,感興趣者,可以點擊這個鏈接 
http://qindongliang.iteye.com/blog/2078452地址。 


(5)提交前,是需要使用ant或maven或java自帶的導出工具,將項目打成1個jar包提交的,這1點大家需要注意下,最后測試得出,Apache的hadoop2.2編寫的MR程序,是可以直接向CDH Hadoop2.5提交作業(yè)的,但是由于hadoop2.5中,使用google的guice作為了1個內(nèi)嵌的MVC輕量級的框架,所以在windows上打包提交時,需要引入額外的guice的幾個包,截圖以下: 



 

上面幾步弄定后,打包全部項目,然后運行成功,進程以下: 
Java代碼  收藏代碼
  1. 輸前途徑存在,已刪除!  
  2. 2015-04-08 19:35:18,001 INFO  [main] client.RMProxy (RMProxy.java:createRMProxy(56)) - Connecting to ResourceManager at /172.26.150.18:8032  
  3. 2015-04-08 19:35:18,170 WARN  [main] mapreduce.JobSubmitter (JobSubmitter.java:copyAndConfigureFiles(149)) - Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.  
  4. 2015-04-08 19:35:21,156 INFO  [main] input.FileInputFormat (FileInputFormat.java:listStatus(287)) - Total input paths to process : 2  
  5. 2015-04-08 19:35:21,219 INFO  [main] mapreduce.JobSubmitter (JobSubmitter.java:submitJobInternal(394)) - number of splits:2  
  6. 2015-04-08 19:35:21,228 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - user.name is deprecated. Instead, use mapreduce.job.user.name  
  7. 2015-04-08 19:35:21,228 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.jar is deprecated. Instead, use mapreduce.job.jar  
  8. 2015-04-08 19:35:21,228 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - fs.default.name is deprecated. Instead, use fs.defaultFS  
  9. 2015-04-08 19:35:21,229 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.reduce.tasks is deprecated. Instead, use mapreduce.job.reduces  
  10. 2015-04-08 19:35:21,229 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.mapoutput.value.class is deprecated. Instead, use mapreduce.map.output.value.class  
  11. 2015-04-08 19:35:21,230 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapreduce.map.class is deprecated. Instead, use mapreduce.job.map.class  
  12. 2015-04-08 19:35:21,230 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.job.name is deprecated. Instead, use mapreduce.job.name  
  13. 2015-04-08 19:35:21,230 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapreduce.inputformat.class is deprecated. Instead, use mapreduce.job.inputformat.class  
  14. 2015-04-08 19:35:21,230 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.input.dir is deprecated. Instead, use mapreduce.input.fileinputformat.inputdir  
  15. 2015-04-08 19:35:21,230 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.output.dir is deprecated. Instead, use mapreduce.output.fileoutputformat.outputdir  
  16. 2015-04-08 19:35:21,230 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapreduce.outputformat.class is deprecated. Instead, use mapreduce.job.outputformat.class  
  17. 2015-04-08 19:35:21,231 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps  
  18. 2015-04-08 19:35:21,233 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.mapoutput.key.class is deprecated. Instead, use mapreduce.map.output.key.class  
  19. 2015-04-08 19:35:21,233 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.working.dir is deprecated. Instead, use mapreduce.job.working.dir  
  20. 2015-04-08 19:35:21,331 INFO  [main] mapreduce.JobSubmitter (JobSubmitter.java:printTokens(477)) - Submitting tokens for job: job_1419419533357_5012  
  21. 2015-04-08 19:35:21,481 INFO  [main] impl.YarnClientImpl (YarnClientImpl.java:submitApplication(174)) - Submitted application application_1419419533357_5012 to ResourceManager at /172.21.50.108:8032  
  22. 2015-04-08 19:35:21,506 INFO  [main] mapreduce.Job (Job.java:submit(1272)) - The url to track the job: http://http://dnode1:8088/proxy/application_1419419533357_5012/  
  23. 2015-04-08 19:35:21,506 INFO  [main] mapreduce.Job (Job.java:monitorAndPrintJob(1317)) - Running job: job_1419419533357_5012  
  24. 2015-04-08 19:35:33,777 INFO  [main] mapreduce.Job (Job.java:monitorAndPrintJob(1338)) - Job job_1419419533357_5012 running in uber mode : false  
  25. 2015-04-08 19:35:33,779 INFO  [main] mapreduce.Job (Job.java:monitorAndPrintJob(1345)) -  map 0% reduce 0%  
  26. 2015-04-08 19:35:43,885 INFO  [main] mapreduce.Job (Job.java:monitorAndPrintJob(1345)) -  map 100% reduce 0%  
  27. 2015-04-08 19:35:43,902 INFO  [main] mapreduce.Job (Job.java:monitorAndPrintJob(1356)) - Job job_1419419533357_5012 completed successfully  
  28. 2015-04-08 19:35:44,011 INFO  [main] mapreduce.Job (Job.java:monitorAndPrintJob(1363)) - Counters: 27  
  29.     File System Counters  
  30.         FILE: Number of bytes read=0  
  31.         FILE: Number of bytes written=166572  
  32.         FILE: Number of read operations=0  
  33.         FILE: Number of large read operations=0  
  34.         FILE: Number of write operations=0  
  35.         HDFS: Number of bytes read=47795  
  36.         HDFS: Number of bytes written=594  
  37.         HDFS: Number of read operations=12  
  38.         HDFS: Number of large read operations=0  
  39.         HDFS: Number of write operations=4  
  40.     Job Counters   
  41.         Launched map tasks=2  
  42.         Data-local map tasks=2  
  43.         Total time spent by all maps in occupied slots (ms)=9617  
  44.         Total time spent by all reduces in occupied slots (ms)=0  
  45.     Map-Reduce Framework  
  46.         Map input records=11  
  47.         Map output records=5  
  48.         Input split bytes=252  
  49.         Spilled Records=0  
  50.         Failed Shuffles=0  
  51.         Merged Map outputs=0  
  52.         GC time elapsed (ms)=53  
  53.         CPU time spent (ms)=2910  
  54.         Physical memory (bytes) snapshot=327467008  
  55.         Virtual memory (bytes) snapshot=1905754112  
  56.         Total committed heap usage (bytes)=402653184  
  57.     File Input Format Counters   
  58.         Bytes Read=541  
  59.     File Output Format Counters   
  60.         Bytes Written=594  
  61. true  

最后附上核心代碼,以作備忘: 
(1)Map Only作業(yè)的代碼: 

Java代碼  收藏代碼
  1. package com.dhgate.search.rate.convert;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.FilenameFilter;  
  7. import java.io.IOException;  
  8. import java.util.Map;  
  9.   
  10. import org.apache.hadoop.conf.Configuration;  
  11. import org.apache.hadoop.fs.FileSystem;  
  12. import org.apache.hadoop.fs.Path;  
  13. import org.apache.hadoop.io.LongWritable;  
  14. import org.apache.hadoop.io.NullWritable;  
  15. import org.apache.hadoop.io.Text;  
  16. import org.apache.hadoop.mapreduce.Job;  
  17. import org.apache.hadoop.mapreduce.Mapper;  
  18. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  
  19. import org.apache.hadoop.mapreduce.lib.input.FileSplit;  
  20. import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;  
  21. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  
  22. import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;  
  23. import org.slf4j.Logger;  
  24. import org.slf4j.LoggerFactory;  
  25.   
  26. import com.dhgate.parse.xml.tools.HDFSParseXmlTools;  
  27. import com.sun.xml.bind.v2.schemagen.xmlschema.Import;  
  28.   
  29. /** 
  30.  * 加工處理數(shù)據(jù)格式 
  31.  *  
  32.  * @author qindongliang 2015年04月07日 
  33.  *  
  34.  * **/  
  35. public class StoreConvert {  
  36.       
  37.     //log4j記錄  
  38.     static Logger log=LoggerFactory.getLogger(StoreConvert.class);  
  39.       
  40.     /** 
  41. 生活不易,碼農(nóng)辛苦
    如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
    程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 美女又爽又黄视频毛茸茸 | 50岁女人一级毛片 | 99精品免费久久 | 成人免费自拍视频 | 国产精品蜜 | 求av网站 | 亚洲精品一区二区网址 | 日本精品一区 | 综合久久久久综合 | 成人在线视频一区二区 | 成人h在线观看 | 午夜精品久久久久久久久 | 在线综合av | 成人福利在线免费观看 | 国产福利91精品一区二区三区 | 中文字幕在线观看日本 | 亚洲欧美综合精品久久成人 | 亚洲一区二区精品 | 亚洲一级视频在线 | 成人欧美一区二区三区视频网页 | 欧美成人综合 | 一区二区三区四区视频在线 | 成人三区 | 久久综合五月天 | 国产一区二区三区麻豆 | 综合视频一区 | 国产精品成人在线观看 | 亚洲精品乱码久久久久久蜜桃91 | 毛片一区 | 亚洲视频一二 | 久久55| 欧美日韩精品免费观看视频 | 亚洲视频1区 | 日韩久久免费视频 | 亚洲乱码国产乱码精品精98午夜 | 精品伦精品一区二区三区视频 | 一区二区三区在线免费观看 | 中文日韩欧美 | jizz大全 | 久久首页 | 成人国产精品免费网站 |