Myeclipse运行Hadoop(适合新手阅读)

Myeclipse运行Hadoop(适合新手阅读)

很久不写东西了,最近一直在对大数据进行研究,研究了几天搭建了一套简单的Hadoop环境,连接Myeclipse,并成功地运行了Hello World。
希望这篇文章可以帮助到初学者完成Hello World,也算是成功地踏出第一步。
一步一步跟着做,不放弃,就可以成功。

  • 首先要有一套Linux环境
  • 伪分布式Hadoop模式
  • Myeclipse连接Hadoop
  • 编写第一个MapReduce
  • 调试并运行HelloWorld

首先要有一套Linux环境

工欲善其事必先利其器,搭建一套Linux环境是一切的基础。

这里采用的是虚拟机Linux:
1.安装VMware Workstation(以下简称VM)这里写图片描述

2.在VM中安装Ubuntu 64位系统,版本为【ubuntu-16.04.1-server-amd64.iso】
具体安装步骤,可以参照Ubuntu安装教程

3.安装好后,登录Linux,表示安装成功
这里写图片描述

4.安装两款比较实用的工具
Xshell这里写图片描述
用于可以远程连接Linux,操作起来要比直接操作虚拟机方便很多
Xftp这里写图片描述
用于向Linux中传输文件、安装包等,如果熟练也可以直接拷贝至虚拟机内

完成以上步骤,一台Linux环境就搭建好了。


伪分布式Hadoop模式

在Linux上安装并运行Hadoop。

这里使用的版本是JDK1.6/Hadoop-1.0.3(截止到发稿时Hadoop的最新版本已经是2.6.5,这里使用1.0.3全当是做为学习使用):

安装JDK 1.6
1.下载JDK,版本为【jdk-6u27-linux-x64.bin】,使用Xftp拷贝到Linux中(这里安装目录为/usr/lib/jvm/jdk)
注:尽量使用root用户拷贝,普通用户可能导致没有权限的问题

2.进入JDK的安装目录,并输入命令

chmod u+x jdk-6u27-linux-x64.bin

注:如果提示权限错误,在此命令前加 sudo,使用root用户则不用加

3.修改权限后可以进行安装,输入命令

-s ./jdk-6u27-linux-x64.bin

4.配置环境变量

a) 打开配置文件

vim /etc/profile 

b) 输入如下内容

\#set Java Enviorment
export JAVA_HOME=/usr/lib/jvm/jdk/jdk1.6.0_27
export CLASSPATH=".:\$JAVA_HOME/lib:\$CLASSPATH"
export PATH="\$JAVA_HOME/bin:\$PATH"

c) 让配置生效

source /ect/profle

c) 验证是否安装成功

java -version

出现JDK版本信息
这里写图片描述

安装并运行Hadoop
这里采用比较简单的伪分布式配置,仅用于学习,真实环境应部署集群

1.下载Hadoop,版本为【hadoop-1.0.3.tar.gz】,使用Xftp拷贝到Linux中(这里安装目录为/home/suych)

tar -zxvf hadoop-1.0.3.tar.gz

2.进入Hadoop的安装目录的conf文件夹,修改配置文件hadoop-env.sh,输入如下内容

export JAVA_HOME=/usr/lib/jvm/jdk/jdk1.6.0_27

3.配置HDFS(Hadoop的分布式文件系统)的地址及端口号,修改配置文件core-site.xml(同在conf文件夹中)

<configuration>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://192.168.237.130:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/suych/hadoop_tmp/dfs</value>
        </property>
</configuration>

4.配置HDFS,修改配置文件hdfs-site.xml(同在conf文件夹中)

<configuration>
         <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.name.dir</name>
                <value>/home/suych/hadoop_tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.data.dir</name>
                <value>/home/suych/hadoop_tmp/dfs/data</value>
        </property>
</configuration>

5.配置MapReduce,修改配置文件mapred-site.xml(同在conf文件夹中)

<configuration>
        <property>
                <name>mapred.job.tracker</name>
                <value>192.168.237.130:9001</value>
        </property>
</configuration>

6.格式化Hadoop的文件系统HDFS,在Hadoop文件夹中输入命令

bin/hadoop namenode -format

7.启动Hadoop,输入命令

bin/start-all.sh

8.打开浏览器,输入网址
http://ip:50030(MapReduce的页面)
这里写图片描述
http://ip:50070(HDFS的页面)

这里写图片描述

完成以上步骤,一套伪分布式Hadoop就搭建好了。


Myeclipse连接Hadoop

在Myeclipse上安装Hadoop插件。

这里使用的Myeclipse版本是【Myeclipse 10】。

安装Myeclipse的Hadoop插件
1.下载插件,版本为【hadoop-eclipse-plugin-1.0.3.jar】,放在文件夹

