“菜狗”花了一周(真的是裂开了)的时间才学会搭建,所以写博客记录一下,也让大家少走一些弯路,文字一定要慢慢看,漏一个,你可能找bug就要花好久好久好久~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在阿里云,腾讯云 ,百度云上分别购买一台服务器(阿里云买的是ESC),为什么在不同的平台购买服务器,因为贫穷。太真实了!
(备注:为了写这篇博客,将本来搭建好的hadoop3,服务器都重装系统了,从零开始)
实现目标:一个亿???不,在三台Ubuntu Server 16.04.1 LTS 64位(三台最好都是一样版本)搭建好hadoop3.2.1集群,其中阿里云的服务器Master,剩下2台分别是Worker1,Worker2。
创建Hadoop用户(在Master,Worker1,Worker2执行)
创建hadoop用户
sudo useradd -m hadoop -s /bin/bash
设置用户密码(输入两次)
sudo passwd hadoop
添加权限
sudo adduser hadoop sudo
切换到hadoop用户
su hadoop
更新apt (在Master,Worker1,Worker2执行)
sudo apt-get update
安装Vim (在Master,Worker1,Worker2执行)
sudo apt-get install vim
安装SSH、配置SSH免密登录 (在Master,Worker1,Worker2执行)
安装SSH
sudo apt-get install openssh-server
配置SSH免密登录
ssh localhost
exit
cd ~/.ssh/
ssh-keygen -t rsa #一直按回车
cat ./id_rsa.pub >> ./authorized_keys
验证免密(不用输入密码啦,和第一次对比)
ssh localhost
安装Java环境 (在Master,Worker1,Worker2执行)
sudo apt-get install default-jre default-jdk
配置环境变量文件
vim ~/.bashrc
在文件首行加入
export JAVA_HOME=/usr/lib/jvm/default-java
让环境变量生效
source ~/.bashrc
验证
java -version
修改主机名(在Master,Worker1,Worker2执行)
sudo vim /etc/hostname
将文件中原有的主机名删除,Master中写入Master,Worker1中写入Worker1,Worker2...(同理)
重启三个服务器(网页上实现)
重启成功后,再次连接会话,发现主机名改变了
注意:一定要切换回hadoop用户
su hadoop
***修改IP映射(在Master,Worker1,Worker2执行)
sudo vim /etc/hosts
Master中
Worker1,Worker2中
注意:由于阿里云只有私网开放端口,所以在Master中采用私网ip
验证(在Master,Worker1,Worker2中都执行,看是否都ping成功(loss=0),如果失败,后面的操作也是不行的)
ping Master -c 3
ping Worker1 -c 3
ping Worker2 -c 3
SSH免密登录其他节点(在Master上执行)
在Master上执行
cd ~/.ssh
rm ./id_rsa* # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa # 一直按回车就可以
cat ./id_rsa.pub >> ./authorized_keys
scp ~/.ssh/id_rsa.pub hadoop@Worker1:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@Worker2:/home/hadoop/
在Worker1,Worker2都执行
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub # 用完就删掉
验证免密登录
ssh Worker1
exit
ssh Worker2
exit
注意:一定要在master下执行,不要验证完Worker1后忘记退出(踩坑)
安装hadoop3.2.1(在Master中执行)
下载网址:hadoop3.2.1下载网址
下载好,之后通过Xftp上传到Master的/home/hadoop中
安装
解压
cd /home/hadoop
sudo tar -zxf hadoop-3.2.1.tar.gz -C /usr/local #解压
cd /usr/local/
sudo mv ./hadoop-3.2.1/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop # 修改文件权限
验证
cd /usr/local/hadoop
./bin/hadoop version
***配置hadoop环境 (易错环节)
配置环境变量
vim ~/.bashrc
在首行中写入
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
使得配置生效
source ~/.bashrc
创建文件目录(为后面的xml做准备)
cd /usr/local/hadoop
mkdir dfs
cd dfs
mkdir name data tmp
cd /usr/local/hadoop
mkdir tmp
配置hadoop的java环境变量
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/yarn-env.sh
两个的首行都写入
export JAVA_HOME=/usr/lib/jvm/default-java
配置workers
cd /usr/local/hadoop/etc/hadoop
vim workers
删除掉原有的localhost,因为我们有2个worker,就把这2个的名字写入
Worker1
Worker2
配置 core-site.xml
vim core-site.xml
因为我们只有一个namenode,所以用fs.default.name,不采用fs.defalutFs
其次确保/usr/local/hadoop/tmp这个目录存在
fs.default.name
hdfs://Master:9000
hadoop.tmp.dir
/usr/local/hadoop/tmp
配置 hdfs-site.xml
vim hdfs-site.xml
dfs.namenode.secondary.http-address确保端口不要和core-site.xml中端口一致导致占用
确保/usr/local/hadoop/dfs/name :/usr/local/hadoop/dfs/data 存在
因为我们只有2个Worker,所以dfs.replication设置为2
dfs.namenode.secondary.http-address
Master:9001
dfs.namenode.name.dir
file:/usr/local/hadoop/dfs/name
dfs.datanode.data.dir
file:/usr/local/hadoop/dfs/data
dfs.replication
2
配置mapred-site.xml
vim mapred-site.xml
mapreduce.framework.name
yarn
配置 yarn-site.xml
vim yarn-site.xml
yarn.resourcemanager.hostname
Master
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.vmem-check-enabled
false
将hadoop压缩
cd /usr/local
tar -zcf ~/hadoop.master.tar.gz ./hadoop #压缩
cd ~
复制到Worker1中
scp ./hadoop.master.tar.gz Worker1:/home/hadoop
复制到Worker2中
scp ./hadoop.master.tar.gz Worker2:/home/hadoop
温馨提示:由于是不同平台的服务器,复制时间比较久,请耐心等待
在Worker1、Worlker2上执行
解压
sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local #解压
sudo chown -R hadoop /usr/local/hadoop #修改权限
首次启动需要先在 Master 节点执行 NameNode 的格式化,之后不需要
hdfs namenode -format
(注意:如果需要重新格式化 NameNode ,才需要先将原来 NameNode 和 DataNode 下的文件全部删除!!!!!!!!!)
#看上面的文字,不要直接复制了
rm -rf $HADOOP_HOME/dfs/data/*
rm -rf $HADOOP_HOME/dfs/name/*
启动 (在Master上执行)
start-all.sh
mr-jobhistory-daemon.sh start historyserver
Master中,出现Warning不影响
jps
Master出现下面5个,Worker1和Worker2出现下面3个,表示搭建成功!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
关闭hadoop集群(在Master上执行)
stop-all.sh
mr-jobhistory-daemon.sh stop historyserver
***易错点提醒(如果发生错误,来这里看看)
发生错误的时候,查看日志
cd /usr/local/hadoop/logs
ls
哪个节点不在,看对应的日志文件
比如没有namenode的存在
vim hadoop-hadoop-namenode-Master.log
按 shift+G,到日志的最后一行,然后,找出现ERROR的地方
比如我就遇到
Problem binding to [Master:9000] java.net.BindException: Cannot assign requested address;
主要是因为易错点提醒2中
参考文献
http://dblab.xmu.edu.cn/blog/install-hadoop/
http://dblab.xmu.edu.cn/blog/install-hadoop-cluster/
https://zhuanlan.zhihu.com/p/59805371
终于写完了!!!
正在上传…重新上传取消正在上传…重新上传取消