栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

hadoop入门

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

hadoop入门

学习日志(hadoop入门)

该文章为自己整理流程

文章目录
  • 学习日志(hadoop入门)
  • 前言
  • 一、从Hadoop框架讨论大数据生态
    • 1.1 Hadoop是什么
    • 1.2 Hadoop的优势
    • 1.3 Hadoop的组成
      • 1.3.1 HDFS 架构概述
      • 1.3.2 Yarn 架构概述
      • 1.3.3 Map Reduse 架构概述
    • 1.4 大数据生态体系
  • 二、Hadoop运行环境搭建
    • 2.1 模板虚拟机环境准备
    • 2.2 克隆虚拟机
    • 2.3 在hadoop102安装JDK
    • 2.4 在hadoop102安装Hadoop
    • 2.5 Hadoop目录结构
  • 三、 Hadoop运行模式(完全分布式)
    • 3.1 准备3台客户机(关闭防火墙、静态ip、主机名称)
    • 3.2 编写集群分发脚本xsync
    • 3.3 SSH免密登录配置
    • 3.4 集群配置
    • 3.5 群起集群
    • 3.6 集群启动/停止方式总结
    • 3.7 配置历史服务器
    • 3.8 配置日志的聚集
    • 3.9 编写hadoop集群常用脚本
    • 3.10 集群时间同步


前言

大数据小学生一枚,我会把我每一阶段的学习内容整理记录下来


一、从Hadoop框架讨论大数据生态 1.1 Hadoop是什么
  1. hadoop是一个有apache基金会所开发的分布式系统基础架构(什么是分布式,就是一个工作由很多个服务器来同时运行)

  2. 主要解决:海量数据的存储和分析计算问题(传统的工具存储不了很多,计算不了这么快)

  3. hadoop是一个更为广泛的概念–hadoop生态圈

1.2 Hadoop的优势
  1. 高可靠性:hadoop底层维护多个副本(数据备份),所以即使hadoop某个计算元素或存储出现故障,也不会导致数据丢失。
  2. 高扩展性:在集群分配任务数据,可以方便的拓展数以千计的节点
  3. 高效性:在MAPreduce的思想下,hadoop是并行工作的,以加快任务处理速度。
  4. 高容错性:能够自动将失败的任务重新分配。
1.3 Hadoop的组成

1.3.1 HDFS 架构概述
  1. NameNode(nn): 存储文件的元数据,如文件名,文件目录,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表
    和块所在的DataNode等
    例:武功秘籍的目录
  2. DataNode(dn):在本地文件系统存储文件块数据,以及数据的效验核。
    例:实实在在的武功秘籍
  3. Secondary NameNode(2nn):用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据快照。起到辅助作用。
1.3.2 Yarn 架构概述
  1. Resource Manager的主要作用:处理客户端请求>>监控Node Manager>>启动或监控Application Master>>资源的分配与调度
  2. Node Manager的主要作用:管理单个节点上的资源>>处理来自Resource Manager的命令>>处理Application Master的命令
  3. Application Master的主要作用:负责数据的切分>>为应用程序申请资源并分配给内部的任务>>任务的监控与容错
  4. container:container是yarn中的资源抽象,它封装了某个节点上的多维度资源,如内存,CPU,磁盘,网络等。
1.3.3 Map Reduse 架构概述

Map Reduse将计算过程分为两个阶段:Map 和 Reduce

  1. Map: 将待分析数据分到多台服务器,一个服务器做其中的一点点
  2. Reduce:将分开以后的数据整合成一个结果
1.4 大数据生态体系

  1. Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
  2. Flume:Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;
  3. Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统;
  4. Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
  5. Flink:Flink是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。
  6. Oozie:Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统。
  7. Hbase:Hbase是一个分布式的、面向列的开源数据库。Hbase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
  8. Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
  9. ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
二、Hadoop运行环境搭建 2.1 模板虚拟机环境准备
  1. 准备一台模板虚拟机hadoop100,虚拟机配置要求如下:

    注:本文Linux系统环境全部以CentOS-7.5-x86-1804为例说明

    模板虚拟机:内存4G,硬盘50G,安装必要环境,为安装hadoop做准备
    代码如下(示例):

    [root@hadoop100 ~]# yum install -y epel-release
    [root@hadoop100 ~]# yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd 	openssl-static tree iotop git
    

    使用yum安装需要虚拟机可以正常上网,yum安装前可以先测试下虚拟机联网情况
    一般正常情况下配置的虚拟机都是没问题的
    测试网络是否连接的方法:ping www.baidu.com

  2. 关闭防火墙,关闭防火墙开机自启

    [root@hadoop100 ~]# systemctl stop firewalld
    [root@hadoop100 ~]# systemctl disable firewalld
    

    但是这里有个问题,我的虚拟机没有安装这个命令,所以我用的 service iptables stop

  3. 创建atguigu用户,并修改atguigu用户的密码

    [root@hadoop100 ~]# useradd atguigu
    [root@hadoop100 ~]# passwd atguigu
    
  4. 配置atguigu用户具有root权限,方便后期加sudo执行root权限的命令

    [root@hadoop100 ~]# vim /etc/sudoers
    

    修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:

    注:查看编辑中的文件的行数命令:set nu

  5. 在/opt目录下创建文件夹,并修改所属主和所属组
    a.在/opt目录下创建module、software文件夹

    [root@hadoop100 ~]# mkdir /opt/module
    [root@hadoop100 ~]# mkdir /opt/software
    

    b.修改module、software文件夹的所有者和所属组均为atguigu用户(此处不修改会出现权限问题)

    [root@hadoop100 ~]# chown atguigu:atguigu /opt/module 
    [root@hadoop100 ~]# chown atguigu:atguigu /opt/software
    

    c.查看module、software文件夹的所有者和所属组

    [root@hadoop100 ~]# cd /opt/
    [root@hadoop100 opt]# ll
    总用量 12
    drwxr-xr-x. 2 atguigu atguigu 4096 5月  28 17:18 module
    drwxr-xr-x. 2 root    root    4096 9月   7 2017 rh
    drwxr-xr-x. 2 atguigu atguigu 4096 5月  28 17:18 software
    
  6. 卸载虚拟机自带的open JDK

    [root@hadoop100 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
    
  7. 重启虚拟机

    [root@hadoop100 ~]# reboot
    
2.2 克隆虚拟机
  1. 利用模板机hadoop100,克隆三台虚拟机:hadoop102 hadoop103 hadoop104

  2. 修改克隆机IP,以下以hadoop105举例说明(该行为要在root用户下)
    a.删除d 修改最后eth1为eth0,并复制物理地址,详情见图片

    [root@hadoop100 ~]# vim /etc/udev/rules.d/70-persistent-net.rules  
    

    修改之前:
    修改之后:

    b.更新物理地址,更新静态IP

    [root@hadoop100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0  
    

    修改之前:
    修改之后:

    c.更改用户名

    [root@hadoop100 ~]# vim /etc/sysconfig/network   
    

    d.更改hosts文件,添加集群IP地址

    [root@hadoop100 ~]# vim /etc/hosts   
    


    e.查看Linux虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8


    f.查看Windows系统适配器VMware Network Adapter VMnet8的IP地址

    g.保证Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。

  3. 重启克隆机hadoop105

  4. 修改windows的主机映射文件(hosts文件)
    1. 如果操作系统是window7,可以直接修改
    2. 如果操作系统是window10,先拷贝出来,修改保存以后,再覆盖即可
    (a)进入C:WindowsSystem32driversetc路径
    (b)打开hosts文件并添加如下内容,然后保存

    			192.168.1.100 hadoop100
    			192.168.1.101 hadoop101
    			192.168.1.102 hadoop102
    			192.168.1.103 hadoop103
    			192.168.1.104 hadoop104
    			192.168.1.105 hadoop105
    			192.168.1.106 hadoop106
    			192.168.1.107 hadoop107
    			192.168.1.108 hadoop108
    
2.3 在hadoop102安装JDK
  1. 卸载现有JDK
    [atguigu@hadoop102 ~]$ rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
    
  2. 用Xftp工具将JDK导入到opt目录下面的software文件夹下面
  3. 在Linux系统下的opt目录中查看软件包是否导入成功
    [atguigu@hadoop102 ~]$ ls /opt/software/
    
    看到如下结果:
    hadoop-3.1.3.tar.gz  jdk-8u212-linux-x64.tar.gz
    
  4. 解压JDK到/opt/module目录下
    [atguigu@hadoop102 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
    
  5. 配置JDK环境变量
    (1)新建/etc/profile.d/my_env.sh文件
    [atguigu@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
    
    添加如下内容:
    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_212
    export PATH=$PATH:$JAVA_HOME/bin
    
    (2)保存后退出
    (3)source一下/etc/profile文件,让新的环境变量PATH生效
    [atguigu@hadoop102 ~]$ source /etc/profile
    
  6. 测试JDK是否安装成功
    [atguigu@hadoop102 ~]$ java -version
    
    如果能看到以下结果,则代表Java安装成功。
    java version "1.8.0_212"
    
    如果没有结果则重启虚拟机,但是我自己没有碰到这个情况,一般一下就OK了
2.4 在hadoop102安装Hadoop

Hadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
注意:该操作要在创建的用户下操作

  1. 进入到Hadoop安装包路径下(上边已经用Xftp拉到虚拟机 software/ 下了)
    [atguigu@hadoop102 ~]$ cd /opt/software/
    
  2. 解压安装文件到/opt/module下面
    [atguigu@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
    
  3. 查看是否解压成功
    [atguigu@hadoop102 software]$ ls /opt/module/hadoop-3.1.3
    
  4. 将Hadoop添加到环境变量
    (1)获取Hadoop安装路径
    [atguigu@hadoop102 hadoop-3.1.3]$ pwd
    /opt/module/hadoop-3.1.3
    
    (2)打开/etc/profile.d/my_env.sh文件
    sudo vim /etc/profile.d/my_env.sh
    
    在my_env.sh文件末尾添加如下内容:(shift+g)
    #HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-3.1.3
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    
    (3)保存后退出
    (4)让修改后的文件生效
    [atguigu@hadoop102 hadoop-3.1.3]$ source /etc/profile
    
  5. 测试是否安装成功
    [atguigu@hadoop102 hadoop-3.1.3]$ hadoop versionHadoop 3.1.3
    
    与安装JDK的环境变量相同,如果失败重启虚拟机。
2.5 Hadoop目录结构
  1. 查看Hadoop目录结构
     [atguigu@hadoop102 hadoop-3.1.3]$ ll
    总用量 52
    drwxr-xr-x. 2 atguigu atguigu  4096 5月  22 2017 bin
    drwxr-xr-x. 3 atguigu atguigu  4096 5月  22 2017 etc
    drwxr-xr-x. 2 atguigu atguigu  4096 5月  22 2017 include
    drwxr-xr-x. 3 atguigu atguigu  4096 5月  22 2017 lib
    drwxr-xr-x. 2 atguigu atguigu  4096 5月  22 2017 libexec
    -rw-r--r--. 1 atguigu atguigu 15429 5月  22 2017 LICENSE.txt
    -rw-r--r--. 1 atguigu atguigu   101 5月  22 2017 NOTICE.txt
    -rw-r--r--. 1 atguigu atguigu  1366 5月  22 2017 README.txt
    drwxr-xr-x. 2 atguigu atguigu  4096 5月  22 2017 sbin
    drwxr-xr-x. 4 atguigu atguigu  4096 5月  22 2017 share 
    
  2. 重要目录
    (1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
    (2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
    (3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
    (4)sbin目录:存放启动或停止Hadoop相关服务的脚本
    (5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
三、 Hadoop运行模式(完全分布式)

搭建过程:
1)准备3台客户机(关闭防火墙、静态ip、主机名称)
2)安装JDK
3)配置环境变量
4)安装Hadoop
5)配置环境变量
6)配置集群
7)单点启动
8)配置ssh
9)群起并测试集群

