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