之前是用hadoop1.1.2版本,在redhat环境下安装hadoop完全分布式环境。而现在公司要求在centos7.0环境下安装hadoop2.5.2及以上的版本的完全分布式的环境配置。具体步骤跟前面差不多,主要是在centos7.0下,有一些命令不一样。这里重新描述一下:

1、安装centos7.0的系统

2、设置各节点的ip,这里在设置的时候要注意:

  2.1修改ip地址的方法:

    直接修改/etc/sysconfig/network-scripts/ifcfg-eno16777736文件

  2.2 将对应的ip地址和主机名绑定

    直接修改/etc/hostname 来修改主机名

    直接修改/etc/hosts将主机名和ip地址进行绑定

  第2步具体修改参考:http://www.cnblogs.com/ljy2013/articles/4344795.html 一文即可。

验证:修改完之后,在各节点上分别ping一下对方的主机名来进行验证。

3、ssh免密码登录(这里需要注意,采用那个用户来产生这个密钥,用什么额用户登陆就用那个用户产生。)

  3.1首先分别在各个节点上采用ssh-keygen -t rsa 生成私有和公有密钥。并复制各自的公有密钥,存为  id_rsa.pub.n,n为对应得主机号

  3.2将各个节点的id_rsa.pub.n复制到第一个主节点上,采用scp命令,跟以前是一样 的。参考:http://www.cnblogs.com/ljy2013/articles/4320939.html

  3.3将所有的节点上的id_rsa.pub.n文件全部拷贝到authorized_keys文件中。参考:http://www.cnblogs.com/ljy2013/articles/4320939.html

  3.4验证,ssh 各主机名,此时发现还需要密码登陆,这个主要原因是要将authorized_keys文件组内可写的权限进行修改,修改为组内不可写。即chmod 644 authorized_keys

  3.5再次验证ok

4、关闭各个节点的防火墙,在centos7中关闭防火墙的方法:

  關閉 Firewall
  # systemctl stop firewalld

  預設不啟動 Firewall
  # systemctl disable firewalld

  这一步也是非常重要的,若没有设置这一步,会导致后面启动了namenode之后,namenode无法连接到datanode。在这里我吃了大亏。主要是由于不熟悉centos7如何关闭防火墙。

