首页 > 代码库 > Hadoop 2.2.0 第一步

Hadoop 2.2.0 第一步

Hadoop 2.2.0分布式环境搭建。根据网上和视频上的内容总结。

环境为3台虚拟机,centOS6.5  32位。

_______________________________

hostname    |  ip         |

hadoop1      |  192.168.4.109 |

hadoop2      |  192.168.4.110 |

hadoop3      |  192.168.4.111 |

_______________________________

1、设置静态ip

    修改ip设置完之后重启网卡,执行命令 service network restart
      验证:执行命令 ifconfig

2、修改主机名

    hostname 回车查看当前的主机名

    gedit /etc/sysconfig/network修改hostname

3、绑定ip和主机名

    gedit /etc/hosts增加一行
          192.168.4.109 hadoop1

     192.168.4.110 hadoop2

     192.168.4.111 hadoop3

     保存退出 三台电脑都这么配

     验证 ping hadoop1,ping hadoop2 , ping hadoop3

4、关闭防火墙(教程上是关闭的,实际上肯定不能管 不管它了以后再说)

    service iptables stop

    chkconfig iptables off

5、ssh(secure shell)加密 ssh的免密码登陆

    执行命令产生密钥 ssh-keygen -t rsa  命令行的提示一路回车到完成,产生的密钥位于~/.ssh文件夹中

    cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

    chkconfig sshd on
    重启 SSH 服 务命令使其生效 :service sshd restart
    

    比较文绉绉的总结是这样:“被登录的机子要有登录机子的公钥,登录的机子要有私钥,这个公钥/私钥对一般在私钥宿主机产生。”这句话太TM不爽弄得老子晕头转向,废话少说就一句话 A B C三台电脑 都产生了id_rsa.pub,authorized_keys这两个吊东西第二个是cp代码复制出来的,把A的authorized_keys里面的内容追加到B和C相同位置相同文件的内容后面 注意力不是替换文件。就搞定了。去他凉的死读书绕来绕去。

    验证 ssh hadoop2,此时可无密码登录hadoop2,不要急着去ssh hadoop3因为你在hadoop2里,先exit再ssh hadoop3

6、安装jdk

    安装JDk就他娘的配置环境变量就好了,把它丢在/usr/local/jdk这个目录,

    这里环境变量怎么配的看下边我贴一个完整的。

7、安装hadoop

    把hadoop 2.2.0放在 /usr/local/hadoop

    这里要涉及到的配置文件有7个:

/usr/local/hadoop-2.2.0/etc/hadoop/hadoop-env.sh

/usr/local/hadoop-2.2.0/etc/hadoop/yarn-env.sh

/usr/local/hadoop-2.2.0/etc/hadoop/slaves

/usr/local/hadoop-2.2.0/etc/hadoop/core-site.xml

/usr/local/hadoop-2.2.0/etc/hadoop/hdfs-site.xml

/usr/local/hadoop-2.2.0/etc/hadoop/mapred-site.xml

/usr/local/hadoop-2.2.0/etc/hadoop/yarn-site.xml

以上个别文件默认不存在的,可以复制相应的template文件获得。

Yarn(这个吊框架hadoop1.X里面记得是没有的)中由于启动 HDFS 分布式文件系统和启动 MapReduce 框架分离,JAVA_HOME 需要在 hadoop-env.sh 和 Yarn-env.sh 中分别配置

配置文件1:hadoop-env.sh

      修改JAVA_HOME值    export JAVA_HOME=/usr/local/jdk

配置文件2:yarn-env.sh

      修改JAVA_HOME值    export JAVA_HOME=/usr/local/jdk
配置文件3:slaves (这个文件里面保存所有slave节点)

写入以下内容:

hadoop2
hadoop3

 

配置文件4:core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/root/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
</configuration>

配置文件5:hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop1:9001</value>
        </property>
        <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/root/dfs/name</value>
    </property>
        <property>
                 <name>dfs.datanode.data.dir</name>
                 <value>file:/root/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

配置文件6:mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop1:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop1:19888</value>
    </property>
</configuration>

配置文件7:yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop1:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoop1:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoop1:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>hadoop1:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hadoop1:8088</value>
       </property>
</configuration>

 

3、复制到其他节点
这里我直接在命令行里操作,此时hadoop2和hadoop3还是傻逼就是说什么都没有呢。

拷贝jdk文件夹到hadoop2和hadoop3

  scp -r /usr/local/jdk/ root@hadoop2:/usr/local/

  scp -r /usr/local/jdk/ root@hadoop3:/usr/local/

拷贝hadoop文件夹到hadoop2和hadoop3

  scp -r /usr/local/hadoop-2.2.0/ root@hadoop2:/usr/local/

  scp -r /usr/local/hadoop-2.2.0/ root@hadoop3:/usr/local/

然后到了配置环境变量的时候了,先弄hadoop1的

gedit /etc/profile

在最上面加入

JAVA_HOME=/usr/local/jdk
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
HADOOP_HOME=/root/hadoop-2.2.0
PATH=.:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH
export JAVA_HOME HADOOP_HOME CLASSPATH PATH

保存退出然后 source /etc/profile 刷新一下就ok了  可以试一下 java -version看看有没有出来。

然后复制/etc/profile到hadoop2和hadoop3 怎么复制我就不写了 参照上面。

这时候三个机器就配置完了。

8、跑一跑吧,

  初始化Hadoop
      格式化namenode ,        hadoop namenode -format

  启动hdfs,       start-dfs.sh

  输入 jps 看看除了jps之外还有哪些java进程

  此时在hadoop1上面运行的进程有:namenode secondarynamenode
      hadoop2和hadoop3上面运行的进程有:datanode

启动yarn: ./sbin/start-yarn.sh
    此时在hadoop1上面运行的进程有:namenode secondarynamenode resourcemanager

    hadoop2和hadoop3上面运行的进程有:DataNode NodeManager

查看HDFS NameNode:    http://hadoop1:50070
    查看RM:    http://hadoop1:8088/cluster

9、小结

终于写完了 总结一下吧,让hadoop集群环境跑起来其实很简单,下面列出一下经常遇到的困难:

  如果你多次hadoop namenode -format了就出问题了,造成namenode 和datanode的clusterID不一致,解决办法我在网上找到两个,第一个比较笨就是修改每一个datanode上面的CID(位于~/dfs/data/current/VERSION文件夹中)使其和namenode上(位置在~/dfs/name/current/VERSION)致,第二种就是都删掉。

  至于乱七八糟的错误就看log在百度吧,

这是在博客园的第一篇,感觉丑爆了,“开发者的网上家园”为啥给程序猿的视觉效果这么差 还是我不会用 这排版感觉不会有多少人喜欢看。