hadoop3.0全分布式集群搭建
hadoop3.0的全分布式搭建折腾了好久,因为网上基本上都是2.x的搭建教程,期间有好几个坑比较难弄,不过最后还是都解决了,下面简要记录笔者的搭建过程,以及遇到的坑。
搭建环境:CentOS7+hadoop3.0.3+jdk8
集群配置:1台主节点+3台子节点
主节点:hadoop1
子节点:hadoop2 hadoop3 hadoop4
前提准备
- 安装scp服务
- 安装配置jdk
- 配置静态ip地址
- 修改主机名
- 配置主机名和ip地址映射
- 关闭防火墙,设置开机不自启动
注:以上操作在笔者之前的Linux相关笔记中均有介绍
正式搭建集群
- 在所有机器添加统一用户hadoop
useradd hadoop
passwd hadoop - 配置sudo免密
在root用户下
vi /etc/sudoers
在
root ALL=(ALL) ALL
下面添加
hadoop ALL=(ALL) ALL
注:修改完退出root用户,回到hadoop用户 - 创建hadoop相关目录
mkdir -p /home/hadoop/apps/dfs/data
mkdir /home/hadoop/apps/dfs/name
mkdir /home/hadoop/apps/tmp - 上传并解压hadoop-3.0.3.tar.gz到apps目录下
sftp上传
tar -zxvf hadoop-3.0.3.tar.gz -C /home/hadoop/apps/ - 配置hadoop-env.sh
vi /home/hadoop/apps/hadoop-3.0.3/etc/hadoop/hadoop-env.sh
找到#export JAVA_HOME
在下面添加
export JAVA_HOME=/usr/local/jdk - 修改核心配置文件core-site.xml
vi core-site.xml
在configuration标签中添加属性12345678910<configuration><property><name>fs.defaultFS</name> #默认<value>hdfs://hadoop1:9000</value> #hdfs的api接口</property><property><name>hadoop.tmp.dir</name> #hadoop运行时产生临时数据的存储目录<value>/home/hadoop/apps/tmp</value> #该目录的地址</property></configuration> - 配置hadoop的底层存储hdfs-site.xml
vi hdfs-site.xml
在configuration标签中添加属性123456789101112131415161718<configuration><property><name>dfs.namenode.secondary.http-address</name><value>hadoop1:50090</value></property><property><name>dfs.replication</name> #设置副本个数<value>3</value></property><property><name>dfs.namenode.name.dir</name> #设置namende数据存放点<value>file:/home/hadoop/apps/dfs/name</value></property><property><name>dfs.datanode.data.dir</name> #设置datanode数据存放点<value>file:/home/hadoop/apps/dfs/data</value></property></configuration> - 复制并重命名mapred-site.xml.template
cp mapred-site.xml.template mapred-site.xml - 修改配置文件mapred-site.xml
vi mapred-site.xml
在configuration标签中添加属性123456<configuration><property><name>mapreduce.framwork.name</name> #设置mapreduce的运行平台的名称<value>yarn</value> #设置mapreduce的运行平台为yarn</property></configuration> - 修改配置文件yarn-site.xml
vi yarn-site.xml
在configuration标签中添加属性12345678910<configuration><property><name>yarn.resourcemanager.hostname</name> #指定yarn的老大的地址<value>hadoop1</value></property><property><name>yarn.nodemanager.aux-services</name> #reducer获取数据的方式<value>mapreduce_shuffle</value></property></configuration> - 修改workers文件
注:这个文件是填写从节点的主机名称
添加
hadoop2
hadoop3
hadoop4 - 将apps文件夹分发到其他机器
scp -r /home/hadoop/apps hadoop2:/home/hadoop/
scp -r /home/hadoop/apps hadoop3:/home/hadoop/
scp -r /home/hadoop/apps hadoop4:/home/hadoop/ - 配置hadoop的环境变量
sudo vi ~/.bash_profile
添加
HADOOP_HOME=/home/hadoop/apps/hadoop-3.0.3
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME PATH
重新加载
source ~/.bash_profile - 在其他机器同样配置hadoop的环境变量
- 格式化hdfs(没事不要用这个命令,蛋疼)
hdfs namenode -format - 配置hadoop用户免密登录
ssh-keygen
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
ssh-copy-id hadoop4 - 启动hdfs集群
start-dfs.sh
停止hdfs
stop-dfs.sh - 启动yarn集群
start-yarn.sh
停止yarn
stop-yarn.sh - 启动所有服务(不推荐)
start-all.sh
相当于start-dfs.sh+start-yarn.sh - 停止所有服务
stop-all.sh - 在浏览器查看
hadoop1:9870
hadoop1:8088 - 查看该dfs -ls /
- 创建自己的家目录
hdfs 集群根目录
hdfs dfs -mkdir /user/xujie - 测试实例
cd /home/hadoop/apps/hadoop-3.0.3/share/hadoop/mapreduce/
调用jar包计算pi的值,计算100次
hadoop jar hadoop-mapreduce-examples-3.0.3.jar pi 3 100
问题汇总
- 没有配置文件salves
解决方案:因为3.0以后slaves更改名称为workers了 - 启动所有服务,datanode却没有启动
一般是hdfs格式化以后运行了程序,然后又格式化了,好了gg,datanode无法启动,因为name的clusterID和data的clusterID不一致了。
解决方案:- 方案一(推荐-慎用):删除所有机器的/home/hadoop/apps/dfs/data目录,重新再hdfs格式化一遍,不过数据也会全部gg。
- 方案二:把/home/hadoop/apps/dfs/name/current/VERSION中的clusterID复制替换/home/hadoop/apps/dfs/data/current/VERSION中的clusterID
- 启动从节点报错
解决方案:不要在格式化hdfs以后产生了相关数据以后才scp整个hadoop到其他机器,会产生冲突。
最后更新: 2019年01月09日 16:19
原始链接: https://www.lousenjay.top/2018/08/21/hadoop3.0全分布式集群搭建/
转载请注明:SuperIT » hadoop3.0全分布式集群搭建