Hadoop系列——Google Option,LibHDFS介绍,HDFS常见的客户端day3-2

181 篇文章 3 订阅
16 篇文章 0 订阅

Google Option

Google-option是Bazel Project中的命令行参数解析器。option程序包已拆分为一个单独的jar ,可用于通用程序。

我们可以去github进行下载
https://github.com/pcj/google-options
在这里插入图片描述
或我们也可以直接导入依赖

<dependency>
  <groupId>com.github.pcj</groupId>
  <artifactId>google-options</artifactId>
  <version>1.0.0</version>
</dependency>

@Option注解参数说明

  1. name:选项名称
  2. defaultValue:默认值
  3. abbrev:选项的单字符缩写
  4. help:使用信息的帮助字符串
  5. category:描述此选项所属的类别
  6. allowMultiple:—个标志,指示是否应允许选项类型在单个选项列表中多次出现。

QuickStart

创建参数实体类

public class ServerOption extends OptionsBase {
    @Option(
            name = "help",
            abbrev = 'h',
            help = "Prints usage info",
            defaultValue = "true"
    )
    public boolean help;
    @Option(
            name = "host",
            abbrev = 'o',
            help = "The server host",
            category = "startup",
            defaultValue = ""
    )
    public String host;
    @Option(
            name = "port",
            abbrev = 'p',
            help = "The server port",
            category = "startup",
            defaultValue = "8080"
    )
    public int port;
    @Option(
            name = "dir",
            abbrev = 'd',
            help = "Name if directory to serve static files",
            category = "startup",
            allowMultiple = true,
            defaultValue = ""
    )
    public List<String> dirs;
}

参数解析使用类

public class Server {
    public static void main(String[] args) {
        //创建一个参数Parser解析对象,解析规则为传入的类中定义的参数
        final OptionsParser optionsParser = OptionsParser.newOptionsParser(ServerOption.class);
        //解析输入参数数组args
        optionsParser.parseAndExitUponError(args);
        //获得Option
        final ServerOption options = optionsParser.getOptions(ServerOption.class);
        //若输入参数host为空或port<0或dirs目录为空
        if (options.host.isEmpty()||options.port<0||options.dirs.isEmpty()){
            //输出usage的使用方法
            printUsage(optionsParser);
            return;
        }
        //输出运行的host和port
        System.out.println("Starting server at "+ options.host +":"+options.port);
        //输出每个dir的名字
        for (String dir : options.dirs) {
            System.out.println(dir);
        }
    }

    private static void printUsage(OptionsParser optionsParser) {
        System.out.println("Usage : java -jar server.jar OPTIONS");
        System.out.println(optionsParser.describeOptions(Collections.emptyMap(),OptionsParser.HelpVerbosity.LONG));
    }
}

在这里插入图片描述

LibHDFS介绍

Libhdfs是用于Hadoop的分布式文件系统(HDFS)的基于.JNI的C API。
它为HDFS API的一个子集提供了C API,以操作HDFS文件和文件系统。
Libhdfs是Hladoop发行版的一部分,并在$Hadoop_HDFS_HOME/lib/本地/libhdfs.so
Libhdfs与Windows兼容,可以通过运行MVN编译在Hadoop-HDFS-project/Hadoop-HDFS源树的目录。

基于Restful的HDFS API

WebHDFS

WebHDFS提供了访问HDFS的RESTful接口,内置组件,默认开启。
WebHDFS使得集群外的客户端可以不用安装HADO0P和JAVA环境就可以对HDFS进行访问,且客户端不受语言限制。
WebHDFS是HortonWorks开发的,后捐给了Apache。
当客户端请求某文件时,WebHDFS会将其重定向到该资源所在的datanode。
在这里插入图片描述

FileSystem URIs vs HTTP URLs

WebHDFS的文件系统schema为webhdfs:/l。URL格式为:webhdfs: / /<HOST> :<HTTP_PORT>/<PATH>
效果相当于hdfs://<HOST>:<RPC_PORT>/<PATH>
在RESTful风格的API中,相应的HTTP URL格式︰http://<HOST>:<HTTP_PORT>/webhdfs/v1/<PATH>?op=...
以下是官网说明以及op后参数的可选值:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html

所有参数如下:

    HTTP GET
        OPEN (see FileSystem.open)
        GETFILESTATUS (see FileSystem.getFileStatus)
        LISTSTATUS (see FileSystem.listStatus)
        LISTSTATUS_BATCH (see FileSystem.listStatusIterator)
        GETCONTENTSUMMARY (see FileSystem.getContentSummary)
        GETQUOTAUSAGE (see FileSystem.getQuotaUsage)
        GETFILECHECKSUM (see FileSystem.getFileChecksum)
        GETHOMEDIRECTORY (see FileSystem.getHomeDirectory)
        GETDELEGATIONTOKEN (see FileSystem.getDelegationToken)
        GETTRASHROOT (see FileSystem.getTrashRoot)
        GETXATTRS (see FileSystem.getXAttr)
        GETXATTRS (see FileSystem.getXAttrs)
        GETXATTRS (see FileSystem.getXAttrs)
        LISTXATTRS (see FileSystem.listXAttrs)
        CHECKACCESS (see FileSystem.access)
        GETALLSTORAGEPOLICY (see FileSystem.getAllStoragePolicies)
        GETSTORAGEPOLICY (see FileSystem.getStoragePolicy)
        GETSNAPSHOTDIFF
        GETSNAPSHOTTABLEDIRECTORYLIST
        GETFILEBLOCKLOCATIONS (see FileSystem.getFileBlockLocations)
        GETECPOLICY (see HDFSErasureCoding.getErasureCodingPolicy)
    HTTP PUT
        CREATE (see FileSystem.create)
        MKDIRS (see FileSystem.mkdirs)
        CREATESYMLINK (see FileContext.createSymlink)
        RENAME (see FileSystem.rename)
        SETREPLICATION (see FileSystem.setReplication)
        SETOWNER (see FileSystem.setOwner)
        SETPERMISSION (see FileSystem.setPermission)
        SETTIMES (see FileSystem.setTimes)
        RENEWDELEGATIONTOKEN (see DelegationTokenAuthenticator.renewDelegationToken)
        CANCELDELEGATIONTOKEN (see DelegationTokenAuthenticator.cancelDelegationToken)
        ALLOWSNAPSHOT
        DISALLOWSNAPSHOT
        CREATESNAPSHOT (see FileSystem.createSnapshot)
        RENAMESNAPSHOT (see FileSystem.renameSnapshot)
        SETXATTR (see FileSystem.setXAttr)
        REMOVEXATTR (see FileSystem.removeXAttr)
        SETSTORAGEPOLICY (see FileSystem.setStoragePolicy)
        SATISFYSTORAGEPOLICY (see ArchivalStorage.satisfyStoragePolicy)
        ENABLEECPOLICY (see HDFSErasureCoding.enablePolicy)
        DISABLEECPOLICY (see HDFSErasureCoding.disablePolicy)
        SETECPOLICY (see HDFSErasureCoding.setErasureCodingPolicy)
    HTTP POST
        APPEND (see FileSystem.append)
        CONCAT (see FileSystem.concat)
        TRUNCATE (see FileSystem.truncate)
        UNSETSTORAGEPOLICY (see FileSystem.unsetStoragePolicy)
        UNSETECPOLICY (see HDFSErasureCoding.unsetErasureCodingPolicy)
    HTTP DELETE
        DELETE (see FileSystem.delete)
        DELETESNAPSHOT (see FileSystem.deleteSnapshot)

HTTPFS

HttpFS是一个提供RESTful 接口的网关的服务器,该网关支持所有HDFS文件系统操作
对于文件CURD的操作全部提交给HttpFS服务进行中转,然后由HttpFS去跟HDFS集群交互
需要我们手动安装并开启
在这里插入图片描述

原理

  1. HttpFS本身是Java Web应用程序。使用内置的Jetty服务器对外提供服务。
  2. HttpFS是一个独立于HDFS的服务。本质上是一个代理服务。
  3. HttpFS API的底层通过是映射到HDFS的HTTP RESTful API调用实现的。
  4. HttpFS默认端口号为14000。

HttpFS的配置

配置通过代理访问的主机节点,用户所属组

首先我们要知道这个配置文件就是core-site.xml我们需要在这个文件中添加以下配置
其中:
root用户可以在任意host主机节点上代表任意group组的用户(*通配符表示所有)

<property>
	<name>hadoop.proxyuser.root.hosts</name>
	<value>*</value>
</property>
<property>
	<name>hadoop.proxyuser.root.groups</name>
	<value>*</value>
</property>

在我们修改配置之后我们需要重启机器!
这里别忘了,你有几台机器就要修改几次

开启服务

完成重启后,我们就可以开启这个服务了

hdfs -daemon start httpfs

开启服务之后,我们就可以去访问对应的页面了,例如:node1:14000/static/index.html这个页面就是入口页面
页面显示如下:
在这里插入图片描述

使用

在使用方面和前面的WebHDFS是一样的,他们都基于网络的访问方式,因此我们在访问的时候一定要带上我们的身份信息
如:http://node1:14000/webhdfs/v1?user.name=root&op=操作
这里我们以root身份发起请求这也是因为我们之前的配置!

WebHDFS vs HttpFS

  1. WebHDFS属于内置服务,而HttpFS不是,需要我们手动配置并开启
  2. WebHDFS是由客户端直接对节点进行连接,而HttpFS则是作为一种代理,对外提供API,底层通过WebHDFS进行业务操作
  3. 数据先传输到该httpfs server ,再由其传输到client
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值