Hadoop环境变量配置

Hadoop是一个开源的分布式存储和计算框架,用于处理大规模数据集。在使用Hadoop之前,我们需要正确配置Hadoop的环境变量,以确保系统能够正确识别到Hadoop的命令和路径。

配置步骤

步骤一:下载Hadoop

首先,我们需要从Hadoop官方网站下载最新版本的Hadoop。下载完成后,解压文件到一个合适的目录,比如/usr/local/hadoop

步骤二:编辑配置文件

Hadoop的环境变量配置位于/usr/local/hadoop/etc/hadoop目录下的hadoop-env.sh文件中。我们需要编辑这个文件来配置Hadoop的环境变量。

使用以下命令打开hadoop-env.sh文件:

$ sudo vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh

在文件中找到以下行,将其注释掉:

# export HADOOP_HOME=

然后,添加以下行来配置HADOOP_HOME环境变量:

export HADOOP_HOME=/usr/local/hadoop

步骤三:配置PATH变量

在终端中执行以下命令打开.bashrc文件:

$ sudo vi ~/.bashrc

在文件的末尾添加以下行来配置Hadoop的PATH变量:

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

然后执行以下命令使配置生效:

$ source ~/.bashrc

步骤四:验证配置

我们可以通过运行以下命令来验证Hadoop环境变量的配置是否成功:

$ hadoop version

如果成功配置,你应该能够看到Hadoop的版本信息。

示例

为了进一步验证Hadoop的环境变量配置是否成功,我们可以尝试运行一个简单的Hadoop应用程序。

  1. 首先,创建一个输入文件input.txt,并将其内容设置为:
Hello Hadoop!
  1. 然后,使用以下命令将input.txt文件复制到Hadoop的分布式文件系统中:
$ hdfs dfs -put input.txt /input
  1. 接下来,创建一个简单的MapReduce应用程序,将输入文件中的每一行都转换为大写并输出。

创建一个名为WordCount.java的文件,并将以下代码复制到文件中:

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.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 WordCount {

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

    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().toUpperCase());
        context.write(word, new Text(""));
      }
    }
  }

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

    public void reduce(Text key, Iterable<Text> values,
                       Context context
                       ) throws IOException, InterruptedException {
      result.set("");
      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(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(Text.class);
    FileInputFormat.addInputPath(job, new Path("/input"));
    FileOutputFormat.setOutputPath(job, new Path("/output"));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}
  1. 编译并运行应用程序:
$ hadoop com.sun.tools.javac.Main WordCount.java
$ jar cf wc.jar WordCount*.class
$ hadoop jar wc.jar WordCount
  1. 最后,使用以下命令查看输出结果: