zoukankan      html  css  js  c++  java
  • HDFS基础和java api操作

    1. 概括

    • 适合一次写入多次查询情况,不支持并发写情况
    • 通过hadoop shell 上传的文件存放在DataNode的block中,通过linux shell只能看见block,看不见文件(HDFS将客户端的大文件存放在很多节点的数据块中,Block本质上是一个逻辑概念,它是hdfs读写数据的基本单位
    • HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间

    2. fs

    • 可以使用hdfs shell操作hdfs,常用 fs命令如下:
      • eg: hadoop fs -cat file1
    • - put localsrc dst  //从本地文件移动到hdfs
      
      -get src  localsrc   //复制文件到本地
      
      -text  src  //显示文件内容
      
      其他类似于linux shell

    3. 端口

    • 端口:
    • 50070:查看NameNode状态
      50075:查看DataNode状态
      50090:查看SecondaryNameNode
      50030:查看JobTracker状态
      50060:查看TaskTracker状态

    4. hdfs安全模式

      在启动hadoop集群的时候,集群的运行首先进入到安全模式下(safeMode),以检查数据完整性

    <property>(hdfs-default.xml,302行)
            <name>dfs.safemode.threshold.pct</name>
            <value>0.999f</value>
        </property>

    这里定义了一个最小的副本率0.999,如果应该有5个副本存在,却只存在3个副本,3/5=0.6<0.999,则系统会自动地复制副本到其他DataNode,使得副本率不小于0.999,相反,如果此时系统中有8个副本,则会自动删除多余的3个副本

      安全模式相关操作:

    hadoop fs –safemode get:查看安全模式状态
    hadoop fs –safemode enter:进入安全模式状态
    hadoop fs –safemode leave:离开安全模式状态

    5. java api

    注意:1)需注释掉org.apache.hadoop.fs.FileUtil类的checkReturnValue方法(688—692),否则可能出现权限问题)

       2)需要修改远程登录客户端的用户名,以避免权限问题

        我的电脑-管理-本地用户和组;

        注册表HKEY_LOCAL_MACHINESOFEWAREMicrosoftWindows NTCurrentVersion 修改  RegisteredOwner

    写文件:

         String uri="hdfs://hadoop:9000/";
            Configuration configuration=new Configuration();
            FileSystem fileSystem=FileSystem.get(URI.create(uri),configuration);
            
            final String pathString="/input";
            final FSDataOutputStream fsDataOutputStream=fileSystem.create(new Path(pathString));
            IOUtils.copyBytes(new ByteArrayInputStream("wish
    ".getBytes()),fsDataOutputStream,configuration,false);
            IOUtils.copyBytes(new ByteArrayInputStream("wish you happy 
    ".getBytes()),fsDataOutputStream,configuration,true);

    读文件:

         String uri="hdfs://hadoop:9000/";
            Configuration configuration=new Configuration();
            FileSystem fileSystem=FileSystem.get(URI.create(uri),configuration);
            
            final String pathString="/output";
            final FSDataInputStream fsDataInputStream=fileSystem.open(new Path(pathString));
            IOUtils.copyBytes(fsDataInputStream, System.out, configuration,true);

    创建目录:

      String uri="hdfs://hadoop:9000/";
            Configuration configuration=new Configuration();
            FileSystem fileSystem=FileSystem.get(URI.create(uri),configuration);
            
            final String pathString="/d1";
            boolean exists=fileSystem.exists(new Path(pathString));
            if(!exists){
                boolean result=fileSystem.mkdirs(new Path(pathString));
                System.out.println(result);
            }

    删除文件

         String uri="hdfs://hadoop:9000/";
            Configuration configuration=new Configuration();
            FileSystem fileSystem=FileSystem.get(URI.create(uri),configuration);
            
            final String pathString="/output";
            fileSystem.delete(new Path("/output"),true);
  • 相关阅读:
    linux学习方法之一
    HDU 1556 Color the ball
    Object-c学习之路十(NSNumber&NSValue)
    蜂鸣器驱动方式源程序--有源无源通用
    Wordpress更换主题之后出错
    mybatis_Generator配置
    Logistic Regression
    求两个字符串的最大公共字串
    数据结构排序系列详解之二 希尔排序
    《mysql必知必会》学习_第五章
  • 原文地址:https://www.cnblogs.com/wishyouhappy/p/3730606.html
Copyright © 2011-2022 走看看