Hadoop集群系列文章目录
Hadoop集群的搭建(全分布式)——记录一些遇到的错误及其解决方法
目录
前提之前提——软件安装包の准备
前提
①集群范围为westgis117-westgis128(主机名),对应IP地址为10.103.104.117-10.103.104.128;
②用户名为DKF;(详见Linux基础——啥是用户名?机器名??主机名???)
③ntp已配置;(详见Linux基础——利用crontab实现ntp配置)
④主机名与IP地址的映射已配置;(详见Linux基础——主机名与IP地址の映射)
⑤防火墙已关闭。(详见Linux基础——虚拟机の防火墙)
一、集群规划
二、搭建Hadoop集群
在NameNode完成文件的配置,再远程传输至各个DataNode
NameNode:westgis127
DataNode:westgis118~westgis126、westgis128
client node:westgis117
1、安装jdk
##解压安装包
tar -zxvf jdk-8u144-linux-x64.tar.gz
##更改文件夹权限
chmod 755 jdk1.8.0_144
##配置环境变量
vim ~/.bashrc
##在.bashrc中添加:
#Java
export JAVA_HOME=/home/DKF/NoSQL/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
##保存并退出
:wq
在.bashrc中添加内容如下
##使环境变量生效
source ~/.bashrc
##验证jdk是否安装成功
java -version或$JAVA_HOME
验证jdk如下
2、ssh实现免密登陆
==该文仅写出NameNode到其余各个node以及NameNode自身的免密登陆,建议对每个node都配置到其他node以及自身的免密登陆哈,因为之后有大大的好处(信我得永生 ) ==
**方法一**
##产生秘钥和公钥文件
ssh-keygen
##实现到自己的免密登陆
cp id_rsa.pub authorized.keys
##实现到其他node的免密登陆
scp authorized_keys <依次替换为各个node的主机名>:/home/<username>/.ssh
ssh至各个node
##然后更改文件的权限
chmod 600 authorized_keys
对脚本比较感兴趣或已经掌握脚本的同志可以考虑方法二~
**方法二**
##产生秘钥和公钥文件
ssh-keygen
##使用script
vim ssh.sh
##为脚本文件增加可执行权限
chmod +x ssh.sh
##执行脚本
./ssh.sh
我的脚本内容如下
3、配置相关文件
①需要配置的文件包括:core-site.xml、hdfs-site.xml、hadoop-env.sh、slaves、mapred-site.xml、yarn-site.xml;
②除配置文件外,还需要手动创建文件夹。
##解压安装包
tar -zxvf hadoop-2.7.6.tar.gz
##进入配置文件所处目录
cd /home/DKF/NoSQL/hadoop-2.7.6/etc/Hadoop
##查看该目录下都有些啥
ls
/home/DKF/NoSQL/hadoop-2.7.6/etc/Hadoop下的文件
接下来正式开始配置相关文件
①core-site.xml
##编辑命令
vim core-site.xml
##配置内容
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/DKF/NoSQL/hadoop-2.7.6/tmp</value><!--需要手动创建tmp文件夹-->
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://10.103.104.127:9000</value>
</property>
</configuration>
##保存并退出后(:wq),手动创建tmp文件夹
mkdir tmp
在core-site.xml中添加内容如下
创建tmp文件夹如下
②hdfs-site.xml
##编辑命令
vim core-site.xml
##配置内容
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value><!--数据备份数量,默认为3-->
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/DKF/NoSQL/hadoop-2.7.6/tmp/dfs/name</value><!--需要手动创建dfs文件夹以及name文件夹-->
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/DKF/NoSQL/hadoop-2.7.6/tmp/dfs/data</value><!--需要手动创建data文件夹-->
</property>
<property>
<name>dfs.blocksize</name><!--block大小,默认为64MB,即67108864B-->
<value>67108864</value>
</property>
<property>
<name>dfs.namenode.handler.count</name><!--用来处理客户端的远程过程调用及集群守护进程的调用的线程的个数,默认为10-->
<value>10</value>
</property>
</configuration>
##保存并退出后(:wq),手动创建tmp文件夹
mkdir -p tmp/dfs/data
mkdir tmp/dfs/name
##当然,也可以仅通过一条命令实现
mkdir -p tmp/dfs/data tmp/dfs/name
在hdfs-site.xml中添加内容如下
创建name文件夹、data文件夹如下
find命令,查看目录结构(find命令比较实用,建议永久记忆)
③hadoop-env.sh
##获取jdk安装路径(即在~/.bashrc中配置的位置)
$JAVA_HOME
##编辑命令
vim hadoop-env.sh
##配置内容
export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/home/DKF/NoSQL/jdk1.8.0_144
##保存并退出
:wq
首先得获取jdk的安装路径
然后在hadoop-env.sh中添加配置如下
④slaves
slaves中存放的是slave node,即DataNode,不应包含client node和NameNode
在slaves中添加内容如下
由于在slaves中存放的是DataNode的主机名,因此——配置主机名与IP地址的映射是前提!!!
⑤yarn-site.xml
##编辑命令
vim yarn-site.xml
##配置内容
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>10.103.104.127</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>10.103.104.127:8033</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>10.103.104.127:8032</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>10.103.104.127:8031</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>10.103.104.127:8030</value>
</property>
</configuration>
##保存并退出
:wq
在yarn-site.xml中添加内容如下
⑥mapred-site.xml
##编辑命令
vim yarn-site.xml
##配置内容
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
##保存并退出
:wq
首先通过cp命令产生mapred-site.xml文件
然后在mapred-site.xml中添加内容如下
4、配置环境变量
##编辑命令
vim ~/.bashrc
##配置内容
#Hadoop
export HADOOP_HOME=/home/DKF/NoSQL/hadoop-2.7.6
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
##保存并退出
:wq
在.bashrc中添加内容如下
##使环境变量生效
source ~/.bashrc
##验证环境变量是否生效
hadoop version或$HADOOP_HOME
验证环境变量如下
5、将配置好的文件scp至各个DataNode
**方法一**
scp -r ~/NoSQL <依次替换为各个node的主机名>:~
scp ~/.bashrc <依次替换为各个node的主机名>:~
**方法二(使用script)**
vim scp.sh
##为脚本增加可执行权限
chmod +x scp.sh
##执行脚本
./scp.sh
在脚本文件中添加内容如下
(PS:涉及到westgis117的两行是我的失误,client node(westgis117)理论上是不需要接收配置好的文件的)
##ssh到每个DataNode上重启环境变量
source ~/.bashrc
PS:据我的经验,其实这一步不是必不可少的,因为把.bashrc通过scp传输过去之后,虚拟机的环境变量会自动生效!!!but以防万一还是检查一下各个DataNode的环境变量是否生效吧~
况且。。。可以写一个脚本实现ssh到每个DataNode上重启环境变量嘛,感兴趣的同志可以尝试自己搞一个脚本哈
6、格式化NameNode
##格式化集群
hdfs namenode -format
格式化结果如下
7、启动集群
##启动集群
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
启动结果如下
HDFS集群
Yarn
8、查看状态
##查看集群
jps
hadoop dfsadmin -report
##HDFS_web监控界面
http://10.103.104.127:50070/
##Yarn_web监控界面
http://10.103.104.127:8088/
集群状态如下
NameNode
Web监控界面
HDFS
Yarn
9、停止集群
惨痛教训:有启有停,养成习惯,不怕麻烦,再启不难!!!
##一定要先停止Yarn,再停止HDFS(先启后停,后启先停)
$HADOOP_HOME/sbin/stop-yarn.sh
$HADOOP_HOME/sbin/stop-dfs.sh
##by the way也可以使用一个比较暴力的命令
$HADOOP_HOME/sbin/stop-all.sh