CentOS 7下搭建 Hadoop分布式集群环境(亲测有效)

真实企业中搭建大数据平台Hadoop的分布式集群环境搭建 ,其实是和我的是大同小异,只不过我是虚拟机:看这位仁兄(有五台服务器,看公司情况和需求):

https://my.oschina.net/feinik/blog/1621000 

环境:

CentOS7虚拟机三台
java8、ssh
Hadoop: hadoop-2.7.1

一、准备工作

1.修改三台虚拟机主机名master、slave1,slave2

[root@master ~]# vim /etc/hostname

进入之后直接改名即可

2.IP与主机名映射
[root@master ~]# vim /etc/hosts

如果是三台服务器 就三台 的IP + 主机名 都写上

3.配置静态网络
[root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736

4.关闭网络管理器NetworkManager 并重启  
[root@master ~]# systemctl disable NetworkManager.service
[root@master ~]# chkconfig network on
[root@master ~]# systemctl stop NetworkManager
[root@master ~]# systemctl restart network

注:之后重新输入你设置的静态IP登录即可

5.配置完成之后,互相ping一下,看能否连通

ping master
ping slave

 

二、配置免密码登录

注: 按下面的命令 做就没错

1.在所有机器上(包括主机)都生成私钥和公钥,一路回车

ssh-keygen -t rsa

2.需要让机器能互相访问,需要把slave节点上的 id_rsa.pub发给master

scp /root/.ssh/id_rsa.pub root@master:/root/.ssh/id_rsa.pub.slave1

slave1:

slave2:

scp /root/.ssh/id_rsa.pub root@master:/root/.ssh/id_rsa.pub.slave2

图就不截了。和上边一样

在master上,将所有公钥加到用于认证的公钥文件authorized_keys中

cat /root/.ssh/id_rsa.pub*>>/root/.ssh/authorized_keys

将公钥文件authorized_keys分发给每台slave

slave1:

scp /root/.ssh/authorized_keys root@slave1:/root/.ssh/

slave2:

scp /root/.ssh/authorized_keys root@slave2:/root/.ssh/

验证免密码通信(按这种形式测试即可)

ssh master
ssh slave

三.安装Hadoop

官网下载Hadoop2.7.

解压到/usr/local/hadoop2.7.

tar  zxvf  hadoop-2.7.1.tar.gz

1.配置hadoop环境变量

[root@master /]# vim ~/.bashrc

添加如下内容:(根据自己的目录而定--》HADOOP_HOME)

export HADOOP_HOME=/usr/local/hadoop-2.7.3
export PATH=JAVA_HOME/bin:HADOOP_HOME/bin:$PATH
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

[root@master /]# source ~/.bashrc

2.配置根目录下的 全局环境变量 (设置是为了方便命令操作)

 

我习惯放到末尾 

JAVA_HOME=/usr/java/jdk1.8.0_121

export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.1

export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH

CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

export PATH JAVA_HOME CLASSPATH


最后:重新生效配置文件

进入hadoop/etc/hadoop/目录下,配置以下文件hadoop-env.sh,yarn-env.sh,slaves,core-site.xml,hdfs-site.xml,maprd-site.xml,yarn-site.xml

[root@master /]# cd $HADOOP_HOME
[root@master hadoop-2.7.3]# cd etc/hadoop/

1、进入hadoop-env.sh,该文件为hadoop集群启动检查相关环境变量的文件,注意检查JAVA_HOME环境变量的路径是否是对的

2、进入yarn-env.sh,同样检查JAVA_HOME

3、进入slaves,配置如下内容,其内配置的是集群内的所有主机的主机名,用来启动DataNode存储(从节点的启动主机名写入)

master
slave

4、修改core-site.xml(核心配置文件,指定了hadoop最关键就的进程节点的主机: 里面的File指定的hadoop目录换成你自己指定的下面的也是)

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
    <property>
         <name>hadoop.tmp.dir</name>
         <value>file:/usr/local/hadoop-2.7.3/tmp</value>
    </property>
</configuration>

5、修改hdfs-site.xml(包括块大小,冗余/副本,路径下的关键文件,端口等)

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///usr/local/hadoop-2.7.3/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/local/hadoop-2.7.3/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>

最好加上这个节点,因为以后再使用hdfs操作JavaAPI 时可能会出现 必须要root 用户权限的问题 

<property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>

 </property> 

6、修改mapred-site.xml(Mapreduce计算程序相关的文件)

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

选加:

 <property> <name>mapreduce.jobhistory.address</name>

<value>master:10020</value>

<description>MapReduce的JobHistoryserver的IP和端口</description>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>master:19888</value>

<description>MapReduce的JobHistoryserver在web端查看的地址</description>

</property>

<property>

<name>mapreduce.job.ubertask.enable</name>

<value>true</value>

<description>是否开启小作业优化</description>

</property>

7、修改yarn-site.xml(资源调度相关配置文件)

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
</property>
</configuration>

选加:

 <property>

<name>yarn.log-aggregation-enable</name>

<value>false</value>

<description>是否启用日志聚合功能,日志聚合开启后保存到HDFS上</description>

</property>

<property>

<name>yarn.log-aggregation.retain-seconds</name>

<value>604800</value>

<description>聚合后的日志在HDFS上保存多长时间,单位为s </description>

</property>

将配置好的hadoop-2.7.3文件夹分发给所有slave吧,本例就一台slave(根据自己指定的目录)

scp -r /usr/local/hadoop-2.7.3/ root@slave:/usr/local/

启动Hadoop

初次搭建,需要格式化namenode ,以后启动不需要

[root@master hadoop-2.7.3]# bin/hadoop namenode -format
[root@master hadoop-2.7.3]# sbin/start-all.sh

master上执行jps查看以下进程是否都存在

13312 ResourceManager
19555 Jps
13158 SecondaryNameNode
12857 NameNode
13451 NodeManager
12989 DataNode

slave上执行jps查看

14112 Jps
9300 NodeManager
9179 DataNode

Hadoop相关管理界面

Hadoop集群管理界面http://192.168.1.240:50070/
从中可以查看节点启动的相关信息,也可以通过日志定位启动过程中的问题

Paste_Image.png

mapreduce任务执行管理界面http://192.168.1.240:8088

Paste_Image.png

执行Hadoop自带MR示例程序

hadoop提供的示例程序做了这件事:用正则表达式dfs[a-z.]+来搜索所有的输入文件,对搜索出的结果汇总并排序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep /user/test1/input /user/test1/output 'dfs[a-z.]+'

其中输出文件目录需要制定hdfs的绝对目录,否则,会输出到/user/root下

任务执行进度可以在http://192.168.1.240:8088上查看,执行完毕后执行下面的命令查看结果

[root@localhost hadoop-2.7.3]# bin/hdfs dfs -cat /user/test/output/*
6    dfs.audit.logger
4    dfs.class
3    dfs.server.namenode.
2    dfs.period
2    dfs.audit.log.maxfilesize
2    dfs.audit.log.maxbackupindex
1    dfsmetrics.log
1    dfsadmin
1    dfs.servers
1    dfs.replication
1    dfs.file

FAQ:

1、环境搭建好,启动hadoop时,NameNode进程无法启动
初次启动,没有执行格式化命令
2、配置文件中注意格式和路径,写错了很难查出来
3、Hadoop启动hdfs时,datanode无法启动的问题
问题描述:java.io.IOException: Incompatible clusterIDs in /home/lxh/hadoop/hdfs/data: namenode clusterID = CID-a687ed3c-45d2-456c-828d-bc5d8af2a0cf; datanode clusterID = CID-2169f5c7-b111-4af8-a899-56be4bc64702
原因:执行hdfs namenode -format后,current目录会删除并重新生成,其中datanode/current/VERSION文件中的clusterID也会随之变化,而datanode的datanode/current/VERSION文件中的clusterID保持不变,造成两个clusterID不一致。
解决方法:所以为了避免这种情况,可以再执行的namenode格式化之前,删除datanode的current文件夹,或者修改datanode的VERSION文件中出clusterID与namenode的VERSION文件中的clusterID一样,然后重新启动dfs。
3、注意关闭防火墙(以及关闭防火墙的开机启动)

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

猜你喜欢

转载自blog.csdn.net/qq_40095003/article/details/89376654