真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

HDFS的shell和API操作

1. HDFS的shell操作

hadoop  version     //查看版本
hadoop   fs   -appendToFile  src(Linux中的文件) dest(hdfs目錄下的文件)  //追加
hadoop   fs   -cat file(hdfs目錄下的文件)   //查看文件內(nèi)容
Hadoop   fs   -tail file(hdfs目錄下的文件)   //查看文件末尾1kb的數(shù)據(jù)
hadoop   fs  -checksum  file(hdfs目錄下的文件)  //校驗(yàn)當(dāng)前文件是否正確
hadoop   fs  -copyFromLocal src dest  //從本地復(fù)制文件到HDFS
hadoop   fs  -copyToLocal   dest src  //從hdfs復(fù)制文件到本地
hadoop   fs  -count path    //對目錄內(nèi)容做計(jì)數(shù)
hadoop   fs  -find  path     //查看某個(gè)hdfs目錄中是否相應(yīng)的文件
hadoop   fs  -getmerge   src dest  //合并下載
hadoop   fs  -ls   path     //列表
hadoop   fs  -put  file(本地)  dest(hdfs)   //將本地文件上傳到hdfs
hadoop   fs  -setrep  num  file   //設(shè)置hdfs系統(tǒng)中的某個(gè)文件的副本數(shù)(只能是hdfs中已上傳的文件)
hadoop   fs  -setrep -R num file //設(shè)置hdfs系統(tǒng)中的目錄下的所有文件的副本數(shù)
hadoop   fs  -text 壓縮文件   //查看hdfs中的壓縮文件
hadoop   fs  -truncate   dir  //清空hdfs目錄
hdfs  getconf  -confkey  [key](配置文件的name)  //查看相應(yīng)的配置的value

2. HDFS的API操作

1)eclipse中的hdfs的開發(fā)環(huán)境搭建:

  • 下載一個(gè)新版的eclipse,將自己集成的hadoop-eclipse-plugin-2.7.4.jar放入eclipse的安裝目錄中的…\eclipse-hadoop\plugins中。
    插件下載地址:http://down.51cto.com/data/2457877
    然后打開eclipse:
    HDFS的shell和API操作
    HDFS的shell和API操作
    能查看到以上的兩個(gè)組件,表示eclipse環(huán)境配置成功。
  • 配置eclipse插件連接集群
    HDFS的shell和API操作
    配置成功之后,在DFS Locations中就會(huì)出現(xiàn)hdfs的文件目錄
    HDFS的shell和API操作
  • window平臺(tái)使用hadoop:
    • 在windows下配置hadoop的環(huán)境變量,將hadoop的解壓包放置一個(gè)位置,然后加入:HADOOP_HOME:../hadoop2.7.4/,在path中%HADOOP_HOME:%/bin、
      hadoop.dll,winutils.exe下載地址:http://down.51cto.com/data/2457878
    • 將hadoop.dll 放入c:\windows\system32中
    • 將winutils.exe,放入hadoop 的bin目錄下
    • 將eclipse集成hadoop
      HDFS的shell和API操作