D:\Program Files (x86)\MyEclipse\MyEclipse 10\dropins\plugins

这里写图片描述

2.在Windows->Preferences中,选择Hadoop Map/Reduce,设置好Hadoop的安装目录(把Hadoop安装包解压到本地一份)
这里写图片描述

3.新建一个Map/Reduce Project
这里写图片描述

4.新建Map/Reduce Project后,会生成如下的两个目录, DFS Locations和Hadoop的Java工程
这里写图片描述

5.在Map/Reduce Locations视图中新建Hadoop Location
这里写图片描述

6.配置Hadoop Location信息
这里写图片描述

7.保存后重新编辑刚才建立的Location,编辑advance parameters tab页
(重启编辑advance parameters tab页原因:在新建连接的时候,这个advance paramters tab页面的一些属性会显示不出来,显示不出来也就没法设置,所以必须保存后再编辑才能看到)
这里大部分的属性都已经自动填写上了,其实就是把core-defaulte.xml、hdfs-defaulte.xml、mapred-defaulte.xml里面的一些配置属性展示出来。因为在安装hadoop的时候,其site系列配置文件里有改动,所以这里也要弄成一样的设置。
这里写图片描述
这里写图片描述
然后点击Finish,连接成功(保证Hadoop进程已经启动)
这里写图片描述

完成以上步骤,Myeclipse和Hadoop之间的连接就建立好了。


编写第一个MapReduce

开发第一个MapReduce程序

编写如下代码:

package com.pcd.hadoop;

import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;

public class WordCount {

    public static class Map extends MapReduceBase implements
            Mapper<LongWritable, Text, Text, IntWritable> {
        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();

        @Override
        public void map(LongWritable key, Text value,
                OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException {
            String line = value.toString();
            StringTokenizer tokenizer = new StringTokenizer(line);
            while (tokenizer.hasMoreTokens()) {
                word.set(tokenizer.nextToken());
                output.collect(word, one);
            }
        }
    }

    public static class Reduce extends MapReduceBase implements
            Reducer<Text, IntWritable, Text, IntWritable> {

        @Override
        public void reduce(Text key, Iterator<IntWritable> values,
                OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException {
            int sum = 0;
            while (values.hasNext()) {
                sum += values.next().get();
            }
            output.collect(key, new IntWritable(sum));
        }
    }

    public static void main(String[] args) throws IOException {
        JobConf conf = new JobConf(WordCount.class);
        conf.setJobName("wordcount");

        conf.setOutputKeyClass(Text.class);
        conf.setOutputValueClass(IntWritable.class);

        conf.setMapperClass(Map.class);
        conf.setReducerClass(Reduce.class);

        conf.setInputFormat(TextInputFormat.class);
        conf.setOutputFormat(TextOutputFormat.class);

        FileInputFormat.setInputPaths(conf, new Path(args[0]));
        FileOutputFormat.setOutputPath(conf, new Path(args[1]));

        JobClient.runJob(conf);
    }

}

调试并运行HelloWorld

调试HelloWorld

上传模拟数据文件夹

为了运行程序,需要一个输入的文件夹和输出的文件夹。输出文件夹,在程序运行完成后会自动生成。我们需要给程序一个输入文件夹。

1.在当前目录(如hadoop安装目录)下新建文件夹input,并在文件夹下新建两个文件file1、file2,这两个文件内容分别如下:

file1

Hello World Bye World 

file2

Hello Hadoop Goodbye Hadoop  

注:文件名可以不要尾缀。

2.将文件夹input上传到分布式文件系统中。
在Hadoop文件夹中,输入如下命令

bin/hadoop fs -put input in  

注:可能遇到因为多次格式化HDFS,所导致的问题。
需要修改/home/suych/hadoop_tmp/dfs/data/current目录中VERSION文件,把datanode的namespaceID和namenode的namespaceID,修改成一致即可。

配置运行参数
1.在新建的项目WordCount,点击WordCount.java,右键–>Run As–>Run Configurations
2.在弹出的Run Configurations对话框中,点Java Application,右键–>New,这时会新建一个application名为WordCount
3.配置运行参数,点Arguments,在Program arguments中输入“你要传给程序的输入文件夹和你要求程序将计算结果保存的文件夹”
这里写图片描述

点击Run,运行程序
1.在控制台可以看到如下结果
这里写图片描述

2.在Myeclipse的DFS Locations中可以看到运行程序(统计word)的结果
这里写图片描述

完成以上步骤,HelloWorld程序就调通了。

本文参考下面两个链接,感谢他们,前人栽树,后人乘凉。
Hadoop Eclipse开发环境搭建
myeclipse配置hadoop开发环境

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值