四 、Hadoop 运行模式
1)官方网址
(1)官方网站:
(2)各个版本归档库地址
https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
(3)hadoop2.7.2 版本详情介绍
http://hadoop.apache.org/docs/r2.7.2/
2)Hadoop 运行模式
(1)本地模式(默认模式):
不需要启用单独进程,直接可以运行,测试和开发时使用。
(2)伪分布式模式:
等同于完全分布式,只有一个节点。
(3)完全分布式模式:
多个节点一起运行。
4.1 本地运行 Hadoop 案例
4.1.1 官方 grep 案例
1)创建在 hadoop-2.7.2 文件下面创建一个 input 文件夹
[atguigu@hadoop101 hadoop-2.7.2]$mkdir input
2)将 hadoop 的 xml 配置文件复制到 input
[atguigu@hadoop101 hadoop-2.7.2]$cp etc/hadoop/*.xml input
3)执行 share 目录下的 mapreduce 程序
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
4)查看输出结果
[atguigu@hadoop101 hadoop-2.7.2]$ cat output/*
4.1.2 官方 wordcount 案例
1)创建在 hadoop-2.7.2 文件下面创建一个 wcinput 文件夹
[atguigu@hadoop101 hadoop-2.7.2]$mkdir wcinput
2)在 wcinput 文件下创建一个 wc.input 文件
[atguigu@hadoop101 hadoop-2.7.2]$cd wcinput
[atguigu@hadoop101 wcinput]$touch wc.input
3)编辑 wc.input 文件
[atguigu@hadoop101 wcinput]$vim wc.input
在文件中输入如下内容
hadoop yarn
hadoop mapreduce
atguigu
atguigu
保存退出::wq
4)回到 hadoop 目录/opt/module/hadoop-2.7.2
5)执行程序:
[atguigu@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
6)查看结果:
[atguigu@hadoop101 hadoop-2.7.2]$cat wcoutput/part-r-00000
atguigu 2
hadoop 2
mapreduce 1
yarn 1
4.2 伪分布式运行 Hadoop 案例
4.2.1 启动 HDFS 并运行 MapReduce 程序
1)分析:
(1)准备 1 台客户机
(2)安装 jdk
(3)配置环境变量
(4)安装 hadoop
(5)配置环境变量
(6)配置集群
(7)启动、测试集群增、删、查
(8)执行 wordcount 案例
2)执行步骤
需要配置 hadoop 文件如下
(1)配置集群
(a)配置:hadoop-env.sh
Linux 系统中获取 jdk 的安装路径:
[root@ hadoop101 ~]# echo $JAVA_HOME
/opt/module/jdk1.8.0_144
修改 JAVA_HOME 路径:
export JAVA_HOME=/opt/module/jdk1.8.0_144
(b)配置:core-site.xml
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定 hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
(c)配置:hdfs-site.xml
<!-- 指定 HDFS 副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
(2)启动集群
(a)格式化 namenode(第一次启动时格式化,以后就不要总格式化)
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs namenode -format
(b)启动 namenode
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
(c)启动 datanode
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
(3)查看集群
(a)查看是否启动成功
[atguigu@hadoop101 hadoop-2.7.2]$ jps
13586 NameNode
13668 DataNode
13786 Jps
(b)查看产生的 log 日志
当前目录:/opt/module/hadoop-2.7.2/logs
[atguigu@hadoop101 logs]$ ls
hadoop-atguigu-datanode-hadoop.atguigu.com.log
hadoop-atguigu-datanode-hadoop.atguigu.com.out
hadoop-atguigu-namenode-hadoop.atguigu.com.log
hadoop-atguigu-namenode-hadoop.atguigu.com.out
SecurityAuth-root.audit
[atguigu@hadoop101 logs]# cat hadoop-atguigu-datanode-hadoop101.log
(c)web 端查看 HDFS 文件系统
http://192.168.1.101:50070/dfshealth.html#tab-overview【根据自己的IP和端口号访问】
注意:如果不能查看,看如下帖子处理
http://www.cnblogs.com/zlslch/p/6604189.html
(4)操作集群
(a)在 hdfs 文件系统上创建一个 input 文件夹
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/atguigu/input
(b)将测试文件内容上传到文件系统上
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -put wcinput/wc.input /user/atguigu/input/
(c)查看上传的文件是否正确
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -ls /user/atguigu/input/
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/ input/wc.input
(d)运行 mapreduce 程序
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input/ /user/atguigu/output
(e)查看输出结果
命令行查看:
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*
浏览器查看
(f)将测试文件内容下载到本地
[atguigu@hadoop101 hadoop-2.7.2]$ hadoop fs -get /user/atguigu/output/part-r-00000 ./wcoutput/
(g)删除输出结果
[atguigu@hadoop101 hadoop-2.7.2]$ hdfs dfs -rmr /user/atguigu/output
4.2.2 YARN 上运行 MapReduce 程序
1)分析:
(1)准备 1 台客户机
(2)安装 jdk
(3)配置环境变量
(4)安装 hadoop
(5)配置环境变量
(6)配置集群 yarn 上运行
(7)启动、测试集群增、删、查
(8)在 yarn 上执行 wordcount 案例
2)执行步骤
(1)配置集群
(a)配置 yarn-env.sh
配置一下 JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
(b)配置 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>
(c)配置:mapred-env.sh
配置一下 JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
(d)配置: (对 mapred-site.xml.template 重新命名为) mapred-site.xml
[atguigu@hadoop101 hadoop]$ mv mapred-site.xml.template mapred-site.xml
[atguigu@hadoop101 hadoop]$ vi mapred-site.xml
<!-- 指定 mr 运行在 yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(2)启动集群
(a)启动 resourcemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
(b)启动 nodemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
(3)集群操作
(a)yarn 的浏览器页面查看
http://192.168.1.101:8088/cluster
(b)删除文件系统上的 output 文件【集群操作时输出文件的目录最好让它自动生成,不要提前手动创建】
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/atguigu/output
(c)执行 mapreduce 程序
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output
(d)查看运行结果
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*
4.2.3 配置临时文件存储路径
1)停止进程
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop resourcemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop namenode
2)修改 hadoop.tmp.dir
[core-site.xml]
<!-- 指定 hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
3)将/opt/module/hadoop-2.7.2 路径中的 logs 文件夹删除掉
[atguigu@hadoop101 hadoop-2.7.2]$ rm -rf logs/
4)进入到 tmp 目录将 tmp 目录中 hadoop-atguigu 目录删除掉
[atguigu@hadoop101 tmp]$ rm -rf hadoop-atguigu/
5)格式化 NameNode
[atguigu@hadoop101 hadoop-2.7.2]$ hadoop namenode -format
6)启动所有进程
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
7)查看/opt/module/hadoop-2.7.2/data/tmp 这个目录下的内容。
4.2.4 配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认
配置值时,才需要修改自定义配置文件,更改相应属性值。
(1)默认配置文件:存放在 hadoop 相应的 jar 包中
[core-default.xml]
hadoop-common-2.7.2.jar/ core-default.xml
[hdfs-default.xml]
hadoop-hdfs-2.7.2.jar/ hdfs-default.xml
[yarn-default.xml]
hadoop-yarn-common-2.7.2.jar/ yarn-default.xml
[core-default.xml]
hadoop-mapreduce-client-core-2.7.2.jar/ core-default.xml
(2)自定义配置文件:存放在$HADOOP_HOME/etc/hadoop
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml