实验名称: hadoop安装与配置
实验环境:在ubuntu18.04 linux下安装hadoop-3.1.3。
实验内容
1.安装Java环境
Hadoop3.1.3需要JDK版本在1.8及以上。需要按照下面步骤来自己手动安装JDK1.8。
下载JDK1.8的安装包jdk-8u191-linux-x64.tar.gz,把它放在java文件夹下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nwc7qks1-1655121336579)(https://img-blog.c)]
在Linux命令行界面中,执行如下Shell命令(注意:当前登录用户名是hadoop)
上面使用了解压缩命令tar
JDK文件解压缩以后,可以执行如下命令到/usr/lib/jvm目录查看一下:
下面继续执行如下命令,设置环境变量:
保存.bashrc文件并退出vim编辑器。然后,继续执行sourcec ~/. bashrc让.bashrc文件的配置立即生效:
这时,可以使用如下命令查看是否安装成功:
Java安装成功
安装 Hadoop3.1.3
Hadoop安装文件,可以到Hadoop官网下载hadoop-3.1.3.tar.gz。
我们选择将 Hadoop 安装至 /usr/local/ 中:
Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
Hadoop单机配置(非分布式)
Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。
执行成功后如下所示,输出了作业的相关信息,输出的结果是符合正则的单词 dfsadmin 出现了1次
注意,Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除。
Hadoop伪分布式配置
Hadoop 可以在单节点上以伪分布式的方式运行,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
将当中的
Hadoop配置文件说明
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 的格式化:
接着开启 NameNode 和 DataNode 守护进程。
启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程:
至此,hadoop3.1.3安装完毕。
出现的问题:
开启 NameNode 和 DataNode 守护进程时,启动不起来。
解决方法:
打开文件 /etc/pdsh
然后运行 sudo vim rcmd_default
然后在打开的文件里输入 ssh
再输入【./sbin/start-dfs.sh】
就能正常输出
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [ash-virtual-machine]