01hadoop介绍和安装

1.什么是Hadoop

Hadoop是Apache基金会旗下的一个分布式系统基础架构。

主要包括:

(1)分布式文件系统HDFS(Hadoop Distributed File System)

(2)分布式计算系统Map Reduce

(3)分布式资源管理系统YARN

Hadoop使用户可以在不了解分布式系统底层细节的情况下,开发分布式程序并充分利用集群的分布式能力进行运算和存储

2.Hadoop核心构成

Hadoop框架主要包括三大部分:分布式文件系统分布式计算系统资源管理系统

1.分布式文件系统HDFS

主要任务:主要负责分布式文件存储,可看成一个容量巨大、具有高容错性的磁盘,在使用的时候完全可以当作普通的本地磁盘使用。

HDFS的基本原理:将数据文件拆分成指定大小的数据块,并将数据块以副本的方式存储到多台机器上,即使某个节点出现故障,该节点上存储的数据块副本丢失,但是在其他节点上还有对应的数据副本,所以在HDFS中即使某个节点出现问题也不会造成数据的丢失(前提是你的Hadoop集群的副本系数大于1)

2.分布式计算系统Map Reduce

**主要任务:**负责计算

工作原理:

Map Reduce的名字源于这个模型中的两项核心操作:Map(映射)和Reduce(归纳)

一个Map Reduce作业通常会把输入的数据集切分为若干独立的数据块,由map任务以并行的方式处理它们,对map的输出先进行排序,然后再把结果输入reduce任务,由reduce任务来完成最终的统一处理。

Map Reduce框架处理数据的输入源和输出目的地的大部分场景都是存储在HDFS上的

注意:

在部署Hadoop集群时,通常是将计算节点和存储节点部署在相同的节点之上,这样做的好处是允许计算框架在进行任务调度时,可以将作业优先调度到那些已经存有数据的节点上进行数据的计算,使整个集群的网络带宽被非常高效地利用,这就是大数据中非常有名的一句话“移动计算而不是移动数据”

3.资源管理系统YARN

主要任务:进行资源管理

YARN的基本思想:

将Hadoop1.x中Map Reduce架构中的Job Tracker的资源管理和作业调度监控功能进行分离,解决了在Hadoop1.x中只能运行Map Reduce框架的限制

3.hadoop发行版本

Hadoop的发行版除了由社区维护的 Apache Hadoop之外,Cloudera、Hortonworks、Map R等都提供了自己的商业版

(1)Cloudera CDH

Cloudera CDH版本的Hadoop是现在国内公司使用最多的。

优点:Cloudera Manager(简称CM)采取“小白”式安装,配置简单、升级方便,资源分配设置方便,非常利于整合Impala,而且文档写得很好,与Spark的整合力度也非常好。在CM的基础之上,我们通过页面就能完成对Hadoop生态圈各种环境的安装、配置和升级。

缺点:CM不开源,Hadoop的功能和社区版有些出入

(2)Hortonworks HDP

优点:原装Hadoop、纯开源,版本和社区版一致,支持Tez,集成开源监控方案Ganglia和Nagios。

缺点:安装、升级、添加、删除节点比较麻烦。

(3)原生hadoop

官网下载即可

4.Hadoop生态圈

狭义的Hadoop:是一个适合大数据分布式存储和分布式计算的平台,包括HDFS、Map Reduce和YARN。

广义的Hadoop:指以Hadoop为基础的生态圈,Hadoop只是其中最重要、最基础的一部分;生态圈中的每个子系统只负责解决某一个特定的问题域(甚至可能更窄),它并不是一个全能系统,而是多个小而精的系统。

请添加图片描述

HDFS:大数据处理框架如Map Reduce或者Spark等要处理的数据源大部分都是存储在HDFS之上,Hive或者HBase等框架的数据通常情况下也是存储在HDFS之上。简而言之,HDFS为大数据的存储提供了保障。

Map ReduceMap Reduce:是一个分布式、并行处理的编程模型。开发人员只需编写Hadoop的Map Reduce作业就能使用存储在HDFS中的数据来完成相应的数据处理功能。

