中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HDFS文件操作有哪些

發布時間:2021-12-09 09:54:47 來源:億速云 閱讀:146 作者:小新 欄目:云計算

這篇文章將為大家詳細講解有關HDFS文件操作有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

HDFS的文件操作

格式化HDFS

命令:user@namenode :Hadoop$bin/hadoop namenode -format

啟動HDFS

命令:user@namenode :hadoop$bin/start-dfs.sh

列出HDFS上的文件

命令:user@namenode :hadoop$bin/hadoop dfs -ls

使用hadoop API

public List<String[]>GetFileBolckHost(Configuration conf, String FileName) {  

       try {  

           List<String[]> list = new ArrayList<String[]>();  

           FileSystem hdfs = FileSystem.get(conf);

           Path path = new Path(FileName);  

           FileStatus fileStatus = hdfs.getFileStatus(path);  

           BlockLocation[] blkLocations = hdfs.getFileBlockLocations(  

                    fileStatus, 0,fileStatus.getLen());  

           int blkCount = blkLocations.length;

           for (int i = 0; i < blkCount; i++) {

               String[] hosts =blkLocations.getHosts();  

                list.add(hosts);  

           }  

           return list;  

       } catch (IOException e) {  

           e.printStackTrace();  

       }  

       return null;  

    }

在HDFS上創建目錄

命令:user@namenode :hadoop$bin/hadoop dfs -mkdir /文件名

使用hadoop API

// 在HDFS新建文件  

   public FSDataOutputStream CreateFile(Configuration conf, StringFileName) {  

       try {  

           FileSystem hdfs = FileSystem.get(conf);

           Path path = new Path(FileName);  

           FSDataOutputStream outputStream = hdfs.create(path);  

           return outputStream;  

       } catch (IOException e) {  

           e.printStackTrace();  

       }  

       return null;  

}

上傳一個文件到HDFS

命令:user@namenode :Hadoop$ bin/hadoopdfs -put 文件名/user/yourUserName/

使用hadoop API

// 上傳文件到HDFS  

    public voidPutFile(Configuration conf, String srcFile, String dstFile) {  

        try {  

            FileSystem hdfs =FileSystem.get(conf);  

            Path srcPath = newPath(srcFile);  

            Path dstPath = newPath(dstFile);  

           hdfs.copyFromLocalFile(srcPath, dstPath);  

        } catch (IOExceptione) {  

           e.printStackTrace();  

        }  

    }

從 HDFS 中導出數據

命令:user@namenode:hadoop$ bin/hadoopdfs -cat foo

使用hadoop API

// 從HDFS讀取文件

    public voidReadFile(Configuration conf, String FileName) {

        try {  

            FileSystem hdfs =FileSystem.get(conf);  

            FSDataInputStreamdis = hdfs.open(new Path(FileName));  

           IOUtils.copyBytes(dis, System.out, 4096, false);  

            dis.close();  

        } catch (IOExceptione) {  

           e.printStackTrace();  

        }  

    }

HDFS 的關閉

命令:user@namenode:hadoop$bin/stop-dfs.sh

HDFS全局狀態信息

命令:bin/Hadoop dfsadmin -report

我們可以得到一份全局狀態報告。這份報告包含了HDFS集群的基本信息,當然也有每臺機器的一些情況。

以上講的都是本地操作HDFS,都是基于在Ubuntu下并配置有hadoop環境下對HDFS的操作,作為客戶端也可以在window系統下遠程的對 HDFS進行操作,其實原理基本上差不多,只需要集群中namenode對外開放的IP和端口,就可以訪問到HDFS

/**

* 對HDFS操作

* @author yujing

*

*/  

public class Write {  

    public static voidmain(String[] args) {  

        try {  

           uploadTohdfs();  

            readHdfs();  

           getDirectoryFromHdfs();  

        } catch(FileNotFoundException e) {  

            e.printStackTrace();  

        } catch (IOExceptione) {  

           e.printStackTrace();  

        }  

    }  

  

