精华内容
下载资源
问答
  • HDFS

    万次阅读 2020-10-09 07:53:19
    HDFS HDFS全称 Hadoop Distribute File System 即 Hadoop分布式文件系统

    HDFS全称 Hadoop Distribute File System 即 Hadoop分布式文件系统

    主要作用

    即存储海量数据
    为什么能存储海量数据??
    因为其空间大,空间大的原因为服务器多、磁盘多。且支持扩展

    组成部分

    管理者-Master NameNode 集群中有1~2个,用于管理集群中的工作者
    工作者-Slave DateNode 集群中有多个,正真存储和计算数据组件
    辅助管理 SecondaryNameNode 辅助管理者工作

    HDFS存储数据方式

    以数据块的方式存储数据。默认一个数据块128M,该数值可以修改
    注意:这里的128仅仅是切分数据的阈值。
    一个大的数据被切分成多个小的128的数据块,分别存储在集群多个节点的不同位置。

    数据副本机制

    数据副本默认是3份。
    一个数据存储到HDFS后,数据自动复制两份,共三份(三分相同的数据-数据冗余)

    数据副本存放机制

    第一个副本在客户端所在的节点(客户端也是集群内的节点),若客户端在集群外,那么根据一定的计算规则选一个节点
    第二份副本,在与第一份相同机柜,且不在同一个服务器的节点上。
    第三份与第一份第二份不在同一个机柜,且逻辑距离(网络拓扑)最近的机柜选择一个节点存储

    Namenode的作用

    1.维护目录树,维护命名空间。
    2.负责确定指定的文件块到具体的Datanode节点的映射关系。(在客户端与Datanode之间共享数据)
    3、管理Datanode结点的状态报告

    DataNode的作用

    1、 负责管理它所在结点上存储的数据的读写,及存储数据。.
    2、 向Namenode结点报告DataNode节点的状态。
    3、 通过流水线复制实现三份数据副本。

    展开全文
  • HDFS 第一名称节点和第二名称节点

    千次阅读 2019-03-18 17:47:37
    这里的第一名称节点类似于数据目录。其主要有两大构件构成,FsImage...所以引入第二名称节点,当第一节点中Editlog到一个临界值时,HDFS会暂停服务,由第二节点将拷贝出Editlog,复制、添加到Fslmage后方并清空原Ed...

    这里的第一名称节点类似于数据目录。其主要有两大构件构成,FsImage和Editlog,FsImage用于存储元数据(长时间不更新、Editlog用于更新数据,但是随着时间推移,Editlog内存储的数据越来越多,导致运行速度越来越慢。

    所以引入第二名称节点,当第一节点中Editlog到一个临界值时,HDFS会暂停服务,由第二节点将拷贝出Editlog,复制、添加到Fslmage后方并清空原Editlog的内容。这里有一点要注意这种备份是冷备份的形式,即没有实时性,需要停止服务,等数据恢复正常后继续使用。

    这是HDFS1.0时候处理名称节点单点故障的方法,因为它是冷备份的,不适用于大数据,所以在2.0时进行了改进。

    HA(High Availability)高可用性

    HA框架是有两个名称节点,一个是活跃节点一个是待命节点,当活跃节点出现故障时,待命节点直接顶替上去,不需要像1.0的时候那样停止备份再运行。

    刚刚知道 名称节点是有Fslmage和Editlog的,那么HA框架是怎么解决待命名称节点Fslmage和Editlog的同步的呢?

    活跃节点和待命节点之间存在一个共享存储系统,活跃节点的Editlog文件会实时存放到共享存储系统中,待命节点也会实时的去领取备份。Fslmage是实现管家的功能,在2.0中,数据节点会实时同步的给名称节点和备份名称节点发送数据(例如节点是否存活,正常等),即Fslmage是实时相当的。

     

    展开全文
  • 10hdfsapi第一个案例

    2021-01-20 12:22:29
    hdfsapi第一个案例(先创建一个包) 解决用户权限问题、获取操作对象的6种方式 以下方法是修改用户权限的操作 权限问题: 解决用户出错的几种方案: vm options: -DHADOOP_USER_NAME=root 2、设置系统环境...
  • 三章 HDFS客户端操作-3.1.3版本 3.1 HDFS客户端环境准备 1)找Windows依赖目录: 选择Hadoop-3.1.3,拷贝到无中文的目录。 2)配置HADOOP_HOME环境变量。 3)配置Path环境变量。然后重启电脑 4)创建个Maven...

    HDFS客户端操作与常用API-3.1.3版本

    1 HDFS客户端环境准备

    1)找Windows依赖目录:

    选择Hadoop-3.1.3,拷贝到无中文的目录。

    2)配置HADOOP_HOME环境变量。
    在这里插入图片描述
    3)配置Path环境变量。然后重启电脑
    在这里插入图片描述

    4)创建一个Maven工程HdfsClientDemo,并导入相应的依赖坐标+日志添加

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.3</version>
        </dependency>
    </dependencies>
    

    在项目的src/main/resources目录下,新建一个文件,命名为"log4j2.xml",在文件中填入

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="error" strict="true" name="XMLConfig">
        <Appenders>
            <!-- 类型名为Console,名称为必须属性 -->
            <Appender type="Console" name="STDOUT">
                <!-- 布局为PatternLayout的方式,
                输出样式为[INFO] [2010-01-01 00:00:00][org.test.Console]I'm here -->
                <Layout type="PatternLayout"
                        pattern="[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c{10}]%m%n" />
            </Appender>
    
        </Appenders>
    
        <Loggers>
            <!-- 可加性为false -->
            <Logger name="test" level="info" additivity="false">
                <AppenderRef ref="STDOUT" />
            </Logger>
    
            <!-- root loggerConfig设置 -->
            <Root level="info">
                <AppenderRef ref="STDOUT" />
            </Root>
        </Loggers>
    </Configuration>
    

    5)创建包名:com.qinjl.hdfs

    6)创建HdfsClient类

    public class HdfsClient{	
    @Test
    public void testMkdirs() throws IOException, InterruptedException, URISyntaxException{
    		// 1 获取文件系统
    		Configuration configuration = new Configuration();
    		// 配置在集群上运行
    		// configuration.set("fs.defaultFS", "hdfs://hadoop102:9820");
    		// FileSystem fs = FileSystem.get(configuration);
    
    		FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9820"), configuration, "qinjl");
    		// 2 创建目录
    		fs.mkdirs(new Path("/test/test01"));
    		// 3 关闭资源
    		fs.close();
    	}
    }
    

    7)执行程序

    运行时需要配置用户名称
    在这里插入图片描述
    客户端去操作HDFS时,是有一个用户身份的。默认情况下,HDFS客户端 API会从 JVM 中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=qinjl,qinjl为用户名称。

    2 HDFS的API操作

    2.1 HDFS文件上传(测试参数优先级)

    1)编写源代码

    @Test
    public void testCopyFromLocalFile() throws IOException, InterruptedException, URISyntaxException {
    		// 1 获取文件系统
    		Configuration configuration = new Configuration();
    		configuration.set("dfs.replication", "2");
    		FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9820"), configuration, "qinjl");
    		// 2 上传文件
    		fs.copyFromLocalFile(new Path("e:/test.txt"), new Path("/test.txt"));
    		// 3 关闭资源
    		fs.close();
    
    		System.out.println("over");
    }
    

    2)将hdfs-site.xml拷贝到项目的根目录下

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
    	<property>
    		<name>dfs.replication</name>
             <value>1</value>
    	</property>
    </configuration>
    

    3)参数优先级

    参数优先级排序:(1)客户端代码中设置的值 >(2)ClassPath下的用户自定义配置文件 >(3)然后是服务器的自定义配置(xxx-site.xml) >(4)服务器的默认配置(xxx-default.xml)

    2.2 HDFS文件下载

    @Test
    public void testCopyToLocalFile() throws IOException, InterruptedException, URISyntaxException{
    		// 1 获取文件系统
    		Configuration configuration = new Configuration();
    		FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9820"), configuration, "qinjl");
    		// 2 执行下载操作
    		// boolean delSrc 指是否将原文件删除
    		// Path src 指要下载的文件路径
    		// Path dst 指将文件下载到的路径
    		// boolean useRawLocalFileSystem 是否开启文件校验
    		fs.copyToLocalFile(false, new Path("/test.txt"), new Path("e:/test2.txt"), true);
    		// 3 关闭资源
    		fs.close();
    }
    

    2.3 HDFS删除文件和目录

    @Test
    public void testDelete() throws IOException, InterruptedException, URISyntaxException{
    	// 1 获取文件系统
    	Configuration configuration = new Configuration();
    	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9820"), configuration, "qinjl");
    	// 2 执行删除
    	fs.delete(new Path("/0508/"), true);	
    	// 3 关闭资源
    	fs.close();
    }
    

    2.4 HDFS文件更名和移动

    @Test
    public void testRename() throws IOException, InterruptedException, URISyntaxException{
    	// 1 获取文件系统
    	Configuration configuration = new Configuration();
    	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9820"), configuration, "qinjl"); 
    	// 2 修改文件名称
    	fs.rename(new Path("/test.txt"), new Path("/banhua.txt"));	
    	// 3 关闭资源
    	fs.close();
    }
    

    2.5 HDFS文件详情查看

    查看文件名称、权限、长度、块信息

    @Test
    public void testListFiles() throws IOException, InterruptedException, URISyntaxException{
    	// 1获取文件系统
    	Configuration configuration = new Configuration();
    	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9820"), configuration, "qinjl"); 	
    	// 2 获取文件详情
    	RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
    		
    	while(listFiles.hasNext()){
    		LocatedFileStatus status = listFiles.next();
    		// 输出详情
    		// 文件名称
    		System.out.println(status.getPath().getName());
    		// 长度
    		System.out.println(status.getLen());
    		// 权限
    		System.out.println(status.getPermission());
    		// 分组
    		System.out.println(status.getGroup());	
    		// 获取存储的块信息
    		BlockLocation[] blockLocations = status.getBlockLocations();
    
    		for (BlockLocation blockLocation : blockLocations) {
    			// 获取块存储的主机节点
    			String[] hosts = blockLocation.getHosts();
    				
    			for (String host : hosts) {
    				System.out.println(host);
    			}
    		}
    			
    		System.out.println("-----------华丽的分割线----------");
    	}
        // 3 关闭资源
        fs.close();
    }
    

    2.6 HDFS文件和文件夹判断

    @Test
    public void testListStatus() throws IOException, InterruptedException, URISyntaxException{
    	// 1 获取文件配置信息
    	Configuration configuration = new Configuration();
    	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9820"), configuration, "qinjl");
    		
    	// 2 判断是文件还是文件夹
    	FileStatus[] listStatus = fs.listStatus(new Path("/"));
    		
    	for (FileStatus fileStatus : listStatus) {
    		// 如果是文件
    		if (fileStatus.isFile()) {
    				System.out.println("f:"+fileStatus.getPath().getName());
    			}else {
    				System.out.println("d:"+fileStatus.getPath().getName());
    			}
    		}
    	// 3 关闭资源
    	fs.close();
    }
    
    展开全文
  • hdfs

    千次阅读 2015-07-01 15:40:09
    OK,现在是想要学习一下hdfs的api和shell的使用方法。 首先,需要了解的是hdfs是什么?...dfs运行个文件系统的命令,在hadoop支持的文件系统中。 namenode -format 格式化dfs文件系统 secondar

    OK,现在是想要学习一下hdfs的api和shell的使用方法。


    首先,需要了解的是hdfs是什么?它有什么特点?它能用来做什么?



    hdfs:

    使用方式:hdfs  --config confdir command


    dfs运行一个文件系统的命令,在hadoop支持的文件系统中。

    namenode  -format  格式化dfs文件系统

    secondarynamenode :运行DFS的第二个namenode

    namenode:运行DFS  namenode

    journalnode:  运行DFS的日志节点

    datanode:运行DFS  data节点

    dfsadmin:   运行DFS管理客户端

    haadmin:运行DFS 高可用管理客户端

    fsck:运行DFS文件系统检查功能

    balancer:运行集群负载均衡功能

    jmxget:从namenode或者datanode中获得JMX到处的值(这个其实我不懂)



    从结构来说:namenode,secondnamenode,journalnode这是架构。


    而hdfs dfs其中涉及的就是具体的针对Hdfs的操作命令了。


    我的疑问有很多:


    1:hdfs中的权限问题是如何划分的?我看到hdfs中也有组,文件系统树也是一个分叉型的,上面是一个/,几乎和Linux的文件系统是一样的。

    2:能否使用命令行查看,各个datanode节点使用的本地的文件系统(ext4或者xfs文件系统中使用的路径)。

    3:hdfs内部的文件树的容量是怎么分布的?

    比如说你在里面建立了一个目录,空间是怎么分布的?需要分区吗?



    (使用hdfs dfs -ls -R /可以查看hdfs内的文件树的所有内容,

    关于我想要学习的东西可以通过: hdfs dfs命令看到内部的子命令)





    这可以看到一个整体的架构,还有namenode的url,整体的容量,管理节点的内容。


    (我感觉有问题,linux下的命令看到的是分区的内容,但是这里看到的却是一个总体的大小??????,

    使用hdfs dfs -df -h /idd命令看到的内容也是一样,这是为什么,我认为这不合理啊,应该看到的是内部的目录内容才对啊,为什么看到的还是一个整体的hdfsURL和大小????)







    这可以看出每个目录使用的空间大小。




    我能否认为hdfs内部设计的文件系统机制没有linux的好?毕竟只是一个另类的东西














    展开全文
  • flume sink到hdfs第一列是时间戳,怎么去掉?如下 1492665578789 111 1492665580789 222 1492666625916 qqqq 1492664454650  1492664455642 q 【问题描述】 用flume收集本地文件夹下的文件变动 source...
  • 今年上半年一直忙于云南省公安厅JZ大数据治理平台的项目,已经大半年没有更新技术博客了,这篇博客算是2019年的第一篇吧。 关于HDFS副本存放策略,一直以来总是会听到和看到两种不同的观点。 今天看了Hadoop官网上...
  • HDFS对象存储的版本管理设计

    千次阅读 2017-07-24 23:17:31
    版本管理是个很实用的需求,用户往往对于份数据会有历史版本保存的需求,不仅仅说只是为了防止未来的时候会回退到这个版本的数据。本文我们就来看看Ozone是如何支持这个功能的。目前此功能尚未开发,还处于初始...
  • 第1HDFS概述

    2020-04-06 17:55:57
    1.1 HDFS产出背景及定义 1.2 HDFS优缺点 1.3 HDFS组成架构 1.4 HDFS文件块大小(面试重点)
  • 参考 王家林大数据IMF系列 ...hdfs架构分析与第一hdfs应用程序 分析 HDFS架构 .主从结构 -主节点,只有一个:namenode(HA下会有多个NameNode) -从节
  • hdfs第四步报错format namenode

    千次阅读 2017-07-26 12:47:30
    现象:在安装HDFS的过程中,format NameNode 失败,查看界面上“format namenode”一步的操作日志,可看到其中有以下两种之的报错 Running in non-interactive mode, and data appears to exist in QJM to ...
  • 1 HDFS产出背景及定义 1.1 HDFS产生背景 随着数据量越来越大,在个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要种系统来管理多台机器上的文件,这就是...
  • 第一HDFS概述.pptx

    2019-08-10 09:58:24
    随着数据量越来越大,在个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要种系统来管理多台机器上的文件,这就是...HDFS只是分布式文件管理系统中的种。
  • HDFSHDFS基本介绍

    千次阅读 2020-12-25 16:01:02
    HDFS基本介绍HDFS的Master-Slave结构HDFS角色作用简介HDFS 分块存储抽象成数据块的好处HDFS 副本机制名字空间(NameSpace)NameNode 功能DataNode 功能 ...一般HDFS 集群只有个 Namenode 和一定数目的D
  • HDFS(Hadoop Distributed File System)是Hadoop分布式计算中的数据存储系统,是基于流数据模式访问和处理...1. HDFS中的基础概念 Block:HDFS中的存储单元是每个数据块block,HDFS默认的最基本的存储单位是64M的数
  • HDFS版本信息对比2.6.0-3.0.0

    千次阅读 2019-02-22 10:57:03
    HDFS版本信息对比2.6.0-3.0.0 目前大数据集群的Hadoop主要版本为2.6.0,版本日期为2014.11.18。为了适应大数据的不断发展和更新换代,特此分享Hadoop主要版本信息,为版本升级做准备。 Hadoop主要包括五个部分:...
  • HDFS概述

    千次阅读 2021-04-23 18:14:10
    本章节简述HDFS
  • 三章 HDFS的API操作

    2021-05-23 19:02:59
    参照:https://www.cnblogs.com/qiu-hua/p/13285628.html,注意pom.xml中的hadoop版本号一定要和集群上的版本号保持一致 3.2 HDFS的API实操 HDFS创建文件夹 HDFS文件上传 HDFS文件下载 HDFS文件更名和移动 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,103
精华内容 45,641
关键字:

hdfs第一版本