1、ubantu16.04 + hadoop2.7.3 + eclipse单机伪分布环境配置

1.搭建hadoop环境
这步网上的文章一大堆,下面是简化版的操作步骤
(此处省略一个免密钥登陆的过程,百度上有很多)

第一步:下载java_jdk  下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,下好之后解压到/usr/local/java/路径下,这时你的/usr/local/java/路径下应该有一个jdk开头的文件。
  接下来将设置bash环境变量
  输入命令:vim  ~/.bashrc
  文件末尾加入 
   export JAVA_HOME=/usr/local/java/jdk1.8.0_151
   export JRE_HOME=$JAVA_HOME/jre
   export CLASSPATH=.:$JAVA_HOME/lib
   export PATH=$PATH:$JAVA_HOME/bin
   接着保存退出
   为了让文件生效需要输入  source ~/.bashrc
   在终端中输入Java -version可以看到java的版本等信息,证明已经安装成功

第二步:下载hadoop-2.7.3  下载地址  https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/   下载hadoop-2.7.3.tar.gz就行了,下载好后,解压hadoop-2.7.3.tar.gz到/usr/local/路径下 ,之后重命名hadoop-2.7.3为hadoop
      接下来继续设置环境变量
      输入命令 vim /etc/profile
      文件末尾加入
      JAVA_HOME=/usr/local/java/jdk1.8.0_151
      PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
      export JAVA_HOME
      export PATH
      export HADOOP_HOME=/usr/local/hadoop
      export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
      接着保存退出
      输入命令 source /etc/profile 使文件生效
      在终端中输入 hadoop version可以看到hadoop的信息,证明安装成功
第三步:配置hadoop文件
   简单说一下单机环境的原理,hadoop由三个框架组成hdfs + mapreduce + yarn,在hdfs由namenode和datanode组成,文件上传hdfs后会被切块保存在datanode中,namenode的内存中保存着的datanode中文件的目录,单机环境中namenode和datanode都是本机。yarn负责分配计算资源可以不用计较太多,只需要把mapreduce的分配工作交给yarn就行了。
   输入命令 cd  /usr/local/hadoop/etc/hadoop/中,可以看见一堆文件,他们大多都是hadoop的配置文件。
   输入命令 vim hadoop-env.sh   找到JAVA_HOME=${JAVA_HOME}把它改成JAVA_HOME=/usr/local/java/jdk1.8.0_151

   输入命令 vim core-site.xml ,在<configuration></configuration>之间加入
  <property>
     <name>dfs.tmp.dir</name>
     <value>/usr/local/hadoop/tmp</value>
 </property>
 <property>
     <name>fs.defaultFS</name>
      <value>hdfs://localhost:9000</value>
 </property>

  输入命令 vim hdfs-site.xml,在<configuration></configuration>之间加入
    <property>
     <name>dfs.replication</name>
      <value>1</value>
  </property>
  <property>
      <name>dfs.namenode.name.dir</name>
      <value>/usr/local/hadoop/tmp/dfs/name</value>
  </property>
  <property>
      <name>dfs.datanode.data.dir</name>
      <value>/usr/local/hadoop/tmp/dfs/data</value>
  </property>

  输入命令 vim mapre-site.xml.template,在<configuration></configuration>之间加入
  <property>
     <name>mapreduce.framework.name</name>
      <value>yarn</value>
  </property>
  保存退出后,需要将mapre-site.xml.template 重命名为 mapre-site.xml

  输入命令 vim yarn-site.xml,在<configuration></configuration>之间加入
  <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
  </property>
  第四步 输入命令 hadoop namenode -format 格式化一下namenode中的信息,之后输入命令start-all.sh,即可打开hadoop的所有服务。
 在命令行中输入jps,可以看到namenode/datanode resourcemanager等各种服务已经起来了,证明单机环境已经配置成功。

2.eclipse环境配置
hadoop环境起来了,但是我们要怎么来使用hadoop呢?hadoop支持很多语言,java就是其中一种(这其实是废话,因为hadoop就是java写的)。hadoop提供了很多原生的api供我们使用,比如FileSystem,Configuration中有很多的接口,但是我们在使用hadoop时还需要对它们进行包装一下,这样比较安全,也能实现更多的功能。
在编写java程序时,我们需要把他打包成jar文件,eclipse能够帮助我们快速的把一个Java项目打包成一个jar包。当然还可以直接在eclipse中进行调试。
首先下载一个eclipse,下载地址:https://www.eclipse.org/downloads/download.php?file=/oomph/epp/oxygen/R2/eclipse-inst-linux64.tar.gz
下载之后直接解压得到一个eclipse文件夹,并且下一个插件hadoop-eclipse-plugin-2.7.3.jar
把下载好的hadoop-eclipse-plugin-2.7.3.jar放到eclipse文件夹中的plugins中。
打开eclipse,点击导航栏里的window的preferences


在左侧选择hadoop Map/Reduce,在右侧中设置hadoop的文件路径为/usr/local/hadoop

点击window中的Open perspective,在其中选择Map/Reduce

然后点击下方的Map/Reduce Location,右键下方的空白,点击New HadoopLocation

在跳出的对话框中进行如下设置:

现在在左侧的Project Explorer中的DFSLocations已经连接到了本机的HDFS中,可以在这里管理HDFS中的文件。


在导航栏中选择File->New->Project,选择Map/ReduceProject。



点击NEXT



点击FINISH。右键Project Explorer中的WordCount中的src,点击new,点击class。

点击FINISH。在MyWordCount中输入下面的代码:

package org.apache.hadoop.examples;

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

import org.apache.hadoop.conf.Configuration;
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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class MyWordCount {

public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
        StringTokenizer itr = new StringTokenizer(value.toString());
        while (itr.hasMoreTokens()) 
        {
            word.set(itr.nextToken());
            context.write(word, one);
        }
    }
}

public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> 
{
    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException 
    {
        int sum = 0;
        for (IntWritable val : values) 
        {
            sum += val.get();
        }
        result.set(sum);
        context.write(key, result);
    }
}

public static void main(String[] args) throws Exception 
{
    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "word count");
    job.setJarByClass(MyWordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}

在代码中点击右键,点击Run as,选择 Run Configuration,设置Main和Arugments

保存关掉,之后把文件上传到hdfs,使用命令 hdfs dfs -put 你的文件路径 hdfs://localhost:9000/input/ ,右键点击Run as -> run on hadoop,程序就跑起来了,输出可以在DFSlocation中进行查看,refresh后发现多出一个output文件夹,输出结果就在里面。

我们接下来尝试将Java工程打包成jar文件,通过hadoop jar命令来使用这个Jar包,可以达到同样的效果。首先先把hdfs中的output删掉,在eclipse中删除就可以,也是可以用命令。
之后我们点击导航栏中的file->Export,在弹出的对话框中选择JAVA->JAR file

具体的输出路径自己设置就行了,我自己输出的jar包名字是wc.jar
切换到jar包所在目录,输入命令 hadoop jar wc.jar org.apache.hadoop.examples.MyWordCount hdfs://localhost:9000/input/你的文件 hdfs://localhost:9000/output

OK~大功告成!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容