CentOS7.5搭建Hadoop分布式集群

材料:3台虚拟主机,ip分别为:

192.168.1.201 
192.168.1.202 
192.168.1.203

1、配置主机名称

三个ip与主机名称分别对应关系如下:

192.168.1.201 node201
192.168.1.202 node202
192.168.1.203 node203

1)修改配置文件

vi /etc/sysconfig/network
<!-- 添加 -->

NETEORKING=yes
HOSTNAME=node203

2)重启使生效

service network restart

3)检查

hostname

其他两个虚拟主机做同样的配置。

 2、建立主机名和ip的映射

1)使三个虚拟主机通过节点名称直接相互访问

 vi /etc/hosts

在3台虚拟机的/etc/hosts文件里面添加:

192.168.1.201 node201
192.168.1.202 node202
192.168.1.203 node203

2)使windows可以通过节点名称访问虚拟机

和虚拟机一样添加内容:

文件路径:C:WindowsSystem32driversetc

3)测试

虚拟机直接访问节点名称:

windows访问节点名称:

 3、配置ssh免密码登录

 1)生成密钥

ssh-keygen -t rsa 

之后一直按回车

 2)检查密钥

cd ~/.ssh/
 ls

秘钥生成后在~/.ssh/目录下,有两个文件id_rsa(私钥)和id_rsa.pub(公钥)

 3)在主节点(node201)上将公钥复制到authorized_keys并赋予authorized_keys600权限

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys

 复制:

赋权:

3)同理在node202和node203节点上生成秘钥

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
 

4)将node202和node203节点的秘钥复制到node201节点上的authoized_keys

vi ~/.ssh/authorized_keys

5)将node201节点上的authoized_keys远程传输到node202和node203的~/.ssh/目录下

scp  ~/.ssh/authorized_keys root@node202:~/.ssh/
scp  ~/.ssh/authorized_keys root@node203:~/.ssh/

6)检查是否免密登录

 ssh node201

 

4、新建hadoop用户及其用户组

1)新建hadoop用户

adduser hadoop
passwd hadoop

2)将hadoop用户归为hadoop组

usermod -a -G hadoop hadoop
cat /etc/group

3)赋予hadoop用户root权限

vi /etc/sudoers
<!-- 添加 -->
hadoop ALL=(ALL) ALL

 

5、安装hadoop

1)准备文件夹

mkdir /home/soft/hadoop
cd /home/soft/hadoop

2)下载hadoop安装包

wget /home/soft/hadoopwget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz

3)解压hadoop安装包

tar -zxvf hadoop-3.1.2.tar.gz

4)配置环境变量

vi /etc/profile

<!-- 添加 -->
export HADOOP_HOME=/home/soft/hadoop/hadoop-3.1.2

:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
 source /etc/profile

5)查看hadoop版本

 

6、搭建集群

1)在node201节点上创建以下文件夹

/home/soft/hadoop/hadoop-3.1.2/dfs/name

/home/soft/hadoop/hadoop-3.1.2/dfs/data

/home/soft/hadoop/hadoop-3.1.2/temp

cd /home/soft/hadoop/hadoop-3.1.2
mkdir -p dfs/name
mkdir -p dfs/data
mkdir temp

2)配置hadoop文件

需要配置/home/soft/hadoop/hadoop-3.1.2/etc/hadoop目录下的7个配置文件:

【1】hadoop-env.sh

vi hadoop-env.sh
<!-- 添加 -->
export JAVA_HOME=/home/soft/jdk/jdk1.8.0_191

【2】mapred-env.sh

vi mapred-env.sh
<!-- 添加 -->
export JAVA_HOME=/home/soft/jdk/jdk1.8.0_191

【3】yarn-env.sh

vi yarn-env.sh
<!-- 添加 -->
export JAVA_HOME=/home/soft/jdk/jdk1.8.0_191

 

【4】core-site.xml

vi core-site.xml

  

<!-- 把两个NameNode的地址组装成一个集群mycluster -->
<property>
   <name>fs.defaultFS</name>
   <value>hdfs://mycluster</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/module/hadoop-2.7.6/data/ha/tmp</value>
