大数据(2)--Hadoop

    科技2022-07-13  128

    目录标题

    1.初识大数据1.1 大数据相关技术1.2 日志流量分析系统1.2.1 项目设计1.2.2 日志的捕获1.2.3 离线分析1.2.4 实时分析 1.3 系统搭建 2.Hadoop2.1 Hadoop概述2.1.1 历史2.1.2 作用 2.2 Hadoop的安装2.2.1 Hadoop版本介绍2.2.2 Hadoop 的安装有三种方式2.2.3 Hadoop伪分布式安装 2.3 HDFS详解2.3.1 NameNode2.3.2 DataNode2.3.3 Block2.3.4 SecondaryNameNode2.3.5 HDFS优点2.3.6 HDFS缺点 2.4 HDFS细节2.4.1 NameNode、SecondaryNameNode如何工作?2.4.2 Block备份如何放置? 2.5 HDFS基本Shell操作2.6 MapReduce2.7 Yarn

    1.初识大数据

    1.1 大数据相关技术

    Flume:数据的收集聚集加载

    Hadoop.HDFS:数据的存储

    MapReduce、Hive、SparkSql:数据的离线处理

    Kafka、Storm、SparkStreaming:数据的实时处理

    Hbase:数据库

    Sqoop:HDFS和关系型数据库桥梁

    1.2 日志流量分析系统

    1.2.1 项目设计

    项目通用,可以对接任何有相应需求的项目

    1.2.2 日志的捕获

    JS埋点:将参数系数组织起来发送到日志收集系统。(传统后台埋点,影响后台维护和运行;script标签内发送影响前端逻辑,最后选择以img标签实现埋点信息的发送)

    Log4j:收集日志,在打印同时,输出到flume中。

    Flume:数据的收集聚集加载

    1.2.3 离线分析

    HDFS(Hadoop的一部分):海量数据的存储

    Hive(底层基于Hadoop):海量离线数据的处理

    1.2.4 实时分析

    Storm:流式数据处理(速度最快)

    Kafka:消息队列,削峰平谷

    1.3 系统搭建

    独立的服务器,逻辑简单,用Servlet处理请求参数,进行字符串拼接,并通过log4j输出到控制台和flume中

    2.Hadoop

    2.1 Hadoop概述

    Hadoop是大数据领域中非常重要的基础技术,他是一个海量数据存储、处理系统,也是一个生态圈(HDFS,MapReduce,Hive,Hbase。。。。Spark底层也有Hadoop)

    2.1.1 历史

    Google:搜索引擎。收集互联网上的所有数据,存储数据,处理数据,提供给用户。 Google搜索引擎相关技术非常成熟,但是并没有开源,不过,在2004年先后发表了两篇论文:《Google File System》(GFS)、《MapReduce》阐述了Google如何将海量数据进行存储和处理。2006年发表了《BigTable》启发了无数的NoSql数据库。

    Doug Cutting(狗哥):Lucene、Nutch(搜索引擎)

    Hadoop(Java开发)

    HDFS(Hadoop distributed file system):大数据存储

    MapReduce:大数据处理

    2.1.2 作用

    Hadoop最初用作Nutch底层的海量数据存储和处理,后来人们发现他也非常适合大数据场景下的数据存储和处理,主要用作海量离线数据的存储和处理。

    2.2 Hadoop的安装

    2.2.1 Hadoop版本介绍

    Hadoop1.0(Apache)最初版:HDFS、MapReduce

    Hadoop2.0:HDFS、MapReduce、Yarn(2.7.1)

    Hadoop3.0:2017年12月发布,目前还不是稳定版本。

    2.2.2 Hadoop 的安装有三种方式

    单机模式:解压就能运行,但是只支持MapReduce的测试,不支持HDFS,不用。

    伪分布式模式:单机通过多进程模拟集群方式安装,支持Hadoop所有功能。学习测试用

    完全分布式模式:集群方式安装,支持高可用,进阶学习。

    2.2.3 Hadoop伪分布式安装

    需要环境: JDK,JAVA_HOME,配置hosts,hostname,关闭防火墙,配置免密登录。

    安装在hadoop01节点上。 1.创建目录 mkdir hadoop

    2.上传安装包并解压 tar -xvf 安装包

    3.修改配置文件 1.修改 hadoop-env.sh 通过vim打开 vim /usr/local/src/hadoop/hadoop-2.7.1/etc/hadoop/hadoop-env.sh主要是修改java_home的路径

    在hadoop-env.sh的第25行,把export JAVA_HOME=${JAVA_HOME}修改成具体的路径

    在33行,修改HADOOP_CONF_DIR为具体的路径 重新加载使修改生效 source hadoop-env.sh

    2.修改 core-site.xml 通过vim打开 vim [hadoop]/etc/hadoop/core-site.xml

    增加namenode配置、文件存储位置配置:粘贴<configuration>标签内的内容

    <configuration> <property> <!--用来指定hdfs的老大,namenode的地址--> <name>fs.default.name</name> <value>hdfs://hadoop01:9000</value> </property> <property> <!--用来指定hadoop运行时产生文件的存放目录--> <name>hadoop.tmp.dir</name> <value>/usr/local/src/hadoop/hadoop-2.7.1/tmp</value> </property> </configuration>

    3.修改 hdfs-site.xml 通过vim打开 vim [hadoop]/etc/hadoop/hdfs-site.xml

    配置包括自身在内的备份副本数量:粘贴<configuration>标签内的内容

    <configuration> <property> <!--指定hdfs保存数据副本的数量,包括自己,默认为3--> <!--伪分布式模式,此值必须为1--> <name>dfs.replication</name> <value>1</value> </property> <!--设置hdfs操作权限,false表示任何用户都可以在hdfs上操作文件--> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>

    4.修改 mapred-site.xml 说明:在/etc/hadoop的目录下,只有一个mapred-site.xml.template文件,复制一个。 cp mapred-site.xml.template mapred-site.xml

    通过vim打开 vim [hadoop]/etc/hadoop/mapred-site.xml

    配置mapreduce运行在yarn上:粘贴<configuration>标签内的内容

    <configuration> <property> <!--指定mapreduce运行在yarn上--> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>

    5.修改 yarn-site.xml 通过vim打开 vim [hadoop]/etc/hadoop/yarn-site.xml

    配置:粘贴<configuration>标签内的内容

    <configuration> <property> <!--指定yarn的老大resourcemanager的地址--> <name>yarn.resourcemanager.hostname</name> <value>hadoop01</value> </property> <property> <!--NodeManager获取数据的方式--> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>

    6.修改 slaves vim slaves 7.配置hadoop的环境变量 vim /etc/profile

    最终结果如下图:

    重新加载profile使配置生效 source /etc/profile

    环境变量配置完成,测试环境变量是否生效 echo $HADOOP_HOME

    8.创建tmp文件夹 cd /usr/local/src/hadoop/hadoop-2.7.1 mkdir tmp

    4.初始化 hdfs namenode -format

    5.启动 start-all.sh 停止 stop-all.sh

    6.测试 访问hadoop01:50070 安装成功!

    如果没有成功(进程数不够) 1.stop-all.sh 停掉hadoop所有进程

    2.删掉tmp文件并重新创建tmp

    3.hdfs namenode -format 重新初始化(出现successfully证明成功),如果配置文件报错,安装报错信息修改相应位置后重新执行第二步。

    4.start-all.sh 启动hadoop

    2.3 HDFS详解

    HDFS:分布式文件存储系统。用来存储海量数据。 思考:有一个超大文件让我们存储,该怎么做?

    2.3.1 NameNode

    HDFS集群中的老大,负责元数据信息(文件分为几块,备份几份,每一份都存在哪里的描述信息)的存储和整个集群工作的调度。

    2.3.2 DataNode

    集群中干活的小弟,存放文件块,记录自己存放文件的基本信息。

    2.3.3 Block

    文件块,Hadoop1.0时,每块64M。Hadoop2.0时,每块128M。默认备份三份。

    2.3.4 SecondaryNameNode

    NameNode的小秘,帮助NameNode干一些其他的事情(对fsimage和edits进行合并)。分担NameNode的压力。

    2.3.5 HDFS优点

    可以存储超大文件(无限拓展) 高容错,支持数据丢失自动恢复 可以构建在廉价机上

    2.3.6 HDFS缺点

    做不到低延迟访问 不支持超强的事务 不适合存大量小文件 不支持行级别的增删改

    2.4 HDFS细节

    2.4.1 NameNode、SecondaryNameNode如何工作?

    NameNode自己完成文件合并存在的问题: Edits文件在合并时被占用,造成此时HDFS无法对外提供服务。

    NameNode本来就是集群中最忙的节点,不时的合并文件加大了他的压力,NameNode一旦宕机,整个系统瘫痪,磁盘损坏会造成整个系统中的所有文件丢失。

    所以引入了SecondaryNameNode来帮助NameNode完成文件合并的工作。

    2.4.2 Block备份如何放置?

    第一份:如果该文件本身从Hadoop集群中的某个节点上传,那么第一份存放在上传节点中,如果从Hadoop集群之外上传,那么存放在相对不太忙,负载较小的节点上。

    第二份:放在与第一份所放置的节点相邻机架上的某个节点上。

    第三份:放在与第二份所在节点的机架上的另外一台机器上。 三份以上,放置在负载相对较小的节点上。

    2.5 HDFS基本Shell操作

    创建文件夹(不支持多级创建): hadoop fs -mkdir /xxx

    查看目录: hadoop fs -ls /xxx

    递归查看多级目录: hadoop fs -lsr /xxx

    上传文件到HDFS: hadoop fs -put xxx.txt /xxx

    下载文件到本地当前目录: hadoop fs -get /xxx/xxx/xxx.txt

    删除文件: hadoop fs -rm /xxx/xxx/xxx.txt

    删除文件夹(文件夹必须为空): hadoop fs -rmdir /xxx/xxx

    强制删除文件夹或文件 Hadoop fs -rm -r /xxx

    2.6 MapReduce

    分布式计算系统

    2.7 Yarn

    Hadoop中的大管家,负责整个集群的资源管理调度。主要用于管理MapReduce相关资源。

    原来HDFS中的数据只能被MapReduce直接处理,引入Yarn之后可以支持多种数据处理工具的接入,包括Spark等(相当于插排)。

    Processed: 0.011, SQL: 8