大資料學習——MapReduce配置及java代碼實現wordcount演算法

來源:互聯網
上載者:User

標籤:檔案內容   home   查看   ack   cli   步驟   本質   inter   統計   

---恢複內容開始---

配置MapReduce需要在之前配置的基礎上配置兩個xml檔案一個是yarn-site.xml一個是mapred-site.xml,在之前配置的hadoop的etc目錄下可以找到

下邊進行配置過程首先

1、配置yarn-site.xml

<configuration><!-- Site specific YARN configuration properties --><property><name>yarn.resourcemanager.hostname</name><value>192.168.98.141</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property></configuration>

這裡需要解釋一下,yarn的基本思想是將JobTracker的兩個主要功能(資源管理和作業調度/監控)分離,主要方法是建立一個全域的ResourceManager(RM)和若干個針對應用程式的ApplicationMaster(AM)。這裡的應用程式是指傳統的MapReduce作業或作業的DAG,其實yarn類似理解成tomcat, 在web項目上有tomcat這個平台。yarn也是這樣的,YARN 分層結構的本質是 ResourceManager。這個實體控制整個叢集並管理應用程式向基礎計算資源的分配。ResourceMannager將這些資源分派給NodeManager(yarn代理結點)。

第一個value配置屬性是對應自己系統配置ip的主機號

配置mapred-site.xml

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>

這樣就是配置完成了

開啟虛擬機器,開啟yarn服務,輸入jps查看是否具有ResourceManager NodeManager兩部分。有則配置成功。

虛擬機器下運行wordcount演算法

進入hadoop——>share——>hadoop——mapreduce——>執行 hadoop-mapreduce-examples-2.7.3.jar中的wordcount演算法

這裡需要注意,wordcount後的目錄 第一個為統計字元檔案的目錄,第二個為輸出目錄,輸出的目錄必須是之前不存在的否則會報錯

介紹下MapReduce的工作流程,粗略劃分可以分為以下幾個步驟

1、代碼編寫

2、作業配置

3、提交作業

4、初始化作業

5、分配任務

6、執行任務

7、更新任務和狀態

MapReduce在處理資料時都是通過索引值對的形式進行處理資料

1、MapReduce架構是通過Map讀取檔案內容,解析成key、value對檔案的每一行,解析成key、value對<key,value>每一個索引值對調用一次map函數,寫自己的邏輯,對輸入的key、value處理轉換成新的key、value輸出,將輸出的中間索引值對傳給Reduce;

2、在Reduce之前,有一個shuffle的過程對多個map任務的輸出進行合并、排序

3、寫Reduce函數自己的邏輯,對輸入的key、value處理,轉換成新的key、value輸出

4、把Reduce的輸出儲存到檔案中

上述內容是我學完之後對MapReduce的工作流程的一個理解,下邊通過java代碼實現wordcount演算法。

首先建立一個maven項目,在pom.xml中引入以下依賴

</dependency>        <dependency>            <groupId>org.apache.hadoop</groupId>            <artifactId>hadoop-common</artifactId>            <version>2.7.3</version>        </dependency>        <dependency>            <groupId>org.apache.hadoop</groupId>            <artifactId>hadoop-client</artifactId>            <version>2.7.3</version>        </dependency>        <dependency>            <groupId>jdk.tools</groupId>            <artifactId>jdk.tools</artifactId>            <version>1.8</version>            <scope>system</scope>            <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>        </dependency>

建立Map類

import java.io.IOException;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;public class MyMap extends Mapper<LongWritable, Text, Text, IntWritable> {    @Override    /*     * 其中KEYIN(位元組位移量) VLAUE (擷取的資料類型)KEYOUT(輸出資料類型)VALUE(輸出資料實值型別)     */    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context)            throws IOException, InterruptedException {        // TODO Auto-generated method stub        String line=value.toString();//按行擷取檔案內容        String[] words=line.split(" ");//通過空格將每行內容進行分區        for (String word : words) {            context.write(new Text(word.trim()), new IntWritable(1));//將map函數的輸出溢寫到記憶體中的環形緩衝區        }    }}

建立Reduce類

import java.io.IOException;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;public class MyReduce extends Reducer<Text, IntWritable, Text, IntWritable> {    @Override    /*     * Key 為map輸出Key的類型 ,迭代器類型對應map傳來的value值     * 迭代器的使用是為了實現map中每個值都進行一次處理     *      */    protected void reduce(Text key, Iterable<IntWritable> values,            Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {        // TODO Auto-generated method stub        int sum=0;        //資料處理        for (IntWritable intWritable : values) {            sum+=intWritable.get();        }        context.write(key, new IntWritable(sum));    }}

建立Job類

import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.conf.Configured;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.Tool;import org.apache.hadoop.util.ToolRunner;public class MyJob extends Configured implements Tool{        public static void main(String[] args) throws Exception {        MyJob myJob=new MyJob();        ToolRunner.run(myJob, null);    }    @Override    public int run(String[] args) throws Exception {        // TODO Auto-generated method stub        Configuration conf=new Configuration();//建立設定物件        conf.set("fs.defaultFS", "hdfs://192.168.80.142:9000");        //分配任務        Job job=Job.getInstance(conf);        job.setJarByClass(MyJob.class);        job.setMapperClass(MyMap.class);        job.setReducerClass(MyReduce.class);        job.setOutputKeyClass(Text.class);        job.setOutputValueClass(IntWritable.class);        //建立檔案輸入輸出資料流        FileInputFormat.addInputPath(job, new Path("/hadoop/hadoop.txt"));        FileOutputFormat.setOutputPath(job, new Path("/hadoop/out"));        job.waitForCompletion(true);        return 0;    }}

 

 

 

 

 

 

 

 

 

 

 

---恢複內容結束---

大資料學習——MapReduce配置及java代碼實現wordcount演算法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.