YARN:负责整个系统的资源管理和调度,而且在YARN之上能运行各种不同类型(Map Reduce、Tez、Spark)的执行框架。

HBase:是一个建立在HDFS之上的面向列的数据库,用于快速读/写大量数据。HBase使用Zoo Keeper进行管理,以确保所有组件都能正常运行。HBase保障查询速度的一个关键因素就是其Row Key设计得是否合理,这点需要重点关注。

Zoo Keeper:是分布式协调服务的框架。Hadoop的许多组件都依赖于Zoo Keeper,比如HDFS Name Node HA的自动切换、HBase的高可用,以及Spark Standalone模式Master的HA机制都是通过Zoo Keeper来实现的。

Hive:Hive的执行原理就是将SQL语句翻译为Map Reduce作业,并提交到Hadoop集群上运行。因为只需要写SQL语句,而不需要面向Map Reduce编程API进行相应代码的开发,大大降低了学习的门槛,同时也提升了开发的效率。

Pig:是一个用于并行计算的高级数据流语言和执行框架,有一套和SQL类似的执行语句,处理的对象是HDFS上的文件。Pig的数据处理语言采取数据流方式,一步一步地进行处理(该框架简单了解即可,近些年在生产上使用得并不是太多)。

Sqoop:是一个用于在关系数据库、数据仓库(Hive)和Hadoop之间转移数据的框架。可以借助Sqoop完成关系型数据库到HDFS、Hive、HBase等Hadoop生态圈中框架的数据导入导出操作,其底层也是通过Map Reduce作业来实现的。

Flume:是由Cloudera提供的一个分布式、高可靠、高可用的服务,是用于分布式的海量日志的高效收集、聚合、移动/传输系统的框架;Flume是一个基于流式数据的非常简单的(只需要一个配置文件)、灵活的、健壮的、容错的架构。

Oozie:是一个工作流调度引擎,在Oozie上可以执行Map Reduce、Hive、Spark等不同类型的单一或者具有依赖性(后一个作业的执行依赖于前一个或者多个作业的成功执行)的作业。可以使用Cloudera Manager中的HUE子项目在页面上对Oozie进行配置和管理。类似的在大数据中使用的工作流调度引擎还有Azkaban。

MahoutMahout:是一个机器学习和数据挖掘库,它提供的Map Reduce包含很多实现,包括聚类算法、回归测试、统计建模。

5.安装hadoop

须知:

使用的是分布式主机安装方式,有三台主机进行组合,主机名分别是A,B,C

