IDEA接口远程连接Hadoop集群执行Mapreduce程序(实验后复盘)

115 阅读1分钟

windows操作

配置windows登录集群用户

在已有HADOOP_HOME环境的前提下,配置windows登录的用户名,打开高级系统设置->环境变量->新建系统变量->变量值输入自己的集群用户名,然后一路点击“确定”退出。 image.png 如果之前运行的时候有这个报错 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.xml core-site.xml yarn-site.xml mapred-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的话可以检查下这里。

image.png

参考文章:

问题:Permission denied: user=dr.who, access=WRITE, inode=“/“:hadoop:supergroup:drwxr-xr-x_hadoop:supergroup:drwx-------CSDN博客

IDEA 提交 MapReduce 到 Hadoop 集群的 Yarn 上运行_用idea直接提交mapreduce-CSDN博客