Ubuntu下安装Hadoop详解(单机模式+伪分布模式)(3)

====Hadoop 的运行方式是由配置文件决定的====(运行Hadoop时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。

此外,伪分布式虽然只需要配置fs.defaultFS和dfs.replication就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为/tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行format才行。所以我们进行了设置,同时也指定dfs.namenode.name.dir和dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
配置完成后,执行 NameNode 的格式化:

hadoop@hadoop1:/usr/local/hadoop$ ./bin/hdfs namenode -format

接着开启 NameNode 和 DataNode 守护进程。

hadoop@hadoop1:/usr/local/hadoop$ ./sbin/start-dfs.sh

成功启动后,可以访问 Web 界面 :50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

这里写图片描述

三.测试并运行实例 1.单机模式之wordcount实例 hadoop@hadoop1:/usr/local/hadoop$ cd /usr/local/hadoop hadoop@hadoop1:/usr/local/hadoop$ mkdir ./input hadoop@hadoop1:/usr/local/hadoop$ cp ./etc/hadoop/*.xml ./input #将配置文件作为输入文件 hadoop@hadoop1:/usr/local/hadoop$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount input output hadoop@hadoop1:/usr/local/hadoop$ cat ./output/* # 查看运行结果 2.伪分布模式之grep实例

上面的单机模式,wordcount 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:

hadoop@hadoop1:/usr/local/hadoop$ ./bin/hadoop fs -mkdir -p /user/hadoop

注意:创建的用户目录不能直接在系统中查看,因为hadoop创建的是逻辑上的目录,必须在hadoop上才能查看。查看命令如下:

hadoop@hadoop1:/usr/local/hadoop$ ./bin/hadoop fs -ls /

接着将 ./etc/hadoop 中的 xml文件作为输入文件复制到分布式文件系统中,即将/usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input中。我们使用的是hadoop用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:

hadoop@hadoop1:/usr/local/hadoop$ ./bin/hdfs dfs -mkdir input hadoop@hadoop1:/usr/local/hadoop$ ./bin/hdfs dfs -put ./etc/hadoop/*.xml input

复制完成后,可以通过如下命令查看文件列表:

hadoop@hadoop1:/usr/local/hadoop$ ./bin/hadoop fs -ls input

伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。

hadoop@hadoop1:/usr/local/hadoop$ ./bin/hadoopjar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

查看运行结果的命令(查看的是位于 HDFS 中的输出结果):

hadoop@hadoop1:/usr/local/hadoop$ ./bin/hdfs dfs -cat output/*

这里写图片描述

运行结果还可以取回本地

hadoop@hadoop1:/usr/local/hadoop$ rm -r ./output # 先删除本地的 output 文件夹(如果存在) hadoop@hadoop1:/usr/local/hadoop$ ./bin/hdfs dfs -get output ./output # 将 HDFS 上的 output 文件夹拷贝到本机 hadoop@hadoop1:/usr/local/hadoop$ cat ./output/*

Hadoop 运行程序时,输出目录不能存在,否则会提示错误 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,因此若要再次执行,需要执行如下命令删除 output 文件夹:

hadoop@hadoop1:/usr/local/hadoop$ ./bin/hdfs dfs -rm -r output # 删除 output 文件夹

==备注:./bin/hdfs dfs = ./bin/hadoop fs==

关闭 Hadoop

hadoop@hadoop1:/usr/local/hadoop$ ./sbin/stop-dfs.sh

注意
下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh 就可以!

3.启动YARN

新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也称为 YARN,Yet Another Resource Negotiator)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/79efb682a30d753c0a5e1aa2e671e1d2.html