三台主机对应的ip如下(前面为主机名,后面为ip

A 123

B 456

C 789

软件版本

hadoop: 原生版3.1.3

jdk:1.8.0

1.修改配置并密网穿透

1.分别修改三台主机的名称,分别为A,B,C

三台主机上面都修改,修改完成后保存并退出

vim /etc/hostname

重启主机

reboot

2.配置映射关系

先在主机A上修改host文件,这里只在A主机上改,其他主机不要改

vim /etc/hosts

内容如下

删除默认 localhost,添加 3 个节点的 IP

123 A
456 B
789 C

3.配置 ssh 登陆

在三台主机上面同时执行下面命令,注意是三台

ssh-keygen -t rsa   ---四个回车

**在A主机上执行,**将hosts文件发给B, A主机已经对B,C主机做好了映射,所以可以直接分发

scp /etc/hosts root@B:/etc/       将hosts文件发给B
-
scp /etc/hosts root@C:/etc/       将hosts文件发给C

在三台主机上分别操作,分发秘钥,一份发给自己,另外两份发给其他

ssh-copy-id A
ssh-copy-id B
ssh-copy-id C

4.测试

测试从A主机穿透到B主机,C主机

ssh B
ssh C

2.安装jdk

创建两个目录,在/opt目录下

software目录: 用于保存安装包

module目录:用于存放解压后的组件

三台主机都需要创建这两个目录

mkdir /opt/software
mkdir /opt/module

安装

将jdk-8u212-linux-x64.tar.gz安装包提前存放在A主机的/opt/software目录下

#在A主机上面操作下面步骤
-
cd /opt/software
-
#将jdk压缩包解压到/opt/module目录下
tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module
-
#配置环境变量,添加以下内容
vim /etc/profile
内容
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=${JAVA_HOME}/bin:$PATH
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
-
#刷新环境变量
source /etc/profile
#查看是否安装成功
java –version

将在A主机上配置好的jdk分发到B,C主机

scp -r /opt/module/jdk1.8.0_212 root@B:/opt/module/   #分发给B主机
scp -r /opt/module/jdk1.8.0_212 root@C:/opt/module/   #分发给C主机

将在A主机上配置好的环境变量分发给B,C主机

scp /etc/profile root@B:/etc/
scp /etc/profile root@C:/etc/

在B,C主机上面分别刷新一下环境变量,并测试java是否安装成功

#刷新环境变量
source /etc/profile
#查看是否安装成功
java –version

4.安装hadoop

将hadoop-3.1.3.tar.gz安装包提前存放在A主机的/opt/software目录下

进入A主机的/opt/software目录并解压文件

cd /opt/software
-
tar -zxvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/module #将hadoop安装包解压到/opt/module目录下

集群节点规划

组件 A主机 B主机 C主机
HDFS DataNode NameNode,DataNode SecondaryNameNode, DataNode
YARN ResourceManager,NodeManager NodeManager NodeManager

第一步:进入解压好的hadoop目录----A主机上操作

cd /opt/module/hadoop-3.1.3/etc/hadoop/
-
ll

第二步:修改core-site.xml文件-----A主机上操作

vim core-site.xml

内容

<configuration>
 <!-- 指定 NameNode 的地址 ,这里需要修改一下主机名,将B修改成对应的主机名-->
<property>
 <name>fs.defaultFS</name>
	<value>hdfs://B:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录,存放在data目录下,存放路径也可修改 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 root 或 student -->
<property>
	<name>hadoop.http.staticuser.user</name>
	<value>root</value>
</property> 

</configuration>

第三步:修改:hdfs-site.xml文件----A主机编写

vim :hdfs-site.xml

内容

<configuration>
<!--配置 hdfs 文件系统的副本数,可以设置成3也可是其他-->
<property>
	<name>dfs.replication</name>
	<value>3</value>
</property>
<!-- NameNode web 端访问地址,这里设置为B主机的9870端口-->
<property>
	<name>dfs.namenode.http-address</name>
	<value>B:9870</value>
</property>
<!-- SecondaryNameNode web 端访问地址,这是设置为C主机的9868端口-->
<property>
	<name>dfs.namenode.secondary.http-address</name>
	<value>C:9868</value>
</property>
<!-- 修改块大小,默认为 134217728(字节数)即 128m,也可以写上单位,比如 128m,1g 等-->
<property>
	<name>dfs.blocksize</name>
	<value>134217728</value>
</property>
</configuration>

第四步:修改mapred-site.xml文件----A主机编写

vim mapred-site.xml

内容

<configuration>
<!--指定 mapreduce 运行的框架名:yarn-->
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>
<!--配置 mapreduce 的历史记录组件的内部通信地址即 RPC 地址,设置为A主机的10020端口,其实就是resource manager主机-->
<property>
	<name>mapreduce.jobhistory.address</name>
	<value>A:10020</value>
</property>
<!--配置 mapreduce 的历史记录服务的web 管理地址,设置成A主机的resource manager 的19888-->
<property>
	<name>mapreduce.jobhistory.webapp.address</name>
	<value>hd01:19888</value>
</property>
<!--配置 mapreduce 已完成的 job记录在 HDFS 上的存放地址-->
<property>
	<name>mapreduce.jobhistory.done-dir</name>
	<value>/history/done</value>
</property>
<!--配置 mapreduce 正在执行的 job记录在 HDFS 上的存放地址-->
<property>
	<name>mapreduce.jobhistory.intermediate-done-dir</name>
	<value>/history/done_intermediate</value>
</property>
<!--为 MR 程序主进程程添加环境变量-->
<property>
	<name>yarn.app.mapreduce.am.env</name>
	<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<!--为 Map 添加环境变量-->
<property>
	<name>mapreduce.map.env</name>
	<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<!--为 Reduce 添加环境变量-->
<property>
	<name>mapreduce.reduce.env</name>
	<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
</configuration>

第五步:编写yarn-site.xml文件----A主机编写

vim yarn-site.xml

内容

<configuration>
<!-- Site specific YARN configuration properties -->
<!--指定 resourcemanager 所在的主机,这里设置成A-->
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>A</value>
</property>
<!--指定 mapreduce 的shuffle 处理数据方式-->
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<!--配置 resourcemanager 内部通信地址,设置成主机A,resource manager的8032端口-->
<property>
	<name>yarn.resourcemanager.address</name>
	<value>A:8032</value>
</property>
<!--配置 resourcemanager 的 scheduler 组件的内部通信地址,设置成主机A,resource manager的8030端口-->
<property>
	<name>yarn.resourcemanager.scheduler.address</name>
	<value>A:8030</value>
</property>1
<!--配置 resource-tracker 组件的内部通信地址,设置成主机A,resource manager的8031端口-->
<property>
	<name>yarn.resourcemanager.resource-tracker.address</name>
	<value>A:8031</value>
</property>
<!--配置 resourcemanager 的 admin 的内部途信地址,设置成主机A,resource manager的8033端口-->
<property>
	<name>yarn.resourcemanager.admin.address</name>
	<value>A:8033</value>
</property>
<!--配置 yarn 的 web 管理地址,设置成主机A,resource manager的8088端口-->
<property>
	<name>yarn.resourcemanager.webapp.address</name>
	<value>A:8088</value>
</property>
<!--yarn 的日志聚合是否开启-->
<property>
	<name>yarn.log-aggregation-enable</name>
	<value>true</value>
</property>
<!--聚合日志在 hdfs 的存储路径-->
<property>
	<name>yarn.nodemanager.remote-app-log-dir</name>
	<value>/tmp/logs</value>
</property>
<!--聚合日志在 hdfs 的保存时长,单位 S,默认 7 天-->
<property>
	<name>yarn.log-aggregation.retain-seconds</name>
	<value>604800</value>
</property>
<!--聚合日志的检查时间段-->
<property>
	<name>yarn.log-aggregation.retain-check-interval-seconds</name>
	<value>3600</value>
</property>
<!-- 设置日志聚合服务器地址 这里设置为主机A的19888-->
<property> 
	<name>yarn.log.server.url</name> 
	<value>http://A:19888/jobhistory/logs</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>

第六步:编辑works文件----A主机编写

vim workers

内容

A
B
C

第七步:分发编写好的文件----A主机编写

scp -r /opt/module/hadoop-3.1.3 root@B:/opt/module/ 发给B主机
scp -r /opt/module/hadoop-3.1.3 root@C:/opt/module/ 发给C主机

第八步:编写配置环境----A主机编写

vim /etc/profile
-
添加内容
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

刷新环境

source /etc/profile

分发给另外两台主机

scp /etc/profile root@B:/etc/ #环境发给B
scp /etc/profile root@C:/etc/ #环境发给C
-
之后刷新环境即可,三台主机都要刷新
source /etc/profile

第九步:验证是否安装成功

hadoop version

5.使用hadoop

hadoop version后出现了版本号,代表我们已经安装成功,但是我们还不能使用的,必须要进行格式化,我们在格式化的时候,必须在namenode节点上进行格式化,由于我们将第二台主机作为了namenode,所以下面会在B主机上面操作

第一步:namenode格式化----B主机上进行

hadoop namenode -format

第二步:启动hadoop—B主机上操作

start-all.sh

第三步:jps查看节点情况—三台都看

jps

三台主机上的节点要与我们设置的一样

第四步:web UI要在windows浏览器上查看----三台都执行

#三台主机都关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

打开windwos系统的C:\Windows\System32\drivers\etc目录,里面有一个 hosts 文件,没有的话我们就新建一个

hosts文件里面填写如下内容

# SwitchHosts!
123 A
456 B
789 C

访问

打开浏览器,必须是namenode的主机(B),输入http://B:9870 或者输入B IP:http://456:9870

猜你喜欢

转载自blog.csdn.net/qq_63119830/article/details/130140464