Hadoop 文档阅读(1)
1. 本地模式
利用Hadoop自带的mapreduce_example跑一下简单的mapreduce内容
命令如下(当前目录为hadoop项目目录):
$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop --config etc/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'
$ cat output/*
默认的模式,无需运行任何守护进程(daemon),所有程序都在单个JVM上执行。由于在本机模式下测试和调试MapReduce程序较为方便,因此,这种模式适宜用在开发阶段。
使用本地文件系统,而不是分布式文件系统。
Hadoop不会启动NameNode、DataNode、JobTracker、TaskTracker等守护进程,Map()和Reduce()任务作为同一个进程的不同部分来执行的。
用于对MapReduce程序的逻辑进行调试,确保程序的正确。
所谓默认模式,及安装完jdk及hadoop,配置好相应的环境,及本地模式配置完成
2. 伪分布式
在单台机器上开多个Hadoop守护进程
- 格式化文件系统
$ bin/hdfs namenode -format
输出以下内容说明格式化成功
- 启动NameNode守护进程和DataNode守护进程:
$ sbin/start-dfs.sh
过程中出现了JAVA_HOME找不到的错误
解决办法
1.将export JAVA_HOME等路径配置添加到/etc/bashrc 前面
2.将JAVA_HOME路径写死到 $HADOOP_HOME/etc/hadoop/hadoop-env.sh中。
成功执行利用命令jps应该能看到
hadoop守护进程日志输出被写入HADOOP_LOG_DIR目录(默认是$HADOOP_HOME/logs)
- 浏览NameNode的web页面;默认位于 http://localhost:50070
- 创建执行MapReduce作业所需的HDFS目录:
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/<username>
- 将输入文件复制到分布式文件系统中:
$ bin/hdfs dfs -mkdir input
$ bin/hdfs dfs -put etc/hadoop/*.xml input
上传文件的时候可能会遇到如下形式的报错:
20/08/10 07:03:11 WARN hdfs.DFSClient: Caught exception
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.Thread.join(Thread.java:1252)
at java.lang.Thread.join(Thread.java:1326)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:716)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.endBlock(DFSOutputStream.java:476)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:652)
但是该报错不影响文件的上传,据说是hadoop自己的一个bug,文件上传后不会损坏或影响使用。
- 运行提供的一些示例:
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'
- 检查输出文件:将输出文件从分布式文件系统复制到本地文件系统,然后查看它们:
$ bin/hdfs dfs -get output output
$ cat output/*
或者在分布式文件系统上查看文件
$ bin/hdfs dfs -cat output/*
- 完成后,停止守护进程:
$ sbin/stop-dfs.sh