所需环境 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 �Ct 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 �Cformat
之后启动服务,命令
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
各节点运行的服务如下图
服务启动完毕可以登录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>
然后再启动服务发现问题消失。问题解决(是我把官方文档的信息理解错了?不太明白)。
官方信息如下(不知我的理解是否有误)
一切正常之后就是测试集群了
还是测试下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集群了。一天的工作量呀,配置还是不熟。