    public static voiduploadTohdfs() throws FileNotFoundException, IOException {  

        String localSrc ="D://qq.txt";  

        String dst ="hdfs://192.168.1.11:9000/usr/yujing/test.txt";  

        InputStream in = newBufferedInputStream(new FileInputStream(localSrc));  

        Configuration conf =new Configuration();  

        FileSystem fs =FileSystem.get(URI.create(dst), conf);  

        OutputStream out =fs.create(new Path(dst), new Progressable() {

            public voidprogress() {  

               System.out.println(".");

            }  

        });  

       System.out.println("上傳文件成功");  

        IOUtils.copyBytes(in,out, 4096, true);  

    }  

  

    /** 從HDFS上讀取文件 */  

    private static voidreadHdfs() throws FileNotFoundException, IOException {  

        String dst ="hdfs://192.168.1.11:9000/usr/yujing/test.txt";  

        Configuration conf =new Configuration();  

        FileSystem fs =FileSystem.get(URI.create(dst), conf);  

        FSDataInputStreamhdfsInStream = fs.open(new Path(dst));  

  

        OutputStream out = newFileOutputStream("d:/qq-hdfs.txt");

        byte[] ioBuffer = newbyte[1024];  

        int readLen =hdfsInStream.read(ioBuffer);  

  

        while (-1 != readLen){  

           out.write(ioBuffer, 0, readLen);  

            readLen =hdfsInStream.read(ioBuffer);  

        }  

       System.out.println("讀文件成功");  

        out.close();  

        hdfsInStream.close();  

        fs.close();  

    }  

  

    /**

    * 以append方式將內容添加到HDFS上文件的末尾;注意:文件更新,需要在hdfs-site.xml中添<property><name>dfs.

    *append.support</name><value>true</value></property>

    */  

    private static voidappendToHdfs() throws FileNotFoundException,

            IOException {  

        String dst ="hdfs://192.168.1.11:9000/usr/yujing/test.txt";  

        Configuration conf =new Configuration();  

        FileSystem fs =FileSystem.get(URI.create(dst), conf);  

        FSDataOutputStream out= fs.append(new Path(dst));  

  

        int readLen ="zhangzk add by hdfs java api".getBytes().length;  

  

        while (-1 != readLen){  

           out.write("zhangzk add by hdfs java api".getBytes(), 0,readLen);  

        }  

        out.close();  

        fs.close();  

    }  

  

    /** 從HDFS上刪除文件 */  

    private static voiddeleteFromHdfs() throws FileNotFoundException,

            IOException {  

        String dst ="hdfs://192.168.1.11:9000/usr/yujing";  

        Configuration conf =new Configuration();  

        FileSystem fs =FileSystem.get(URI.create(dst), conf);  

        fs.deleteOnExit(newPath(dst));  

        fs.close();  

    }  

  

    /** 遍歷HDFS上的文件和目錄 */  

    private static voidgetDirectoryFromHdfs() throws FileNotFoundException,  

            IOException {  

        String dst ="hdfs://192.168.1.11:9000/usr/yujing";  

        Configuration conf =new Configuration();  

        FileSystem fs =FileSystem.get(URI.create(dst), conf);  

        FileStatus fileList[]= fs.listStatus(new Path(dst));  

        int size =fileList.length;  

        for (int i = 0; i <size; i++) {  

           System.out.println("文件名name:" + fileList.getPath().getName()  

                    + "文件大小/t/tsize:" +fileList.getLen());  

        }  

        fs.close();  

    }  

  

}

我們可以通過http://主機IP:50030就可以查看集群的所有信息,也可以查看到自己上傳到HDFS上的文件。

關于“HDFS文件操作有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五家渠市| 梓潼县| 易门县| 花垣县| 浦东新区| 耒阳市| 柳州市| 石城县| 伊吾县| 肥乡县| 晋江市| 庄浪县| 晋城| 金乡县| 榆树市| 泽库县| 杭锦后旗| 霞浦县| 杨浦区| 济源市| 丹棱县| 玉门市| 六安市| 鄂托克旗| 夏河县| 阿鲁科尔沁旗| 龙里县| 阜城县| 禹城市| 施甸县| 邳州市| 开鲁县| 甘南县| 石渠县| 建宁县| 南召县| 威远县| 荔浦县| 连江县| 新民市| 收藏|