Centos下配置Hadoop集群(手把手教学)

强烈推荐使用Centos配置hadoop集群

之前用Ubuntu配置过一次Hadoop集群,但是遇到了各种各样的问题,装了两天都没装好。最后快结束的时候放弃了,因为是真的找不到问题解决方法。问题超级多。
有用Ubuntu安装的可以参考一下。
https://blog.csdn.net/weixin_45468845/article/details/106404724

现在我换了Centos配置hadoop集群,弄不好就退学。
假设虚拟机已经安装好了。
我的版本是centos6.8,安装系统可以参考下面这篇博客,傻瓜式手把手教学。很详细。
注意!!!
不要选择最小安装,按照教程一步一步来,我贪图方便选择了最小安装,网络一直配置不好。
https://blog.csdn.net/Podge/article/details/79182615?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159117850219724835806096%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159117850219724835806096&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~pc_rank_v3-3-79182615.first_rank_ecpm_v1_pc_rank_v3&utm_term=%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%AE%89%E8%A3%85centos6.8

配置CentOs

刚安装好的系统一片空白。什么都没有。
第一步应该做什么呢?

配置静态ip

这是比较重要的一步。没有配置静态ip可以说分布式集群是搭建不好的。
如何配置??
网上说的很多,也很复杂,我计算机网络学的知识都忘得差不多了,但是像我下面这样做也可以。
先说明一下,我用的是手机的热点。
1)修改虚拟机为桥接模式。
2)直接进入Centos打开终端,输入:

vim /etc/sysconfig/network-scripts/ifcfg-eth0

刚开始进去不是这样的,这是我已经配置成功的文件,前面四行不需要动,动了就没了。
IPADDR是你想要配置的ip地址,自己想怎么输入就怎么输入,不过最后三位数不要设太小或太大,100左右即可。
其他的照抄。
在这里插入图片描述
然后:wq保存退出。
重启网络:

service network restart

在这里插入图片描述
网络配置成功!
对其他节点也这样配置就可以啦!
查看ip地址:ifconfig
可以看到,192.168.43.100 J就是刚刚配置的地址
在这里插入图片描述

这里我将hadoop集群的三个节点地址分别设为100,101,102

关闭防火墙

基本语法

service服务名 start(功能描述:开启服务)
service服务名 stop(功能描述:关闭服务)
service服务名 restart(功能描述:重新启动服务)
service服务名 status(功能描述:查看服务状态)

关闭防火墙
临时关闭防火墙
(1)查看防火墙状态

service iptables status

(2)临时关闭防火墙

service iptables stop

2.开机启动时关闭防火墙
(1)查看防火墙开机启动状态

chkconfig iptables --list

(2)设置开机时关闭防火墙

chkconfig iptables off

免密登录

免密登录也是一个很重要的环节
免密登录原理图:
在这里插入图片描述
1)生成公钥:

ssh-keygen -t rsa

按三下回车键,就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥保存到你想要免密登录的节点中,就可以免密登录。
那么如何保存呢??

ssh-copy-id 想要免密登录的节点IP地址

会提示你输入yes/on
输入yes即可。
在host1中:

ssh-copy-id host1
ssh-copy-id host2
ssh-copy-id host3

在host2中:

[root@host2]# ssh-copy-id host1
[root@host2]# ssh-copy-id host2
[root@host2]# ssh-copy-id host3

在host2中:

[root@host2]# ssh-copy-id host1
[root@host2]# ssh-copy-id host2
[root@host2]# ssh-copy-id host3

编写集群分发脚本xsync(仅供参考)

该文件最好放在环境变量目录下
1、需求:循环复制文件到所有节点的相同目录下(只对差异文件做更新)
2、脚本内容:

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称
p1=$1
fname='basename $p1'
echo fname=$fname

#3 获取上级目录到绝对路径
pdir='cd -P $(dirname $p1); pwd'
echo pdir=$pdir

#4 获取当前用户名称
user='whoami'


