Hadoop 运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
本地(独立)模式:无需运行任何守护进程,所有程序都在同一个JVM上执行,在独立模式下测试和调试MapReduce都非常方便,因此该模式在开发阶段比较适合。
伪分布式模式:Hadoop守护进程运行在本地机器上,模拟一个小规模的集群。
完全分布式:Hadoop守护进程运行在一个集群上。
本地运行模式
1. 官方Grep案例
1. 创建在hadoop-3.2.0文件下面创建一个input文件夹
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ mkdir input
2. 将Hadoop的xml配置文件复制到input
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ cp etc/hadoop/*xml input
3. 执行share目录下的MapReduce程序
# 后面用了一个正则表达式来匹配需要的输出,同时指定输入和输出目录
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar grep input output 'dfs[a-z.]+'
4. 查看输出结果
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ cat output/*
2. 官方WordCount案例
1. 创建在hadoop-3.2.0文件下面创建一个wcinput文件夹
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ mkdir wcinput
2. 在wcinput文件下创建一个wc.input文件
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ cd wcinput
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0/input
$ touch wc.input
3. 编辑wc.input文件
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0/input
$ vi wc.input
输入如下内容:
hadoop map reduce
mapreduce yarn
hadoop
保存退出
4. 回到hadoop-3.2.0目录执行程序
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount wcinput/ wcoutput
5. 查看结果
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ cat wcoutput/part-r-00000
本地模式较简单。
伪分布式运行模式
1. 启动HDFS并运行MapReduce程序
准备内容:配置集群,启动、测试集群的增删查、执行WordCount案例
执行步骤
配置集群
- 配置etc/hadoop/hadoop-env.sh
首先获取jdk安装路径
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ echo $JAVA_HOME
/opt/jvm/jdk1.8.0_211
配置环境变量,在etc/hadoop/hadoop-env.sh中:
export JAVA_HOME=/opt/jvm/jdk1.8.0_211
- 配置etc/hadoop/core-site.xml(在configration标签中加入下面内容)
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value> # localhost是当前主机名
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/jvm/hadoop-3.2.0/data/tmp</value>
</property>
- 配置etc/hadoop/hdfs-site.xml
<!-- 指定 HDFS 副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
启动集群
# 格式化NameNode(第一次启动时格式化,以后不能总格式化)
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hdfs namenode -format
# 启动namenode
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ sbin/hadoop-daemon.sh start namenode
# 启动datanode
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ sbin/hadoop-daemon.sh start datanode
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
# jps命令查看已经启动的项目,需要注意的是jps是jdk中的命令,不是linux中的命令,不安装jdk不能使用
$ jps
15105 Jps
32056 JobHistoryServer
27371 NameNode
31852 NodeManager
31565 ResourceManager
27518 DataNode
web端查看HDFS文件系统
http://localhost:9870/
端口号是9870
查看产生的log日志
切换到所在目录:/opt/jvmhadoop-3.2.0/logs
用cat命令打印日志查看。
操作集群
# 在 HDFS 文件系统上创建一个 input 文件夹
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hdfs dfs -mkdir -p /user/gengqing/input
# 使用put命令,将测试文件内容上传到文件系统上
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hdfs dfs -put wcinput/wc.input /user/gengqing/input
# 运行 MapReduce 程序
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /user/gengqing/input /user/gengqing/output
# 最后还可以使用cat命令查看输出结果
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hdfs dfs -cat /user/gengqing/output/p*
# 还可以将文件下载到本地
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ hdfs dfs -get /user/gengqing/output/part-r-0000 ./wcoutput/
# 删除输出结果
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hdfs dfs -rm -r /user/gengqing/output
2. 启动YARN并运行MapReduce程序
准备内容:配置集群在YARN上运行MR、启动和测试集群增删查、在YARN上执行WordCount案例
执行步骤
- 配置etc/hadoop/yarn-env.sh
首先获取jdk安装路径
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ echo $JAVA_HOME
/opt/jvm/jdk1.8.0_211
配置环境变量,在etc/hadoop/yarn-env.sh中:
## JAVA_HOME
export JAVA_HOME=/opt/jvm/jdk1.8.0_211
if ["$JAVA_HOME" != ""]; then
JAVA_HOME=$JAVA_HOME
fi
- 配置etc/hadoop/yarn-site.xml
<!-- Reducer 获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
# 需要加上对yarn.application.classpath的配置,否则会报错
</property>
<property>
<name>yarn.application.classpath</name>
<value>
/opt/jvm/hadoop-3.2.0/etc/hadoop,
/opt/jvm/hadoop-3.2.0/share/hadoop/common/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/common/lib/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/hdfs/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/hdfs/lib/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/mapreduce/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/mapreduce/lib/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/yarn/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/yarn/lib/*
</value>
</property>
- 配置etc/hadoop/mapred-env.sh
配置环境变量,在etc/hadoop/yarn-env.sh中:
## JAVA_HOME
export JAVA_HOME=/opt/jvm/jdk1.8.0_211
- 配置etc/hadoop/mapred-site.xml
<!-- 指定 MR 运行在 YARN 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
启动集群
# 启动前必须保证 NameNode 和 DataNode 已经启动
# 启动resurcemanager
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ sbin/yarn-daemon.sh start resurcemanager
# 启动nodemanager
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ sbin/yarn-daemon.sh start nodemanager
集群操作
http://localhost:8088/cluster
端口号:8088
3. 配置历史服务器(使得可以在web端查看history)
- 配置etc/hadoop/mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>localhost:19888</value>
</property>
- 启动历史服务器
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ sbin/mr-jobhistory-daemon.sh start historyserver
- 查看JobHistory
http://hadoop101:19888/jobhistory
3. 配置日志的聚集(使得可以在web端查看日志)
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。
日志聚集功能好处: 可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能 , 需要重新启动 NodeManager 、 ResourceManager 和HistoryManager。
- 配置etc/hadoop/yarn-site.xml
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
- 关闭 NodeManager 、 ResourceManager 和 HistoryManager
- 重启 NodeManager 、 ResourceManager 和 HistoryManager
- 删除 HDFS 上已经存在的输出文件
- 执行 WordCount 程序
- 查看日志
网友评论