在Linux环境下运行MapReduce是处理大数据的关键技能之一。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。它通过将数据分成小块,对每一小块进行并行处理,最后合并结果。以下是详细的步骤和指南,帮助您在Linux下轻松运行MapReduce。
1. 安装Hadoop
Hadoop是MapReduce的一个开源框架,用于处理大规模数据集。以下是安装Hadoop的步骤:
1.1 下载Hadoop
访问Hadoop官网下载适合您Linux版本的Hadoop安装包。
wget http://mirror.cogentco.com/pub/apache/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
1.2 解压安装包
将下载的Hadoop安装包解压到指定目录。
tar -xvf hadoop-3.3.4.tar.gz -C /usr/local/hadoop
1.3 配置环境变量
在.bashrc
文件中添加Hadoop的环境变量。
echo 'export HADOOP_HOME=/usr/local/hadoop' >> ~/.bashrc
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
source ~/.bashrc
1.4 配置Hadoop
编辑/usr/local/hadoop/etc/hadoop/hadoop-env.sh
文件,设置Java环境。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.x86_64
编辑/usr/local/hadoop/etc/hadoop/core-site.xml
文件,配置Hadoop的存储目录。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
编辑/usr/local/hadoop/etc/hadoop/hdfs-site.xml
文件,配置HDFS的存储目录。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
编辑/usr/local/hadoop/etc/hadoop/yarn-site.xml
文件,配置YARN的存储目录。
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2. 格式化HDFS
在启动Hadoop之前,需要格式化HDFS。
hdfs dfs -format
3. 启动Hadoop服务
启动Hadoop服务,包括NameNode、DataNode和ResourceManager。
start-dfs.sh
start-yarn.sh
4. 编写MapReduce程序
使用Java编写MapReduce程序,例如:
public class WordCount {
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(WordCount.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);
}
}
5. 运行MapReduce程序
将编写的MapReduce程序打包成jar文件,然后运行。
hadoop jar wordcount.jar wordcount /input /output
6. 查看结果
查看HDFS中的输出结果。
hdfs dfs -cat /output/*
通过以上步骤,您可以在Linux下轻松运行MapReduce,解锁大数据处理新技能。