首页 > 其他分享 >分布式系统HDFS

分布式系统HDFS

时间:2023-11-29 18:45:17浏览次数:36  
标签:hdfs HDFS fileSystem hadoop dfs 分布式系统 Path hadoop102

1、完全分布式搭建

  1. hadoop102[namenode,datanode],hadoop103[datanode], hadoop104[secondarynamenode,datanode]
  2. 缺少104,配置104
    1. 选择完全克隆103
    2. 机器的名称 hadoop104
    3. 配置机器的IP 192.168.18.104修改 vim /etc/sysconfig/network-scripts/ifcfg-ens33
    4. 重启⽹络服务 systemctl restart network
    5. 重新连接ip为192.168.18.104的服务器
    6. 查看是否更改成功 ip addr
    7. 更改机器名称 hostnamectl set-hostname hadoop104
    8. 查看是否更改成功 hostname
    9. 重启 reboot 后重新连接104
    10. 配置xshell 访问hadoop104
    11. 查看是否映射成功
      1. ping -c 4 hadoop102
      2. ping -c 4 hadoop103
    12. 每台机器免密登录,⽣成密钥
      1. ssh-keygen -t rsa ,执⾏后三次回车即可
      2. 把密钥分发给每台机器(102,103开机)
        1. ssh-copy-id hadoop102
        2.  ssh-copy-id hadoop103
    13. 在每台机器上分别访问每台机器
      1. ssh hadoop102
      2. ssh hadoop103
  3. hadoop102-104分别打开窗⼝,查看时间是否⼀致
  4. 在hadoop102-104上测试是否能相互ping通
  5. 在hadoop102-104上测试是否能相互免密登录[ssh]
  6. 安装包上传到hadoop102的/opt/software后解压到/opt/installtar -zxvf hadoop-2.6.0.tar.gz -C /opt/install
  7. 创建软链接 ln -s hadoop-2.6.0/ hadoop
  8. 在hadoop102上修改/opt/install/hadoop/etc/hadoop/core-site.xml
    <!-- 指定 HDFS 中 NameNode 的地址 -->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop102:9000</value>
    </property>
    <!-- 指定 hadoop 运行时产生文件的存储目录 -->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/install/hadoop/data/tmp</value>
    </property>

     

  9. 在hado1o0p102上修改hdfs-site.xml
    <!--设置数据块 Block 的副本数-->
    <property>
    <name>dfs.replication</name>
    <value>3</value>
    </property>
    <!--设置SecondaryNamenode主机和端口号-->
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop104:50090</value>
    </property>

     

  10. 修改hadoop-env.sh:第25⾏export JAVA_HOME=/opt/install/jdk
  11. 修改hadoop102的/opt/install/hadoop/etc/hadoop/slaves⽂件,重写以下内容:  hadoop102  hadoop103  hadoop104
  12. 复制102的安装包到103和104上,然后分别在每台机器上创建软链接hadoop: scp -r hadoop-2.6.0 hadoop103:/opt/install scp -r hadoop-2.6.0 hadoop104:/opt/install
  13. 修改hadoop102上的/etc/profile⽂件,在最后添加以下两⾏
    export HADOOP_HOME=/opt/install/hadoop
    export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

     

  14. 复制hadoop102上的/etc/profile⽂件到hadoop103-104上,并在hadoop102-104上使⽂件⽣效: scp /etc/profile root@hadoop103:/etc/ scp /etc/profile root@hadoop104:/etc/ source /etc/profile
  15. 在hadoop102上格式化:hdfs namenode -format
  16. 在hadoop102上启动集群:start-dfs.sh
  17. 分别在hadoop102-104上通过jps查看服务启动情况
  18. 在浏览器中查看:http://hadoop102:50070
  19. 停⽌集群:stop-dfs.sh
  20. 通过jps查看服务停⽌情况
  21. 停机做快照

2、问题

格式化有问题datanode只有⼀个的,把三个主机的这三都删了,再重新格式化 /usr/local/src/hadoop/tmp /opt/install/hadoop-2.6.0/data /opt/install/hadoop-2.6.0/logs 3、使⽤HDFS shell处理移动通讯数据 1. 查看hdfs命令列表: hdfs 回车 2. 查看hdfs的⽂件操作命令列表 hdfs dfs 回车 3. 创建⽬录 hdfs dfs -mkdir -p /hdfs/shell 4. 查看⽬录 hdfs dfs -ls /hdfs/shell 5. 上传⽂件 hdfs dfs -put ./a.txt /hdfs/shell 6. 查看⽂件 hdfs dfs -cat /hdfs/shell/a.txt 7. 下载⽂件 hdfs dfs -get /hdfs/shell/a.txt ./d01 8. 查看指定⽂件或⽬录⼤⼩ hdfs dfs -du /hdfs/shell/a.txt 9. 删除指定⽂件 hdfs dfs -rm /hdfs/shell/a.txt 10. 删除指定⽬录 hdfs dfs -rm -r /hdfs  4、通过Java客户端操作hdfs 1. 创建任意⽬录 : 如 D:\myhadoop\bin 中放⼊winutils.exe 2. 配置环境变量 HADOOP_HOME:D:\myhadoop PATH中添加%HADOOP_HOME%\bin 3. 把hadoop.dll⽂件复制到c:\windows\system32中 4. 启动idea 搭建maven项⽬ 5. 添加pom.xml内容
<dependencies>
        <dependency>
               <groupId>org.apache.hadoop</groupId>
               <artifactId>hadoop-client</artifactId>
               <version>2.6.0</version>
          </dependency>
</dependencies>
6. 在src/main/resource下创建log4j.properties⽂件,添加如下内容
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
7. 编写 java代码,实现 创建⽬录,上传⽂件,下载⽂件,删除⽂件和目
package com.kgc;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class HdfsTest {
    public static void main(String[] args) throws IOException, InterruptedException {
        //mkdirs();
        //put();
        //download();
        //rm();
        rmr();
    }
    //创建目录
    private static void mkdirs() throws IOException, InterruptedException {
        URI uri = URI.create("hdfs://hadoop102:9000");
        Configuration conf=new Configuration();
        String user="root";
        //创建目录
        FileSystem fileSystem = FileSystem.get(uri,conf,user);
        Path path=new Path("/day1128");
        boolean mkdirs = fileSystem.mkdirs(path);
        fileSystem.close();
        System.out.println(mkdirs ? "创建成功" : "创建失败");
    }

    //上传文件
    private static void put() throws IOException, InterruptedException {
        URI uri = URI.create("hdfs://hadoop102:9000");
        Configuration conf=new Configuration();
        String user="root";
        //上传文件
        FileSystem fileSystem = FileSystem.get(uri,conf,user);
        Path path = new Path("/day1128/a.txt");
        Path src = new Path("day1128_hadoop/file/a.txt");
        fileSystem.copyFromLocalFile(src,path);
        fileSystem.close();
    }

    //下载文件
    private static void download() throws IOException, InterruptedException {
        URI uri = URI.create("hdfs://hadoop102:9000");
        Configuration conf=new Configuration();
        String user="root";
        //上传文件
        FileSystem fileSystem = FileSystem.get(uri,conf,user);
        Path src = new Path("/day1128/a.txt");
        Path path = new Path("day1128_hadoop/file/b.txt");
        fileSystem.copyToLocalFile(src,path);
        fileSystem.close();
    }

    //删除文件
    private static void rm() throws IOException, InterruptedException {
        URI uri = URI.create("hdfs://hadoop102:9000");
        Configuration conf=new Configuration();
        String user="root";
        //上传文件
        FileSystem fileSystem = FileSystem.get(uri,conf,user);
        Path path = new Path("/day1128/a.txt");
        fileSystem.delete(path,true);
        fileSystem.close();
    }

    //删除文件
    private static void rmr() throws IOException, InterruptedException {
        URI uri = URI.create("hdfs://hadoop102:9000");
        Configuration conf=new Configuration();
        String user="root";
        //上传文件
        FileSystem fileSystem = FileSystem.get(uri,conf,user);
        Path path = new Path("/day1128");
        fileSystem.delete(path,true);
        fileSystem.close();
    }
}

 

