【分佈式】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
重新執行,成功。


發佈了824 篇原創文章 · 獲贊 520 · 訪問量 539萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章