一、单机模式下Hadoop的安装
1.1在VMware虚拟机中安装Ubuntu18操作系统(此处提前完成)
1.2Java安装
首先使用sudo su进入root权限,再分别执行:
apt-get install openjdk-8-jre
apt-get install openjdk-8-jdk
安装Java,安装openjdk-8-jre截图如下:
安装openjdk-8-jdk截图如下:
1.3 安装ssh服务器,并设置root用户ssh免密码登录安装ssh服务器:
使用sudo apt-get install openssh-server,安装ssh服务器,如下图:
免密登录,使用以下命令行进行ssh配置:
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
如下图:
1.4 官网下载Hadoop3.0,并在虚拟机中解压、拷贝到/usr/local/hadoop/目录下。
1.5 修改Hdsf-site.xml;core-site.xml;hadoop-env.sh这三个文件进行Hadoop配置
Hdsf-site.xml:
core-site.xml:
hadoop-env.sh:
1.6 启动hadoop
进入bin/hadoop目录,执行./hadoop namenode –format,结果如下图:
成功后去/usr/local/Hadoop/hadoop-3.0.2/sbin下执行./start-all.sh脚本,启动Hadoop:
二、应用示范:分词统计
2.1 创建本地的示例数据文件
在图示路径下,创建test1.txt与test2.txt两个文本文件,如图所示:
2.2 在HDFS上创建输入文件夹
执行./hdfs dfs –mkdir –p hdfsInput创建输入文件夹如下图:
2.3 上传本地file中文件到集群的hdfsInput目录
执行./Hadoop fs –put /usr/local/Hadoop/Hadoop-3-0-2/file/test*.txt hdfsInput上传本地file中文件到集群的hdfsInput目录,如下图:
2.4 运行wordcount执行:
./hadoop jar /usr/local/hadoop/Hadoop-3-0-2/share/Hadoop/mapreduce/Hadoop-mapreduce-examples-3-0-2.jar wordcount hdfsInput hdfsOuput运行wordcount,运行过程如下图:
最终,产生两个文件:
从上图中知道生成了三个文件,我们的结果在"part-r-00000"中,执行
bin/hadoop fs -cat output/part-r-00000
结果如下:
可见,已经对文件完成了wordcount运算。
三、集群模式(伪分布式配置)
3.1Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的Java进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是HDFS 中的文件。
Hadoop 的配置文件位于/usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件core-site.xml 和 hdfs-site.xml。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
修改配置文件core-site.xml:
修改配置文件 hdfs-site.xml:
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 –formate以及启动Hadoop的步骤中可能会出错。
3.2 接下来执行:./bin/hdfs namenode –format并开启 NameNode 和 DataNode 守护进程:./sbin/start-dfs.sh
3.3 伪分布模式的grep实例
单机模式,wordcount 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:./bin/hadoop fs -mkdir -p /user/Hadoop
注意:创建的用户目录不能直接在系统中查看,因为hadoop创建的是逻辑上的目录,必须在hadoop上才能查看。查看命令如下:
接着将 ./etc/hadoop 中的 xml文件作为输入文件复制到分布式文件系统中,即将/usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input中。在命令中使用绝对路径:/user/hadoop/input
伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件。
查看运行结果的命令:./bin/hdfs dfs -cat output/*
3.4 关闭Hadoop
在/usr/local/hadoop目录下执行:./sbin/stop-dfs.sh
可见Hadoop被成功关闭。下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh 就可以了。