标签:hdfs,HDFS,fileSystem,hadoop,dfs,分布式系统,Path,hadoop102
From: https://www.cnblogs.com/hsk991213/p/17865592.html

相关文章

  • 二、HDFS的读写流程
    一、写数据(宏观)  写数据就是将客户端上的数据上传到HDFS 1.客户端向HDFS发送写数据请求 hdfsdfs-putstudents.txt/shujia/ 2.Filesystem通过rpc调用namenode的put方法 a.nn首先检查是否有足够的空间权限等条件创建这个文件,或者这个路径是否已经存在,权限......
  • Hadoop三大组件(HDFS,MapReduce,Yarn)
    1、HDFSHDFS是Hadoop分布式文件系统。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据。2、MapReduceMapReduce是一个软件框架,基于该框架能够容易地编写应用......
  • HDFS与MAPREDUCE操作
     HDFS文件操作在分布式文件系统上验证HDFS文件命令,如下。hadoopfs[genericOpitions][-ls<path>] //显示目标路径当前目录下的所有文件[-lsr<path>] //递归显示目标路径下的所有目录及文件(深度优先)[-du<path>] //以字节为单位显示目录中所有文件的大小,或该文......
  • HDFS
    目录HDFS1、HDFS概述1.1hdfs产生背景和意义1.2HDFS优缺点1.3HDFS组成架构1.4HDFS文件块大小2、HDFS的Shell(命令)3、API4、HDFS的读写流程(面试重点)4.1.1写入流程4.1.2网络拓扑-节点距离计算4.1.3机架感知4.2HDFS读数据流程5、NameNode和SecondaryNameNode5.1NN和2NN的......
  • 如何解决多线程下的共享对象问题?分布式系统又该如何应对?
    嗨,各位小米粉丝们!欢迎来到小米带你飞的微信公众号!今天我们要聊的话题可是程序员们都头疼的大问题哦——多线程情况下的对象共用问题,以及在分布式系统中的应对策略!小米要给大家详细解读一下,让你的技术面试不再被问倒!多线程中,如何解决对象共用问题?首先,我们得先了解多线程带来的挑战。......
  • HDFS集群压测实践
    1.背景在部署Hadoop集群时,作为集群运维人员,往往需要了解集群性能。即集群能够处理数据的上限,集群的瓶颈等信息。特别是在上线一批尚未使用过的机型、磁盘时,更需要了解这些硬件上的变更是否会对集群整体性能有影响。本文介绍当DataNode挂载juicefs情况下,集群的性能表现;并且和只挂......
  • HDFS基于Ranger鉴权原理
    1.背景在HDFS中,默认是通过setacl和getacl命令的方式增加和查询hdfs的acl信息。为了了解acl信息,需要亲自登陆机器执行hdfs命令,对于没有机器权限的业务人员非常不友好;同时,运维人员无法浏览HDFS所有acl信息,对于管理来说也不透明。为了解决该问题,引入了Ranger组件,将acl信息存放到Ran......
  • PySpark判断Hdfs文件路径是否存在
    背景从ScalaSpark代码转PySpark代码,同时实现连续读多个文件,避免因某些路径不存在导致程序终止。在Scala的Spark中可以直接导下面两个模块的包importorg.apache.hadoop.conf.Configurationimportorg.apache.hadoop.fs._然后调用方法就可以实现对hdfs的文件判断了valfs=......
  • HDFS Balancer存储水位稳定性原理与实践
    1.背景在HDFS分布式系统中,经常会上线新的datanode以环境集群容量不足的问题。但是往往旧datanode水位较高,甚至爆满无法写入,新datanode非常空闲,导致旧机器无法写入数据,集群的流量集中到新datanode中,造成新datanode网络延迟。为了解决上述问题,可以通过Balancer工具定时讲高水位dat......
  • HDFS Distcp数据迁移与优化实践
    1.背景对于HDFS集群而言,不可避免会将一个集群中的数据迁移到另外一个集群中。一般以下几种情况需要进行迁移:hadoop2集群中的项目数据迁移到hadoop3中。hadooprbf的一个子集群block数量在2亿~3亿,需要将大项目迁移到其他空闲子集群。海外项目数据由于历史原因存放到国内集群,根......