在Hadoop调用MapReduce分析文件中单词出现个数
运行环境
实验需要在Oracle VM virtual box中安装Hadoop
Hadoop的基本配置
Hadoop基本安装配置主要包括以下几个步骤:
• 创建Hadoop用户
• SSH登录权限设置
• 安装Java环境
• 单机安装配置
• 伪分布式安装配置
Hadoop安装完成后, 更新apt以便进行后续的软件安装。通过按 ctrl+alt+t 打开终端窗口,执行命令:
sudo apt-get update,输入密码后可开始更新,完成后如下图所示:
sudo apt-get update
由于后续需要更改配置文件,所以需要安装vim,输入sudo apt-get install vim开始安装
结果如下:
sudo apt-get install vim
下面进行SSH登录权限设置:
集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台 Linux 主机,并且在上面运行命令),Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server:
sudo adp-get install openssh-server
安装完毕后可以输入:ssh localhost 登录到本机:(由于之前进行过设置所以不用输入密码等操作)
ssh localhost
接下来需要安装JAVA环境(已安装),安装完成后可以通过输入:java -version查看是否安装成功。
java -version
Hadoop安装完后,可以在根目录终端输入: ./bin/Hadoop version 查看安装情况:
./bin/Hadoop version
接下来需要进行hadoop伪分布式配置:
需要在hadoop配置文件夹 /usr/local/hadoop/etc/hadoop/ 中修改2个配置文件 core-site.xml 和 hdfs-site.xml。
用gedit打开 core-site.xml,在**< configuration > < /configuration >**中间添加配置,如下图:
用gedit打开配置文件: hdfs-site.xml ,操作如下:
修改完配置文件之后,执行namenode的格式化,输入代码:./bin/hdfs namenode -format后出现下图的“successfully formatted” 说明成功:
./bin/hdfs namenode -format
格式化后需要开启NameNode和DataNode守护进程,输入代码
cd /user/local/Hadoop
./sbin/start-dfs.sh
启动完成后,可以通过命令jps来判断是否成功,如果成功会列出如下进程:“NameNode”、“DataNode”、“SecondaryNameNode”。
cd /user/local/Hadoop
./sbin/start-dfs.sh
接下来要运行hadoop伪分布式实例
由于伪分布式读取的是HDFS上面的数据,如果要使用HDFS,首先需要在HDFS中创建用户目录:./bin/hdfs dfs -mkdir -p /user/Hadoop
接着将./etc/hadoop中的xml文件作为输入文件复制到分布式文件系统中的 /user/hadoop/input 中。命令如下:
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
复制完成后,可以通过如下命令查看文件列表:
./bin/hdfs dfs -ls input
运行程序时,输出目录不能存在
运行 Hadoop 程序时,为了防止覆盖结果,程序指定的输出目录(如 output)不能存在,否则会提示错误,因此运行前需要先删除输出目录。在实际开发应用程序时,可考虑在程序中加上如下代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操作:
Configuration conf = new Configuration();
Job job = new Job(conf); /*
删除输出目录 */
Path outputPath = new Path(args[1]);
outputPath.getFileSystem(conf).delete(outputPath, true);
若要关闭 Hadoop,则运行
/sbin/stop-dfs.sh
注意
下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh 就可以
./sbin/start-dfs.sh
HADOOP的配置到这里就基本结束了
HDFS
要调用MapReduce对文件中各个单词出现的次数进行统计,需要将文件上传到HDFS中所以接下来进行对HDFS的使用。
第一次使用HDFS时,首先要在HDFS中创建用户目录,命令如下:
cd /usr/local/hadoop
./bin/hdfs dfs –mkdir –p /user/Hadoop
创建后也能够通过命令**./bin/hdfs dfs -ls** 查看HDFS中与当前hadoop对于的用户目录下的内容
./bin/hdfs dfs -ls
由于后面需要上传本地文件到HDFS中,所以我们使用**./bin/hdfs dfs -mkdir input新建一个input目录。
然后可以使用如下命令把本地文件系统的/home/Hadoop/文件名.txt上传到HDFS中的当前用户目录的input目录下,即上传到HDFS的/user/Hadoop/input**目录下。
./bin/hdfs dfs -put /home/hadooppride and prejudice.txt input
上传后可以通过ls命令查看文件是否成功上传到HDFS中。
./bin/hdfs dfs -ls input
将文件成功上传到HDFS之后,可以使用命令来查看文件的内容
./bin/hdfs dfs -cat input/test.txt(文件名)
要想调用MapReduce程序对文件字数进行统计,有两种方法,一种是使用Eclipse编译运行MapReduce程序,另一种是使用命令行编译打包运行自己的MapReduce程序。
我们以Eclipse为例,首先在Ubuntu Kyilin软件中心中搜索Eclipse后进行安装。