windows操作
配置windows登录集群用户
在已有HADOOP_HOME环境的前提下,配置windows登录的用户名,打开高级系统设置->环境变量->新建系统变量->变量值输入自己的集群用户名,然后一路点击“确定”退出。
如果之前运行的时候有这个报错
Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=СÐÂ, access=WRITE, inode="/":${user name}:supergroup:drwxr-xr-x那通过以上操作应该可以解决了:(关闭hdfs权限不如这个好用,那个我试的时候还是不成功)
这一步结束要重启IDEA才能生效!
集群所在机器操作
配置网页访问用户
在Linux中修改hadoop的配置文件vim $HADOOP_HOME/etc/hadoop/core-site.xml,添加如下配置
<property>
<name>hadoop.http.staticuser.user</name>
<value>${user name}</value>
</property>
修改成功后保存并重启集群stop-yarn.sh&stop-all.sh->start-yarn.sh&start-all.sh,这样在浏览器中打开hdfs时就不再是匿名用户访问了。
以上操作能解决在查看browse directory时,点击tmp,无法进入,报错:Permission denied: user=dr.who, access=READ_EXECUTE, inode="/tmp":student:supergroup:drwx------的问题。
IDEA上操作
添加并修改配置文件
- 从Linux上将
hdfs-site.xmlcore-site.xmlyarn-site.xmlmapred-site.xml下载到本地并放到项目的/src/main/resources/路径下 - 在
mapred-site.xml中设置跨平台,添加如下代码
<property>
<name>mapreduce.app-submission.cross-platform</name>
<value>true</value>
</property>
maven项目的环境配置
pom.xml文件
在<project></project>中插入
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-jobclient</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
log4j.properties文件
写入如下内容
log4j.rootLogger=INFO, stdout, console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%m%n
项目结构(关于打包)
最后还有一个有点蠢的点是我把Mapreduce的文件夹放错位置了导致打包出来找不到类,正确的结构如下图,如果你的程序出现这个错误Caused by:java.lang.ClassNotFoundException::Class xxx not found的话可以检查下这里。
参考文章:
IDEA 提交 MapReduce 到 Hadoop 集群的 Yarn 上运行_用idea直接提交mapreduce-CSDN博客