启动HDFS并运行MapReduce程序
1. 配置集群
(a)配置:hadoop-env.sh
Linux系统中获取JDK的安装路径:
echo $JAVA_HOME
修改JAVA_HOME 路径:
把这一行代码改成下面的代码,前一半都是export JAVA_HOME=,很好找。
export JAVA_HOME=/opt/module/jdk1.8.0_202
(b)配置:core-site.xml
指定Hadoop运行时产生文件的存储目录
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<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
(第一次启动时格式化,以后就不要总格式化),就是安装文件系统
hdfs namenode -format
出现如下界面,说明格式化namenode成功
这个时候,在hadoop主目录中出现了data目录
(b)启动NameNode
hadoop-daemon.sh start namenode
(c)启动DataNode
hadoop-daemon.sh start datanode
3.查看集群
(a)查看是否启动成功
jps
出现了这两个进程表示hdfs配置成功了
注意:jps是JDK中的命令,不是Linux命令。不安装JDK不能使用jps
(b)web端查看HDFS文件系统
(c)查看产生的Log日志
说明:在使用Hadoop过程中,如果遇到某些异常,导致Hadoop不可用,或其它问题,则可以通过查 询Hadoop的日志文件获取错误信息。
里面就是前面配置出来的东西
(d)思考:为什么不能一直格式化NameNode,格式化NameNode要注意什么?
注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致, 集群找不到已往数据。所以,格式化NameNode时,一定要先删除$HADOOP_HOME/data目 录及下面的所有内容,然后再格式化NameNode。由于NameNode被格式化,所有关于数据存 储的元素信息被重置,因此,原来在HDFS上存储的数据也就不能用了。
4. 操作集群
本地运行时,是将文件放在本地磁盘中,如果文件较大,需要将文件放在HDFS(分布式文件系统上)
(a)在HDFS文件系统上创建一个input目录
hdfs dfs -mkdir -p /user/ytsky/input
浏览文件系统,确认是否创建成功
(b)将测试文件内容上传到文件系统上
用上次本地运行模式创建过的文件
使用命令将文件wc.input上传到 HDFS中
hdfs dfs -put wcinput/wc.input /user/ytsky/input
(c)查看上传的文件是否正确
hdfs dfs -ls /user/ytsky/input
hdfs dfs -cat /user/ytsky/input/wc.input
已将需要分析的数据加载进了HDFS中
(d)运行MapReduce程序
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/ytsky/input /user/ytsky/output
该条命令执行完后,会在文件系统上创建output目录,目录中存放的就是分析结果
(e)查看输出结果
命令行查看,下面两个都可以
hdfs dfs -cat /user/ytsky/output/*
hdfs dfs -cat /user/ytsky/output/part-r-00000
(f)将测试文件内容下载到本地
hdfs dfs -get /user/ytsky/output/part-r-00000 ./wcoutput/
我显示已存在,是本地运行模式的时候已经保存了
(g)删除输出结果
hdfs dfs -rm -r /user/ytsky/output
如果不删除,下次运行这个案例的时候就会报错,所以我们用命令行删除输出结果
以上就是在伪分布式集群模式下运行mapreduce运行结果 。