您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關通過HDFS API在Eclipse上編寫程序將本地文件上傳到HDFS分布式文件系統中異常怎么辦,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1、將本地文件上傳到HDFS中,遇到問題:
七月 03, 2014 4:44:36 下午 org.apache.hadoop.ipc.Client$Connection handleConnectionFailure
INFO: Retrying connect to server: master/192.168.232.134:8020. Already tried 0 time(s).
或
Call to master/192.168.232.134:8020 failed on connection exception: java.net.ConnectException: Connection refused: no further information
解決方法:
問題所在:路徑錯誤
最開始我路徑寫為:
String dst = "hdfs://master/opt/file06.txt";
或
String dst = "hdfs://192.168.232.134/opt/file06.txt";
或
String dst = "hdfs://master:9001/opt/file06.txt";
或
String dst = "hdfs://master/opt/file06.txt";
這幾種寫法都是不對的,正確路徑為:
String dst = "hdfs://master:9000/opt/file06.txt";
注意:
事實上,“INFO: Retrying connect to server: master/192.168.232.134:8020. Already tried 0 time(s).”這兒顯示無法連接端口8020,是因為我們在程序中未明確指定端口9000,然而“fs.default.name”配置項指定的“namenode RPC交互端口“默認為8020,但是我們在hdfs-site.xml文件中指定fs.default.name的端口為9000,所以在程序中,連接8020端口失效,正確寫法為”hdfs://192.168.232.134:9000/opt/file06.txt“或”hdfs://master:9000/opt/file06.txt“
1)、在這兒,如果我們win上配置了master,那么,我們使用master是可以的,在這兒master等價于192.168.232.134
2)、重要的是端口要寫正確,這兒端口應該為9000
所以,String dst = "hdfs://master:9000/opt/file06.txt";和String dst = "hdfs://192.168.232.134:9000/opt/file06.txt";兩種寫法都正確
但是,String dst = "hdfs://master:9001/opt/file06.txt";和String dst = "hdfs://192.168.232.134:9001/opt/file06.txt";兩種寫法都不正確
2、Cannot create file/opt/file02.txt. Name node is in safe mode.
在hadoop中,經常遇到safe mode這個問題,雖然網上解決辦法都可以解決問題,但是,一直沒有明白究竟是什么意思。
其實,它處于安全模式的時候,我們只需要再等等,它可以自動離開安全模式的。我們沒有必要去執行命令強制退出安全模式。
強制退出安全模式的命令:bin/hadoop dfsadmin -safemode leave
關于安全模式的相關介紹可參見文章《Hadoop 解除 "Name node is in safe mode"》
附:
1)、編寫程序操作HDFS文件系統的相關代碼可參見鏈接:《如何使用Java API讀寫HDFS》
2)、將采用JAVA API將本地文件復制到hadoop文件系統
package com.langgo.hadoop3; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.util.Progressable; /** * @author hadoop *將本地文件復制到hadoop文件系統 */ public class FileCopyWithProgress { public static void main(String[] args) throws IOException { String localSrc = "/home/wqj/opt/140702152709log.txt"; String dst = "hdfs://master:9000/opt/file06.txt"; FileCopyWithProgress.fileCopy(localSrc, dst); } public static void fileCopy(String localSrc, String dst) throws IOException{ InputStream in = new BufferedInputStream(new FileInputStream(localSrc)); Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(dst), conf); OutputStream out = fs.create(new Path(dst), new Progressable() { @Override public void progress() { System.out.println("."); } }); IOUtils.copyBytes(in, out, 4096, true); } }
關于“通過HDFS API在Eclipse上編寫程序將本地文件上傳到HDFS分布式文件系統中異常怎么辦”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。