Hadoop 开发平台搭建[连载中……]

  Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。

     对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行

  从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统MapReduce在集群上实现了分布式计算任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。

相关软件

操作系统:Ubuntu 13.04 64bit

Hadoop:hadoop-1.0.4

JDK:jdk-7u7-linux-x64

开发工具:eclipse-jee-juno-SR1-linux-gtk-x86_64

hadoop-eclipse 插件:hadoop-eclipse-plugin-1.0.3

(一)环境配置

     集群中包括5个节点:1个Master,4个Salve,节点之间局域网连接,保证可以相互ping通。节点IP地址分布如下:

节点IP地址
Master192.168.1.100
Slave1192.168.1.101
Slave2192.168.1.102
Slave3192.168.1.103
Slave4192.168.1.104


      5个节点上均是Ubuntu 13.04系统,并且有一个相同的用户hadoop。Master机器主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;4个Salve机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。

      下面我们将以Master机器为例,即主机名为"Master",IP为"192.168.1.100"进行一些主机名配置的相关操作。其他的Slave机器以此为依据进行修改。

      1)修改机器名

      机器名的配置在/etc/hostname文件中,所以直接修改该文件即可,修改命令为:

      sudo vi /etc/hostname

      输入root 密码,删除文件中原来的机器名,改为Master即可。

      修改完毕后,输入命令:

      hostname

      若显示Master,则证明配置成功。

      2)修改机器IP地址

      3)配置hosts文件

     "/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName和IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名(或域名)对应的IP地址。      

  我们要测试两台机器之间知否连通,一般用"ping 机器的IP",如果想用"ping 机器的主机名"发现找不见该名称的机器,解决的办法就是修改"/etc/hosts"这个文件,通过把LAN内的各主机的IP地址和HostName的一一对应写入这个文件的时候,就可以解决问题。

     在进行Hadoop集群配置中,需要在"/etc/hosts"文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。所以在所有的机器上的"/etc/hosts"文件末尾中都要添加如下内容:

192.168.1.100    Master

192.168.1.101   Slave1

192.168.1.102   Slave2

192.168.1.103   Slave3

192.168.1.104   Slave4

      使用以下命令,修改/etc/hosts文件即可:

      sudo vi /etc/hosts

     PS:为保证namenode能够正常启动,最好将hosts中的其他IP配置信息删除。

     修改完毕后,用命令:

      ping Slave1

      进行测试,若能够ping通,则证明配置正确。

      PS:其他机器上的hosts可以通过安装ssh后,将该文件发送到各个机器上,然后替换机器上的原始文件即可。

(二)SSH无密码互联

      Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。

       当Master需要无密码访问Slave1时,Master为客户端,Slave1是服务器,客户端要无密码登录服务器,需要将自己的公钥上传到服务器。

      ubuntu默认并没有安装ssh服务,如果通过ssh链接ubuntu,需要自己手动安装ssh-server。判断是否安装ssh服务,可以通过如下命令进行:     

ssh localhost

若显示:ssh: connect to host localhost port 22: Connection refused,则表示没有还没有安装,可以通过apt安装,命令如下:

sudo apt-get update

sudo apt-get install openssh-server

PS:若不输入第一条命令,则很可能会在安装ssh时报无法找到ssh资源。

安装完成后,可以通过如下命令查看服务是否正确启动:

ps -e|grep ssh

若显示:

6212 ?        00:00:00   sshd  

则说明ssh已正常启动,否则,可通过以下命令开启ssh服务:

sudo /etc/init.d/ssh start

确认ssh服务已经安装启动后,我们需要配置Master与各个Slave之间的无密码互联。以Master连接Slave1为例。

Master与Slave1无密码访问配置

在Master的终端中输入命令,产生密钥:

ssh-keygen -t dsa -P “ ” -f  ~/.ssh/id_dsa

将.ssh中的id_dsa.pub添加到authorized_keys中

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

修改/etc/ssh/sshd_config

RSAAuthentication yes
       PubkeyAuthentication yes
       #AuthorizedKeysFile     %h/.ssh/authorized_keys

将AuthorizedKeysFile该行前面的#去掉

验证是否可以无密码连接到本机

ssh Master

首次连接会询问是否将Maser加入knownhosts中,确定即可。若无需输入密码即可连接到Master,则证明设置成功。

将Master上的id_dsa.pub上传到Slave1(PS:记得先从登陆上的Master中退出,使用命令exit):

scp ~/.ssh/id_dsa.pub hadoop@Slave1 ~/

登录Slave1

ssh Slave1

由于此时Master若还不能无密码访问Slave1,需要输入Slave1上hadoop的密码。

输入Slave1上hadoop的密码后,打开终端,输入命令产生密钥:

ssh-keygen -t dsa -P “ ” -f  ~/.ssh/id_dsa

将.ssh中的id_dsa.pub添加到authorized_keys中

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

修改/etc/ssh/sshd_config

RSAAuthentication yes
       PubkeyAuthentication yes
       #AuthorizedKeysFile     %h/.ssh/authorized_keys

将AuthorizedKeysFile该行前面的#去掉

验证是否可以无密码连接到本机

ssh Slave1

首次连接会询问是否将Slave1加入knownhosts中,确定即可。若无需输入密码即可连接到Slave1,则证明设置成功。

从当前登陆中退出:

exit

将从Master中接收到的公钥加入到加到Slave1的authorized_keys中(使得Master可以无密码登陆Slave1):

cat ~/id_rsa.pub(Master 公钥的存放路径) >> ~/.ssh/authorized_keys

删除Master的公钥:

rm -r ~/id_dsa.pub

到此,Master无密码登陆Slave1配置成功。然后配置Slave1无密码登陆Master。

将Slave1的公钥上传到Master上:

scp ~/.ssh/id_dsa.pub hadoop@Master ~/

退出Slave1:

exit

将Slave1的公钥加入到Master的authorized_keys中(使得Slave1可以无密码登陆Master):

      cat ~/id_rsa.pub(Slave1公钥的存放路径) >> ~/.ssh/authorized_keys

      将Slave1的公钥删除(避免配置其它Slave时混淆):

      rm -r ~/id_dsa.pub
      现在,Master与Slave1的无密码互联已经配置成功,可以输入登陆命令进行测试。

      Master与其它Slave之间的无密码互联可以仿照上述方法进行(PS:每次输入命令时,一定要确定当前所登陆的机器是否正确)。

(三)Haoop安装

     Hadoop的安装配置可以现在Master上进行,然后将配置好的文件发送到Slave节点上即可。

     环境变量配置

      将jdk解压并将解压后的文件命名为java

      将解压后的jdk文件移动到/usr文件夹中

      sudo mv ~/java(解压后的jdk的存放路径)  /usr/

      编辑"/etc/profile"文件:

      vi /etc/profile

      在"/etc/profile"文件的尾部添加以下内容:

      # set java environment

   

      export JAVA_HOME=/usr/java/jdk1.7.0_07

      export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

      export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

      保存并退出,执行下面命令使其配置立即生效:

      source /etc/profile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值