hadoop

Hadoop部署模式有:本地模式、伪分布模式、完全分布式模式、HA完全分布式模式。区分的依据是NameNode、DataNode、ResourceManager、NodeManager等模块运行在几个JVM进程、几个机器。

模式名称各个模块占用的JVM进程数各个模块运行在几个机器数上
本地模式1个1个
伪分布式模式N个1个
完全分布式模式N个N个
HA完全分布式模式N个N个

安装前提:JDK1.8环境,机器配置免密登录

本地模式部署

节点规划

主机安装软件
192.168.199.119ALL IN ONE
下载地址:http://hadoop.apache.org/releases.html
我这里下载的是hadoop-3.2.2.tar.gz

创建文件夹并解压安装包
mkdir -p /data/hadoop && cd /data/hadoop
tar -zxvf hadoop-3.2.2.tar.gz

验证mapreduce程序
vi wc.input
hadoop mapreduce hive
hbase spark storm
sqoop hadoop hive
spark hadoop

运行hadoop自带的mapreduce Demo
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /data/hadoop/wc.input output2

image
这里可以看到job ID中有local字样,说明是运行在本地模式下的

查看输出文件
[root@yfm19 hadoop-3.2.2]# ll output2/
total 4
-rw-r--r-- 1 root root 60 Mar 23 22:07 part-r-00000
-rw-r--r-- 1 root root  0 Mar 23 22:07 _SUCCESS
[root@yfm19 hadoop-3.2.2]# cat output2/part-r-00000 
hadoop	3
hbase	1
hive	2
mapreduce	1
spark	2
sqoop	1
storm	1
伪分布模式

节点规划

主机安装软件
192.168.199.119ALL IN ONE
创建一个名字为hadoop的普通用户并且授权sudo权限
[root@yfm19 hadoop-3.2.2]# useradd hadoop
[root@yfm19 hadoop-3.2.2]# passwd hadoop
Changing password for user hadoop.
New password:  123456
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

给hadoop用户sudo权限
vim /etc/sudoers
root    ALL=(ALL)       ALL
hadoop  ALL=(ALL)       ALL

切换到hadoop用户
su hadoop

创建存放hadoop文件的目录, 将hadoop文件夹的所有者指定为hadoop用户
sudo mkdir hadoop-pretend
sudo chown -R hadoop:hadoop hadoop-pretend/
cd hadoop-pretend/ && cp ../hadoop/hadoop-3.2.2.tar.gz .

配置Hadoop环境变量
vim /etc/profile
export HADOOP_HOME=/data/hadoop-pretend/hadoop-3.2.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

source /etc/profile

配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh文件的JAVA_HOME参数
vim  ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/data/jdk/jdk1.8.0_271

添加hosts变量
vi /etc/hosts
192.168.199.119 bigdata-01.hadoop.com

配置core-site.xml
<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://bigdata-01.hadoop.com:8020</value>
	</property>
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/data/hadoop-pretend/tmpdata</value>
	</property>
</configuration>

fs.defaultFS参数配置的是HDFS的地址
hadoop.tmp.dir配置的是Hadoop临时目录,比如HDFS的NameNode数据默认都存放这个目录下,查看*-default.xml等默认配置文件,就可以看到很多依赖${hadoop.tmp.dir}的配置。
默认的hadoop.tmp.dir是/tmp/hadoop-${user.name},此时有个问题就是NameNode会将HDFS的元数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空/tmp目录下的东西,导致NameNode元数据丢失,是个非常严重的问题,所有我们应该修改这个路径

配置hdfs-site.xml
<configuration>
    <property>
       <name>dfs.replication</name>
       <value>1</value>
    </property>
</configuration>
dfs.replication配置的是HDFS存储时的备份数量,因为这里是伪分布式环境只有一个节点,所以这里设置为1

格式化hdfs
bin/hdfs namenode -format
格式化是对HDFS这个分布式文件系统中的DataNode进行分块,统计所有分块后的初始元数据的存储在NameNode中
格式化后,查看core-site.xml里hadoop.tmp.dir(本例是/opt/data目录)指定的目录下是否有了dfs目录,如果有,说明格式化成功
[hadoop@yfm19 hadoop-pretend]$ tree /data/hadoop-pretend/tmpdata/
/data/hadoop-pretend/tmpdata/
└── dfs
    └── name
        └── current
            ├── fsimage_0000000000000000000
            ├── fsimage_0000000000000000000.md5
            ├── seen_txid
            └── VERSION

3 directories, 4 files

fsimage是NameNode元数据在内存满了后,持久化保存到的文件
fsimage*.md5 是校验文件,用于校验fsimage的完整性。
seen_txid 是hadoop的版本

[hadoop@yfm19 hadoop-pretend]$ cat /data/hadoop-pretend/tmpdata/dfs/name/current/VERSION 
#Tue Mar 23 23:59:26 CST 2021
namespaceID=854029650
clusterID=CID-84b02527-19ee-4be3-9568-9c44a0c58da2
cTime=1616515166637
storageType=NAME_NODE
blockpoolID=BP-2130542932-192.168.199.119-1616515166637
layoutVersion=-65

vession文件里保存:
namespaceID:NameNode的唯一ID。
clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群。

启动NameNode
${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode

启动DataNode
${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode

启动SecondaryNameNode
${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode

查看是否启动成功
[hadoop@yfm19 logs]$ jps
14228 DataNode
14391 SecondaryNameNode
14439 Jps
13902 NameNode

[hadoop@yfm19 logs]$ pwd
/data/hadoop-pretend/hadoop-3.2.2/logs
[hadoop@yfm19 logs]$ tree .
.
├── hadoop-hadoop-datanode-yfm19.log
├── hadoop-hadoop-datanode-yfm19.out
├── hadoop-hadoop-namenode-yfm19.log
├── hadoop-hadoop-namenode-yfm19.out
├── hadoop-hadoop-secondarynamenode-yfm19.log
├── hadoop-hadoop-secondarynamenode-yfm19.out
└── SecurityAuth-hadoop.audit

HDFS上测试创建目录、上传、下载文件
${HADOOP_HOME}/bin/hdfs dfs -mkdir /demo1

上传本地文件到HDFS上
${HADOOP_HOME}/bin/hdfs dfs -put ${HADOOP_HOME}/etc/hadoop/core-site.xml /demo1

读取HDFS上的文件内容
${HADOOP_HOME}/bin/hdfs dfs -cat /demo1/core-site.xml

从HDFS上下载文件到本地
${HADOOP_HOME}/bin/hdfs dfs -get /demo1/core-site.xml

配置、启动YARN
vi etc/hadoop/mapred-site.xml
<configuration>
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
	<property>
		<name>yarn.app.mapreduce.am.env</name>
		<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
	</property>
	<property>
		<name>mapreduce.map.env</name>
		<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
	</property>
	<property>
		<name>mapreduce.reduce.env</name>
		<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
	</property>
</configuration>
指定mapreduce运行在yarn框架上。

配置yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
	<property>
	  <name>yarn.nodemanager.aux-services</name>
	  <value>mapreduce_shuffle</value>
	</property>
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>bigdata-01.hadoop.com</value>
	 </property>
</configuration>
yarn.nodemanager.aux-services配置了yarn的默认混洗方式,选择为mapreduce的默认混洗算法。
yarn.resourcemanager.hostname指定了Resourcemanager运行在哪个节点上。

启动Resourcemanager
${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager

启动nodemanager
${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager

查看是否启动成功
[hadoop@yfm19 logs]$ jps
16017 ResourceManager
14228 DataNode
14391 SecondaryNameNode
16359 Jps
16329 NodeManager
13902 NameNode

访问YARN的Web页面,http://192.168.199.119:8088/

在这里插入图片描述

运行MapReduce Job
创建测试用的Input文件,创建输入目录
${HADOOP_HOME}/bin/hdfs dfs -mkdir -p /wordcountdemo/input1

将之前创建的wc.input拷贝到${HADOOP_HOME}

将wc.input文件上传到HDFS的/wordcountdemo/input目录中:
[hadoop@yfm19 hadoop-pretend]$ ${HADOOP_HOME}/bin/hdfs dfs -put /data/hadoop-pretend/wc.input /wordcountdemo/input1
[hadoop@yfm19 hadoop-pretend]$ ${HADOOP_HOME}/bin/hdfs dfs -ls /wordcountdemo/input1
Found 1 items
-rw-r--r--   1 hadoop supergroup         71 2021-03-29 05:21 /wordcountdemo/input1/wc.input

运行WordCount MapReduce Job
[hadoop@yfm19 hadoop-3.2.2]$ ${HADOOP_HOME}/bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /wordcountdemo/input1 /wordcountdemo/output1
2021-03-29 05:29:48,194 INFO client.RMProxy: Connecting to ResourceManager at bigdata-01.hadoop.com/192.168.199.119:8032
2021-03-29 05:29:58,720 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/hadoop/.staging/job_1616966245338_0002
2021-03-29 05:29:58,859 INFO input.FileInputFormat: Total input files to process : 1
2021-03-29 05:29:59,302 INFO mapreduce.JobSubmitter: number of splits:1
2021-03-29 05:29:59,798 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1616966245338_0002
2021-03-29 05:29:59,799 INFO mapreduce.JobSubmitter: Executing with tokens: []
2021-03-29 05:29:59,896 INFO conf.Configuration: resource-types.xml not found
2021-03-29 05:29:59,897 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.
2021-03-29 05:29:59,939 INFO impl.YarnClientImpl: Submitted application application_1616966245338_0002
2021-03-29 05:29:59,967 INFO mapreduce.Job: The url to track the job: http://bigdata-01.hadoop.com:8088/proxy/application_1616966245338_0002/
2021-03-29 05:29:59,967 INFO mapreduce.Job: Running job: job_1616966245338_0002
2021-03-29 05:30:30,160 INFO mapreduce.Job: Job job_1616966245338_0002 running in uber mode : false
2021-03-29 05:30:30,161 INFO mapreduce.Job:  map 0% reduce 0%
2021-03-29 05:30:44,248 INFO mapreduce.Job:  map 100% reduce 0%
2021-03-29 05:30:58,350 INFO mapreduce.Job:  map 100% reduce 100%
2021-03-29 05:31:15,441 INFO mapreduce.Job: Job job_1616966245338_0002 completed successfully


查看输出结果目录
[hadoop@yfm19 hadoop-3.2.2]$ ${HADOOP_HOME}/bin/hdfs dfs -ls /wordcountdemo/output1
Found 2 items
-rw-r--r--   1 hadoop supergroup          0 2021-03-29 05:30 /wordcountdemo/output1/_SUCCESS
-rw-r--r--   1 hadoop supergroup         60 2021-03-29 05:30 /wordcountdemo/output1/part-r-00000

output目录中有两个文件,_SUCCESS文件是空文件,有这个文件说明Job执行成功。
part-r-00000文件是结果文件,其中-r-说明这个文件是Reduce阶段产生的结果,mapreduce程序执行时,可以没有reduce阶段,但是肯定会有map阶段,如果没有reduce阶段这个地方有是-m-。
一个reduce会产生一个part-r-开头的文件。
查看输出文件内容
[hadoop@yfm19 hadoop-3.2.2]$ ${HADOOP_HOME}/bin/hdfs dfs -cat /wordcountdemo/output1/part-r-00000
hadoop	3
hbase	1
hive	2
mapreduce	1
spark	2
sqoop	1
storm	1
结果是按照键值排好序的。

停止Hadoop
${HADOOP_HOME}/sbin/hadoop-daemon.sh stop namenode
${HADOOP_HOME}/sbin/hadoop-daemon.sh stop datanode
${HADOOP_HOME}/sbin/yarn-daemon.sh stop resourcemanager
${HADOOP_HOME}/sbin/yarn-daemon.sh stop nodemanager

Hadoop各个功能模块的理解
1、 HDFS模块
HDFS负责大数据的存储,通过将大文件分块后进行分布式存储方式,突破了服务器硬盘大小的限制,解决了单台机器无法存储大文件的问题,HDFS是个相对独立的模块,可以为YARN提供服务,也可以为HBase等其他模块提供服务。

2、 YARN模块
YARN是一个通用的资源协同和任务调度框架,是为了解决Hadoop1.x中MapReduce里NameNode负载太大和其他问题而创建的一个框架。
YARN是个通用框架,不止可以运行MapReduce,还可以运行Spark、Storm等其他计算框架。

3、 MapReduce模块
MapReduce是一个计算框架,它给出了一种数据处理的方式,即通过Map阶段、Reduce阶段来分布式地流式处理数据。它只适用于大数据的离线处理,对实时性要求很高的应用不适用

历史服务介绍
Hadoop开启历史服务可以在web页面上查看Yarn上执行job情况的详细信息。可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。

开启历史服务
[hadoop@bigdata-senior01 hadoop-2.5.0]$ ${HADOOP_HOME}/sbin/mr-jobhistory-daemon.sh start historyserver

需要在windows机器添加hosts环境变量
开启后,可以通过Web页面查看历史服务器:
http://bigdata-01.hadoop.com:19888/jobhistory

Web查看job执行历史
1、 运行一个mapreduce任务
[hadoop@yfm19 hadoop-3.2.2]$ ${HADOOP_HOME}/bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /wordcountdemo/input1 /wordcountdemo/output2

在这里插入图片描述

在这里插入图片描述

历史服务器的Web端口默认是19888,可以查看Web界面。

但是在上面所显示的某一个Job任务页面的最下面,Map和Reduce个数的链接上,点击进入Map的详细信息页面,再查看某一个Map或者Reduce的详细日志是看不到的,是因为没有开启日志聚集服务

开启日志聚集

日志聚集介绍
MapReduce是在各个机器上运行的,在运行过程中产生的日志存在于各个机器上,为了能够统一查看各个机器的运行日志,将日志集中存放在HDFS上,这个过程就是日志聚集。

配置日志聚集功能
Hadoop默认是不启用日志聚集的。在yarn-site.xml文件里配置启用日志聚集。
<property>
	<name>yarn.log-aggregation-enable</name>
	<value>true</value>
</property>
<property>
	<name>yarn.log-aggregation.retain-seconds</name>
	<value>106800</value>
</property>

重启Yarn进程
${HADOOP_HOME}/sbin/stop-yarn.sh
${HADOOP_HOME}/sbin/start-yarn.sh

重启HistoryServer进程
${HADOOP_HOME}/sbin/mr-jobhistory-daemon.sh stop historyserver
${HADOOP_HOME}/sbin/mr-jobhistory-daemon.sh start historyserver
完全分布式安装
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值