之前是用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。