所需环境 Ubuntu11.10(32位) hadoop2.2.0 jdk1.8

集群为3台机器(都是从虚拟机里虚拟出来的)各机器参数如下

hadoop01   192.168.0.30   sun(计算机名)   sun(用户名)  

hadoop02   192.168.0.31   worker01            sun

hadoop03   192.168.0.32   worker02            sun

这里计算机名之所以叫worker是因为我搭建这个集群是要在上面搭建spark用的,所以以work命名node节点。上面配置中用户名最好都一样,或者你也可以为这个集群另添加一个统一的用户名。

首先要先把jdk安装成功(集群中的机器都要安装jdk),具体安装过程参考博文http://yimaoqian.blog.51cto.com/1328422/1394538

jdk安装好后就是hadoop完全分布式安装了。

解压hadoop2.2.0然后配置hadoop的环境变量,在profile文件里配置信息

JAVA_HOME=/home/sun/jdk1.8
JRE_HOME=/home/sun/jdk1.8/jre
HADOOP_HOME=/home/sun/hadoop2.2
HADOOP_COMMON_HOME=/home/sun/hadoop2.2
HADOOP_HDFS_HOME=/home/sun/hadoop2.2
HADOOP_MAPRED_HOME=/home/sun/hadoop2.2
HADOOP_YARN_HOME=/home/sun/hadoop2.2
HADOOP_CONF_DIR=/home/sun/hadoop2.2/etc/hadoop
CLASSPARH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$HADOOP_HOME/lib:$HADOOP_COMMON_HOME/lib:$HADOOP_HDFS_HOME/lib:$HADOOP_MAPRED_HOME/lib:$HADOOP_YARN_HOME/lib: $CLASSPATH
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_COMMON_HOME/bin:$HADOOP_HDFS_HOME/bin:$HADOOP_MAPRED_HOME/bin:$HADOOP_YARN_HOME/bin: $PATH
export JAVA_HOME
export JRE_HOME
export HADOOP_HOME
export HADOOP_COMMON_HOME
export HADOOP_HDFS_HOME
export HADOOP_MAPRED_HOME
export HADOOP_YARN_HOME
export HADOOP_CONF_DIR
export CLASSPATH
export PATH

第一步为集群配置无密码访问

   安装 ssh 命令 sudo apt-get install ssh

       在用户目录下创建.ssh文件夹(可以用cd .ssh 命令检查是否存在,不存在则创建),

       进入.ssh目录中,执行ssh-keygen –t rsa(rsa为加密方式,还有用dsa的) 命令

       虽后查看.ssh文件会产生两个文件分别为id_rsa 和 id_rsa.pub

       之后执行cp id_rsa.pubauthorized_keys 命令将  id_rsa.pub复制一份公钥。

       接下来就是把公钥发送给各个集群节点,命令scp authorized_keys worker01:/home/sun/.ssh

第二步配置hosts

      修改hadoop01的hosts  

                此节点为namenode则修改信息为(一行一个哦)  

                                                                        127.0.0.1          localhost

                                                                        192.168.0.30    sun(计算机名)

                                                                        192.168.0.31    worker01

                                                                        192.168.0.32    worker02

(这里那个localhost是否要保留,有没有什么影响记不太清楚了,先留着,随后出错了再修改,做个标记。貌似三台机子可以配成一样的)

      修改hadoop02的hosts

                 此节点为node节点,修改的信息为(依然保留第一行)

                                                                        127.0.0.1          localhost

                                                                        192.168.0.30    sun

                                                                        192.168.0.31    worker01

      修改hadoop03的hosts

                 此节点为node节点,修改的信息为(依然保留第一行)

                                                                        127.0.0.1          localhost

                                                                        192.168.0.30    sun

                                                                        192.168.0.32    worker02

第三步,修改hadoop2.2.0的配置信息(文件路径$HADOOP_HOME/etc/hadoop)

        配置core-site.xml

property>
  <name>hadoop.tmp.dir</name>
  <value>/home/sun/hadoop2.2/tmp</value>
 </property>
 <property>
  <name>fs.defaultFS</name>
  <value>hdfs://sun:9000</value>
 </property>

(个人认为这里写成主机名比较好,这样如果ip有变动的话不用改这里)

   配置hdfs-site.xml

<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/sun/hadoop2.2/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/sun/hadoop2.2/data</value>
</property>
<property>
   <name>dfs.replication</name>
   <value>2</value>
</property>

