本教程主要实现了在ubuntu16.04上搭建hadoop2.6.5的单机和伪分布运行环境。搭建过程中用到的软件jdk1.7、hadoop2.6.5、ubuntu16.04都是64位的。
1、安装ubuntu。
这个网上很多教程,大家去搜下即可。一般是在win7中使用vmware创建一个虚拟机,然后在虚拟机中安装ubuntu。我用的是最新的ubuntu16.04 64位桌面版。下载地址为:https://www.ubuntu.com/download/desktop。提供一个在虚拟机中安装ubuntu的教程:
http://jingyan.baidu.com/article/14bd256e0ca52ebb6d26129c.html。在选择虚拟机内存的时候一定要选择2G的内存,否则在后面伪分布模式运行hadoop是会出现内存吃紧的情况。
2、创建hadoop用户。
安装好ubuntu后,就开始创建一个名为hadoop的用户,可以在安装ubuntu时安装,也可以安装ubuntu后安装。
创建过程如下:
sudo addgroup hadoop 创建hadoop组
sudo adduser --ingroup hadoop hadoop在hadoop组中创建hadoop用户
sudo usermod -aG adm hadoop将hadoop加入管理员组,在ubuntu16.04中adm是管理员组,之前的某些版本管理员组是admin。
3、安装ssh
一般情况下使用sudo apt-get install openssh-server命令就可以安装ssh。但是我在ubuntu16.04中安装ssh时就出现错误:E:软件包openssh-server还没有可供安装的候选者。这是因为ubuntu16.04中没有ssh的安装包,我们必须从网络上下载。下载命令为:sudo apt-get update。
下载完毕后使用sudo apt-get install openssh-server命令进行安装。
使用sudo /etc/init.d/ssh start命令开启ssh服务。
启动后使用ps -e | grep ssh命令查看ssh服务是否正确启动。
因为需要访问hadoop集群中的节点,这就要求把该节点的机器设置免密码登录,而面密码登录需要私钥和公钥,命令和步骤如下:
ssh-keygen -t rsa -P ""
因为我已有私钥,所以会提示是否覆盖当前私钥。第一次操作时会提示输入密码,按Enter直接过,这时会在~/home/{username}/.ssh下生成两个文件:id_rsa和id_rsa.pub,前者为私钥,后者为公钥,现在我们将公钥追加到authorized_keys中(authorized_keys用于保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容)。命令为:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys。
接着我们需要两次登入ssh确认以后登录时不用输入密码。
第一次登入:ssh localhost。
接着exit命令退出。
然后第二次登录:ssh localhost。再次登出:exit。这样以后就不需要密码登录了。
4、安装java环境
(1)、上传jdk。在win7中安装WinSCP软件,然后确保ssh服务是开启的,然后打开WinSCP软件,把jdk上传到/home/hadoop目录中。必须确保jdk是linux版本,而不是window版本,很多小白在这里都弄错了,然后发现搭建好的hadoop无法正常运行。
(2)、安装jdk。
我是把jdk安装在/usr/local/haoop下面,因此我们要在/usr/local文件夹下面创建一个hadoop的用户,命令为:mkdir hadoop。我在创建文件夹时,显示:mkdir: 无法创建目录"hadoop": 权限不够。这是因为hadoop用户的权限不够,无法创建文件夹。在这里有两个解决方案,一个是给hadoop授权,一个是使用root用户创建hadoop文件夹,然后把文件夹的用户和组都改变为hadoop。我用的是第二种方法,操作步骤如下:
(1)、su命令,然后输入root的密码
(2)、mkdir hadoop命令创建hadoop用户。
(3)、chown hadoop hadoop命令吧hadoop文件夹的拥有者改为hadoop用户。
(4)、chgrp hadoop hadoop命令吧hadoop文件夹的用户组从root改为hadoop。
(5)、exit命令退出root账号。
到此hadoop文件夹已经创建完毕,hadoop用户可以对它进行任何的操作了。
使用cp /home/hadoop/jdk-7u51-linux-x64.tar.gz /usr/local/hadoop命令将jdk的压缩文件拷贝到/usr/local/hadoop文件夹下面。
使用tar xzf jdk-7u51-linux-x64.tar.gz命令解压缩jdk文件。
下面开始设置jdk的环境变量,在设置环境变量是出现两个问题:
(1)、使用 gedit /etc/profile修改profile文件时出现
Failed to connect to Mir: Failed to connect to server socket: 没有那个文件或目录
Unable to init server: 无法连接: 拒绝连接
(gedit:4679): Gtk-WARNING **: cannot open display: 的错误。如果在ubuntu主机上使用该命令就没问题,如果使用putty远程连接ubuntu时则会出现上面的错误。这是因为gedit是一个GNOME桌面环境下兼容UTF-8的文本编辑器。它使用GTK+编写而成。必须在GNOME桌面上使用。
(2)vi无法正常编辑/etc/profile文件。
既然在putty上无法使用gedit命令,那么我就使用vi编辑器编辑profile文件。先使用su命令切换到管理员权限(因为profile只有管理员才可以修改),输入vi /etc/profile命令,这时可以打开profile文件了,但是却无法进入编辑模式,输入i、a、o时都无法再左下角显示insert字段,使用上下左右箭头时就会出现一些字符,无法正常的输入。后来经过查询,这是因为ubuntu16.04只安装了vi,没有安装vim的原因。
安装vim的命令:sudo apt-get install vim。安装好vim后,使用vi编辑器一切正常。
在profile文件的末端加入如下的代码:
export JAVA_HOME=/usr/local/jdk1.7
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
保存后退出。切记JAVA_HOME是jdk的安装目录,路径一定要准确。
使用source /etc/profile 使得刚刚修改的配置生效。然后输入java -version命令,显示的结果为:
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
表明jdk安装成功。
5、安装hadoop。
从apache的官网上下载hadoop2.65(目前最稳定版本),下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.6.5/,选择hadoop-2.6.5.tar.gz下载。然后上传到/usr/local/文件夹中。
解压hadoop项目的命令:sudo tar xzf hadoop-2.6.5.tar.gz。此时文件目录结构是:/usr/local/hadoop2.6.5。
设定hadoop项目运行的jdk。这里主要是对/hadoop2.6.5/etc/hadoop/hadoop-env.sh文件进行修改,在改文件的末尾添加下面的代码:
export JAVA_HOME=/usr/local/jdk1.7
export HADOOP_HOME=/usr/local/hadoop2.6.5
export PATH=$PATH:/usr/local/hadoop2.6.5/bin
记住,对hadoop-env.sh修改后,要使用source命令使该文件生效:
source /usr/local/hadoop2.6.5/etc/hadoop/hadoop-env.sh。要使用hadoop用户执行。
执行下hadoop version命令,如果显示下面的内容,则表示hadoop安装成功:
Hadoop 2.6.5
Subversion https://github.com/apache/hadoop.git -r e8c9fe0b4c252caf2ebf1464220599650f119997
Compiled by sjlee on 2016-10-02T23:43Z
Compiled with protoc 2.5.0
From source with checksum f05c9fa095a395faa9db9f7ba5d754
This command was run using /usr/local/hadoop2.6.5/share/hadoop/common/hadoop-common-2.6.5.jar。
如果显示没有执行权限,则表示当前用户没有执行/usr/local/hadoop2.6.5/bin文件夹的权限,只要对该用户进行相应的授权即可,执行命令为:sudo chmod -R 764 /hadoop2.6.5/bin。
如果显示找不到hadoop命令,那么是因为刚刚对hadoop-env.sh文件的修改后没有执行source命令,只要执行一次即可。
为了在ubuntu的命令行上直接执行hadoopd的命令,必须使用root账号在/etc/environment中添加如下的代码:/usr/local/hadoop2.6.5/sbin:/usr/local/hadoop2.6.5/bin:
如下图,切换到root账号执行vi /etc/environment命令:
然后添加/usr/local/hadoop2.6.5/sbin:/usr/local/hadoop2.6.5/bin:。如下图所示:
/usr/local/hadoop2.6.5,是我的电脑中hadoop的安装地址。然后切换回hadoop用户,然后执行source /etc/environment。使得该环境变量设置对hadoop用户生效。
到目前为止,hadoop的单机环境已经安装完毕,我们运行下hadoop自带的wordcount例子来检验下hadoop是否能正常运行。
在hadoop2.6.5目录下新建一个input的目录,然后把/etc/hadoop下面的文件拷贝到里面,命令为:cp etc/hadoop/* input。
然后执行如下的命令:bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount input output。该命令是指计算input目录下所有文件中每个词组出现的次数,并把结果保存在output文件夹中。通过使用cat output/*即可查看到执行后的结果。
6、搭建hadoop伪分布运行环境
hadoop伪分布运行环境是在单机环境上演变而来的,其实就是单台主机既当namenode又当datanode。我们只需要对core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml四个文件进行相应的配置,就由单机模式变为伪分布模式。下面我们就介绍下如何修改那四个文件。
(1)修改core-site.xml
在core-site.xml添加如下的代码:
(2)修改hdfs-site.xml文件
在hdfs-site.xml文件中添加如下的代码:
上面中的dfs.replication是指定hadoop文件的拷贝备份数量,在伪分布模式是1,而在完全分布模式则是根据具体的datanode数量而设置的。
(3)修改mapred-site.xml文件。
在mapred-site.xml文件中添加如下代码:
上面中的hadoop-master是我运行hadoop的主机名,大家根据自己的主机名进行修改。也可以设置为具体的主机IP。
(4)修改yarn-site.xml文件
在yarn-site.xml文件中添加如下的代码:
同样上面配置文件中的hadoop-master也是运行hadoop主机的主机名。
修改完上面的配置文件之后,hadoop伪分布模式运行环境就搭建完毕,现在来测试下是否搭建成功。
首先要格式化namenode,执行hdfs namenode -format命令。出现下图中的情况则表示hadoop格式化成功。
接着执行start-dfs.sh命令,启动namenode。出现如下界面则表明namenode启动成功。
执行jps则会看到如下的进程:
接着执行start-yarn.sh命令启动yarn。出现如下的界面则表示启动yarn成功。
支持hadoop伪分布模式已经启动成功。我们通过浏览器打开 http://192.168.31.5:50070 查看namenode和datanode或者DFS的信息。192.168.31.5是我本机的IP,各位要换成自己的实际IP。
最后来测试下hadoop伪分布模式环境是否能够正常运行。在上面的单机模式,读取的是本地文件,则可以直接利用ubuntu的命令创建一个input文件然后把文件拷贝进去,然后单机版的hadoop就可以直接读取input文件下面的文件了。而hadoop伪分布模式读取的是hadoop HDFS文件系统中的文件,而用ubuntu命令创建的文件夹hadoop伪分布模式是无法识别的,必须使用hadoop文件系统的命令创建文件夹和上传文件,hadoop伪分布模式才可以识别。下面介绍如何使用hadoop命令创建文件夹和拷贝文件。
hdfs dfs -mkdir -p /user/hadoop # 在HDFS中创建用户目录
hdfs dfs -mkdir input # 在用户目录下创建input目录
hdfs dfs -put ./etc/hadoop/*.xml input # 将一些测试文件移入input目录,就移配置xml文件作为输入。
然后使用ubuntu命令将当前目录切换到hadoop安装的位置。命令为:
cd /usr/local/hadoop2.6.5/。/usr/local/hadoop2.6.5/是我本地上hadoop安装的位置,各位可以按照自己hadoop安装的位置对命令做一些修改。
然后执行:bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount input output 命令。出现如下的命令则表明hadoop自带的单词统计例子运行成功。
执行hdfs dfs -cat output/*命令查看运行结果:
到此hadoop2.6.5伪分布模式运行环境搭建成功,并且经过测试通过。