3.1 准备3台客户机(关闭防火墙、静态ip、主机名称)

见 2.1 2.2 两节

3.2 编写集群分发脚本xsync
  1. scp(secure copy)安全拷贝
    (1)scp定义:
    scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
    (2)基本语法
    scp -r p d i r / pdir/ pdir/fname u s e r @ h a d o o p user@hadoop user@hadoophost: p d i r / pdir/ pdir/fname
    命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
    (3)案例实操
    前提:在 hadoop102 hadoop103 hadoop104 都已经创建好的 /opt/module
    /opt/software 两个目录, 并且已经把这两个目录修改为atguigu:atguigu
    sudo chown atguigu:atguigu -R /opt/module

  2. rsync远程同步工具
    rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
    rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
    (1)基本语法
    rsync -av p d i r / pdir/ pdir/fname u s e r @ h a d o o p user@hadoop user@hadoophost: p d i r / pdir/ pdir/fname
    命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称

  3. xsync集群分发脚本
    (1)需求:循环复制文件到所有节点的相同目录下
    (2)需求分析:
    (a)rsync命令原始拷贝:

    rsync  -av     /opt/module  		 root@hadoop103:/opt/
    

    (b)期望脚本: xsync要同步的文件名称
    (c)说明:在/home/atguigu/bin这个目录下存放的脚本,atguigu用户可以在系统任何地方直接执行。
    (3)脚本实现
    (a)在/home/atguigu/bin目录下创建xsync文件

    [atguigu@hadoop102 opt]$ cd /home/atguigu
    [atguigu@hadoop102 ~]$ mkdir bin
    [atguigu@hadoop102 ~]$ cd bin
    [atguigu@hadoop102 bin]$ vim xsync
    

    在该文件中编写如下代码:

    #!/bin/bash
    #1. 判断参数个数
    if [ $# -lt 1 ]
    then
      echo Not Enough Arguement!
      exit;
    fi
    #2. 遍历集群所有机器
    	for host in hadoop102 hadoop103 hadoop104
    	do
    	echo ====================  $host  ====================
     #3. 遍历所有目录,挨个发送
       for file in $@
       do
    #4. 判断文件是否存在
       if [ -e $file ]
       then
          #5. 获取父目录
    	  pdir=$(cd -P $(dirname $file); pwd)
          #6. 获取当前文件的名称
          fname=$(basename $file)
          ssh $host "mkdir -p $pdir"
          rsync -av $pdir/$fname $host:$pdir
       else
         echo $file does not exists!
        fi
      done
    done
    

    (b)修改脚本 xsync 具有执行权限

    [atguigu@hadoop102 bin]$ chmod +x xsync
    

    (c)将脚本复制到/bin中,以便全局调用

    [atguigu@hadoop102 bin]$ sudo cp xsync /bin/
    

    (d)测试脚本

    [atguigu@hadoop102 ~]$ xsync /home/atguigu/bin
    [atguigu@hadoop102 bin]$ sudo xsync /bin/xsync
    
3.3 SSH免密登录配置
  1. 配置ssh
    (1)基本语:ssh另一台电脑的ip地址
    (2)ssh连接时出现Host key verification failed的解决方法

    [atguigu@hadoop102 ~]$ ssh hadoop103
    

    出现:

    The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established.
    RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
    Are you sure you want to continue connecting (yes/no)? 
    

    (3)解决方案如下:直接输入yes

  2. 无密钥配置
    (1)免密登录原理

    (2)生成公钥和私钥:

    [atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa
    

    然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
    (3)将公钥拷贝到要免密登录的目标机器上

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102
    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103
    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104
    

    注意:
    还需要在hadoop103上采用atguigu账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
    还需要在hadoop104上采用atguigu账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
    还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;

  3. ssh文件夹下(~/.ssh)的文件功能解释

文件名解释
known_hosts记录ssh访问过计算机的公钥(public key)
id_rsa生成的私钥
id_rsa.pub生成的公钥
authorized_keys存放授权过的无密登录服务器公钥
3.4 集群配置
  1. 集群部署规划
    注意:NameNode和SecondaryNameNode不要安装在同一台服务器
    注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
‘’hadoop102hadoop103hadoop104
HDFSNameNode DataNodeDataNodeSecondaryNameNode DataNode
YARNNodeManagerResourceManager NodeManagerNodeManager
  1. 配置文件说明
    Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
    (1)默认配置文件:

    取的默认文件文件存放在Hadoop的jar包中的位置
    ore-default.xml]hadoop-common-3.1.3.jar/ core-default.xml
    dfs-default.xml]hadoop-hdfs-3.1.3.jar/ hdfs-default.xml
    arn-default.xml]hadoop-yarn-common-3.1.3.jar/ yarn-default.xml
    apred-default.xml]hadoop-mapreduce-client-core-3.1.3.jar/ mapred-default.xml

    (2)自定义配置文件:
    core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在**$HADOOP_HOME/etc/hadoop**这个路径上,用户可以根据项目需求重新进行修改配置。
    (3)常用端口号说明

DaemonApphadoop2hadoop3
NameNode PortHadoop HDFS NameNode8020 / 90009820
.Hadoop HDFS NameNode HTTP UI500709870
Secondary NameNode PortSecondary NameNode500919869
.Secondary NameNode HTTP UI500909868
DataNode PortHadoop HDFS DataNode IPC500209867
.Hadoop HDFS DataNode500109866
.Hadoop HDFS DataNode HTTP UI500759864
  1. 配置集群
    (1)核心配置文件
    配置core-site.xml

    [atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
    [atguigu@hadoop102 hadoop]$ vim core-site.xml
    

    文件内容如下:

    
    
    
    
    	
      
      	  fs.defaultFS
      	  hdfs://hadoop102:9820
    
    
       
            hadoop.tmp.dir
           /opt/module/hadoop-3.1.3/data
    
    
    
       
           hadoop.http.staticuser.user
            atguigu
    
    
    
        
    	     hadoop.proxyuser.atguigu.hosts
            *
    
    
        
           hadoop.proxyuser.atguigu.groups
           *
    
    
        
            hadoop.proxyuser.atguigu.groups
            *
    
    
    
    

    (2)HDFS配置文件
    配置hdfs-site.xml

    [atguigu@hadoop102 hadoop]$ vim hdfs-site.xml	
    

    文件内容如下:

    
    
    
    
    	
    	
            dfs.namenode.http-address
            hadoop102:9870
        
    	
        
            dfs.namenode.secondary.http-address
            hadoop104:9868
        
    	
    

    (3)YARN配置文件
    配置yarn-site.xml

    [atguigu@hadoop102 hadoop]$ vim yarn-site.xml
    

    文件内容如下:

    
    
    
    
    	
        
            yarn.nodemanager.aux-services
            mapreduce_shuffle
    	
    
        
            yarn.resourcemanager.hostname
            hadoop103
    
    
        
            yarn.nodemanager.env-whitelist
        	JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_	CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
    
    
       
          yarn.scheduler.minimum-allocation-mb
           512
       
      
           yarn.scheduler.maximum-allocation-mb
            4096
    
    
        
           yarn.nodemanager.resource.memory-mb
           4096
    
    
        
            yarn.nodemanager.pmem-check-enabled
          false
       
      
          yarn.nodemanager.vmem-check-enabled
          false
        
    
    

    (4)MapReduce配置文件
    配置mapred-site.xml

    [atguigu@hadoop102 hadoop]$ vim mapred-site.xml
    

    文件内容如下:

    
    
    
    
    
    
        mapreduce.framework.name
        yarn
    
    
    
  2. 在集群上分发配置好的Hadoop配置文件

    [atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
    
  3. 去103和104上查看文件分发情况,查看配置文件是否全部更改

3.5 群起集群
  1. 配置workers

    [atguigu@hadoop102 hadoop]$ vim /opt/module/hadoop3.1.3/etc/hadoop/workers
    

    在该文件中增加如下内容:

    hadoop102
    hadoop103
    hadoop104
    

    注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

    同步所有节点配置文件

    [atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
    
  2. 启动集群
    (1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)

    [atguigu@hadoop102 ~]$ hdfs namenode -format
    

    (2)启动HDFS

    [atguigu@hadoop102 hadoop-3.1.3]$ start-dfs.sh
    

    (3)==在配置了ResourceManager的节点(hadoop103)==启动YARN

    [atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
    

    (4)Web端查看HDFS的NameNode

     (a)浏览器中输入:http://hadoop102:9870
     (b)查看HDFS上存储的数据信息
    

    (5)Web端查看YARN的ResourceManager

     (a)浏览器中输入:http://hadoop103:8088
     (b)查看YARN上运行的Job信息
    
  3. 集群基本测试
    (1)上传文件到集群
    上传小文件

    [atguigu@hadoop102 ~]$ hadoop fs -mkdir /input
    [atguigu@hadoop102 ~]$ hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
    

    上传大文件

    [atguigu@hadoop102 ~]$ hadoop fs -put  /opt/software/jdk-8u212-linux-x64.tar.gz  /
    

    (2)上传文件后查看文件存放在什么位置

     (a)查看HDFS文件存储路径
     [atguigu@hadoop102 subdir0]$ pwd
     /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-938951106-192.168.10.107-	1495462844069/current/finalized/subdir0/subdir0
     (b)查看HDFS在磁盘存储文件内容
     [atguigu@hadoop102 subdir0]$ cat blk_1073741825
     hadoop yarn
     hadoop mapreduce 
     atguigu
     atguigu
    

    (3)拼接

    -rw-rw-r--. 1 atguigu atguigu 134217728 5月  23 16:01 blk_1073741836
    -rw-rw-r--. 1 atguigu atguigu   1048583 5月  23 16:01 blk_1073741836_1012.meta
    -rw-rw-r--. 1 atguigu atguigu  63439959 5月  23 16:01 blk_1073741837
    -rw-rw-r--. 1 atguigu atguigu    495635 5月  23 16:01 blk_1073741837_1013.meta
    [atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.tar.gz
    [atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.tar.gz
    [atguigu@hadoop102 subdir0]$ tar -zxvf tmp.tar.gz
    

    (4)下载

    	[atguigu@hadoop104 software]$ hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./
    

    (5)执行wordcount程序

    [atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
    
3.6 集群启动/停止方式总结
  1. 各个服务组件逐一启动/停止
    (1)分别启动/停止HDFS组件
    hdfs --daemon start/stop namenode/datanode/secondarynamenode	
    
    (2)启动/停止YARN
    yarn --daemon start/stop  resourcemanager/nodemanager	
    
  2. 各个模块分开启动/停止(配置ssh是前提)常用
    (1)整体启动/停止HDFS
    start-dfs.sh/stop-dfs.sh
    
    (2)整体启动/停止YARN
    start-yarn.sh/stop-yarn.sh
    
3.7 配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

  1. 配置mapred-site.xml

    [atguigu@hadoop102 hadoop]$ vim mapred-site.xml
    

    在该文件里面增加如下配置:

    	
    
        mapreduce.jobhistory.address
       hadoop102:10020
    
    
    
    
        mapreduce.jobhistory.webapp.address
      hadoop102:19888
    
    
  2. 分发配置

    [atguigu@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
    
  3. 在hadoop102启动历史服务器

    [atguigu@hadoop102 hadoop]$ mapred --daemon start historyserver
    
  4. 查看历史服务器是否启动

    [atguigu@hadoop102 hadoop]$ jps
    
  5. 查看JobHistory
    http://hadoop102:19888/jobhistory
    .

3.8 配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。
开启日志聚集功能具体步骤如下:

  1. 配置yarn-site.xml

    [atguigu@hadoop102 hadoop]$ vim yarn-site.xml
    

    在该文件里面增加如下配置:

    
    
       yarn.log-aggregation-enable
     true
    
    
      
        yarn.log.server.url  
        http://hadoop102:19888/jobhistory/logs
    
    
    
       yarn.log-aggregation.retain-seconds
      604800
    
    
  2. 分发配置

    [atguigu@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
    
  3. 关闭NodeManager 、ResourceManager和HistoryServer

    [atguigu@hadoop103 ~]$ stop-yarn.sh
    [atguigu@hadoop102 ~]$ mapred --daemon stop historyserver
    
  4. 启动NodeManager 、ResourceManage和HistoryServer

    [atguigu@hadoop103 ~]$ start-yarn.sh
    [atguigu@hadoop102 ~]$ mapred --daemon start historyserver
    
  5. 删除HDFS上已经存在的输出文件

    [atguigu@hadoop102 ~]$ hadoop fs -rm -r /output
    
  6. 执行WordCount程序

    [atguigu@hadoop102 ~]$ hadoop jar  	$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar 	wordcount /input /output
    
  7. 查看日志,
    http://hadoop102:19888/jobhistory
    Job History:

    job运行情况:

    查看日志:

3.9 编写hadoop集群常用脚本
  1. 查看三台服务器java进程脚本:jpsall
    脚本代码:
    #!/bin/bash
    for host in hadoop102 hadoop103 hadoop104
    do
          echo =============== $host ===============
          ssh $host jps $@ | grep -v Jps
    done
    
    赋予脚本执行权限:
    [atguigu@hadoop102 bin]$ chmod +x jpsall
    
  2. hadoop集群启停脚本(包含hdfs,yarn,historyserver):myhadoop.sh
    脚本代码:
    #!/bin/bash
    if [ $# -lt 1 ]
    then
        echo "No Args Input..."
        exit ;
    fi
    case $1 in
    "start")
           echo " =================== 启动 hadoop集群 ==================="
    
            echo " --------------- 启动 hdfs ---------------"
         ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
         echo " --------------- 启动 yarn ---------------"
         ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
         echo " --------------- 启动 historyserver ---------------"
          ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start 	historyserver"
    ;;
    "stop")
            echo " =================== 关闭 hadoop集群 ==================="
    
          echo " --------------- 关闭 historyserver ---------------"
          ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop 	historyserver"
          echo " --------------- 关闭 yarn ---------------"
          ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
            echo " --------------- 关闭 hdfs ---------------"
            ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
    ;;
    *)
       echo "Input Args Error..."
    ;;
    esac
    
    给权限,分发/home/atguigu/bin目录,保证自定义脚本在三台机器上都可以使用
    	[atguigu@hadoop102 ~]$ xsync /home/atguigu/bin/
    
3.10 集群时间同步

时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。

配置时间同步具体实操:

  1. 时间服务器配置(必须root用户)

     (0)查看所有节点ntpd服务状态和开机自启动状态
     [atguigu@hadoop102 ~]$ sudo systemctl status ntpd
     [atguigu@hadoop102 ~]$ sudo systemctl is-enabled ntpd
     (1)在所有节点关闭ntpd服务和自启动
     [atguigu@hadoop102 ~]$ sudo systemctl stop ntpd
     [atguigu@hadoop102 ~]$ sudo systemctl disable ntpd
    
     (2)修改hadoop102的ntp.conf配置文件(要将hadoop102作为时间服务器)
     [atguigu@hadoop102 ~]$ sudo vim /etc/ntp.conf
     修改内容如下
     a)修改1(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询		和同步时间)
     #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
     为restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
     	b)修改2(集群在局域网中,不使用其他互联网上的时间)
     server 0.centos.pool.ntp.org iburst
     server 1.centos.pool.ntp.org iburst
     server 2.centos.pool.ntp.org iburst
     server 3.centos.pool.ntp.org iburst
     为
     #server 0.centos.pool.ntp.org iburst
     #server 1.centos.pool.ntp.org iburst
     #server 2.centos.pool.ntp.org iburst
     #server 3.centos.pool.ntp.org iburst
     c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中		的其他节点提供时间同步)
     server 127.127.1.0
     fudge 127.127.1.0 stratum 10
     (3)修改hadoop102的/etc/sysconfig/ntpd 文件
     [atguigu@hadoop102 ~]$ sudo vim /etc/sysconfig/ntpd
     增加内容如下(让硬件时间与系统时间一起同步)
     SYNC_HWCLOCK=yes
     (4)重新启动ntpd服务
     [atguigu@hadoop102 ~]$ sudo systemctl start ntpd
     (5)设置ntpd服务开机启动
     [atguigu@hadoop102 ~]$ sudo systemctl enable ntpd
    
  2. 其他机器配置(必须root用户)

     (1)在其他机器配置10分钟与时间服务器同步一次
     [atguigu@hadoop103 ~]$ sudo crontab -e
     编写定时任务如下:
     */10 * * * * /usr/sbin/ntpdate hadoop102
     (2)修改任意机器时间
     [atguigu@hadoop103 ~]$ sudo date -s "2017-9-11 11:11:11"
     (3)十分钟后查看机器是否与时间服务器同步
     [atguigu@hadoop103 ~]$ sudo date
    

    说明:测试的时候可以将10分钟调整为1分钟,节省时间。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/299869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号