这里官方文档上说data dir 是在datanode节点上配置的,这我先配上,随后发送给data节点后在修改,还有就是dfs.replication我配置的是2,因为我的集群太小了,默认是3 (name和data文件夹是我之前创建的)

      配置mapred-site.xml(如果没有这个文件就新建个)

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<property>
   <name>mapreduce.jobhistory.address</name>
   <value>sun:10020</value>
</property>
<property>
   <name>mapreduce.jobhistory.webapp.address</name>
   <value>sun:19888</value>
</property>

        配置yarn-site.xml

<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>
这是node节点上的配置
----------------------------------------------
  <property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    <description>In case you do not want to use the default scheduler</description>
  </property>
<property>
   <name>yarn.resourcemanager.address</name>
   <value>sun:8032</value>
</property>
<property>
   <name>yarn.resourcemanager.scheduler.address</name>
   <value>sun:8030</value>
</property>
<property>
   <name>yarn.resourcemanager.resource-tracker.address</name>
   <value>sun:8031</value>
</property>
<property>
   <name>yarn.resourcemanager.admin.address</name>
   <value>sun:8033</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address</name>
  <value>sun:8088</value>
</property>

          配置masters(如果没有这个文件就自己新建) 和   slaves

                 masters  为 sun (namenode)

                 slaves   为 worker01  worker02  (一行一个哦)                

修改完上述信息就可以把hadoop2.2.0的配置信息发送到集群的各个节点中,

命令为 (在$HADOOP_JAVA/etc路径下) scp -r hadoop worker02:/home/sun/hadoop2.2/etc

(不要忘了上面有些配置是要修改的哦)      

第四步就是启动集群验证安装的正确性。

       启动时一定要先格式化namenode  ,在hadoop的安装目录下执行命令 bin/hdfs namenode –format

       之后启动服务,命令

sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
sbin/hadoop-daemon.sh start secondarynamenode
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver

   也可以执行

sbin/start-dfs.sh
sbin/start-yarn.sh

   各节点运行的服务如下图

hadoop2.2.0 完全分布式安装_hadoop2.2.0 完全分布  部署

   服务启动完毕可以登录web页面查看集群的信息,网址如下

    http://localhost:50070
    http://localhost:8088
    http://localhost:19888

查看页面的时候发现一个问题,我在50070页面查看集群信息时,live node数为2,而在8088页面查看active node数为0(出错的时候忘了截图)。哪出错了呢?想到8088页面是resourcemanager的管理页面,而resourcemanager是由yarn-site.xml来设置的,那就把矛头先指向它吧,在上面的配置中namenode和个node节点的yarn-site.xml配置是不一样的(按照官方文档的说法配置的),是不是因为这个。随后我把集群中各机器的yarn-site.xml配置统一,配置信息为

<property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>1024</value>
    <description>the amount of memory on the NodeManager in GB</description>
</property>
//如果发现8088页面里节点内存信息不对再把这个配置配上,默认是8g,而且还不能配512m,会因为内存太小nodemanager无法启动。
//改成这个后spark的8080页面还是识别的worker是512内存,而且spark on yarn 模式也无法运行了,具体原因还在找,先记录下,随后再改
<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.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    <description>In case you do not want to use the default scheduler</description>
  </property>
<property>
   <name>yarn.resourcemanager.address</name>
   <value>sun:8032</value>
</property>
<property>
   <name>yarn.resourcemanager.scheduler.address</name>
   <value>sun:8030</value>
</property>
<property>
   <name>yarn.resourcemanager.resource-tracker.address</name>
   <value>sun:8031</value>
</property>
<property>
   <name>yarn.resourcemanager.admin.address</name>
   <value>sun:8033</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address</name>
  <value>sun:8088</value>
</property>

然后再启动服务发现问题消失。问题解决(是我把官方文档的信息理解错了?不太明白)。

官方信息如下(不知我的理解是否有误)

hadoop2.2.0 完全分布式安装_hadoop2.2.0 完全分布  部署_02

一切正常之后就是测试集群了

   还是测试下hadoop的helloworld吧

   在hdfs上创建一个目录  命令 bin/hdfs dfs -mkdir /in (随便起名字,但要保留前面'/')

   上传文件到hdfs的in目录下 命令  bin/hdfs dfs -copyFromLocal NOTICE.txt /in

   随后可以执行worldcount的命令了

bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /in/NOTICE.txt /output

   等着出结果就可以了。

hadoop2.2.0完全分布式先已配置完成,随后就是在其上搭建spark集群了。一天的工作量呀,配置还是不熟。