keyfall / xuexibiji

3 stars 0 forks source link

Hadoop #60

Open keyfall opened 2 years ago

keyfall commented 2 years ago

大数据概念

大数据基础概念

大数据主要解决海量数据的采集,存储和分析计算问题 数据存储单位:bit,Byte,KB,MB,GB,TB,PB,EB,ZB,YB,BB,NB,DB 大数据一般处理的是TB,PB,EB级别的数据

大数据4V特点

1.Volume(大量) 个人计算机容量位TB量级,大企业的数据量已经接近EB量级

2.Velocity(高速) 处理数据效率应该是高速的,否则双十一就开不了了

3.Variety(多样) 多样性的是数据格式多样,以前大多是数据库/文本为主的结构化数据,现在非结构化数据越来越多,比如网络日志,音频,视频,图片,地理位置信息等,大数据需要解决这些多样性的数据

4.Value(低价值密度) 有很多数据,我们只需要其中的一点内容,这种提纯也是一个大数据的优点

keyfall commented 2 years ago

Hadoop概念

Hadoop基础概念

Hadoop是一个有Apache基金会所开发的分布式系统基础架构 主要解决海量数据的存储和海量数据的分析计算问题 广义上讲,Hadoop通常是Hadoop生态圈,由很多协助Hadoop完成任务的软件一起组成的一个总的软件集合 image Hadoop创始人是Doug Cutting

Hadoop优势(4高)

1.高可靠性:Hadoop底层维护多个数据副本,每一个服务器都会维护一个,数据副本可以设置数量,最大的数据副本数量是服务器的数量,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失

2.高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点,可以动态增加服务器

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

4.高容错性:能够自动将失败的任务重新分配 Hadoop1,2,3的区别 image

HDFS概述

Hadoop Distributed File System 简称HDFS,是一个分布式文件系统 组成:

  1. NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等
  2. DateNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和
  3. Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份

YARN概述

Yet Another Resource Negotiator简称YARN ,另一种资源协调者,是Hadoop的资源管理器。 组成: 1.ResourceManager(RM):整个集群资源(内存,cpu等)的老大 2.NodeManager(NM):单个节点服务器资源老大 3.ApplicationMaster(AM):单个任务运行的老大 4.Container:容器,相当一台独立的服务器,里面封装了任务运行所欲要的资源,如内存,CPU,磁盘,网络等. image

MapReduce概述

MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。 MapReduce是两个阶段,Map和Reduce Map阶段并行处理输入数据 Reduce对Map结果进行汇总 image

大数据技术生态体系

image

安装hadoop

配置环境

配置基本环境,看尚硅谷大数据技术之模板虚拟机环境准备.docx

ping www.baidu.com,看是否有网络

安装epel-release,net-tool,vim yum install -y epel-release net-tools vim

systemctl stop firewalld  #关闭防火墙
systemctl disable firewalld.service  #永久关闭防火墙

新建用户并且赋予用户和root同等权限,企业一般不会给root,平常可以使用root image

卸载原先jdk: 如果你的虚拟机是最小化安装不需要执行这一步。 rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps rpm -qa:查询所安装的所有rpm软件包 grep -i:忽略大小写 xargs -n1:表示每次只传递一个参数 rpm -e –nodeps:强制卸载软件

reboot #重启

安装jdk和hadoop

jdk和hadoop在code中hadoop的资料中,把压缩文件放到/opt/software/中 tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/ 配置环境变量 vim /etc/profile.d/my_env.sh 添加以下内容

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

#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 测试jdk和hadoop是否成功

java -version
hadoop version
keyfall commented 2 years ago

克隆出3台服务器,并且修改配置

完整克隆3份服务器,hadoop102,hadoop103,hadoop104 vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改ipaddr为对应的ip地址192.168.47.102或192.168.47.103或192.168.47.104

修改主机名称,分别是hadoop102,hadoop103,hadoop104 vim /etc/hostname

修改hosts文件 vim /etc/hosts 添加:

192.168.47.103 hadoop103
192.168.47.104 hadoop104
192.168.47.102 hadoop102

把windows电脑的hosts文件添加上下面的内容

192.168.47.102 hadoop102
192.168.47.103 hadoop103
192.168.47.104 hadoop104
keyfall commented 2 years ago

hadoop集群搭建

ssh免密登录设置

免密登录原理 image 在hadoop实行操作

cd ~
mkdir .ssh
cd .ssh
ssh-keygen -t rsa

然后三个回车,生成两个文件id_rsa,id_rsa.pub 公钥拷贝到其他服务器

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

在hadoop103和hadoop104进行上面的操作之后,后续的ssh操作就不需要密码登录了

集群分发脚本xsync

由于脚本使用的是ssh和rsync,需要所有虚拟机先安装rsync yum -y install rsync

cd ~
mkdir bin
cd bin
vim xsync

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
chmod +x xsync #增加权限,root用户也需要
xsync /root/bin  #测试脚本

以下是非root用户操作 image

集群配置

由于内存耗费原因,NameNode,SecondaryNameNode,resourcemanager不能放一台服务器 设置这四个文件core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml,路径在/opt/module/hadoop-3.1.3/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网页登录使用的静态用户为atguigu -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</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_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_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>
</configuration>

使用xsync分发 xsync /opt/module/hadoop-3.1.3/etc/hadoop

配置workers

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers 添加一下内容:

hadoop102
hadoop103
hadoop104

我这里有一个localhost,我给删除了,也运行起来了,因为我觉得已经有了hadoop102了,localhost不是重复了么

还有4个文件需要修改,work文档里没有,因为我这个是root用户启动的,所以需要在文件中配置root用户,在/opt/module/hadoop-3.1.3目录下 这是在hadoop102 sbin/start-dfs.sh和sbin/stop-dfs.sh

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

下面是在hadoop103上,因为启动yarn sbin/start-yarn.sh和sbin/stop-yarn.sh

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

其实使用xsync让每个服务器都有也行,这主要是在启动的时候需要,没启动有这个设置也没事

现在启动,我是第一次启动,所以报错了,显示已经在节点运行,我觉得是格式化namenode的问题 由于是第一次启动,所以先hadoop102初始化 hdfs namenode -format hadoop102再启动hdfs sbin/start-dfs.sh 这时候如果报错了,我这里最后是stop it first,那就运行`sbin/stop-dfs.sh命令,再重新启动

hadoop103运行yarn sbin/start-yarn.sh 这里如果报错了,那就运行sbin/stop-dfs.sh,再关闭hdfs的,接着删掉hadoop103和hadoop104的data和logs文件夹,再重新启动hdfs和yarn.应该就好了 hadoop成功界面 http://hadoop102:9870/ image yarn成功界面 http://hadoop103:8088/ image

keyfall commented 2 years ago

配置历史服务器和日志聚集

配置历史服务器 vim 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>

xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml #分发 mapred --daemon start historyserver #启动 这是地址http://hadoop102:19888/jobhistory

配置日志聚集 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>

xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml #分发配置 在hadoop103 sbin/stop-yarn.sh 在hadoop102的opt/module/hadoop-3.1.3/bin目录下 mapred --daemon stop historyserver 再启动yarn和historyserver hadoop fs -rm -r /output #删除output文件夹,没有就不用删除了 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output #执行WordCount程序 这样所有日志就可以在历史服务器查看了

由于hdfs,yarn和historyserver都要启动,可以做一个脚本 vim myhadoop.sh #在root用户下的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 +x myhadoop.sh

以上基础的就完了