IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 2021暑期学习第25天 -> 正文阅读

[大数据]2021暑期学习第25天

前言

  • 时间:2021.8.13
  • 内容:
    • HDFS 组件的组成
    • YARN 组件的组成
    • MapReduce 架构
    • HDFS 操作命令
    • 完全分布式安装

1 HDFS组件的组成

在这里插入图片描述

[hyidol@centos7 hadoop-3.3.1]$ sbin/start-dfs.sh
Starting namenodes on [centos7]
Starting datanodes
Starting secondary namenodes [centos7]
[hyidol@centos7 hadoop-3.3.1]$ jps
1442 NameNode
1554 DataNode
1892 Jps
1740 SecondaryNameNode
  • 架构:主从架构,主的去管理从的。
    • NameNode 和 DataNode 是一对多关系。
    • 1 NameNode-》1000 DataNode
  • 进程:
    • NameNode: 存储元信息(文件的描述信息)。文件大小,创建时间,创建人,最后修改时间,都是文件的描述信息。
    • SecondaryNameNode:复制和备份 NameNode 的数据。
    • DataNode: 存储数据信息(文件)。
  • 文件块:
    • dfs.replication = 1 (文件块默认128MB)

2 YARN组件的组成

在这里插入图片描述

  • 架构:主从架构。
  • 进程:
    • ResourceManager:是主节点,管理其他的所有 NodeManagers
    • NodeManagers:是从节点,管理本地资源。容器,任务管理…
  • 其他(这个不太明白)
    • ApplicationMaster:针对MR每个请求job的抽象封装。
    • Container:将来运行在YARN上的每一个任务都会给其分配资源,Container就是当前任务所需资源的抽象封装。
  • 容器:Docker,启动一个进程/线程,就是操作系统

3 MapReduce架构

在这里插入图片描述

  • Map阶段:就是把需要计算的数据安装需求分成多个MapTask任务来执行。(分)
  • Reduce极端:把Map阶段处理完的结果拷贝过来,根据需求进行汇总计算。(合)

4 HDFS 操作命令

在这里插入图片描述

  • 语法: hdfs 子命令 -命令 参数

  • 操作:$HADOOP_HOME/…

    • bin/hdfs dfs

在这里插入图片描述

  • 上传一个文件到 HDFS 的根目录下的 input 目录。

    bin/hdfs dfs –mkdir /input //在 hdfs 中创建一个目录 input
    

在这里插入图片描述

```
bin/hdfs dfs –put /home/hadoop/user /input/ //user 文件上传到 hdfs 的/input/
```

在这里插入图片描述

  • 查看目录下的子目录,及子目录下的文件,递归查看。

    in/hdfs dfs –ls –R /
    

在这里插入图片描述

  • 查看文件内容。

    bin/hdfs dfs –cat /input/user
    
  • 查看 HDFS 文件系统的根目录下有多少个文件或目录。

    bin/hdfs dfs -ls /
    
  • 基于 YARN 的 MapReduce 计算:

在这里插入图片描述

  • 运行结束,查看 HDFS 目录结构:

在这里插入图片描述

  • 查看运行结果目录的内容:

在这里插入图片描述

5 ?完全分布式安装

5-1 免密互通+JDK

ip主机名用户名软件
192.168.137.110master-yhhyidolJDK
192.168.137.111slave1-yhhyidolJDK
192.168.137.112slave2-yhhyidolJDK
  • 虚拟机创建三个 Centos7 系统的虚拟机。

  • 更改/etc/sysconfig/network-scripts/ifcfg-enp0s3文件,重启网络,连通可ping上外网。

    BOOTPROTO=static #dchp好像也行
    ONBOOT=yes #开机自启
    IPADDR=192.168.137.110 #主机地址
    NETMASK=255.255.255.0 #子网掩码
    GATEWAY=192.168.137.1 #网关
    DNS1=192.168.43.1 #外机网络地址
    
    [hyidol@master-yh ~]$ service network restart #重启网络
    
  • 实现三台机子之间可以直接进行免密登录。(一定要是普通用户下进行)

    [hyidol@master-yh ~]$ ssh-keygen -t rsa
    [hyidol@master-yh ~]$ ssh-copy-id -i 主机名
    [hyidol@master-yh ~]$ ssh 主机名 //测试用
    
  • 配置好 IP 地址映射,在/etc/hosts 文件中添加 ip 地址和主机名。(需要切换到root操作,远程传输时更方便,不用一个个赋权限)

    192.168.137.110 master-yh
    192.168.137.111 slave1-yh
    192.168.137.112 slave2-yh
    
    [root@master-yh ~]$ scp /etc/hosts root@slave1-yh:/etc/
    
  • 配置好 JDK,远程传输。

    [hyidol@master-yh ~]$ tar –zxvf jdk-8vcccc.tar.gz
    [hyidol@master-yh ~]$ mv jdk1.8.0_301 jdk-1.8.0
    [hyidol@master-yh ~]$ sudo mv jdk-1.8.0/ /usr/java/
    [hyidol@master-yh ~]$ vi .bashrc
    
    export JAVA_HOME=/usr/java/jdk-1.8.0
    export PATH=$PATH:$JAVA_HOME/bin
    
    [hyidol@master-yh ~]$ source .bashrc
    [hyidol@master-yh ~]$ java
    [hyidol@master-yh ~]$ javac
    
  • 关闭防火墙,禁用防火墙。

[hyidol@master-yh ~]$ su
[hyidol@master-yh ~]$ service firewalld stop
[hyidol@master-yh ~]$ systemctl disable firewalld
  • 备注:如果因前面不是在root下进行的造成一些权限障碍,增加权限也是可以的。【以下为详细传输流程】

    • ---------下方是master-jm 主机操作---------

    • 创建/usr/java/目录。

    • 赋予权限: chmod –R 777 java/

    • 解压 jdk 移动 java 目录下。

    • 配置环境变量.bashrc。

    • 通过 master-jm 主机 ssh 登录到其他三台主机,进行如下操作:

    • ---------下方是其他机子的操作----------

    • 创建/usr/java/目录 (如果是sudo 就可以忽略后面赋权限)

    • 赋予权限:chmod –R 777 java(以slave1为例)

      [hyidol@master-yh java]$ ssh slave1-yh
      [hyidol@slave1-yh ~]$ sudo mkdir /usr/java
      [hyidol@slave1-yh ~]$ exit
      
    • ---------下方是主机远程传输给其他机子------

    • master-jm 主机。把 jdk-1.8.0 目录,远程传送到其他三台主机:(以slave1为例)

      [hyidol@master-yh ~]$ cd /usr/java
      [hyidol@master-yh java]$ scp jdk-1.8.0/ @slave1-yh:/usr/java/   
      jdk-1.8.0: not a regular file
      [hyidol@master-yh java]$ scp -r jdk-1.8.0/ @slave1-yh:/usr/java/
      scp: /usr/java//jdk-1.8.0: Permission denied
      [hyidol@master-yh java]$ sudo scp -r jdk-1.8.0/ @slave2-yh:/usr/java/
      
    • 环境变量配置好之后,传送到其他三台主机:

      [hyidol@master-yh ~]$ cd 
      [hyidol@master-yh ~]$ scp .bashrc hyidol@slave1-yh:~/
      [hyidol@master-yh ~]$ scp .bashrc hyidol@slave2-yh:~/
      

5-2 安装hadoop

  • 上传、解压,删掉暂时无用的share/doc文件。

  • 配置环境变量。注意改完要:source .bashrc

    export HADOOP_HOME=/usr/java/hadoop-3.3.1
    export HADOOP_MAPRED_HOME=/usr/java/hadoop-3.3.1
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
  • 其他配置:位置$HADOOP_HOME/etc/hadoop/

    hadoop-3.2.0/etc/hadoop/core-site.xml
    hadoop-3.2.0/etc/hadoop/hdfs-site.xml
    hadoop-3.2.0/etc/hadoop/mapred-site.xml
    hadoop-3.2.0/etc/hadoop/yarn-site.xml
    

    参考:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/ClusterSetup.html

    • core-site.xml

      <configuration>
          <property>
              <name>fs.defaultFS</name>
              <value>hdfs://master-yh:9000</value>
          </property>
      </configuration>
      
    • hdfs-site.xml

      <configuration>
          <property>
              <name>dfs.replication</name>
              <value>1</value>
          </property>
          <property>
              <name>dfs.namenode.name.dir</name>
              <value>/opt/hdfs/name</value>
          </property>    
          <property>
              <name>dfs.datanode.data.dir</name>
              <value>/opt/hdfs/data</value>
          </property>    
      </configuration>
      
    • mapred-site.xml

      <configuration>
          <property>
              <name>mapreduce.framework.name</name>
              <value>yarn</value>
          </property>
          <property>
              <name>mapreduce.application.classpath</name>
              <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
          </property>
      </configuration>
      
    • yarn-site.xml

      <configuration>
      	<!-- Reducer获取数据的方式 -->
      	<property>
              <name>yarn.nodemanager.aux-services</name>
              <value>mapreduce_shuffle</value>
      	</property>
          <property>
              <name>yarn.nodemanager.env-whitelist</name>
         <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
          </property>
          <!-- 指定启动YARN的ResourceManager的主机地址 -->
      	<property>
              <name>yarn.resourcemanager.hostname</name>
              <value>master-yh</value>
      	</property>
      </configuration>
      
  • 需要的目录/opt/hdfs/name 和/opt/hdfs/data 两个目录需要手动创建,并赋予权限。 配置 HDFS 需要 name 目录和 data 目录。

    [hyidol@master-yh hadoop]$ cd /opt/
    [hyidol@master-yh opt]$ sudo mkdir hdfs
    [sudo] hyidol 的密码:
    [hyidol@master-yh opt]$ ll
    总用量 0
    drwxr-xr-x. 2 root root 6 9月  29 07:43 hdfs
    [hyidol@master-yh opt]$ su
    密码:
    [root@master-yh opt]# chmod -R 777 hdfs/
    [root@master-yh opt]# exit
    exit
    [hyidol@master-yh opt]$ cd hdfs
    [hyidol@master-yh hdfs]$ mkdir name
    [hyidol@master-yh hdfs]$ mkdir data
    [hyidol@master-yh hdfs]$ ll
    总用量 0
    drwxrwxr-x. 2 hyidol hyidol 6 9月  29 07:45 data
    drwxrwxr-x. 2 hyidol hyidol 6 9月  29 07:45 name
    

    每一台主机,都需要操作!!比如slave1-yh:

    [hyidol@master-yh hdfs]$ ssh slave1-yh
    Last login: Wed Sep 29 04:04:39 2021 from master-yh
    [hyidol@slave1-yh ~]$ cd /opt/
    [hyidol@slave1-yh opt]$ sudo mkdir hdfs
    [sudo] hyidol 的密码:
    [hyidol@slave1-yh opt]$ su
    密码:
    [root@slave1-yh opt]# chmod -R 777 hdfs/
    [root@slave1-yh opt]# exit
    exit
    [hyidol@slave1-yh opt]$ cd hdfs
    [hyidol@slave1-yh hdfs]$ mkdir name
    [hyidol@slave1-yh hdfs]$ mkdir data
    

    汇总下:

    cd /opt/
    sudo mkdir hdfs (密码是hyidol)
    su (密码是root)
    chmod -R 777 hdfs/
    exit
    cd hdfs
    mkdir name
    mkdir data
    
  • 配置worker。注意worker 是设置DataNode节点的,所以不用把master加上。

    [hyidol@master-yh hadoop]$ vi /usr/java/hadoop-3.3.1/etc/hadoop/workers
    slave1-yh
    slave2-yh
    
  • 把 hadoop-3.3.1 目录传送到其他三台主机。

    [hyidol@master-yh java]$ scp -r /usr/java/hadoop-3.3.1/ hyidol@slave1-yh:/usr/java/
    
    • (已解决)出现如下权限问题的时候,有可能不是说源文件的权限不够,而是需要复制的位置没有权限,不能写入文件:

      [root@master-yh java]# scp -r hadoop-3.3.1/ hyidol@slave1-yh:/usr/java/        
      scp: /usr/java//hadoop-3.3.1: Permission denied
      [hyidol@master-yh java]$ ssh slave1-yh
      [hyidol@slave1-yh usr]$ su
      [root@slave1-yh usr]# chmod -R 777 java
      [root@slave1-yh usr]# exit
      
  • 环境变量配置也要传送。

    [hyidol@master-yh java]$ cd 
    [hyidol@master-yh ~]$ scp .bashrc hyidol@slave1-yh:~/
    [hyidol@master-yh ~]$ scp .bashrc hyidol@slave2-yh:~/
    
  • 格式 HDFS。

    [hyidol@master-yh ~]$ cd /usr/java/hadoop-3.3.1/
    [hyidol@master-yh hadoop-3.3.1]$ bin/hdfs namenode -format
    
    • 去这个目录下看看是否有东西,有东西就成功了。

      [hyidol@master-yh /]$ cd /opt/hdfs/name/current/
      [hyidol@master-yh current]$ ls
      fsimage_0000000000000000000  fsimage_0000000000000000000.md5  seen_txid  VERSION
      
  • 启动 hadoop 所有服务。这里的没日志警告不用管,再启动就会发现它自己给创建了,没创的话给个权限就行。

    [hyidol@master-yh ~]$ start-all.sh
    WARNING: Attempting to start all Apache Hadoop daemons as hyidol in 10 seconds.
    WARNING: This is not a recommended production deployment configuration.
    WARNING: Use CTRL-C to abort.
    Starting namenodes on [master-yh]
    Starting datanodes
    slave1-yh: WARNING: /usr/java/hadoop-3.3.1/logs does not exist. Creating.
    slave2-yh: WARNING: /usr/java/hadoop-3.3.1/logs does not exist. Creating.
    Starting secondary namenodes [master-yh]
    Starting resourcemanager
    Starting nodemanagers
    
    • master

      [hyidol@master-yh hadoop-3.3.1]$ jps
      15249 SecondaryNameNode
      15060 NameNode
      15492 ResourceManager
      15789 Jps
      
    • slave1

      [hyidol@slave1-yh hadoop-3.3.1]$ jps
      18497 DataNode
      18594 NodeManager
      18710 Jps
      
    • slave2

      [hyidol@slave2-yh hadoop-3.3.1]$ jps
      3015 DataNode
      3112 NodeManager
      3228 Jps
      

5-3 报错

  • 一开始jps跑出来的节点都正常(master4个slave3个),9870网页也能显示这些节点,但是8088页面就显示不出来哎(那个active node总是0个)

  • 小伙伴说是我集群搭的不规范,按这个搭更好,写个脚本更方便。但是我翻了记录,之前这种搭建方法也是能成功的呀(困惑,先学会一种嘛~

在这里插入图片描述

  • 然后找到一个类似的博客:hadoop启动 datanode的live node为0 这里说看下datanode的日志,确实跟那个端口有关系的亚子,然后我就跟着做了一遍增加8031和9000和端口权限的事儿。想不到我这憨批远程连接忘退出了,在slave里各种start-all,结果当然…乱七八糟的。

  • 后来小伙伴说:“dd会上报dn节点状态是否活着 那个页面都没显示到dd active说明上报有问题 查下dd日志针对具体问题解决下 可能是配置问题dd没起来。”虽然每太明白这句话,但是仿佛找到了个切入点,之前看日志都不知道从哪里去看问题,这回也倒好,一开就看到问题了。(一直都是报同个问题,只是我的潜意识刻意去回避了,假装它是对的)

    Retrying connect to server: 0.0.0.0/0.0.0.0:8031. Already tried 0 time(s);
    
  • 百度之后一堆答案,加上老师此时跟我说:“差一个resourcemanager.hostname的配置。”我突然就悟了,去看了下site文件,噢是没写…加上还是错,才发现自己笔记漏了一小段…是由于yarn-site.xml没写完导致的…

  • 这里附个前辈的笔记,超级详细,我看的时候感觉自己又懂了一些以前模棱两可的东西呢~

  • 如果是节点跑的不对,可以去日志里排查。比如报了错误:

    • $HADOOP_HOME/logs/ DataNode 没有启动:查看 hadoop-hadoop-datanode-slave1-jm.log
    • NodeManager 没有启动:查看 hadoop-hadoop-nodemanager-slave1-jm.log
    • NameNode 没有启动:查看 hadoop-hadoop-namenode-master-jm.log

5-4 成功

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 17:09:36  更:2021-10-03 17:12:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:20:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码