使用JavaAPI創建目錄和HDFS的權限問題


package demo;

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

/*
 * 使用HDFS的Java API創建一個目錄
 * 
 * 權限的問題:
 * org.apache.hadoop.security.AccessControlException: Permission denied: 
 * user=lenovo, access=WRITE, inode="/folder1":root:supergroup:drwxr-xr-x
 * 
 * 四種辦法解決:
 * 1、設置執行程序的用戶是:root(HADOOP_USER_NAME)
 * 2、使用Java的-D參數: HADOOP_USER_NAME
 * 3、使用命令改變目錄的權限:hdfs dfs -chmod 777 /folder2
 * 4、參數:dfs.permissions  ---> false
 */
public class TestDemo1 {

    @Test
    public void test1() throws Exception{
        //辦法一:設置執行程序的用戶是:root
        System.setProperty("HADOOP_USER_NAME", "root");
        
        //指定NameNode地址
        Configuration conf = new Configuration();
        //如果要使用主機名,需要配置Windows的host文件
        //C:\Windows\System32\drivers\etc\hosts文件
        conf.set("fs.defaultFS", "hdfs://bigdata11:9000");
        
        /*
         * 還有一種寫法:IP地址
         * conf.set("fs.defaultFS", "hdfs://192.168.157.11:9000");
         */
        
        //創建一個HDFS的客戶端
        FileSystem client = FileSystem.get(conf);
        //創建目錄
        client.mkdirs(new Path("/folder1"));
        
        //關閉客戶端
        client.close();
    }
}

 

 

 

方法2:

 

@Test
    public void test2() throws Exception{
        //指定NameNode地址
        Configuration conf = new Configuration();
        //如果要使用主機名,需要配置Windows的host文件
        //C:\Windows\System32\drivers\etc\hosts文件
        conf.set("fs.defaultFS", "hdfs://bigdata11:9000");
        
        /*
         * 還有一種寫法:IP地址
         * conf.set("fs.defaultFS", "hdfs://192.168.157.11:9000");
         */
        
        //創建一個HDFS的客戶端
        FileSystem client = FileSystem.get(conf);
        //創建目錄
        client.mkdirs(new Path("/folder2"));
        
        //關閉客戶端
        client.close();
    }

 

 

 

 

 


 

方法3:

 

 

@Test
    public void test3() throws Exception{
        //指定NameNode地址
        Configuration conf = new Configuration();
        //如果要使用主機名,需要配置Windows的host文件
        //C:\Windows\System32\drivers\etc\hosts文件
        conf.set("fs.defaultFS", "hdfs://bigdata11:9000");
        
        /*
         * 還有一種寫法:IP地址
         * conf.set("fs.defaultFS", "hdfs://192.168.157.11:9000");
         */
        
        //創建一個HDFS的客戶端
        FileSystem client = FileSystem.get(conf);
        //創建目錄
        client.mkdirs(new Path("/folder2/folder3"));
        
        //關閉客戶端
        client.close();
    }

 

 

 

 

 


 

 

 使用JavaAPI創建目錄和HDFS的權限問題

 

Java API

通過 HDFS 提供的 JavaAPI,我們可以完成以下的功能:
1. 在 HDFS 上創建目錄
2. 通過 FileSystemAPI 讀取數據(下載文件)
3. 寫入數據(上傳文件)
4. 查看目錄及文件信息
5. 查找某個文件在 HDFS 集群的位置
6. 刪除數據
7. 獲取 HDFS 集群上所有數據節點信息

(1)創建一個目錄:mkdir ----> 告訴:權限的問題
(2)上傳數據、下載數據
(3)查詢數據的元信息
依賴的jar包:
/root/training/hadoop-2.7.3/share/hadoop/common
/root/training/hadoop-2.7.3/share/hadoop/common/lib
/root/training/hadoop-2.7.3/share/hadoop/hdfs
/root/training/hadoop-2.7.3/share/hadoop/hdfs/lib

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM