目录
强烈推荐使用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
启动成功