Ubuntu12.04搭建hadoop1.2集群
转载请注明出处
(一) 环境准备
首先准备5台电脑。我这里使用的是OpenStack虚拟出来的五台电脑。每个实例安装的系统是Ubuntu 12.04.2 LTS,虚拟配置如下:
(二) 修改机器名
打开/etc/hostname文件;
sudo vi/etc/hostname
分别改为hadoop1、hadoop2和hadoop3等等
(三) 域名和ip配置
设置的IP分别是:
192.168.10.1 hadoop1
192.168.10.2 hadoop2
192.168.10.3 hadoop3
192.168.10.4 hadoop4
192.168.10.5 hadoop5
然后使用vi/etc/hosts修改各个主机的/etc/hosts中的内容,将上边的内容编缉进去。注意:
(1)所有节点都需要配置成上述内容。如果不配置,此后的工作将使用IP操作,比较繁琐。扩展性比较差。
(2)需要使用root权限。如果没有root权限,可以使用:sudovi /etc/hosts命令进入编辑。
(四) 创建用户,分配权限
(1)先创建hadoop用户组:sudo addgrouphadoop
(2)然后创建用户hadoop:sudo adduser-ingroup hadoop hadoop
注:
(i)当你没有root权限的时候,所有的命令可以加上sudo前缀。
(ii)在centos 和 redhat下直接创建用户就行,会自动生成相关的用户组和相关文件,而ubuntu下直接创建用户,创建的用户没有根目录。
(3)给hadoop用户添加权限,打开/etc/sudoers文件;
sudo vi /etc/sudoers
按回车键后就会打开/etc/sudoers文件了,给hadoop用户赋予root用户同样的权限。
在root ALL=(ALL:ALL) ALL下添加下面的内容:
hadoop ALL=(ALL:ALL) ALL
注意:
(i)千万不要写错了。这个文件一旦修改错误,后果严重。这里创建的用户名也可以不是hadoop,比如ubuntu等都可以。ubuntu系统会在/home目录下生成一个以用户名命名的文件夹。
(ii)所有虚拟机上,都必须使用相同的用户名。
(iii)如果没有权限修改/etc/sudoers。可以输入sudovisudo 即可,此命令直接修改该文件,按照提示修改保存和推出。
(五) 本机(hadoop1)和子节点(son..)安装ssh服务
主要为ubuntu安装,centos和redhat系统自带。ubuntu下:
sudo apt-get installssh openssh-server
(六) 建立ssh无密码登录环境
做这一步之前首先建议所有的机子全部转换为hadoop用户,以防出现权限问题的干扰。
所有机器执行一下操作:
(1)ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。
创建ssh-key,这里我们采用rsa方式;
ssh-keygen -t rsa -P ""
(注:回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的)
(2)切换到~/.ssh/目录下,然后将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的;
cd ~/.ssh
cat id_rsa.pub>> authorized_keys
(3)用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。
RSAAuthenticationyes
PubkeyAuthenticationyes
AuthorizedKeysFile %h/.ssh/authorized_keys
设置完之后记得重启SSH服务,才能使刚才设置有效。(centos里的命令:service sshd restart)但这里是ubuntu里。输入命令:
/etc/init.d/sshrestart
退出root登录,使用hadoop普通用户验证是否成功。
ssh localhost。
如果无错误提示,本地无密码登录就配置成功!
(七) 配置集群无密码登录
首先配置Slave节点登录MASTER比较方便,即hadoop2~hadoop5实现无密码访问Master节点。
以hadoop2为例子:
(1) 远程复制文件"id_rsa.pub",目标位置是主机hadoop1的用户为"hadoop"的"/home/hadoop/":
scp~/.ssh/id_rsa.pub hadoop@hadoop1:~/
因为并没有建立起无密码连接,所以在连接时,仍然要提示输入输入Hadoop1服务器用户hadoop的密码。为了确保确实已经把文件传过去了,登录Hadoop1查看"/home/hadoop/"下是否存在这个文件。
(2) 把刚复制来的Hadoop2的公钥追加到Hadoop1 的授权文件"authorized_keys"中去。
cat~/id_rsa.pub >> ~/.ssh/authorized_keys
必要的话,使用下面命令进行追加并修改"authorized_keys"文件权限:
chmod 600~/.ssh/authorized_keys
记得把"/home/hadoop/"目录下的"id_rsa.pub"文件删除掉。
rm –r~/id_rsa.pub
(3) 重复上面的步骤把剩余的Slave服务器(hadoop3~hadoop5)进行配置。这样,我们就完成了"配置Slave无密码登录Master".
(4) 用hadoop用户登录到MASTER节点,就是主机hadoop1。输入命令:
scpauthorized_keys hadoop@hadoop2:~/.ssh/
分别修改命令中的hadoop2为hadoop3到hadoop5并执行。此命令是复制主节点authorized_keys到其余各个节点的.ssh目录。
在hadoop1主机,登录其余各个节点。输入命令:
ssh hadoop2
如果登录失败。可能尝试一下几个方法:
a) 删除各个节点的known_hosts,输入命令:rm~/.ssh/known_hosts。再连接看看。
b) 如果出现一下错误提示,注意红色提示。那我们可以按照提示,输入命令,比如:
ssh-keygen -f"/home/ubuntu/.ssh/known_hosts" -R hadoop2
此命令的hadoop2,就是连接目标,如果提示给的是 ip地址,就要输入ip地址。
c) 其实,只要各个节点曾经连接成功就可以。在hadoop运行过程中,可以使用hadoop-daemon.sh start datanode 等命令动态的将当前节点加入到集群中。
(八) 软件准备
下载java安装包。有以下几种方式:
(1)本机可以联网的话:sudo apt-get installsun-java6-jdk #安装JAVA6环境#
(2)如果不能联网,可以先用ftp上传到ubuntu。为了简化操作,我把jdk安装包的名字简化为jdk6.bin。你下载的可能是“jdk-6u45-linux-i586.bin”之类的名字。
(i)使用xshell 4.0的操作是:
(ii)输入命令,上传下载好的jdk1.6 64位FORlinux软件包。
(iii)重复上述步骤,为hadoop2到hadoop5上传jdk安装包。也可以使用远程复制命令,将数据发送给其他Slave节点:
scp ~/jdk6.bin hadoop@hadoop2:~/
(九) 安装JDK,以hadoop1为例,其他雷同。
(1) 首先用root权限或者sudo命令,在"/usr"下创建"java"文件夹,
sudo mkdir /usr/java
(2) 再把"/home/hadoop/"下的"jdk6.bin"复制到"/usr/java"文件夹中。
cp /home/hadoop/jdk6.bin /usr/java
(3) 切换到java目录,修改jdk6.bin的权限,在这里修改彻底一下,
sudo chmod 777 jdk6.bin
注意:读、写、运行三项权限可以用数字表示,就是r=4,w=2,x=1。777就是-rwxrwxrwx,-rw-r--r--就是644。
(4) 执行安装,sudo ./jdk6.bin后查看"/usr/java"下面会发现多了一个名为"jdk1.6.x_xx"文件夹,说明JDK安装结束。
(5) 为了路径设置方便,给此文件夹改名:sudo mv jdk1.6.x_xx jdk6
(6) 删除"jdk-6.bin"文件,sudo rm -r jdk-6.bin
(7) "配置环境变量":
sudo vi /etc/profile
在文件最后添加:
# set javaenvironment
exportJAVA_HOME=/usr/java/jdk6
exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/
(8) 保存并退出,执行下面命令使其配置立即生效。
source/etc/profile
(9) 配置完毕并生效后,用下面命令判断是否成功。
java –version
(10) 重复上述步骤,为hadoop2到hadoop5安装jdk。
(十) 准备hadoop1.2安装包
(1) 上传hadoop1.2.0安装包。注意文件名必须正确。
在本文实验环节中,下图/home/ubuntu 应该为home/hadoop, ubuntu是我的hadoop用户名。
(十一) 为hadoop1安装hadoop
(1) 复制hadoop1.2.0安装包,到usr目录
sudo cp ~/hadoop-1.2.0.tar.gz /usr
(2) 切换目录
cd /usr
(3) 解压缩安装包:
sudo tar -zxvf hadoop-1.2.0.tar.gz
(4) 修改文件名:
sudo mv hadoop-1.2.0 hadoop
(5) 修改hadoop目录权限:
sudo chown -R hadoop:hadoop hadoop
(6) 删除安装包:
sudo rm -rf hadoop-1.2.0.tar.gz
(7) 然后切换到到hadoop目录下的conf目录
cd /usr/hadoop
(8) 编辑hadoop-env.sh
sudo vi hadoop-env.sh
配置JAVA_HOME为你上面配置的JAVA_HOME。
export JAVA_HOME=/usr/java/jdk6
(9) 编辑core-site.xml:
sudo vi core-site.xml
在<configuration>标签内,添加配置信息如下:
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp/ </value>
<description>A base for othertemporarydirectories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop1:9000</value>
</property>
(10)修改hdfs-site.xml:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
(11)在mapred-site.xml中添加内容:
<property>
<name>mapred.job.tracker</name>
<value>hadoop1:9001</value>
</property>
(12)修改Masters:
hadoop1
(13)修改slaves:
hadoop2
hadoop3
hadoop4
hadoop5
重复上述步骤,为其他节点做相同的配置。如果有root权限,也可以使用scp远程复制hadoop到其他节点。
(十二) 启动hadoop
(1) 在hadoop1主机上的hadoop安装目录下的bin目录下,执行格式化。
hadoop namenode-format
(2) 启动服务:
start-all.sh
(3) 会按先后顺序启动,启动完成后,分别到各个节点上使用jps查看进程启动情况。
(十三) 运行示例
(1) 第一步:创建一个目录,作为数据输入源目录。命令行输入:
mkdir input
(2) 第二步:在input里创建两个文件,分别为test1 、test2命令行输入:
cd input
echo"hello world" >test1.txt
echo "iam hadoop, hello">test2.txt
(3) 第三步:退回上级目录,把本地input目录复制到HDFS的根目录下,重命名为 in。
cd ../
hadoop dfs-put input in
(4) 第四步:执行wordcount实例。注意,我的hadoop的版本是1.2.0,里边的文件名也和以前的版本不一样 hadoop-examples-1.2.0.jar另外,如果之前执行过这个命令,需要先删除hdfs系统目录里的out目录。
hadoop dfs-rmr out
hadoopjar hadoop-examples-1.1.2.jarwordcount in out
(5) 第五步:执行完毕后,可以查看HDFS上的处理结果。
hadoop dfs-cat out/*
(6) 另外,也可以把输出文件out从HDFS复制到本地文件系统,
hadoop dfs-get out output
cat output/*