No FileSystem for scheme:file解決方法

No FileSystem for scheme:file解決方法

        import java.io.BufferedReader;
        import java.io.InputStreamReader;
 
        import org.apache.hadoop.conf.Configuration;
        import org.apache.hadoop.fs.FileSystem;
        import org.apache.hadoop.fs.Path;
        import org.apache.hadoop.fs.FSDataInputStream;
 
        public class Chapter3 {
                public static void main(String[] args) {
                        try {
                                Configuration conf = new Configuration();
                                conf.set("fs.defaultFS","hdfs://localhost:9000");
                                conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
                                FileSystem fs = FileSystem.get(conf);
                    byte[] buff = "Hello world".getBytes(); // 要寫入的內容
                                String filename = "test"; //要寫入的文件名
                                FSDataOutputStream os = fs.create(new Path(filename));
                                os.write(buff,0,buff.length);
                                System.out.println("Create:"+ filename);
                                os.close();
                                Path file = new Path("test"); 
                                FSDataInputStream getIt = fs.open(file);
                                BufferedReader d = new BufferedReader(new InputStreamReader(getIt));
                                String content = d.readLine(); //讀取文件一行
                                System.out.println(content);
                                d.close(); //關閉文件
                                fs.close(); //關閉hdfs
                        } catch (Exception e) {
                                e.printStackTrace();
                        }
                }
        }

今天在測試如上代碼時出現了一個錯誤:eclipse中能夠正常運行,「hadoop jar」命令也能夠正常運行java

cd /usr/local/hadoop
./bin/hadoop jar ./myapp/HDFSExample.jar

可是「java」命令apache

cd /usr/local/hadoop
java -jar ./myapp/HDFSExample.jar

沒法正常運行出現No FileSystem for scheme: hdfs錯誤。app

解決方法:要能正確讀取HDFS文件,程序就須要知道Hadoop集羣的配置信息,若是你不是用「hadoop jar」命令來運行你的程序,eclipse

而是用「java」命令來運行的(例如 java com.codelast.MyProgramme),那麼,程序就須要引入Hadoop集羣的配置信息。oop

Hadoop集羣的配置保存在 core-site.xml 和 hdfs-site.xml 兩個文件中,因此在打包的時候要把它們打到jar包裏的根目錄下。測試

cp /usr/local/hadoop/etc/hadoop/core-site.xml ~/workspace/WordCount/src
cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml ~/workspace/WordCount/src

經過上面的命令將core-site.xml 和 hdfs-site.xml複製到jar包裏的根目錄下後第二種java命令也正常運行spa

參考博文:http://www.codelast.com/code

相關文章
相關標籤/搜索