1. 程式人生 > >win10+eclipse+hadoop2.7.2+maven+local模式直接通過Run as Java Application執行wordcount

win10+eclipse+hadoop2.7.2+maven+local模式直接通過Run as Java Application執行wordcount

一、準備工作

 (1)Hadoop2.7.2 在linux部署完畢,成功啟動dfs和yarn,通過jps檢視,程序都存在

 (2)安裝maven

二、最終效果

 在windows系統中,直接通過Run as Java Application執行wordcount,而不需要先打包成jar包,然後在linux終端執行

三,操作步驟

 1、啟動dfs和yarn

  終端:${HADOOP_HOME}/sbin/start-dfs.sh

    ${HADOOP_HOME}/sbin/start-yarn.sh

  通過在namenode節點上jps檢視顯示:

  4852 NameNode
  5364 ResourceManager
  5141 SecondaryNameNode
  10335 Jps

  在datanode節點上使用jps檢視顯示:

  10369 Jps
  4852 NameNode
  5364 ResourceManager
  5141 SecondaryNameNode

 2、Eclipse基礎配置

  (1)將hadoop-eclipse-plugin-2.7.2.jar外掛下載,放在Eclipse的目錄下的plugins目錄下,啟動Eclipse,然後點選檢視Hadoop外掛是否生效,點選windows——>preferences,如下圖1

    

  (2)將hadoop-2.7.2的解壓包新增到2所示的目錄,點選OK

 3、Eclipse建立maven工程

  (1)建立過程省略

  (2)新增dependency,POM.xml中的依賴項如下:

  hadoop-common

  hadoop-hdfs

  hadoop-mapreduce-client-core

      hadoop-mapreduce-client-common  

  <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
    <dependency>
        <groupId>org.apache.hadoop</
groupId> <artifactId>hadoop-common</artifactId> <version>2.7.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.7.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>2.7.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-common --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-common</artifactId> <version>2.7.2</version> </dependency>

   (3)此時可能會卡頓一段時間,Build workpath如果特別慢的話,請參考我前不久的一篇解決方法,等到maven中的依賴包下載install完畢即可

 4、編寫mapreduce中的wordcount程式碼

  程式碼此處不在累述,,簡單程式碼架構(紅色框的那個包)和內容如下:

        

  WCMapper類:  

package cn.edu.nupt.hadoop.mr.wordcount;

import java.io.IOException;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

// 4個泛型中,前兩個是指定的mapper輸入資料的型別
//map 和 reduce 的資料輸入輸出是以key-value的形式封裝的
//預設情況下,框架傳遞給我們的mapper的輸入資料中,key是要處理的文字中一行的其實偏移量,這一行的內容作為value
// JDK 中long string等使用jdk自帶的序列化機制,序列化之後會攜帶很多附加資訊,造成網路傳輸冗餘,
//        所以Hadoop自己封裝了一些序列化機制
public class WCMapper extends Mapper<LongWritable, Text, Text, LongWritable>{
    
    // mapreduce框架每讀一行就呼叫一次該方法
    @Override
    protected void map(LongWritable key, Text value,Context context)
            throws IOException, InterruptedException {
        //具體的業務寫在這個方法中,而且我們業務要處理的資料已經被該框架傳遞進來
        // key是這一行的其實偏移量,value是文字內容
        String line = value.toString();
        
        String[] words = StringUtils.split(line, " ");
        
        for(String word : words){
            
            context.write(new Text(word), new LongWritable(1));      
        }      
    } 
}
View Code

  WCReducer類: 

package cn.edu.nupt.hadoop.mr.wordcount;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class WCReducer extends Reducer<Text, LongWritable, Text, LongWritable>{
    
    // 框架在map處理完成之後,將所有的kv對快取起來,進行分組,然後傳遞一個組
    // <key,{value1,value2...valuen}>
    //<hello,{1,1,1,1,1,1.....}>
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values,Context context)
            throws IOException, InterruptedException {

        long count = 0;
        for(LongWritable value:values){
            
            count += value.get();
        }
        context.write(key, new LongWritable(count));
    }
}
View Code

  WCRunner類

package cn.edu.nupt.hadoop.mr.wordcount;

import org.apache.hadoop.conf.Configuration;
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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
/**
 * 
 *<p> WCRunner.java
 *    Description:<br/> 
 *    (1)用來描述一個作業<br/>
 *    (2)比如,該作業使用哪個類作為邏輯處理中的map,哪個作為reduce
 *    (3)還可以指定改作業要處理的資料所在的路徑
 *    (4)還可以指定作業輸出的路徑
 *<p>
 *    Company: cstor
 *
 *    @author zhuxy
 *    2016年8月4日 下午9:58:02
 */
public class WCRunner {

