搭建Hadoop集群

说起大数据、云计算就绕不开Hadoop,终于在实验室折腾了半天,找了两台主机,试着搭建Hadoop集群,结果遇到了一些错误。

先说说我遇到的错误,我在网上找了一个教程:http://www.cnblogs.com/lanxuezaipiao/p/3525554.html  这篇文章确实写的很详细,但是一步一步到最后,我的namenode一直启动不起来,最后纠结了两天终于弄明白,原来hadoop原来的mapred框架不如意,后来对mapred的框架做了改进,新框架名字叫做YARN,所以在配置的时候发生了一些变化,上面这个链接主要针对的是老版本的mapred框架进行的配置。最后发现这个问题,按照Yarn进行配置文件的修改就可以了。


一、环境介绍:

        linux系统:两台主机都安装了Ubuntu14.04 LTS

        jdk版本: jdk1.8.0_65

        hadoop版本:hadoop2.7.1


主机名ip角色用户名
master192.168.213.140namenodehadoop
slave1192.168.213.183datanodehadoop

    后面可能会涉及用户和用户组的问题,如果没有设置用户组,linux 会默认一个用户为一个用户组。


二、修改 /etc/hosts

    "/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName  IP]用的,例如当我们执行 ping slave1,如果/etc/hosts文件中没有配置 slave1对应的ip,计算机就会不知道怎么处理slave1,就会报错,当在/etc/hosts 配置slave1的ip以后,执行ping slave1就会ping相应的ip。


下面是我自己的/etc/hosts配置。

127.0.0.1       localhost


# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters



192.168.213.140  master
192.168.213.183  slave1

可以直接找到/etc/hosts进行编辑,也可以通过命令行进行编辑,命令为 vim /etc/hosts




打开后可能无法编辑,键盘中按 “O” 可以进行编辑,编辑完成后按 ESC 再输入 :wq  就可以完成保存并退出。

现在 ping slave1 就可以ping通了。

三、ssh无密码登陆

 

1)SSH基本原理

    SSH之所以能够保证安全,原因在于它采用了公钥加密。过程如下:

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。

(2)用户使用这个公钥,将登录密码加密后,发送回来。

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

所以再安装玩ssh后,master第一次通过ssh登陆slave1,需要输入一次slave1的密码。


2)SSH无密码原理

Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。


3)Master机器上设置无密码登录

a. Master节点利用ssh-keygen命令生成一个无密码密钥对。

在Master节点上执行以下命令:

ssh-keygen –t rsa –P ''


运行后询问其保存路径时 直接回车采用默认路径。生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在" /home/用户名/.ssh"目录下。

所以我的.ssh文件存在 /home/hadoop/.ssh 。对于linux 以 . 开头的文件都会默认隐藏,通过 ctrl+h 进行显示,也可以再命令行通过 ls -a 显示隐藏文件。  

再.ssh文件夹中存在两个文件,一个是id_rsa(私钥) ,另一个是id_rsa.pub(公钥)。

b. 接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。

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


c. root用户登录修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。

检查下面几行前面”#”注释是否取消掉:

RSAAuthentication yes # 启用 RSA 认证

PubkeyAuthentication yes # 启用公钥私钥配对认证方式

AuthorizedKeysFile  %h/.ssh/authorized_keys # 公钥文件路径



      

重新启动SSH服务,用命令 ssh service restart 可能会出现


那就试试 sudo /etc/init.d/ssh start 命令。


总之两种方法启动SSH服务:

service ssh start

sudo /etc/init.d/ssh start

启动以后,通过命令 ps -e | grep ssh 查看ssh的启动情况,当下面列出sshd表示ssh服务已经启动。


退出root用户,再hadoop用户下用 ssh localhost 命令查看ssh配置情况。 如下出现了welcome to XXXX表示ssh配置无误。


d:  把master上的公钥复制到所有slave上(我只有一个slave1).

  命令为:ssh-copy-id hadoop@slave1  @前面为用户,后面为主机名称。

我已经复制过了,这里不在截图。 复制完以后,在slave1上的 /home/hadoop/.ssh 文件夹中只能看到 authorized_key 文件。


e:   测试通过ssh登陆slave1。

通过命令 ssh hadoop@slave1 



我们会发现,最下面已经变成hadoop 用户下登陆slave1主机。这表明通过ssh可以无密码登陆slave1.


接下来配置所有Slave无密码登录Master,其和Master无密码登录所有Slave原理一样,就是把Slave的公钥追加到Master的".ssh"文件夹下的"authorized_keys"中,记得是追加(>>

四、安装java环境。

将下载下来的jdk-8u65-linux-64.tar.gz 直接解压缩到 /home/hadoop下面。然后配置java环境。

在 /etc/profile 文件下添加java的环境配置,如下:

#set java environment
export JAVA_HOME=/home/hadoop/jdk1.8.0_65
export JRE_HOME=/home/hadoop/jdk1.8.0_65/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

不同的安装路径可能会不太一样,注意修改。

执行 source /etc/profile 或 . /etc/profile  使文件立即生效。

执行 java -version 检查jdk安装情况。


五  、 安装hadoop

将下载的hadoop压缩包,复制到 /home/hadoop 下,用命令 tar –xzvf hadoop-1.1.2.tar.gz 进行解压缩。解压后为hadoop-2.7.1

通过命令:

chown –R hadoop:hadoop hadoop #将文件夹"hadoop"读权限分配给hadoop普通用户

再在/home/hadoop/hadoop-2.7.1建立文件夹 tmp(后面会用到)。


配置/etc/profile 文件。

在末尾添加:

#set hadoop environment
export HADOOP_HOME=/home/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

配置 /home/hadoop/hadoop-2.7.1/etc/hadoop/hadoop-env.sh文件:

添加:

export JAVA_HOME=/home/hadoop/jdk1.8.0_65

配置 /home/hadoop/hadoop-2.7.1/etc/hadoop/yarn-env.sh文件

添加:

export JAVA_HOME=/home/hadoop/jdk1.8.0_65

配置:/home/hadoop/hadoop-2.7.1/etc/hadoop/core-site.xml文件

配置如下:

<configuration>
  <property>
     <name>hadoop.tmp.dir</name>
     <value>/home/hadoop/hadoop-2.7.1/tmp</value>
     <description>A base for other temporary directories.</description>
  </property>

  <property>
    <name>fs.default.name</name>
    <value>hdfs://192.168.213.140:9000</value>
  </property>
</configuration>

配置: /home/hadoop/hadoop-2.7.1/etc/hadoop/hdfs-site.xml文件

配置如下:

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>

   <property>
       <name>dfs.data.dir</name>
       <value>/home/hadoop/hadoop-2.7.1/tmp/dfs/data</value>
   </property>

   <property>
       <name>dfs.name.dir</name>
       <value>/home/hadoop/hadoop-2.7.1/tmp/dfs/name</value>
   </property>

</configuration>

配置:/home/hadoop/hadoop-2.7.1/etc/hadoop/mapred-site.xml文件

配置如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>

   <property>
       <name>mapred.job.tracker</name>
       <value>192.168.213.140:9001</value>
   </property>

</configuration>

配置: /home/hadoop/hadoop-2.7.1/etc/hadoop/yarn-site.xml文件

配置如下:

<configuration>

<!-- Site specific YARN configuration properties -->
  <property>
     <name>yarn.resourcemanager.address</name>
     <value>192.168.213.140:8032</value>
  </property>

  <property>
     <name>yarn.resourcemanager.scheduler.address</name>
     <value>192.168.213.140:8030</value>
  </property>

  <property>
      <name>yarn.resourcemanager.resource-tracker.address</name>
      <value>192.168.213.140:8035</value>
  </property>

<property>
      <name>yarn.resourcemanager.admin.address</name>
      <value>192.168.213.140:8033</value>
  </property>

<property>
      <name>yarn.resourcemanager.webapp.address</name>
      <value>192.168.213.140:8088</value>
  </property>
  
</configuration>

因为新版的mapred框架被修改为yarn,所以要配置很多yarn文件,如果是老板的mapred框架,则不需要。


修改:/home/hadoop/hadoop-2.7.1/etc/hadoop/slaves文件。

因为在之前的 /etc/hosts文件中已经将要连接的从节点和ip做了对应,所以这里只需要添加slave的主机名即可,我这里只有一个slave1从节点,所以添加slave1,


到这里我们已经再master上配置好了hadoop,但slave上面还没有hadoop,直接用命令,

scp -r /home/hadoop/hadoop-2.7.1  hadoop@slave1:/home/hadoop/

将master里的hadoop-2.7.1复制到slave1相应的目录,因为在slave1上,我们要做几乎相同的配置,所以直接复制即可。(slave1中并不需要配置 hadoop-2.7.1下的slaves文件,但有了也无所谓)。


通过命令:

chown -R hadoop:hadoop(用户名:用户组) hadoop-2.7.1(文件夹

进行授权操作。

授权这一步我觉得没什么用,因为当时复制的时候,我用root@slave1进行复制时,再输入root密码时,一直说我的root密码有问题,我就直接用hadoop@slave1进行复制。

因为我们只是将hadoop-2.7.1复制到了slave下面,所以还要将 /etc/profile文件进行修改( 看前面)


最后在hadoop-2.7.1下执行 bin/hdfs namenode -format 格式化namenode。


六、启动hadoop  : sbin/start-all.sh



通过jps查看进程


七、 通过 localhost:50070 查看hadoop集群

选择第一行的Datanodes可以用来查看slave节点状况。



参考:http://www.cnblogs.com/lanxuezaipiao/p/3525554.html

http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=30144462&id=4847600

http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值