【分布式】hadoop安装篇(6)Java API的验证

Maven

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.9.0</version>
</dependency>

或者我们整理一并整理log部分

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.9.0</version>
    <exclusions>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency> 

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.11.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.11.0</version>
    <scope>runtime</scope>
 </dependency>

在我的实验中,hadoop在maven中的自动引入相关jar包出现问题,报了下面的错误:

The container 'Maven Dependencies' references non existing library 'D:\develope\apache-maven-3.3.9\repo\jdk\tools\jdk.tools\1.8\jdk.tools-1.8.jar'

仅就这个错误而言,可以下面的引入而进行修正:

<dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.8</version>
    <scope>system</scope>
    <systemPath>C:\Program Files\Java\jdk1.8.0_66\lib\tools.jar</systemPath>
</dependency>

但是解决这个问题,又涉及到其他jar包的引入,诸如下面的错误接踵而来,如果我们每个依次添加,那还要maven干什么。

The container 'Maven Dependencies' references non existing library 'D:\develope\apache-maven-3.3.9\repo\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar'
The container 'Maven Dependencies' references non existing library 'D:\develope\apache-maven-3.3.9\repo\com\google\code\gson\gson\2.2.4\gson-2.2.4.jar'
The container 'Maven Dependencies' references non existing library 'D:\develope\apache-maven-3.3.9\repo\com\jcraft\jsch\0.1.54\jsch-0.1.54.jar'

解决方式如下:项目-》右键-》Runs As-》Maven install,如果仍如出问题,尝试下面的解决方式:

  • 如果有默认的JUnit 3版本,可以考虑删去。
  • 注销掉hadoop-client,保存后,清除加入的jar包,然后再重新加入,然后执行Maven install
  • 执行Maven clear,然后执行Maven install

【注】在使用Hadoop 3.1.0版本也出现类似的问题,同样方式可以解决。

小例子代码

小例子将在hdfs的文件系统中创建一个文件夹。

我们将使用hadoop中common和ndfs的jar包。如果我们不采用maven,可以将下面的jar包直接引入到项目中即可

/share/hadoop/common/*.jar
/share/hadoop/common/lib/*.jar
/share/hadoop/ndfs/*.jar
/share/hadoop/ndfs/lib/*.jar

但是有maven,为何不用。小例子代码很简单

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class App 
{
    public static void main( String[] args ) throws IOException
    {
        //设置Namenode的地址
        Configuration config = new Configuration();
        config.set("fs.defaultFS", "hdfs://191.8.2.45:9000");
    	
        //获取HDFS的文件系统
        FileSystem fs = FileSystem.get(config);
        fs.mkdirs(new Path("floder1"));
    }
}

执行时,报错:

Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=WeiYQ, access=WRITE, inode="/user":wei:supergroup:drwxr-xr-x
       at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:342)
       at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:251)
       at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:189)
       ......

每个用户都有自己的权限范围,由于我是在Windows机器的eclipse上进行开发,Windows的机器名字为WeiYQ,因此在这个简单的例子中,默认以WeiYQ来进行登录,目录将建立在/user/WeiYQ/floder1。我们之前已经建立了/user目录,现在建立/user/WeiYQ,修改它的权限或者owner,简单地执行:

$ hdfs dfs -mkdir /user/WeiYQ
$ hdfs dfs -chown WeiYQ /user/WeiYQ
重新执行,成功。


猜你喜欢

转载自blog.csdn.net/flowingflying/article/details/80759608