#5 循环
for((host=1; host<4; host++)); do
        echo ------------------- centos$host --------------
        rsync -rvl $pdir/$fname $user@centos$host:$pdir
done

这种方式看起来很好,但是我不会用,因为我不懂shell 编程,我推荐下一种传输方法,虽然麻烦了点,但是稳妥。

scp 传输

sudo scp -r 待传输文件 目标节点ip地址:/apps/

详情可以参考,感觉这个还是比较详细的
https://blog.csdn.net/weixin_45468845/article/details/105677691

配置jdk

建议在虚拟机的根目录下建立apps 文件,直接将所有文件都放在/apps/目录下。
jdk都是一样的,把自己的jdk文件传输过去就可以了(我的jdk文件名字就叫java)

cd $JAVA_HOME
sudo scp -r java 目标节点ip:/apps

配置环境变量

su root
vim ~/.bashrc

这里先切换到root,在编辑文件,不要直接 sudo vim ~/.bashrc
因为root用户和普通用户对应的~/.bashrc文件不一样
追加:
在这里插入图片描述
使文件生效:

source ~/.bashrc

输入java,会出现:

在这里插入图片描述
jdk配置成功!
对三台节点都这样操作。

配置Hadoop

首先从官网下载hadoop的压缩包,我的是3.2.1版本,修改里面一些文件配置:
将hadoop压缩包解压到/apps/目录下。
进入hadoop 配置目录:
cd /apps/hadoop/etc/hadoop

配置文件

需要配置一下几个文件:
核心配置文件:
core-site.xml

HDFS配置文件:
hadoop-env.sh
hdfs-site.xml

YARN配置文件:
yarn-env.sh
yarn-site.xml

MapReduce配置文件:
mapred-env.sh
mapred-site.xml

core-site.xml :

<configuration>
  <property>
      <name>hadoop.tmp.dir</name>
      <value>/data/tmp/hadoop/tmp</value>
  </property>
  <property>
      <name>fs.defaultFS</name>
      <value>hdfs://host1:9000</value>
  </property>
      <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>

</configuration>

hadoop-env.sh

#java
export JAVA_HOME=/apps/java

hdfs-site.xml

<configuration>
  <property>
     <name>dfs.namenode.name.dir</name>
     <value>/data/tmp/hadoop/hdfs/name</value>
  </property>
  <property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>host3:50090</value>
  </property>
  <property>
      <name>dfs.datanode.data.dir</name>
      <value>/data/tmp/hadoop/hdfs/data</value>
  </property>
  <property>
      <name>dfs.replication</name>
      <value>3</value>
  </property>
  <property>
      <name>dfs.permissions.enabled</name>
      <value>false</value>
  </property>
</configuration>

yarn-env.sh

#java
export JAVA_HOME=/apps/java

yarn-site.xml

<configuration>
<!-- Site specific YARN configuration properties -->
 <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
 </property>
 <property>
     <name>yarn.resourcemanager.hostname</name>
     <value>host2</value>
 </property>
</configuration>

mapred-env.sh

#java
export JAVA_HOME=/apps/java

mapred-site.xml

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

因为我安装的版本是hadoop3.2.1,和hadoop2.xx稍有区别。如果是hadoop2.xx,没有workers,而是slaves
workers

sudo vim workers 

添加:

host1
host2
host3

创建目录

sudo mkdir -p /data/tmp/hdfs
sudo mkdir -p /data/tmp/name

配置环境变量

和前面java一样,打开~/bashrc文件,追加

#hadoop
export HADDOP_HOME=/apps/hadoop
export PATH=$HADOOP_HOME/bin:$PATH

:wq保存退出,

source ~/bashrc

使文件生效。
输入

hadoop version

在这里插入图片描述

ok!
只需要在一个节点配置好之后,将文件传输到其他节点就可以了。

群起集群

1)如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)

cd /apps/hadoop/bin
hdfs namenode -format

2)启动:

cd /apps/hadoop/sbin
sudo ./start-all.sh

启动成功

猜你喜欢

转载自blog.csdn.net/weixin_45468845/article/details/106530143
今日推荐