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应用程序。
- 首先,创建一个输入文件
input.txt
,并将其内容设置为:
Hello Hadoop!
- 然后,使用以下命令将
input.txt
文件复制到Hadoop的分布式文件系统中:
$ hdfs dfs -put input.txt /input
- 接下来,创建一个简单的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);
}
}
- 编译并运行应用程序:
$ hadoop com.sun.tools.javac.Main WordCount.java
$ jar cf wc.jar WordCount*.class
$ hadoop jar wc.jar WordCount
- 最后,使用以下命令查看输出结果: