Hadoop 学习日记(1)

大数据概论

概念

大数据,指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力,洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

特点(4V)

1、Volumn(大量)

2、Velocity(高速)

3、Variety(多样)

4、低价值密度

应用场景

1、抖音推荐

2、电商站内广告

3、物流仓储

....

大数据部门内部组织结构

Hadoop 概述

Hadoop 是什么

  1. Hadoop 是一个由 Apache 基金会开发的分布式系统基础框架。

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

  3. 广义上来说,Hadoop 通常是指一个更广泛的概念 —— Hadoop生态圈。

Hadoop 组成

HDFS 架构概述

  • Hadoop Distributed File System,简称 HDFS,是一个分布式文件系统。

  • NameNode(nn):存储文件的元数据,如文件名、文件目录结构、文件属性,以及每个文件的块列表和块所在的 DataNode 等(也就是存储文件的位置)。

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

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

YARN 架构概述

Yet Another Negotiator,简称 YARN,另一种资源协调者,是 Hadoop 的资源管理器。

MapReduce 架构概述

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

  1. Map 阶段并行处理输入数据

  2. Reduce 阶段对 Map 结果进行汇总

HDFS、YARN、MapReduce 三者关系

大数据技术生态体系

Hadoop 运行环境搭建

VMWare 安装

Centos 安装

之后点击两次下一步,均为推荐选项

之后点击安装

重启后

IP 地址和主机名称配置

右键 -> 属性

打开虚拟机终端

添加后三行

修改 bootproto 为 static

修改主机名称

配置Linux克隆机主机名称映射 hosts 文件,打开 /etc/hosts,添加如下内容

之后 reboot 重启

输入 ifconfig

出现我们刚才设置的 ip 地址

ping www.baidu.com

能 ping 通说明 ok

xshell 远程连接工具

新建会话,输入用户名密码

修改 windows 的 host 文件

192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108

xftp 远程传输工具

新建会话

连接成功

配置其他组件

安装 epel-release

Extra Packages for Enterprise Linux 是为红帽系的操作系统提供额外的软件包。相当于是一个软件仓库,大多数 rpm 包在官方仓库中是找不到的。

yum install -y epel-release

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld.service

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

vim /etc/sudoers

卸载虚拟机自带的 JDK

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

重启虚拟机

克隆虚拟机

Hadoop101 由于历史原因,暂不使用该名称。

配置每台虚拟机的ip地址和主机名,和上述对hadoop100的操作一样。

在 hadoop102 上安装 JDK、Hadoop

上传 Hadoop、JDK

解压 JDK

tar -zxvf jdk-8u212-linux-x64.tar.gz  -C /opt/module/

新建 JDK 的环境变量

在 /opt/profile.d/ 目录下

vim my_env.sh
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile

安装 Hadoop

tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

配置环境变量

在 /opt/profile.d/ 目录下

vim my_env.sh

追加内容

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
source /etc/profile

Hadoop 目录的内容

Hadoop 运行模式

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

本地模式:单机运行,只是用来演示一下官方案例,生产环境不用

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

完全分布式:多台服务器组成分布式环境,生成环境用

演示本地运行模式

在 hadoop 目录下创建目录 wcinput

mkdir wcinput

在 wcinput 下创建文件 word.txt,内容如下

clear yes no
ok good clear

执行 wordcount 示例

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ wcoutput

注意输出目录 wcoutput 不能已经存在,否则会抛异常

进入 wcoutput 目录,查看文件

完全分布式运行模式(重点)

编写集群分发脚本

scp (secure copy) 安全拷贝

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

基本语法

scp -r 要拷贝的文件路径/名称 目的用户@主机:目的地路径/名称

前提,hadoop103、hadoop104 都有 /opt/module opt/software

在 hadoop102 上,将 hadoop102 中的 jdk 目录拷贝到 103上

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

方式二

在 hadoop103 上,将 hadoop102 中的 hadoop 目录拷贝到 103 上

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

在 hadoop102 上,将 hadoop102 中的 module 目录拷贝到 104 上

scp -r module/* root@hadoop104:/opt/module/

rsync 远程同步工具(了解)

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

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

基本语法

rsync -av 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

选项参数说明

-a:归档拷贝 -v:显示复制过程

xsync 集群分发脚本

(1) 需求:循环复制文件到所有脚本的目录下

(2) 在 /home/an/bin 目录下创建 bin 文件

(3) 创建 xsync 脚本 vim xsync

#!/bin/bash

#1.判断参数个数
if [ $# -lt 1 ]
then
        echo Not Enough Arguments!
        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

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

chmod +x xsync

(5) 分发环境变量

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

(6) 使环境变量生效

source /etc/profile

SSH 无密登录配置

  1. 配置 ssh

(1) 基本语法

ssh 另一台电脑的 IP 地址

(2) 无密钥登录

底层原理

生成密钥

ssh-keygen -t rsa 

将102上的公钥传递到103、104

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

同样对自己也需要授权

同时,103、104也要进行如上的配置

集群配置

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

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

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

自定义配置文件

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

配置 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 网页登录使用的静态用户为 an -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>an</value>
    </property>
</configuration>

配置 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>

配置 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_CO
   NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
   RED_HOME</value>
    </property>
</configuration>

配置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>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    </property>
    <property>
        <name>mapreduce.cluster.map.memory.mb</name>
        <value>-1</value>
    </property>
    <property>
        <name>mapreduce.cluster.reduce.memory.mb</name>
        <value>-1</value>
    </property>

</configuration>

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

sudo ~/bin/xsync /opt/module/hadoop-3.1.3/etc/hadoop/

启动集群并测试

1、配置 workers

在 hadoop../etc/hadoop/workers 添加如下内容

hadoop102
hadoop103
hadoop104

同步所有配置文件

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

输入 http://hadoop102:9870

常用,在 Utilities 下查看 file system,可以查看上传的文件

(5) Web 端查看 YARN 的页面

输入 http://hadoop103:8088

3、集群基本测试

(1) 上传文件到集群

创建目录,上传小文件

hadoop fs -mkdir /wcinput
hadoop fs -put wcinput/word.txt /wcinput

上传大文件

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

(2) 执行 wordcount 程序

 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar  wordcount /wcinput /wcoutput

这里可能会遇到的问题及解决方案

问题1

问题2

运行的结果

可能遇到的异常及处理

jps 进程没有完全启动

1、sbin/stop-dfs.sh

2、删除每个集群上的 data 和 logs

3、格式化 namenode

4、启动集群

历史服务器配置

1、配置 mapred-site.xml

<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
</property>

2、分发服务器配置

3、在 hadoop102 中启动历史服务器

mapred --daemon start historyserver

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

配置日志的聚集

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

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

1、配置 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、重启服务器的yarn和historyserver

sbin/stop-yarn.sh
mapred --daemon stop historyserver
sbin/start-yarn.sh
mapred --daemon start historyserver

两个常用脚本

集群启动停止方式总结

1、各个模块分开启动/停止

  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
  1. 启动和停止 YARN
yarn -daemon start/stop resourcemanager/nodemanager

编写 Hadoop 集群常用脚本

  1. Hadoop 集群启动停止脚本 (包含 HDFS、YARN、Historyserver): myhadoop.sh

保存在用户 bin 目录下

#!/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 777 myhadoop.sh
  1. 查看三台服务器 Java 进程脚本

在bin目录下新建 jpsall

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

赋予执行权限

chmod 777 myhadoop.sh

分发 bin 目录,保证自定义脚本在三台机器上都能使用

bin/xsync bin/

常用端口号说明

端口名称 Hadoop2.x Hadoop3.x
NameNode 内部通信端口 8020 / 9000 8020 / 9000/9820
NameNode HTTP UI 50070 9870
MapReduce 查看执行任务端口 8088 8088
历史服务器通信端口 19888 19888

常用配置文件

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

posted @ 2021-06-06 12:19  ans20xx  阅读(78)  评论(0编辑  收藏  举报