前提
1.yarn-site.xml配置
yarn.nodemanager.aux-services
mapreduce_shuffle
2.解决HDFS权限问题
System.setProperty("HADOOP_USER_NAME","root")
dfs.permissions.enabled
false
MR执行环境
1.本地测试环境(IDEA)
- 本地测试以多线程方式模拟服务器运行,无需开启集群
- IDEA内创建Java项目,并导入依赖
1.8
2.7.1
org.apache.hadoop
hadoop-hdfs
${hadoop.version}
org.apache.hadoop
hadoop-common
${hadoop.version}
org.apache.hadoop
hadoop-client
${hadoop.version}
org.apache.hadoop
hadoop-mapreduce-client-core
${hadoop.version}
org.apache.hadoop
hadoop-mapreduce-client-jobclient
${hadoop.version}
- 编写输入数据在本地,注意程序运行起来输出目录会被删一次,所以最好创建一个新的目录,输出目录不用手动创建,程序运行时会自动创建
- 编写WorkCount程序代码
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;
import java.io.IOException;
import java.util.StringTokenizer;
public class WordCount {
public static class TokenizerMapper
extends Mapper
- 观察E:HadoopMRDataoutput目录下的输出数据
2.直接在服务器使用命令的方式调用
- 程序的执行过程也在服务器上
- IDEA内创建Java项目,并导入依赖
1.8
2.7.1
org.apache.hadoop
hadoop-core
1.2.1
org.apache.maven.plugins
maven-jar-plugin
2.4
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;
import java.io.IOException;
import java.util.StringTokenizer;
public class WordCount {
public static class TokenizerMapper
extends Mapper
- 打包
- 将打好的包放到Linux中
- hdfs中创建输入目录,不要创建输出目录否则失败
- 编写输入数据在hdfs
- jar在hadoop上运行,命令格式:hadoop jar xxx.jar 类名 输入路径 输出路径
- web观察http://node3:8088/有任务在进行,运行完后观察输出数据
下篇讲讲MR小案例