• hadoop集群访问——Hadoop客户端访问、Java API访问


    上一篇中介绍了hadoop集群搭建方式,本文介绍集群的访问。集群的访问方式有两种:hadoop客户端访问,Java API访问。

    一、集群客户端访问

      Hadoop采用C/S架构,可以通过客户端对集群进行操作,其实在前面搭建的集群环境中,每个集群节点都可以作为一个客户端进行集群访问,但是一般场景下,会将集群服务器作为整体,从外部设置客户端对集群进行访问。

      为了能从集群服务器外部访问,需要一台与集群服务器在同一网段的主机(可以与集群节点Ping通),安装hadoop作为客户端机器,并将该机器与集群服务器配置到同一集群内。

    1、安装JDK

    2、安装Hadoop

    与集群搭建中一样,需要安装hadopp

    3、客户端机器配置core-site.xml

    4、客户端机器配置mapred-site.xml

    5、客户端机器配置yarn-site.xml

    二、网页访问

    namenodeIP:50070

    sourcemangerIP:8088

    三、Java API访问

    此种方法通过hadoop提供的API编写客户端程序,从而实现对hadoop的操作。java程序的编写一般是在Windows环境下的,因此需要首先对win环境进行配置。

    (一)Win环境配置

    1、下载并解压hadoop安装包

    这里注意不要放到含有空格的目录下,虽然网上有些解决方案,但是我试了没起作用,放到不含空格的目录下最省事。

    2、配置环境变量

    • 增加HADOOP_HOME变量,变量值为你的hadoop目录

    • 配置Path变量,增加内容:

    %HADOOP_HOME%in

    %HADOOP_HOMEsbin

    3、配置hadoop中的java home

    • 编辑文件,hadoop目录下etchadoophadoop-env.cmd

    修改其中JAVA_HOME变量,变量值为jdk地址,jdk的地址注意同样不要包含空格,我是把原来的jdk复制一份到了没有空格的目录下。

    4、放置文件

    下载https://github.com/steveloughran/winutils

    其中对应版本bin目录下的winutil.exe放置到你的hadoop目录的bin目录下

    hadoop.dll文件放置到C:WindowsSystem32下

    (二)Java程序开发

    1、导入jar包

    hadoop安装文件夹/share/hadoop路径下为hadoop提供的jar包,按需导入。

    2、编程

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    
    public class HdfsClient {
    
        FileSystem fs = null;
    
        public static void main(String[] args){
            //创建一个配置对象,用于设置集群上的块大小,副本数量等。
            Configuration conf = new Configuration();
            conf.set("dfs.replication", "2");
            conf.set("dfs.blocksize", "64m");
    
            //uri,
            //root:指定用户,如果不填写,会默认当前win用户
    
            try {
    //            构造一个访问指定HDFS的客户端对象,
    //            参数一:HDFS系统的URI,
    //            参数二:客户端要配置参数。
    //            参数三:客户端用户名
                FileSystem fs = FileSystem.get(new URI("hdfs://192.168.1.237:9000/"), conf, "root");
                fs.copyFromLocalFile(new Path("I:/[neubt]Friends_搜狐原画版.torrent"), new Path("/home/"));
                fs.close();
    
            } catch (URISyntaxException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
        }
    
        @Before
        public void inint() throws Exception {
            URI uri = new URI("hdfs://192.168.1.237:9000/");
    
            Configuration conf = new Configuration();
            conf.set("dfs.replication", "2");
            conf.set("dfs.blocksize", "64m");
            fs = FileSystem.get(new URI("hdfs://192.168.1.237:9000/"), conf, "root");
    
        }
    
        /*
        从hdfs下载文件
         */
        @Test
        public void testDownLoad() throws IOException {
            Path localPath = new Path("I:/hdfstest/Friends_搜狐原画版.torrent");
            System.out.println(localPath);
            
            fs.copyToLocalFile(new Path("/home/[neubt]Friends_搜狐原画版.torrent"), localPath);
    //        fs.copyToLocalFile(new Path("/home/log4j-1.2.17.zip"), new Path("/hdfstest"));
            fs.close();
    
        }
    
    }

    文件的上传未涉及访问本地磁盘,文件下载时则需要调用本地方法来实现对本地磁盘库的访问,本地磁盘库的访问需要调用hadoop提供的C语言库,该库在hadoop的安装文件中提供,因此需要将hadoop安装包中的本地方法添加到环境变量中。

  • 相关阅读:
    golang 垃圾回收 gc
    LINUX下目标文件的BSS段、数据段、代码段
    使用Golang利用ectd实现一个分布式锁
    KNN算法介绍
    机器学习
    golang map to struct
    NoSQL数据库-MongoDB和Redis
    Go语言中的单引号、双引号、反引号
    广告制胜无它,顺应人性尔——leo鉴书63
    从周迅发布恋情 看百度百科的社会价值
  • 原文地址:https://www.cnblogs.com/Jing-Wang/p/10689142.html
Copyright © 2020-2023  润新知