    public static void main(String[] args) throws Exception {
        
        Configuration conf = new Configuration();
        
        Job wcjob = Job.getInstance(conf);
        
        // 找到Mapper和Reducer兩個類所在的路徑
        //設定整個job所用的那些類在哪個jar下
        wcjob.setJarByClass(WCRunner.class);
        
        //本job使用的mapper和reducer類
        wcjob.setMapperClass(WCMapper.class);
        wcjob.setReducerClass(WCReducer.class);
        
        //指定reduce的輸出資料kv型別
        wcjob.setOutputKeyClass(Text.class);
        wcjob.setOutputValueClass(LongWritable.class);
        
        // 指定map的輸出資料的kv型別
        wcjob.setMapOutputKeyClass(Text.class);
        wcjob.setMapOutputValueClass(LongWritable.class);
        
//        
//        FileInputFormat.setInputPaths(wcjob, new Path("hdfs://master:9000/wc/input/testHdfs.txt"));
//        FileOutputFormat.setOutputPath(wcjob, new Path("hdfs://master:9000/wc/output7/"));

        FileInputFormat.setInputPaths(wcjob, new Path("file:///E:/input/testwc.txt"));
        FileOutputFormat.setOutputPath(wcjob, new Path("file:///E:/output3/"));
        
        wcjob.waitForCompletion(true);
    }
}
View Code

  此時程式碼張貼完畢。

 5、在CentOS的本地建立一個檔案,命名為testHdfs.txt(這個是我之前的測試檔案,內容不重要,名字不重要,一致即可),內容如下:

    hello java

    hello Hadoop

    hello world

  建立好後,將檔案上傳到hdfs檔案系統的/wc/input資料夾下面

  hadoop fs -put ./testHdfs.txt /wc/input

 6、在WCRunner類中,右擊Run as -->Java Application,出現如下錯誤:

  log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
  log4j:WARN Please initialize the log4j system properly.
  log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
  Exception in thread "main" java.lang.NullPointerException
      at java.lang.ProcessBuilder.start(ProcessBuilder.java:1012)
      at org.apache.hadoop.util.Shell.runCommand(Shell.java:483)
      at org.apache.hadoop.util.Shell.run(Shell.java:456)
      at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:722)
      at org.apache.hadoop.util.Shell.execCommand(Shell.java:815)
      at org.apache.hadoop.util.Shell.execCommand(Shell.java:798)

    ……

   at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1308)
     at cn.edu.nupt.hadoop.mr.wordcount.WCRunner.main(WCRunner.java:55)

  方法:在Hadoop的bin目錄下放winutils.exe,在環境變數中配置 HADOOP_HOME,把hadoop.dll拷貝到C:\Windows\System32下面即可

    注:此處最好將HADOOP_HOME/bin目錄新增到path中,這樣可以執行本地模式,即是上述程式碼中註釋的部分

 7、此時再次執行Run as -->Java Application,出現問題如下:  

  log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
  log4j:WARN Please initialize the log4j system properly.
  log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

  資料夾建立成功,但是資料夾下面沒有success 和 執行結果part*檔案,即/wc/output3下面沒內容(輸出結果)。

  解決辦法:點選windows-->perspective-->open perspective-->other-->MapReduce,Eclipse介面效果如下:

      

  並且在底部出現MapReduce Locations,效果如下:

    

相關推薦

win10+eclipse+hadoop2.7.2+maven+local模式直接通過Run as Java Application執行wordcount

一、準備工作  (1)Hadoop2.7.2 在linux部署完畢,成功啟動dfs和yarn,通過jps檢視,程序都存在  (2)安裝maven 二、最終效果  在windows系統中,直接通過Run as Java Application執行wordcount,而不需要先打包成jar包,然後在lin

eclipse配置hadoop2.7.2開發環境

amt res project star ast text package fin super   先安裝並啟動hadoop,怎麽弄見上文http://www.cnblogs.com/wuxun1997/p/6847950.html。這裏說下怎麽設置IDE來開發hadoop

hadoop2.7.2 win7 eclipse環境搭建測試

環境搭建參照上一篇hadoop2.7.2 win7基礎環境搭建。 Eclipse hadoop外掛下載2.7.2:http://download.csdn.net/detail/fly_leopard/9503172 將下載的檔案解壓,將jar包放到Eclipse/plug

Hadoop2.7.2文檔的學習-Yarn部分(4)Yarn Application

mat app nbsp desc pro .org 節點 option 對象 Writing YARN Applications Link:http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/

CentOS7安裝hadoop2.7.2 實現偽分散式 測試成功(親測教程)

CentOS7安裝hadoop2.7.2 實現偽分散式 測試成功(親測教程)   CentOS7安裝hadoop2.7.2 實現偽分散式 測試成功(親測教程) 經過幾天的嘗試,終於在CentOS7下安裝hadoop,實現偽分散式,並且測試成功 現在簡要的回訴一篇,以方便記憶

Hadoop2.7.2安裝與叢集搭建

1.環境準備 jdk需要1.7以上版本64位. 建立hadoop使用者. 在hadoop使用者目錄下解壓安裝包hadoop-2.7.2.tar.gz 2.配置免密碼登入 各節點分別執行 生成公鑰和私鑰:ssh-keygen -t rsa 四次enter. 將公鑰新增進公鑰庫:cat

hadoop2.7.6偽分佈模式配置

1、本文目標是在linux單機環境下配置hadoop2.7.6的偽分佈模式。 2、在hadoop-2.7.6/etc/hadoop目錄下修改如下配置檔案內容(如果沒有配置檔案,自己建立一個即可):2.1、core-site.xml: <configuration>   &

Linux Hadoop2.7.2 Hive2.3.2 安裝

Hive 是一個數據倉庫工具,曾經ETL是資料倉庫必備工具,DB2、ORACLE、SqlServer等資料庫廠商提供各種資料倉庫工具,網際網路的到來使這些資料庫工具略顯老態。 1.Hadoop環境 伺服器 主機名 I

Hadoop2.7.2 HBase2.0.0環境搭建

叢集配置 HBase – Hadoop Database,是一個高可靠性、高效能、面向列、可伸縮的分散式儲存系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化儲存叢集。 一、基礎環境 JDK    :1.8.0_65 (要求1

windows下安裝並啟動hadoop2.7.2

64位windows安裝hadoop沒必要倒騰Cygwin,直接解壓官網下載hadoop安裝包到本地->最小化配置4個基本檔案->執行1條啟動命令->完事。一個前提是你的電腦上已經安裝了jdk,設定了java環境變數。下面把這幾步細化貼出來,以

IntelliJ IDEA2018配置Hadoop2.7.2閱讀環境並執行偽分散式

1. 下載hadoop原始碼並編譯 $ sudo tar -zxvf hadoop-2.7.2-src.tar.gz 將解壓縮的原始碼包,複製到/usr/local目錄下: $ sudo cp -r

CentOS7+Hadoop2.7.2(HA高可用+Federation聯邦)+Hive1.2.1+Spark2.1.0 完全分散式叢集安裝

本文件主要記錄了Hadoop+Hive+Spark叢集安裝過程,並且對NameNode與ResourceManager進行了HA高可用配置,以及對NameNode的橫向擴充套件(Federation聯邦) 1VM網路配置 將子網IP設定為192.168.1.0: 將閘道器設定

Hadoop2.7.2之叢集搭建(單機)

下載安裝Hadoop 1、下載地址 http://hadoop.apache.org/releases.html 我下載的是2.7.2,官網在2.5之後預設提供的就是64位的,這裡直接下載下來用即可 2、安裝Hadoop tar -

通過Windows7對linux上的hadoop2.7.2進行程式設計開發

1.首先宣告,我沒有在windows上的eclipse上安裝MapReduce外掛,需要的話自己可以查詢。我只是介紹如何程式設計。 2.在linux上安裝完hadoop偽分散式或者全分散式之後,將主節點上的hadoop資料夾放置到磁碟上,如:d:/hadoop272。 下

hadoop2.7.2 window win7 基礎環境搭建

hadoop環境搭建相對麻煩,需要安裝虛擬機器過著cygwin什麼的,所以通過查資料和摸索,在window上搭建了一個,不需要虛擬機器和cygwin依賴,相對簡便很多。 下面執行步驟除了配置檔案有部分

Hadoop2.7.2高可用(HA)環境下Hbase高可用(HA)環境的搭建(在Ubuntu14.04下以root使用者進行配置)

Hadoop2.7.2高可用(HA)環境下Hbase高可用(HA)環境的搭建 轉載請註明出處:http://blog.csdn.net/qq_23181841/article/details/75095370 (在Ubuntu14.04下以root使用者進行配置) 下載

eclipse+hadoop2.7.5的map-reduce的API的配置

1.環境配置: a.將map reduce所需架包全部載入到eclipse下, b.將 鍵:HADOOP_USER_NAME 值:hadoop 配置到系統環境中,需要重新啟動。 c.將架包hadoop-eclipse-plugin-2.7.1.jar

Hadoop2.7.2之叢集搭建(高可用)

叢集規劃 主機名 ip 安裝的軟體 程序 hadoop01 192.168.1.101 jdk、hadoop NN、DFSZKFailoverController hadoop02 192.1

ubuntu 16.04搭建hadoop2.7.2(Vmware 12.0搭建完全分散式三臺虛擬機器)

此做法無實際意義,只是用來學習搭建過程和了解hadoop相關配置。 版本:Ubuntu16.04  hadoop2.7.2(一臺電腦開三臺虛擬機器完全分散式) 主結點:192.168.150.112 Caxiongyu1 從結點:192.168.150.113 Caix

Hadoop2.7.2+Hbase1.2.1分散式環境搭建整理

一.準備環境 1.1. 安裝包 1)準備4臺PC 2)安裝配置Linux系統:CentOS-7.0-1406-x86_64-DVD.iso 3)安裝配置Java環境:jdk-8u91-linux-x64.gz 4)安裝配置Hadoop:hadoop-2.7.2-x64.ta