2)添加hadoop依賴包的三種方式:

  • 在項(xiàng)目中創(chuàng)建一個(gè)文件夾,然后將所有需要依賴的jar拷貝到這個(gè)目錄,右擊add build path 將jar導(dǎo)入項(xiàng)目
  • 創(chuàng)建一個(gè)用戶的library,在本地將相應(yīng)的jar包導(dǎo)入到項(xiàng)目中:
    HDFS的shell和API操作HDFS的shell和API操作
    注意這里的兩個(gè)lib中所有jar包都要添加
  • 使用maven導(dǎo)入jar包(推薦)

    3)hdfs編程中的重要的 兩個(gè)對象:

    ??Configuration類的介紹
    ?Configuration類是加載hadoop中的相應(yīng)的配置文件

    創(chuàng)新互聯(lián)是一家以網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站推廣、小程序App開發(fā)等移動(dòng)開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都隧道混凝土攪拌車等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。

    Configuration conf=new Configuration(true);
    如果在這里沒有在source folder中放入相應(yīng)的配置文件:
    core-site.xml、hdfs-site.xml、yarn-site.xml、mapreduce-site.xml…
    那么Configuration類會(huì)自動(dòng)的加載jar包中的配置文件:
    hadoop-hdfs-2.7.6.jar/hdfs-default.xml
    只有在sourcefolder中放入相應(yīng)的配置時(shí),才能夠加載相應(yīng)的配置,但是配置文件的名稱必須是site 或者default的文件,才能夠正確加載

    ??使用相應(yīng)的方法加載配置文件:

    Configuration conf=new Configuration();
    conf.addResource(""); //這例實(shí)參的內(nèi)容為配置文件的權(quán)限定名稱

    ??FileSystem類的介紹
    獲取FileSystem對象:

    //以這種方式獲取的fs對象是本地的文件系統(tǒng)的對象,如果在windows下就是windows的對象
    Configuration conf=new Configuration();
    FileSystem fs=FileSystem.get(conf);
    //能加載自己集群的文件系統(tǒng)對象
    conf.set("fs.defaultFS", "hdfs://hadoop01:9000");

    解決編程時(shí)的權(quán)限問題:
    由于hdfs文件系統(tǒng)是基于用戶的,在Windows下eclipse中操作hdfs默認(rèn)的用戶是Windows的用戶,在操作hdfs文件系統(tǒng)時(shí)沒有權(quán)限的,所以在做讀寫操作時(shí),可能會(huì)報(bào)出:
    HDFS的shell和API操作
    解決方案
    (1)在運(yùn)行時(shí)使用run configuration,配置相應(yīng)的參數(shù):-DHADOOP_USER_NAME=hadoop(指定運(yùn)行用戶)
    (2)在代碼中指定用戶:FileSystem.get(newURI("hdfs://hadoop01:9000"),conf,"hadoop");
    (3)在代碼中指定jvm運(yùn)行時(shí)使用的用戶System.setProperty("HADOOP_USER_NAME", "hadoop"); 這里需要使用run configuration運(yùn)行
    (4)在Windows中添加一個(gè)hadoop用戶,不建議使用
    如果以上方式仍然出現(xiàn)問題,那么就需要在window的path中配置一個(gè)環(huán)境變量:
    DHADOOP_USER_NAME = hadoop 即可。

4)hdfs的實(shí)戰(zhàn)編程:

public class HDFSApp {

    //文件系統(tǒng)
    FileSystem fileSystem = null;
    //配置類
    Configuration configuration = null;

    @Before
    public void setup() {
        configuration = new Configuration();
        configuration.set("fs.defautlFS", "hdfs://zzy:9000");
        configuration.addResource("core-site.xml");
        configuration.addResource("hdfs-site.xml");
        try {
            fileSystem = FileSystem.get(configuration);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //創(chuàng)建目錄
    @Test
    public void mkdir() {
        try {
            System.setProperty("HADOOP_USER_NAME", "hadoop");
            boolean isMkdirs = fileSystem.mkdirs(new Path("/user/hadoop/test"));
            if (isMkdirs) {
                System.out.println("創(chuàng)建成功??!");
            } else {
                System.out.println("創(chuàng)建失?。?!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //刪除目錄
    @Test
    public void deletedir() {
        System.setProperty("HADOOP_USER_NAME", "hadoop");
        try {
            fileSystem.delete(new Path("/每日任務(wù).txt"), true);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //將本地文件copy到hdfs中
    @Test
    public void CopyFromeLocal() {
        System.setProperty("HADOOP_USER_NAME", "hadoop");
        Path  src=new Path("C:\\Users\\aura-bd\\Desktop\\每日任務(wù).txt");
        Path dest=new Path("/");
        try {
            fileSystem.copyFromLocalFile(src,dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //將hdfs文件copy到本地
    @Test public void CopyToLocal(){
        System.setProperty("HADOOP_USER_NAME", "hadoop");
        Path  src=new Path("C:\\Users\\aura-bd\\Desktop\\");
        Path dest=new Path("/user/hive/warehouse/test.db/pokes/data.txt");
        try {
            fileSystem.copyToLocalFile(dest,src);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //顯示目錄下的文件夾信息
    @Test
    public void FSListFile(){
        try {
            RemoteIterator filelist = fileSystem.listFiles(new Path("/user/hive/warehouse/test.db"), true);
            while(filelist.hasNext()){
                LocatedFileStatus fileStatus = filelist.next();
                System.out.println(fileStatus.getPath());
                System.out.println(fileStatus.getGroup());
                System.out.println(fileStatus.getPath().getName());
                System.out.println(fileStatus.getReplication());

                BlockLocation[] blockLocations = fileStatus.getBlockLocations();
                for(BlockLocation block :blockLocations){
                    System.out.println(block.getHosts().toString());
                    System.out.println(block.getNames());
                    System.out.println(block.getOffset());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //顯示文件夾以及文件信息
    @Test
    public void ListFiles(){
        try {
            FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/"));
            for(FileStatus file:fileStatuses){
                if(file.isDirectory()){
                    System.out.println("directory:"+file.getPath().getName());
                }else{
                    System.out.println("file:"+file.getPath().getName());
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //下載文件
    @Test
    public void DownLoadFileToLocal(){
        System.setProperty("HADOOP_USER_NAME", "hadoop");
        try {
            FSDataInputStream open = fileSystem.open(new
                    Path("/user/hive/warehouse/test.db/pokes/data.txt"));
            OutputStream out=new FileOutputStream(new File("D:\\data.txt"));
            IOUtils.copyBytes(open,out,1024);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //上傳文件
    @Test
    public void upLoadFileToLocal(){
        System.setProperty("HADOOP_USER_NAME", "hadoop");
        try {
            FSDataOutputStream fsDataOutputStream = fileSystem.create(new Path("/a.txt"));
            InputStream in=new FileInputStream("D:\\data.txt");
            IOUtils.copyBytes(in,fsDataOutputStream,4096);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. HDFS的經(jīng)典案例:

  在hadoop中MR編程計(jì)算框架中,都是計(jì)算向數(shù)據(jù)移動(dòng),那么如何獲取一個(gè)文件的所有block信息,指定block塊進(jìn)行數(shù)據(jù)讀取的呢?
代碼實(shí)現(xiàn)

public class RamdomRead {
    private static Configuration conf;
    private static FileSystem fs;
    static {
        conf=new Configuration(true);
        conf.set("fs.defalutFS","hdfs://zzy:9000");
        conf.addResource("core-site.xml");
        conf.addResource("hdfs-site.xml");
        try {
            fs=FileSystem.get(conf);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws IOException {
        System.setProperty("HADOOP_USER_NAME","hadoop");
        Path file=new Path("/data/2018-8-8/access.log");
        FSDataInputStream open = fs.open(file);
        //拿到文件信息
        try {
             FileStatus[] fileStatuses = fs.listStatus(file);
            // 獲取這個(gè)文件的所有 block 的信息
            BlockLocation[] fileBlockLocations = fs.getFileBlockLocations(fileStatuses[0], 0L, fileStatuses[0].getLen());
            // 第一個(gè) block 的長度
            BlockLocation fileBlockLocation = fileBlockLocations[0];
            //第一個(gè)塊的長度
            long length = fileBlockLocation.getLength();
            //第一個(gè) block 的起始偏移量
            long offset = fileBlockLocation.getOffset();

            //讀取數(shù)據(jù)
            byte flush[]=new byte[4096];
            FileOutputStream os = new FileOutputStream(new File("d:/block0"));
            while(open.read(offset,flush,0,4096)!=-1){
                os.write(flush);
                offset+=4096;
                if(offset>length){
                    return ;
                }
            }
            os.flush();
            os.close();
            fs.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

文章名稱:HDFS的shell和API操作
文章源于:http://weahome.cn/article/pdohpe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部