天天看点

Hadoop

本教程适合于在 centos 6.x 系统中安装原生 hadoop 2,适用于hadoop 2.7.7, hadoop 2.6.0 等版本,按照步骤来,都能顺利在 centos 中安装并运行 hadoop。

环境

本教程使用 centos 6.4 64位 作为系统环境,请自行安装系统(可参考使用virtualbox安装centos)。如果用的是 ubuntu 系统,请查看相应的 ubuntu安装hadoop教程。

本教程基于原生 hadoop 2,在 hadoop 2.7.7 (stable) 版本下验证通过,可适合任何 hadoop 2.x.y 版本,例如 hadoop 2.7.7, hadoop 2.4.1等。

hadoop版本

hadoop 有两个主要版本,hadoop 1.x.y 和 hadoop 2.x.y 系列,比较老的教材上用的可能是 0.20 这样的版本。hadoop 2.x 版本在不断更新,本教程均可适用。如果需安装 0.20,1.2.1这样的版本,本教程也可以作为参考,主要差别在于配置项,配置请参考官网教程或其他教程。

安装centos 系统

创建centos系统的同时,centos会自动创建root管理账号。

我们可以再创建一个名称为hadoop的用户。如果没有创建hadoop用户,请参照下面的步骤创建。(本步骤请看视频:安装centos系统.mp4)

创建hadoop用户

如果你安装 centos 的时候创建的就是 “hadoop” 用户,那么忽略此步骤。

如果你安装 centos 的时候创建的不是 “hadoop” 用户,那么需要增加一个名为 hadoop 的用户。

首先点击左上角的 “应用程序” -> “系统工具” -> “终端”,首先在终端中输入 su ,按回车,输入 root 密码以 root 用户登录,接着执行命令创建新用户

如下图所示,这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为shell。

centos创建hadoop用户

接着使用如下命令修改密码,按提示输入两次密码,可简单的设为 “hadoop”(密码随意指定,若提示“无效的密码,过于简单”则再次输入确认就行):

passwd hadoop

可为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题,执行:

visudo

如下图,找到 root all=(all) all 这行(应该在第98行,可以先按一下键盘上的 esc 键,然后输入 :98 (按一下冒号,接着输入98,再按回车键),可以直接跳到第98行 ),然后在这行下面增加一行内容:hadoop all=(all) all (当中的间隔为tab),如下图所示:

为hadoop增加sudo权限

添加上一行内容后,先按一下键盘上的 esc 键,然后输入 :wq (输入冒号还有wq,这是vi/vim编辑器的保存方法),再按回车键保存退出就可以了。

最后注销当前用户(点击屏幕右上角的用户名,选择退出->注销),在登陆界面使用刚创建的 hadoop 用户进行登陆。(如果已经是 hadoop 用户,且在终端中使用 su 登录了 root 用户,那么需要执行 exit 退出 root 用户状态)。(本步骤请看视频:安装centos系统.mp4)

装好了centos 系统之后,在安装 hadoop 前还需要做一些必备工作。

准备工作

使用 hadoop 用户登录后,还需要安装几个软件才能安装 hadoop。

centos 使用 yum 来安装软件,需要联网环境,首先应检查一下是否连上了网络。如果测试ping www.baidu.com可以ping通,说明网络没有问题,不需要再设置。如果如下图所示,桌面右上角的网络图标若显示红叉,则表明还未联网,应点击选择可用网络。

检查是否联网

连接网络后,需要安装 ssh 和 java。

安装ssh、配置ssh无密码登陆

集群、单节点模式都需要用到 ssh 登陆(类似于远程登陆,你可以登录某台 linux 主机,并且在上面运行命令),一般情况下,centos 默认已安装了 ssh client、ssh server,打开终端执行如下命令进行检验:

rpm -qa | grep ssh

如果返回的结果如下图所示,包含了 ssh client 跟 ssh server,则不需要再安装。

检查是否安装了ssh

若需要安装,则可以通过 yum 进行安装(安装过程中会让你输入 [y/n],输入 y 即可):

如下命令测试一下 ssh 是否可用:

ssh localhost

此时会有如下提示(ssh首次登陆提示),输入 yes 。然后按提示输入密码 hadoop,这样就登陆到本机了。

测试ssh是否可用

但这样登陆是需要每次输入密码的,我们需要配置成ssh无密码登陆比较方便。

首先输入 exit 退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:

