您的位置:首页 > 运维架构

基于Ubuntu12.04+hadoop1.2.0 的hadoop集群搭建

2013-07-15 19:45 309 查看
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/*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: