<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    敏捷、分布式、ALM過程自動化、企業應用架構
    posts - 14, comments - 0, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Hadoop in action 實踐(偽分布式)

    Posted on 2012-04-01 15:00 一酌散千憂 閱讀(915) 評論(0)  編輯  收藏 所屬分類: Hadoop
    《Hadoop in action》Manning出版,磕磕絆絆總算是看完了。書的內容就不做介紹,主要講一下實踐的過程。并且在實踐過程中參考的書籍的部分也會簡單介紹。

    灰色背景部分為一些介紹,或過程中出現問題的描述,可以直接忽略。

    由于公司的業務需要,要在網絡收集網頁之后對網頁進行結構化的解析,這個結構化過程希望能夠基于HDFS并且使用MR算法實現。

    我虛擬了一個需求,針對http://hadoop.apache.org/common/releases.html 頁面,假設已經下載了頁面并入庫。要求最終體現的數據是 “版本號+完整鏈接(即a標簽全部內容)” 的結構。

     

    偽分布式環境搭建在虛擬機上,操作系統是centos5.5hadoop的版本是1.0.0.

     

    插入書中的一些環境搭建的介紹

    書中的2.1節中介紹了每個進程的作用。2.2節中的ssh設置也比較重要,否則好像會一直提示你輸入密碼。2.3.2節介紹了偽分布式的配置方式,對core-site.xmlmapred-site.xmlhdfs-site.xml進行配置之后,需要對namenode節點進行格式化。

    bin/hadoop namenode –format

     

    hadoop的根目錄為/usr/local/hadoop-1.0.0,直接啟動start-all.sh

     

    [root@localhost hadoop-1.0.0]# ./bin/start-all.sh

     

    啟動成功后使用jps命令

    jdk小工具jps介紹 

    jps(Java Virtual Machine Process Status Tool)JDK 1.5提供的一個顯示當前所有java進程pid的命令,簡單實用,非常適合在linux/unix平臺上簡單察看當前java進程的一些簡單情況。 jps存放在JAVA_HOME/bin/jps

     

    [root@localhost hadoop-1.0.0]# jps

    5694 SecondaryNameNode

    5461 NameNode

    5578 DataNode

    6027 Jps

    5784 JobTracker

    5905 TaskTracker

    這幾個進程是非常重要的。很多時候出現意外就是因為某項服務未啟動或異常。可以看到上面的命令上打印出日志位置。出現異常后可以在日志中查看詳細的堆棧信息。

     

    至此,hadoop已經啟動,環境已經準備就緒。

     

    下面準備我們的測試數據,將目標頁面的html保存為news.txt,偽分布式也同樣支持hdfs,所以我們使用 fs –put news.txt存入hdfs中。

    [root@localhost hadoop-1.0.0]# ./bin/hadoop fs -put /mnt/hgfs/shared/news.txt /user/root

    [root@localhost hadoop-1.0.0]# ./bin/hadoop fs -lsr /userdrwxr-xr-x   - root supergroup          0 2012-04-01 11:22 /user/root

    -rw-r--r--   1 root supergroup       3935 2012-04-01 11:22 /user/root/news.txt

     

    實現的代碼在eclipse中使用maven打包,上傳至虛擬機。

    文件名com.suntang.analyse.hadoop-0.0.1.jar
    使用hadoop的中的jar命令調用該jar文件。


    [root@localhost hadoop-1.0.0]# ./bin/hadoop jar com.suntang.analyse.hadoop-0.0.1.jar com.suntang.analyse.hadoop.AnalyseJob /user/root/news.txt output_root_test

    12/04/01 14:40:04 INFO input.FileInputFormat: Total input paths to process : 1

    12/04/01 14:40:05 INFO mapred.JobClient: Running job: job_201204011420_0001

    12/04/01 14:40:06 INFO mapred.JobClient:  map 0% reduce 0%

    12/04/01 14:40:19 INFO mapred.JobClient:  map 100% reduce 0%

    12/04/01 14:40:31 INFO mapred.JobClient:  map 100% reduce 100%

    12/04/01 14:40:37 INFO mapred.JobClient: Job complete: job_201204011420_0001

     

     

    此處注意我犯的一個錯誤:

    [root@localhost hadoop-1.0.0]# ./bin/hadoop jar com.suntang.analyse.hadoop-0.0.1.jar AnalyseJob -libjars hadoop-core-1.0.0.jar /user/root/news.txt output_root_test

    Exception in thread "main" java.lang.ClassNotFoundException: AnalyseJob

    提示找不到類,因為我忘了寫完整類名,命令應該改為

    ./bin/hadoop jar com.suntang.analyse.hadoop-0.0.1.jar com.suntang.analyse.hadoop.AnalyseJob -libjars hadoop-core-1.0.0.jar /user/root/news.txt output_root_test 即可。

     

    此處運行可能出現另外一個錯誤。在命令行中出現

    12/04/01 14:01:38 INFO mapred.JobClient: Task Id : attempt_201204011356_0001_m_000001_0, Status : FAILED

    java.lang.Throwable: Child Error

            at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:271)

    Caused by: java.io.IOException: Creation of symlink from /mnt/hgfs/shared/hadoop-1.0.0/libexec/../logs/userlogs/job_201204011356_0001/attempt_201204011356_0001_m_000001_0 to 。。。

    就不打全了,重點在與

    Creation of symlink,看詳細日志中hadoop-root-tasktracker-localhost.localdomain.log中提示org.apache.hadoop.fs.FileUtil: Command 'ln -s ....': Operation not supported,即ln操作不支持。google可知這個是由于vm中的共享區域的問題,解決方法就是將hadoop完全轉移至linux目錄中。本例中從/mnt/hgfs/shared/hadoop-1.0.0轉移至/usr/local/hadoop-1.0.0

     

    執行完成后可在hdfs中查看結果,查看目錄結構為

    -rw-r--r--   1 root supergroup          0 2012-04-01 14:40 /user/root/output_root_test/_SUCCESS

    drwxr-xr-x   - root supergroup          0 2012-04-01 14:40 /user/root/output_root_test/_logs

    drwxr-xr-x   - root supergroup          0 2012-04-01 14:40 /user/root/output_root_test/_logs/history

    -rw-r--r--   1 root supergroup      13634 2012-04-01 14:40 /user/root/output_root_test/_logs/history/job_201204011420_0001_1333262405103_root_ccAnalyseJob

    -rw-r--r--   1 root supergroup      20478 2012-04-01 14:40 /user/root/output_root_test/_logs/history/job_201204011420_0001_conf.xml

    -rw-r--r--   1 root supergroup       3580 2012-04-01 14:40 /user/root/output_root_test/part-r-00000

     

    /user/root/output_root_test/part-r-00000即為最終結果文件。

     

     =======================================================================

    附加AnalyseJob代碼

    package com.suntang.analyse.hadoop;

     

    import java.io.IOException;

     

    import org.apache.hadoop.conf.Configuration;

    import org.apache.hadoop.conf.Configured;

    import org.apache.hadoop.fs.Path;

    import org.apache.hadoop.io.LongWritable;

    import org.apache.hadoop.io.Text;

    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.TextInputFormat;

    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

    import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

    import org.apache.hadoop.util.Tool;

    import org.apache.hadoop.util.ToolRunner;

     

    public class AnalyseJob extends Configured implements Tool {

     

           public static class MapClass extends Mapper<LongWritable, Text, Text, Text> {

     

                  @Override

                  protected void map(LongWritable key, Text value, Context context)

                                throws IOException, InterruptedException {

                        

                        

                         // TODO Auto-generated method stub

                         // super.map(key, value, context);

                         if (value.toString().matches("<a[^>]*>.*?release.*?</a>"))

                                context.write(

                                              new Text(value.toString().substring(

                                                            value.toString().indexOf("release") + 8,

                                                            value.toString().indexOf("available") - 1)),

                                              value);

                  }

     

           }

     

           public static class ReduceClass extends Reducer<Text, Text, Text, Text> {

     

                  @Override

                  protected void reduce(Text arg0, Iterable<Text> arg1, Context arg2)

                                throws IOException, InterruptedException {

                         // TODO Auto-generated method stub

                         // super.reduce(arg0, arg1, arg2);

                         arg2.write(arg0, arg1.iterator().next());

                  }

     

           }

     

           public int run(String[] args) throws Exception {

                  Configuration conf = getConf();

     

                  Job job = new Job(conf, "myAnalyseJob");

                  job.setJarByClass(getClass());

     

                  Path in = new Path(args[0]);

                  Path out = new Path(args[1]);

                  FileInputFormat.setInputPaths(job, in);

                  FileOutputFormat.setOutputPath(job, out);

     

                  job.setMapperClass(MapClass.class);

                  job.setReducerClass(ReduceClass.class);

     

                  job.setInputFormatClass(TextInputFormat.class);

                  job.setOutputFormatClass(TextOutputFormat.class);

                  job.setOutputKeyClass(Text.class);

                  job.setOutputValueClass(Text.class);

     

                  System.exit(job.waitForCompletion(true) ? 0 : 1);

     

                  return 0;

           }

     

           public static void main(String[] args) throws Exception {

                  int res = ToolRunner.run(new Configuration(), new AnalyseJob(), args);

                  System.exit(res);

           }

    }

    主站蜘蛛池模板: 久久99热精品免费观看动漫| 搡女人免费免费视频观看| 青娱分类视频精品免费2| 日韩精品一区二区亚洲AV观看 | 国产特黄一级一片免费| 亚洲日本韩国在线| yellow免费网站| 亚洲va中文字幕无码久久| 日本高清免费观看| 久久91亚洲精品中文字幕| 亚洲精品免费在线视频| 国产成人精品日本亚洲11| 永久免费bbbbbb视频| 黄色一级毛片免费| 亚洲无av在线中文字幕| 全部免费毛片在线播放| 亚洲国产成人手机在线电影bd | 国产片AV片永久免费观看| 亚洲伦理一二三四| 日本a级片免费看| 国产精品玖玖美女张开腿让男人桶爽免费看 | 无码视频免费一区二三区| 亚洲欧美在线x视频| 亚洲伊人久久大香线蕉综合图片| a级毛片黄免费a级毛片| 亚洲伊人色一综合网| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 亚洲av永久无码精品网站| 日本免费xxxx色视频| 国产精品亚洲精品日韩动图| 日本亚洲国产一区二区三区| 最近免费mv在线电影| 亚洲av日韩综合一区久热| 亚洲精品国精品久久99热一| 在线看片免费人成视久网| 精品国产_亚洲人成在线| 亚洲宅男天堂在线观看无病毒| 国产免费不卡视频| 一区二区三区免费在线观看| 亚洲福利秒拍一区二区| 亚洲熟妇少妇任你躁在线观看无码|