5、安装jdk

  本次安装的是jdk1.6.具体方法参考:http://www.cnblogs.com/ljy2013/articles/4320939.html

 <1>执行rm -rf /usr/local/* 删除/usr/local/目录下所有内容。
  <2>使用ssh工具将jdk上传到linux中
  <3>给jdk安装文件授予执行权限:chmod 744 文件名
  <4>执行./jdk文件名。必须在usr/local/*中执行,否则在其他路径下执行找不到相应的文件。
  <5>修改文件名 mv jdk-8u  jdk
  <6>修改环境变量即修改 vi /etc/profile文件即可。在该文件夹中添加两行内容
     export JAVA_HOME=/usr/local/jdk 
     export PATH=.:$JAVA_HOME/bin:$PATH
    保存退出
  <7>执行 source /etc/profile 命令,让修改的环境变量立即生效

6、安装hadoop并配置相应的文件:

  6.1配置hadoop的环境变量

  #HADOOP
  export HADOOP_HOME=/home/hadoop/hadoop-2.5.2
  export HADOOP_COMMON_HOME=$HADOOP_HOME
  export HADOOP_HDFS_HOME=$HADOOP_HOME
  export HADOOP_MAPRED_HOME=$HADOOP_HOME
  export HADOOP_YARN_HOME=$HADOOP_HOME
  export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

 

  export CLASSPATH=.:$JAVA_HOME/lib:$HADOOP_HOME/lib:$CLASSPATH
  export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

并执行 source /etc/profile使得环境变量立即生效。

6.2修改hadoop的配置文件

  (1)/home/hadoop/hadoop-2.5.2/etc/hadoop/core-site.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://Master:9000</value>
	</property>

     <property>
          <name>fs.checkpoint.period</name>
          <value>3600</value>
          <description>The number of seconds between two periodic checkpoints. </description>
     </property>
     <property>
          <name>fs.checkpoint.size</name>
          <value>67108864</value>
          <description>The size of the current edit log (in bytes) that triggers a periodic checkpoint even if the fs.checkpoint.period hasn't expired. </description>
     </property>

     <property>
          <name>fs.checkpoint.dir</name>
          <value>/data/work/hdfs/namesecondary</value>
          <description>Determines where on the local filesystem the DFS secondary name node should store the temporary images to merge. If this is a comma-delimited list of directories then the image is replicated in all of the directories             for redundancy. </description>
     </property>

</configuration>

  (2)/home/hadoop/hadoop-2.5.2/etc/hadoop/hdfs-site.xml修改,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<property>
		<name>dfs.replication</name>  
		<value>1</value>
	</property>
	<property>
		<name>dfs.namenode.name.dir</name>        
		<value>file:///home/hadoop/dfs/name</value>
	</property>
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>file:///home/hadoop/dfs/data</value>
	</property>
	<property>
		<name>dfs.webhdfs.enabled</name>
		<value>true</value>
	</property>  
</configuration>

  (4)/home/hadoop/hadoop-2.5.2/etc/hadoop/mapred-site.xml修改,如下所示

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>Master:10020</value>
	</property>
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>Master:19888</value>
	</property>
</configuration>

  (5)/home/hadoop/hadoop-2.5.2/etc/hadoop/yarn-site.xml修改,如下所示

<?xml version="1.0"?>
<configuration>
	 <property>  
		<name>yarn.nodemanager.aux-services</name>  
		<value>mapreduce_shuffle</value>  
	 </property>  
	 <property>  
		<name>yarn.resourcemanager.address</name>  
		<value>Master:8032</value>  
	 </property>  
	 <property>  
		<name>yarn.resourcemanager.scheduler.address</name>  
		<value>Master:8030</value>  
	 </property>  
	 <property>  
		<name>yarn.resourcemanager.resource-tracker.address</name>  
		<value>Master:8031</value>  
	 </property>  
	 <property>  
		<name>yarn.resourcemanager.admin.address</name>  
		<value>Master:8033</value>  
	 </property>  
	 <property>  
		<name>yarn.resourcemanager.webapp.address</name>  
		<value>Master:8088</value>  
	 </property>  
</configuration>

  (6)/home/hadoop/hadoop-2.5.2/etc/hadoop/slaves修改,如下所示

Slave1
Slave2

  (7)分别在/home/hadoop/hadoop-2.5.2/etc/hadoop/hadoop-env.sh和yarn-env.sh中配置Java环境变量,如下所示:

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

  7、将配置好的Hadoop拷贝到从机上

使用命令“scp -r hadoop-2.5.2 hadoop@Slave1:/home/hadoop”和“scp -r hadoop-2.5.2hadoop@Slave2:/home/hadoop”执行数据拷贝。

 

 8、hadoop格式化

在正式 启动Hadoop之前,分别在Master、Slave1、Slave2机器上格式化HDFS,如下所示:

hdfs namenode –format

  9、启动hadoop

start-dfs.sh
start-yarn.sh

  10、关闭hadoop

stop-dfs.sh
stop-yarn.sh

  11、当成功启动Hadoop后,我们便可以在每一个节点下执行命令jps,查看Hadoop的进程,如下所示

#Master上的Hadoop进程
30791 SecondaryNameNode
30943 ResourceManager
30607 NameNode

#Slave1上的Hadoop进程
9902 DataNode
10001 NodeManager

#Slave2上的Hadoop进程
9194 DataNode
9293 NodeManager

  启动hadoop之后,作为hadoop管理员一般需要执行以下:hadoop dfsadmin -report命令,查看hadoop中的hdfs的存储能力。若发现其为0,则表明datanode与namenode未连接,产生的原因有很多,我遇到的就是没有关闭防火墙。  

  当错误发生时,不要紧张,可以通过查看namenode和datanode差生的日志查看发生的错误,该日志文件放在logs文件下的,分别有两种文件:一个是.log文件,一个是.out文件。通过查看日志文件,可以找出错误的原因,进而可以解决问题。

  在这个过程中,最重要的是不要忘记关掉防火墙,下一步就是如何恢复namenode和datanode。