Hadoop学习笔记(一)

目录

一、Hadoop概述

Hadoop是什么

Hadoop三大发行版本(了解)

Hadoop优势(四高)

Hadoop组成

HDFS架构概述

YARN架构概述

MapReduce架构概述

大数据技术生态体系

二、Hadoop运行环境搭建

模板虚拟机环境准备

Hadoop目录结构

三、Hadoop运行模式

完全分布式运行模式

编写集群分发脚本 xsync

SSH无密登录配置

集群配置

群起集群

配置历史服务器

配置日志的聚集

编写Hadoop集群常用脚本

集群事件同步


一、Hadoop概述

Hadoop是什么

  • Hadoop是一个由apache基金会所开发的分布式系统基础架构

  • 主要解决海量数据的存储和海量数据的分析计算问题

  • 广义上来说,hadoop通常是指一个更广泛的概念--Hadoop生态圈

Hadoop三大发行版本(了解)

Hadoop三大发行版本:Apache、Cloudera、Hortonworks。

Apache版本最原始(最基础)的版本,对于入门学习最好。2006

Cloudera内部集成了很多大数据框架,对应产品CDH。2008

Hortonworks文档较好,对应产品HDP。2011

Hortonworks现在已经被Cloudera公司收购,推出新的品牌CDP。

Hadoop优势(四高)

  • 高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失

  • 高扩展性:在集群见分配任务数据,可方便的扩展数以千计的节点

 

  • 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度

 

  • 高容错性:能够自动将失败的任务重新分配

Hadoop组成

 

HDFS架构概述

Hadoop Distributed File System 是一个分布式文件系统

  • NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数、文件权限),以及每个文件的快列表和块所在的DataNode等

  • DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和

  • Secondary NameNode(2nn) :每隔一段时间对NameNode元数据备份

YARN架构概述

Yet Another Resource Negotiator 另一种资源协调者,是Hadoop的资源管理器

  • ResourceManager(RM):整个集群资源(内存、cpu等)的老大

  • NodeManager(NM):单个节点服务器资源老大

  • ApplicationMaster(AM):单个任务运行的老大

  • Container:容器,相当一台独立的服务器,里面封装了任务运行所需要的资源,如内存、cpu、磁盘、网络等

MapReduce架构概述

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

  • Map阶段并行处理输入数据

  • Reduce阶段对Map结果进行汇总

 

HDFS、YARN、MapReduce三者关系

 

大数据技术生态体系

 

图中涉及名词解释:

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是一个管理Hadoop作业(job)的工作流程调度管理系统。

7)Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。

8)Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

9)ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。

二、Hadoop运行环境搭建

模板虚拟机环境准备

0)安装模板虚拟机,ip地址192.168.10.100、主机名称hadoop100、内存4G、硬盘50G

1)虚拟机配置要求如下

  • 使用yum安装需要虚拟机可以正常上网,yum安装前可以先测试下虚拟机联网情况

  • 安装epel-release

yum install -y epel-release

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

systemctl stop firewalld
systemctl disable firewalld.service

3)创建admin用户,修改密码

useradd admin
passwd admin

4)配置admin用户具有root权限,方便后期加sudo执行root权限命令

vim /etc/sudoers

修改/etc/sudoers文件,在%wheel这行下面加一行

 

5)在/opt目录下创建文件夹,并修改所属主和所属组(需要root权限)

mkdir /opt/module
mkdir /opt/software
chown admin:admin /opt/module 
chown admin:admin /opt/software

6)卸载虚拟机自带的jdk

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps 

7)重启虚拟机

克隆虚拟机

 

修改虚拟机的ip和hostname

安装jdk和hadoop

Hadoop目录结构

1)查看Hadoop目录结构

2)重要目录

  • bin目录:存放对Hadoop相关服务(hdfs、yarn、mapred)进行脚本操作

  • etc目录:HAdoop的配置文件目录,存放Hadoop的配置文件

  • lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

  • sbin目录:存放启动或停止Hadoop相关服务的脚本

  • share目录:存放Hadoop的依赖jar包、文档和官方样例

三、Hadoop运行模式

1)Hadoop运行模式包括:本地模式、伪分布模式、完全分布式模式

  • 本地模式:单机运行,知识用来演示一下官方案例(生成环境不用)

  • 伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式环境。(生成环境不用)

  • 完全分布式模式:多态服务器组成分布式环境。生成环境使用

完全分布式运行模式

分析:

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

  • 安装JDK

  • 配置环境变量

  • 安装Hadoop

  • 配置环境变量

  • 配置集群

  • 单点启动

  • 配置ssh

  • 群起并测试集群

编写集群分发脚本 xsync

1)scp(secure copy)安全拷贝

  • scp定义

scp可以实现服务器与服务器之间的数据拷贝

  • 基本语法

 

  • 案例实操

hadoop102上,将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上。

scp -r /opt/module/jdk1.8.0_212  admin@hadoop103:/opt/module

hadoop103上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上。

scp -r admin@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/

hadoo103上操作,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上。

scp -r admin@hadoop102:/opt/module/* admin@hadoop104:/opt/module

2)rsync远程同步工具

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

  • 基本语法

 

-a 归档拷贝

-v 显示复制过程

  • 案例实操

删除hadoop103中/opt/module/hadoop-3.1.3/wcinput

rm -rf wcinput/

同步删除hadoop102中的/opt/module/hadoop-3.1.3到hadoop103

rsync -av hadoop-3.1.3/ admin@hadoop103:/opt/module/hadoop-3.1.3/

3)xsync集群分发脚本

  • 需求:循环复制文件到所有节点的相同目录下

  • 需求分析:

    • rsync命令原始拷贝

    rsync  -av     /opt/module           admin@hadoop103:/opt/
    • 期望脚本

    xsync要同步的文件名称

    • 期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)

    echo $PATH
    /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:
    /home/admin/.local/bin:/home/admin/bin:/opt/module/jdk1.8.0_212/bin
     

    脚本实现

    在/home/admin/bin目录下创建xsync文件

    cd /home/admin/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

    修改脚本xsync具有执行权限

chmod +x xsync

测试脚本

xsync /home/admin/bin

将脚本赋值到/bin,以便全局调用

sudo cp xsync /bin/

同步环境变量配置(root所有者)

sudo ./bin/xsync/etc/profile.d/my_env.sh

同步环境变量配置后需要source 让环境变量生效

SSH无密登录配置

1)配置ssh

(1)基本语法

ssh 另一台电脑的ip地址

(2)ssh连接时出现Host key verification failed的解决方法

ssh hadoop103

连接后输入exit退出

2)无密钥配置

(1)免密登录原理

(2)生成公钥和私钥

cd /home/admin/.ssh
ssh-keygen -t rsa

然后敲三下回车,就会生成两个文件 id_ras id_ras.pub

(3)将公钥拷贝到要免密登录的目标机器上

ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

 

注:还要在hadoop103和104用admin账号配置无密登录hadoop102、hadoop103、hadoop104

在hadoop102用root账号,配置无密登录hadoop102、hadoop103、hadoop104

集群配置

1)集群部署规划

注意:

  • NameNode和SecondaryNameNode不要安装在同一台服务器

  • ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上

 

2)配置文件说明

Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值

(1)默认配置文件

 

(2)自定义配置文件

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置

3)配置集群

(1)核心配置文件

配置core-site.xml

cd $HADOOP_HOME/etc/hadoop
vim core-site.xml

文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
​
<configuration>
    <!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:8020</value>
    </property>
​
    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>
​
    <!-- 配置HDFS网页登录使用的静态用户为admin -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>admin</value>
    </property>
</configuration>

(2)HDFS配置文件

配置hafs-site.xml

vim hdfs-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
​
<configuration>
    <!-- nn web端访问地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop102:9870</value>
    </property>
    <!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
    </property>
</configuration>

(3)YARN配置文件

配置yarn-site.xml

vim yarn-site.xml

内容如下

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
​
<configuration>
    <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
​
    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</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_MAPRED_HOME</value>
    </property>
</configuration>

(4)MapReduce配置文件

配置mapred-site.xml

vim mapred-site.xml

内容如下

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
​
<configuration>
    <!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

4)在集群上分发配置好的Hadoop配置文件

xsync /opt/module/hadoop-3.1.3/etc/hadoop/

5)在hadoop103和104上查看文件分发情况

cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

群起集群

1)配置workers

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

删除默认的localhost,在该文件中添加如下内容(不能有多余的空格)

hadoop102
hadoop103
hadoop104

同步所有节点配置文件

xsync /opt/module/hadoop-3.1.3/etc

2)启动集群

(1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到以往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器和data和logs目录,然后进行格式化

hdfs namenode -format

(2)启动HDFS

sbin/start-dfs.sh

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

sbin/start-yarn.sh

(4)web端查看HDFS的NameNode

(5)web端查看YARN的ResourceManager

 

3)集群基本测试

(1)上传文件到集群

  • 上传小文件

hadoop fs -mkdir /input
hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
  • 上传大文件

hadoop fs -put  /opt/software/jdk-8u212-linux-x64.tar.gz  /

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

  • 查看HDFS文件存储路径

内容

 

配置历史服务器

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

1)配置mapred-site.xml

cd /opt/module/hadoop-3.1.3/etc/hadoop/
vim mapred-site.xml

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

2)分发配置

 xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

3)在hadoop102启动历史服务器

mapred --daemon start historyserver

4)查看历史服务器是否启动

jps

5)JobHistory

http://hadoop102:19888/jobhistory

配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上

 

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试

注意:开启日志聚集功能,需要重新启动NodeManager、ResourceManager和HistoryServer

具体步骤

1)配置yarn-site.xml

vim yarn-site.xml

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

<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

2)分发配置

xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

3)关闭NodeManager、ResourceManager、HistoryServer

[hadoop103] cd /opt/module/hadoop-3.1.3
[hadoop103] sbin/stop-yarn.sh
[hadoop103] mapred  --daemon stop historyserver

4)启动NodeManager、ResourceManage和HistoryServer

[hadoop103] start-yarn.sh
[hadoop102] mapred --daemon start historyserver

5)删除HDFS上已经存在的传输文件

[hadoop102] hadoop fs -rm -r /output

6)执行WordCount程序

[hadoop102] hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

7)查看日志

历史服务器地址

http://hadoop102:19888/jobhistory

查看任务运行日志

 

集群启动/停止方式总结

1)各个模块分开启动/停止(配置ssh是前提)常用

(1)整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
(2)整体启动/停止YARN
start-yarn.sh/stop-yarn.sh

2)各个服务组件逐一启动/停止

(1)分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
(2)启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager

编写Hadoop集群常用脚本

1)Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver)

cd /home/admin/bin
vim 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

给与脚本权限

chmod +x myhadoop.sh

2)查看三台服务器java进程脚本:jpsall

cd /home/admin/bin
vim jpsall

内容:

#!/bin/bash
​
for host in hadoop102 hadoop103 hadoop104
do
        echo =============== $host ===============
        ssh $host jps 
done

给脚本权限

chmod +x jpsall

3)分发/home/admin/bin目录

xsync /home/admin/bin/

常用端口号说明

常用的配置文件

3.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers

2.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slaves

集群事件同步

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;

如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。

1)需求

找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用1分钟同步一次。

 

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

(1)查看所有节点ntpd服务状态和开机自启动状态

sudo systemctl status ntpd
sudo systemctl start ntpd
sudo systemctl is-enabled ntpd

(2)修改hadoop102的ntp.conf配置文件

sudo vim /etc/ntp.conf

修改内容如下

(a)修改1(授权192.168.228.0-192.168.228.255网段上的所有机器可以从这台机器上查询和同步时间)

#restrict 192.168.228.0 mask 255.255.255.0 nomodify notrap

为restrict 192.168.228.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文件

sudo vim /etc/sysconfig/ntpd

增加内容如下(让硬件时间与系统时间一起同步)

SYNC_HWCLOCK=yes

(4)重新启动ntpd服务

sudo systemctl start ntpd

(5)设置ntpd服务开机

 sudo systemctl enable ntpd

3)其他机器配置(必须root用户)

(1)关闭所有节点上ntp服务和自启动

sudo systemctl stop ntpd
sudo systemctl disable ntpd
sudo systemctl stop ntpd
sudo systemctl disable ntpd

(2)在其他机器配置1分钟与时间服务器同步一次

sudo crontab -e

(3)修改任意机器时间

 sudo date -s "2021-9-11 11:11:11"

(4)1分钟后查看机器是否与时间服务其同步

sudo date

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值