1.安装hadoop
2.配置集群
(1)修改配置文件:hadoop-env.sh
Linux系统中获取JDK的安装路径:
[lzh@hadoop101 hadoop]$ echo $JAVA_HOME
/opt/module/jdk1.8.0_144
进入hadoop-env.sh文件:
[lzh@hadoop101 hadoop]$ vi /opt/module/hadoop-2.7.2/etc/hadoop/hadoop-env.sh
修改JAVA_HOME 路径:
export JAVA_HOME=/opt/module/jdk1.8.0_144
(2)修改配置文件:core-site.xml
[lzh@hadoop101 ~]$ vi /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
<!-- 指定HDFS中NameNode的地址 hadoop101是在/etc/hosts目录下配置的域名映射-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 如果不配置 它的默认位置在/tmp/{$user}下面 不配置的话重启linux tmp 下的目录被清空-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
(3)修改配置文件:hdfs-site.xml
创建
<!-- 指定HDFS副本的数量 不配置默认是3个 这里搭建伪分布式配置数量为1-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- 这个参数用于确定将HDFS文件系统的元信息保存在什么目录下 不配置默认存/tmp/下 重启linux会造成问题-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop-2.7.2/data/name</value>
</property>
<!-- 这个参数用于确定将HDFS文件系统的数据保存在什么目录下 不配置默认存/tmp/下 重启linux会造成问题-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/module/hadoop-2.7.2/data/data</value>
</property>
3.启动集群
(1)格式化NameNode(第一次启动时格式化,以后就不要格式化了)
[lzh@hadoop101 ~]$ hadoop namenode -format
格式化的作用:
(a)创建一个全新的元数据存储目录,在hdfs-site.xml中配置过的dfs.namenode.name.dir路径
执行hadoop namenode -format后查看生成的目录
cd /opt/module/hadoop-2.7.2/data/name
(b)生成记录元数据的文件fsimage
进入cd /opt/module/hadoop-2.7.2/data/name/current/
查看ll
(c)生成集群的相关标识:如:集群id——clusterID
进入VERSION文件查看 vi /opt/module/hadoop-2.7.2/data/name/current/VERSION
(2)启动NameNode
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
(3)启动DataNode
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
(4)查看是否启动成功
(a)输入jps命令 出现NameNode和DataNode表示启动成功
[lzh@hadoop101 hadoop-2.7.2]$ jps
1634 Jps
1142 NameNode
1193 DataNode
注意:jps是JDK中的命令,不是Linux命令。不安装JDK不能使用jps
(b)web端查看HDFS文件系统
在浏览器访问http://hadoop101:50070/dfshealth.html#tab-overview
如果没在本地hosts文件配置hadoop101的映射,把hadoop101替换成linux上对应的ip即可访问
(c)查看产生的Log日志(遇到问题先查看日志)
[lzh@hadoop101 hadoop-2.7.2]$ cd /opt/module/hadoop-2.7.2/logs/
4.启动YARN并运行MapReduce程序
(1)配置集群
(a)配置yarn-env.sh
#some Java parameters
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
[lzh@hadoop101 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(d)配置: (对mapred-site.xml.template重新命名为) mapred-site.xml
[lzh@hadoop101 hadoop]$ mv mapred-site.xml.template mapred-site.xml
[lzh@hadoop101 hadoop]$ vi mapred-site.xml
<!-- 指定MR运行在YARN上 不配置默认值为local是在本地运行-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(2)启动yarn集群
(a)启动前必须保证NameNode和DataNode已经启动
(b)启动ResourceManager
[lzh@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
(c)启动NodeManager
[lzh@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
(3)操作集群并完成一个wordcount(完成单词个数计算)
(a)YARN的浏览器页面查看,如下图所示(如果没在本地hosts文件配置hadoop101的映射,把hadoop101替换成linux上对应的ip即可访问)
http://hadoop101:8088/cluster
(b)
1.创建在hadoop-2.7.2文件下面创建一个wcinput文件夹
[lzh@hadoop101 hadoop-2.7.2]$ mkdir wcinput
2.在wcinput文件下创建一个wc.input文件
[lzh@hadoop101 hadoop-2.7.2]$ cd wcinput
[lzh@hadoop101 wcinput]$ vi wc.input
3.插入如下几个单词
hello lzh
hello hadoop
this is first hadoop demo
:wq保存退出
(c)在HDFS文件系统上创建一个input文件夹
[lzh@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/lzh/input
[lzh@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -put wcinput/wc.input /user/lzh/input/
(d)执行MapReduce程序
[lzh@hadoop101 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/lzh/input /user/lzh/output
(e)查看运行结果
[lzh@hadoop101 hadoop-2.7.2]$ hdfs dfs -cat /user/lzh/output/*
demo 1
first 1
hadoop 2
hello 2
is 1
lzh 1
this 1
面试题:为什么不能一直格式化NameNode,格式化NameNode,要注意什么?
进行如下操作 分别进入name/current/和data/current/目录下查看VERSION
[lzh@hadoop101 ~]$ cd /opt/module/hadoop-2.7.2/data/name/current/
[lzh@hadoop101 current]$ cat VERSION
clusterID=CID-64fa3d6f-ed36-401d-922e-b21f0959b402
[lzh@hadoop101 current]$ cd /opt/module/hadoop-2.7.2/data/data/current/
[lzh@hadoop101 current]$ cat VERSION
clusterID=CID-64fa3d6f-ed36-401d-922e-b21f0959b402
观察发现 NameNode和DataNode的集群id是一致的 这可以保证两者可以顺利找到对方,一旦再次执行hadoop namenode -format格式化命令,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode。