Hadoop学习整理

前言

吃水不忘挖井人,我看的课是这个,课程带着安装,搞虚拟机,很详细,推荐一波

思维导图

在这里插入图片描述

环境

Hadoop102:

cd / 表示的是返回/

cd ~ 表示的是返回/home/fools

$HADOOP_HOME 配置的位置为/opt/module/hadoop-3.1.3

集群出现问题

如果某个集群namenode或datanode等出现异常,这时候只要先停掉每个集群sbin/stop-xxxxx.sh,删除每个服务器的data,logs目录rm -rf data/ logs/,然后再初始化hdfs namenode -format ,就可以复原了

hdfs存储路径

/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1116405649-192.168.10.102-1632297070587/current/finalized/subdir0/subdir0

hadoop概述

大数据主要解决海量数据的采集,存储,分析计算问题。

hadoop四大优势:

  • 高可靠性:底层维护多个数据副本,某单元出现问题,也不会导致数据丢失
  • 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点
  • 高效性:mapreduce使hadoop并行工作,以加快任务处理速度
  • 高容错性: 能够自动将失败的任务重新分配

版本区别:
在这里插入图片描述

HDFS

hadoop distributed file system,分布式文件系统

  • NameNode:管理数据存储在什么位置;存储文件的元数据:文件名,文件目录结构,文件属性,以及每个文件所在的块列表和DataNode

  • DataNode:具体存储文件块数据,以及块数据的校验和

  • Secondary NameNode(2NN):每隔一段时间对NameNode元数据备份
    在这里插入图片描述

YARN

yet another resource negotiator,是一种资源协调者,是hadoop的资源管理器
在这里插入图片描述

  • resource manager是整个集群资源的管理者
  • NodeManager是单个节点服务器资源的管理者
  • client客户端提交作业给resouce manager,可以存储在多个
  • 每个Node manager上可以有多个container容器,相当于一个独立的服务器,每个container中包含applicatoinMaster(AM),是单个任务运行的老大

MapReduce

在这里插入图片描述

将任务交给很多人去做,然后将结果一起汇总在服务器

大数据生态体系

在这里插入图片描述

HDFS

在这里插入图片描述

概述

定义

分布式文件管理系统,适合一次写入,多次读出(可以追加)

优缺点

  • 优点

    高容错性:数据保存为多个副本,一个丢失后可以快速恢复

    适合处理大数据:可以处理文件规模很大,文件数量很多的文件

    可以构建在廉价机器上

  • 缺点

    不适合低延时访问

    无法高效搜索小文件

    不支持并发写入

    不支持文件随机修改,只支持追加

组成

  • NameNode:管理者master

所有HDFS的原数据名称都在这里存储

副本的配置策略

管理映射信息(哪一块数据存储在哪一块DataNode)

处理客户读写请求

  • DataNode:slave

存储实际的数据块

执行数据块的读写

  • Client:客户端

文件切分:上传HDFS之前,client会按照NameNode的块大小的要求(一般是128MB)进行切分,然后再上传

与NameNode交互,获取位置信息

与DataNode交互,获取或写入数据

提供一些命令来管理,访问HDFS

HDFS文件块大小普遍为128M,256M,这主要是和磁盘的传输速率有关,因为寻址时间为传输时间的1%是最佳状态。

如果块太大,寻址很快,传输较慢

如果块太小,寻址很慢,传输很快

Shell命令

其实hdfs的shell操作就是普通的shell操作前面加上hadoop fs - ,后面的内容和linux中差别不大

在使用xshell之前需要开启hadoop集群

`myhadoop.sh start`

or

`sbin/start-dfs.sh`

`sbin/start-yarn.sh`

举例:

想查看help:hadoop fs -help rm

创建文件:hadoop fs -mkdir /sanguo

上传

在这里插入图片描述

下载

另外还有其他的正常操作:

-ls -cat -cp -mv -tail -rm

在这里插入图片描述

HDFS API

其实万变不离其宗:

获取文件系统----创建目录----关闭资源

fs = FileSystem.get(uri,configuration,user);

fs.mkdirs(new Path("/xiyou/huaguoshan1"));

fs.close()

我们需要的操作只是获取文件系统的内容要写清楚,函数的参数传递清楚,关闭资源

package com.atguigu.hdfs;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;


// 正常的流程:获取文件系统----创建目录----关闭资源
public class HDFSclient {
   
    private FileSystem fs;

    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
   
       // 链接的集群地址
       URI uri = new URI("hdfs://hadoop102:8020");

       // 创建一个配置文件
       Configuration configuration = new Configuration();

       // 用户
       String user = "fools";

       //获取用户客户端对象
       fs = FileSystem.get(uri,configuration,user);
   }

   @After
    public void close() throws IOException {
   
        // 关闭资源
        fs.close();
    }


    @Test
    public void testmkdir() throws URISyntaxException, IOException, InterruptedException {
   
        // 创建一个文件夹
        fs.mkdirs(new Path("/xiyou/huaguoshan1"));
    }
    
    @Test
    public void testPut() throws IOException {
   
        fs.copyFromLocalFile(false,false,
                new Path("C:\\Xshell7/sunwukong.txt"),new Path("hdfs://hadoop102/xiyou/huaguoshan"));

    }
    
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值