1. 程式人生 > >hdfs下載出現Exception in thread "main" java.lang.NullPointerException

hdfs下載出現Exception in thread "main" java.lang.NullPointerException

一.從hdfs檔案系統下載檔案到本地檔案系統時Java程式碼。  

    import java.net.URI;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    public class getfile {
	    public static void main(String[] args) throws Exception{
	 	    FileSystem fs=FileSystem.get(new URI("hdfs://192.168.11.12:9000"),new Configuration());
		    Path src=new Path("/data/wordcount/file1");
		    Path dst=new Path("D:\\app");
		    fs.copyToLocalFile(src, dst);
		    fs.copyToLocalFile(false,src, dst,true);
	    }
    }

二.執行程式錯誤程式碼。  

   Exception in thread "main" java.lang.NullPointerException
   at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
   at org.apache.hadoop.util.Shell.runCommand(Shell.java:149)
   at org.apache.hadoop.util.Shell.run(Shell.java:134)
   at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:286)
   at org.apache.hadoop.util.Shell.execCommand(Shell.java:354)
   at org.apache.hadoop.util.Shell.execCommand(Shell.java:337)
   at org.apache.hadoop.fs.RawLocalFileSystem.execCommand(RawLocalFileSystem.java:481)
   at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:473)
   at org.apache.hadoop.fs.FilterFileSystem.setPermission(FilterFileSystem.java:280)
   at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:372)
   at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:479)
   at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:460)
   at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:367)
   at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:208)
   at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:199)
   at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:142)
   at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1211)
   at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1192)
   ......
   .....
     而且下載的檔案會成為 .crc檔案並沒有大小。

三.修改方式。 

       fs.copyToLocalFile(src, dst);改為fs.copyToLocalFile(false,src,dst,true);
       fs.copyToLocalFile)方法在原始碼中的程式碼如下
       public void copyToLocalFile(boolean delSrc, Path src, Path dst, boolean useRawLocalFileSystem) 
          throws IOException { 
                  Configuration conf = getConf(); 
                  FileSystem local = null; 
                  if (useRawLocalFileSystem) { 
                   local = getLocal(conf).getRawFileSystem(); 
                  }
                  else { 
                     local = getLocal(conf); 
                  }
                  FileUtil.copy(this, src, local, dst, delSrc, conf);
       }

 四.錯誤原因.   

      在使用copyToLocalFile(Path src, Path dst)方法時可能導致 setPermission檔案本地檔案效驗失敗.   

      因此使用copyToLocalFile( boolean delSrc,Path src, Path dst, boolean useRawLocalFileSystem)

         boolean delSrc 指是否將原檔案刪除

         Path src 指要下載的檔案路徑

         Path dst 指將檔案下載到的路徑

         boolean useRawLocalFileSystem 是否開啟檔案效驗

 五. RawLocalFileSystem檔案

        hadoop是一個綜合檔案系統,並不等價於hdfs檔案系統。hadoop集成了眾多的檔案系統, hdfs僅僅是hadoop旗艦級檔案系統。Hadoop的這個特點充分體現了hadoop的優良的可擴充套件性。在hadoop裡,hadoop定義了一個抽象的檔案系統的概念,類:org.apache.hadoop.fs.FileSystm,這個抽象類用來定義hadoop中的一個檔案系統介面,只要某個檔案系統實現了這個介面,就可以作為hadoop支援的檔案系統。

      Hadoop LocalFileSystem是客戶端校驗的類。在使用LocalFileSystem寫檔案時,會透明的建立一個.filename.crc的檔案。 校驗檔案大小的位元組數由io.bytes.per.checksum屬性設定,預設是512bytes,即每512位元組就生成一個CRC-32校驗和。.filename.crc檔案會存 io.bytes.per.checksum的資訊。在讀取的時候,會根據此檔案進行校驗。事實上LocalFileSystem是通過繼承ChecksumFileSystem實現校驗的工作。

檔案系統 URI方案   Java實現(org.apache.hadoop) 定義
Local file fs.LocalFileSystem 支援有客戶端校驗和本地檔案系統。帶有校驗和的本地系統檔案在fs.RawLocalFileSystem中實現。

相關推薦

hdfs下載出現Exception in thread "main" java.lang.NullPointerException

一.從hdfs檔案系統下載檔案到本地檔案系統時Java程式碼。   import java.net.URI; import org.apache.hadoop.conf.Config

hibernate出現Exception in thread "main " java.lang.ExceptionInInitializerError錯誤解決辦法

最近複習了下hibernate的內容,用於準備面試。另外看了下尚學堂的視訊,按照步驟去做了幾個實驗, 但是在這過程中遇到了以下錯誤問題: SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found bi

Oozie時出現Exception in thread "main" java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor versi

  不多說,直接上乾貨!   問題詳情 [[email protected] oozie-4.1.0-cdh5.5.4]$ bin/ooziedb.sh create -sqlfile oozie.sql -run DB Connection [[ema

關於反編譯apk出現Exception in thread "main" java.lang.ClassCastException: ....

在反編譯APK的時候:遇到這種情況 > 正在反編譯Apk...  - 失敗:Exception in thread "main" java.lang.ClassCastException: brut.androlib.res.data.value.ResFileVal

eclipse出現Exception in thread "main" java.lang.NoClassDefFoundError

昨天晚上在跑hadoop程式的時候,新建了一個工程然後不知怎麼地就一直出現Exception in thread "main" java.lang.NoClassDefFoundError 錯誤如下: Exception in thread "main" java.lang

java使用類陣列 報錯Exception in thread "main" java.lang.NullPointerException

原始碼如下: Point[] points=new Point[n];//Point是一個類 for(int i=0;i<n;i++) { System.out.print("請輸入x:"); points[i].setX(in.next

連線資料庫連線池 Exception in thread "main" java.lang.NullPointerException

今天測試資料庫連線池發現一直是空指標錯誤。一般都是配置檔案出了問題。找了半天才發現,在沒有密碼的情況下不要加入password=null,估計是沒有加入關鍵字解析的。直接省去不寫就好了 driverClassName=com.mysql.jdbc.Driver

Exception in thread "main" java.lang.NullPointerException問題

Exception in thread "main" java.lang.NullPointerException 該問題多半是由於用到的某個物件只進行了宣告,而沒有初始化,即沒有被new 比如說: 一個類Person,有一個物件p1 宣告物件Person p1; 使用該物

Java報錯異常-----Exception in thread "main" java.lang.NullPointerException

異常提示: Exception in thread "main" java.lang.NullPointerExceptionat java.awt.Container.addImpl(Container.java:1045)at java.awt.Container.ad

Exception in thread "main" java.lang.NullPointerException的問題

問題敘述 出現Exception in thread “main” java.lang.NullPointerException一般是因為指標為空, 也就是說這個時候你要注意你的物件是否已經初始化(new)了 例如 現在我要在Path類上定義一個Box類的陣列

idea運行的時候出現的問題Exception in threadmainjava.lang

ideaidea運行的時候出現的問題Exception in thread “main” java.lang.NoSuchMethodError: scala.collection.immutable.HashSet$這類錯誤主要是環境中運行scala與idea中scala的版本不一致導致的。將他們更換為相同

java編譯中出現Exception in threadmain" java.lang.UnsupportedClassVersionError

java編譯中出現了Exception in thread “main” java.lang.UnsupportedClassVersionError 起因: StringBuilder不能賦值?不對,錯誤原因是因為下面報錯的log: 接下來,

Exception in threadmainjava.lang.NoSuchMethodError: scala.Predef..conforms()Lscala/Predef$$less$

執行Scala程式,出現如下問題: Exception in thread “main” java.lang.NoSuchMethodError: scala.Predef..conforms()Lscala/Predef$$less$colon$less; at org.apach

【解決】自己編寫Wordcount程式碼上傳叢集上執行時報錯:Exception in thread "main" java.lang.ClassNotFoundException: WordCount

報錯資訊:ClassNotFoundException: WordCount [[email protected] fs_testdir]# hadoop jar /fs_testdir/my

personRDD.toDF Exception in thread "main" java.lang.NoSuchMethodError

scala 版本: 2.10.2 sparkSQL :maven依賴版本  <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark

elasticsearch 編寫java程式報錯Exception in thread "main" java.lang.NoClassDefFoundError: org/elasticsearch

java程式啟動報錯: Exception in thread "main" java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin ERROR StatusLogger Log4j2

Exception in thread "main" java.lang.ClassNotFoundException: WordCount

出現這個問題主要是呼叫的問題,沒有加入包./bin/hadoop jar FirstJar/WordCount.jar WordCount input output改成如下的樣子就可以了./bin/hadoop jar FirstJar/WordCount.jar cn.edu.ruc.cloud

hive錯誤:Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Permission denied

用不同使用者去登入hive  可能會報如下錯誤: Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Permission denied         at org.apa

Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.driver at java.base/jdk

Eclipse下javal連資料庫一直報這個錯。由於我用的是新版的MySQL,所以經常遇見些奇奇怪怪的錯…… 坑在這裡:  錯誤程式碼:Class.forName("com.mysql.jdbc.driver"); Driver要大寫!!! 正確的程式碼: pack

spark submit提交任務報錯Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/stream

1.問題描述 提交spark任務: bin/spark-submit --master local[2] \ --class _0924MoocProject.ImoocStatStreamingApp_product \ /opt/datas/project/scala