~的含义

在 linux 系统中,~ 代表的是用户的主文件夹,即 “/home/用户名” 这个目录,如你的用户名为 hadoop,则 ~ 就代表 “/home/hadoop/”。 此外,命令中的 # 后面的文字是注释。

此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了,如下图所示。

ssh无密码登录

本步骤完结。

本教程适合于在 centos 6.x 系统中安装原生 hadoop 2,适用于hadoop 2.7.1, hadoop 2.6.0 等版本,按照步骤来,都能顺利在 centos 中安装并运行 hadoop。

安装java环境

java 环境可选择 oracle 的 jdk,或是 openjdk,现在一般 linux 系统默认安装的基本是 openjdk,如 centos 6.4 就默认安装了 openjdk 1.7。按

中说的,hadoop 在 openjdk 1.7 下运行是没问题的。需要注意的是,centos 6.4 中默认安装的只是 java jre,而不是 jdk,为了开发方便,我们还是需要通过 yum 进行安装 jdk,安装过程中会让输入 [y/n],输入 y 即可:

通过上述命令安装 openjdk,默认安装位置为

在文件最后面添加如下单独一行(指向 jdk 的安装位置),并保存:

如下图所示:

设置java_home环境变量

接着还需要让该环境变量生效,执行如下代码:

成功设置java_home环境变量

这样,hadoop 所需的 java 运行环境就安装好了。

本教程适合于在 centos 6.x 系统中安装原生 hadoop 2,适用于hadoop 2.7, hadoop 2.6. 等版本,按照步骤来,都能顺利在 centos 中安装并运行 hadoop。

安装 hadoop 2

hadoop 2 可以通过

本教程选择的是 2.7.7 版本,下载时请下载 hadoop-2.x.y.tar.gz这个格式的文件,这是编译好的,另一个包含 src 的则是 hadoop 源代码,需要进行编译才可使用。

下载时强烈建议也下载 hadoop-2.x.y.tar.gz.mds 这个文件,该文件包含了检验值可用于检查 hadoop-2.x.y.tar.gz 的完整性,否则若文件发生了损坏或下载不完整,hadoop 将无法正常运行。

本文涉及的文件均通过浏览器下载,默认保存在 “下载” 目录中(若不是请自行更改 tar 命令的相应目录)。另外,如果你用的不是 2.7.7 版本,则将所有命令中出现的 2.7.7 更改为你所使用的版本。

检验文件完整性

我们选择将 hadoop 安装至 /usr/local/ 中:

相对路径与绝对路径

请务必注意命令中的相对路径与绝对路径,本文后续出现的 ./bin/…,./etc/… 等包含 ./ 的路径,均为相对路径,以 /usr/local/hadoop 为当前目录。例如在 /usr/local/hadoop 目录中执行 ./bin/hadoop version 等同于执行 /usr/local/hadoop/bin/hadoop version。可以将相对路径改成绝对路径来执行,但如果你是在主文件夹 ~ 中执行 ./bin/hadoop version,执行的会是 /home/hadoop/bin/hadoop version,就不是我们所想要的了。

hadoop单机配置(非分布式)

hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 java 进程,方便进行调试。

现在我们可以执行例子来感受下 hadoop 的运行。hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。

(一)案例grep:

在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。

若运行出错,如出现如下图提示:

运行hadoop实例时可能会报错

若出现提示 “warn util.nativecodeloader: unable to load native-hadoop library for your platform… using builtin-java classes where applicable”,该 warn 提示可以忽略,不会影响 hadoop 正常运行(可通过编译 hadoop 源码解决,解决方法请自行搜索)。

若出现提示 “info metrics.metricsutil: unable to obtain hostname java.net.unknowhostexception”,这需要执行如下命令修改 hosts 文件,为你的主机名增加ip映射:

11. sudo vim /etc/hosts

主机名在终端窗口标题里可以看到,或执行命令 hostname 查看,如下图所示,在最后面增加一行 “127.0.0.1 dblab”:

设置主机名的ip映射

保存文件后,重新运行 hadoop 实例,若执行成功的话会输出很多作业的相关信息,最后的输出信息如下图所示。作业的结果会输出在指定的 output 文件夹中,通过命令 cat ./output/* 查看结果,符合正则的单词 dfsadmin 出现了1次:

hadoop例子输出结果

注意,hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除。

(二)案例wordcount:

查看结果

结束。