問題描述:
(1)運行copyToLocalFile文件下載,win10電腦出現空指針報錯,文件可以下載下來,但是內容是空的
解決措施:
方法一:(不建議使用)
(1)這是一種暫時性回避錯誤方法,有些文件(特指使用java新建的文本)下載后打開是亂碼。
將:fileSystem.copyToLocalFile(src,dst);
改為:fileSystem.copyToLocalFile(false,src,dst,true);
方法二:
(2)配置環境變量
文件打開后依舊亂碼(特指使用java新建的文本),而通過命令行上傳的文件不是亂碼(未解決)
下載對應版本的winutils.exe、hadoop.dll
我的hadoop版本是:hadoop-2.6.0-cdh5.15.1
我的winutils.exe、hadoop.dll下載的版本是:2.7.6
將下載好的bin文件夾(包含winutils.exe、hadoop.dll)放入G:\BaiduNetdiskDownload\hadoop2.7.6
設置環境變量:
用戶變量:
變量名:HADOOP_HOME
變量值:G:\BaiduNetdiskDownload\hadoop2.7.6
系統變量:
變量名:Path
變量值:%HADOOP_HOME%\bin;
將hadoop.dll放進C:\Windows\System32中
重新啟動電腦。
1 package com.imooc.bigdata.hadoop.hdfs; 2 3 import org.apache.hadoop.conf.Configuration; 4 import org.apache.hadoop.fs.FSDataOutputStream; 5 import org.apache.hadoop.fs.FileSystem; 6 import org.apache.hadoop.fs.Path; 7 import org.apache.hadoop.io.IOUtils; 8 import org.apache.hadoop.util.Progress; 9 import org.apache.hadoop.util.Progressable; 10 import org.junit.After; 11 import org.junit.Before; 12 import org.junit.Test; 13 14 import java.io.BufferedInputStream; 15 import java.io.File; 16 import java.io.FileInputStream; 17 import java.io.InputStream; 18 import java.net.URI; 19 20 /** 21 * 使用Java API操作HDFS文件系統 22 * 23 * 因為是放在test下面,所以最好使用單元測試的方式 24 * 在pom中引入的jUnit單元測試的方式 25 * 單元測試有兩個方法:(1)在單元測試之前進行;(2)在單元測試之后進行 26 * 27 * 關鍵點: 28 * 1)創建Configuration 29 * 2)獲取FileSystem 30 * 3)剩下的是HDFS API的操作 31 */ 32 33 public class HDFSApp { 34 35 36 public static final String HDFS_PATH = "hdfs://hadoop000:8020"; 37 //Configuration、FileSystem是每一個方法使用之前必須構建的 38 Configuration configuration = null; 39 FileSystem fileSystem = null; 40 41 @Before 42 public void setup() throws Exception{ 43 System.out.println("-----setup-----"); 44 configuration = new Configuration(); 45 configuration.set("dfs.replication", "1"); 46 /* 47 *構造一個訪問指定HDFS系統的客戶端對象 48 * 第一個參數:HDFS的URI 49 * 第二個參數:客戶端指定的配置參數 50 * 第三個參數:客戶的用戶名 51 */ 52 fileSystem = FileSystem.get(new URI("hdfs://hadoop000:8020"), configuration, "hadoop"); 53 } 54 55 /* 56 * 拷貝HDFS文件系統 至 本地主機文件 57 */ 58 @Test 59 public void copyToLocalFile() throws Exception{ 60 Path src = new Path("/hdfsApi/test/hello.txt"); 61 Path dst = new Path("G:/BaiduNetdiskDownload"); 62 fileSystem.copyToLocalFile(false, src, dst, true); 63 } 64 65 66 @After 67 public void tearDown(){ 68 System.out.println("-----tearDown-----"); 69 70 //置空 71 configuration = null; 72 fileSystem = null; 73 } 74 }