</property>
<!-- 指定ZKFC故障自动切换转移 -->
<property>
     <name>ha.zookeeper.quorum</name>
     <value>node201:2181,node202:2181,node203:2181</value>
</property>

【5】hdfs-site.xml

 vi hdfs-site.xml
<!-- 设置dfs副本数,默认3个 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 完全分布式集群名称 -->
<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>
<!-- 集群中NameNode节点都有哪些 -->
<property>
   <name>dfs.ha.namenodes.mycluster</name>
   <value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
   <name>dfs.namenode.rpc-address.mycluster.nn1</name>
   <value>node201:8020</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
   <name>dfs.namenode.rpc-address.mycluster.nn2</name>
   <value>node202:8020</value>
</property>
<!-- nn1的http通信地址 -->
<property>
   <name>dfs.namenode.http-address.mycluster.nn1</name>
   <value>node201:50070</value>
</property>
<!-- nn2的http通信地址 -->
<property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>node202:50070</value>
</property>
<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://node201:8485;node202:8485;node203:8485/mycluster</value>
</property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh无秘钥登录-->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/admin/.ssh/id_rsa</value>
</property>
<!-- 声明journalnode服务器存储目录-->
<property>
   <name>dfs.journalnode.edits.dir</name>
   <value>/opt/module/hadoop-2.7.6/data/ha/jn</value>
</property>
<!-- 关闭权限检查-->
<property>
   <name>dfs.permissions.enable</name>
   <value>false</value>
</property>
<!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
<property>
   <name>dfs.client.failover.proxy.provider.mycluster</name>
   <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置自动故障转移-->
<property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
</property> 

【6】mapred-site.xml

vi mapred-site.xml

  

<!-- 指定mr框架为yarn方式 -->
 <property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
 </property>
<!-- 指定mr历史服务器主机,端口 -->
  <property>   
    <name>mapreduce.jobhistory.address</name>   
    <value>node201:10020</value>   
  </property>   
<!-- 指定mr历史服务器WebUI主机,端口 -->
  <property>   
    <name>mapreduce.jobhistory.webapp.address</name>   
    <value>node201:19888</value>   
  </property>
<!-- 历史服务器的WEB UI上最多显示20000个历史的作业记录信息 -->    
  <property>
    <name>mapreduce.jobhistory.joblist.cache.size</name>
    <value>20000</value>
  </property>
<!--配置作业运行日志 --> 
  <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
  </property>
  <property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
    <value>/tmp/hadoop-yarn/staging</value>
  </property>

【7】yarn-site.xml 

vi yarn-site.xml
<!-- reducer获取数据的方式 -->
 <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!--启用resourcemanager ha-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!--声明两台resourcemanager的地址-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>rmCluster</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node202</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node203</value>
    </property>
    <!--指定zookeeper集群的地址-->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node201:2181,node202:2181,node203:2181</value>
    </property>
    <!--启用自动恢复-->
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <!--指定resourcemanager的状态信息存储在zookeeper集群-->
    <property>
        <name>yarn.resourcemanager.store.class</name>    
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>

 

【8】新建slaves

vi slaves

 

node201
node202
node203

2)将配置好的hadoop文件复制到其他节点上

由于hadoop集群需要在每一个节点上进行相同的配置,因此先在node201节点上配置,然后再复制到其他节点上即可。

scp -r /home/soft/hadoop/hadoop-3.1.2/etc/hadoop/ root@node202:/home/soft/hadoop/hadoop-3.1.2/etc/
scp -r /home/soft/hadoop/hadoop-3.1.2/etc/hadoop/ root@node203:/home/soft/hadoop/hadoop-3.1.2/etc/

  

7、启动验证集群

1)格式化Namenode

如果集群是第一次启动,需要格式化namenode

hdfs namenode -format

2)启动Hdfs

start-dfs.sh

 启动报错:

原文地址:https://www.cnblogs.com/yybrhr/p/10382836.html