目录
前言
一、 完全分布式集群搭建
1、克隆虚拟机
2、安装jdk、hadoop
【1】使用远程连接工具将jar包导入/opt/software目录下
【2】将jdk和hadoop解压到/opt/module目录下
【3】配置环境变量
【4】hadoop目录结构
3、完全分布式集群搭建
3.1 集群分发脚本
3.2 SSH免密登录
3.3 集群部署
3.4 启动集群
3.5 集群测试
总结
前言
大数据之hadoop系列笔记第三篇——集群搭建。从模板机克隆三台机器用来搭建hadoop集群,安装jdk、hadoop配置文件,配置环境变量到启动集群详细搭建步骤
【1】利用模板机克隆三台机器hadoop02、hadoop03、hadoo04 模板机地址 ,克隆时需要关闭hadoop01 即关机状态
【2】修改hadoop02、hadoop03、hadoop04三台机器的主机名称,静态ip地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
【3】分别ping三台机器看看是否能正确连接
打开cmd 输入 ping hadoop02 依次测试
这里使用xshell 来到software下 将jar包文件拖进窗口即可完成传输导入
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
(1)查看jdk的完整路径和hadoop的完整路径
(2)新建/etc/profile.d/my_env.sh文件 这里用来存放jdk的全局环境变量和hadoop的全局环境变量
原因:在/etc/profile文件 会循环遍历/ect/profile.d/下的后缀为.sh的文件并执行相关操作
①、cd /etc/profile.d
②、sudo vim my_env.sh
③、添加如下内容:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.0.0_212
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
(3)source /etc/profile 使环境变量生效
(4)查看是否配置成功
(1)bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
(3)lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
(4)sbin 目录:存放启动或停止 Hadoop 相关服务的脚本
(5)share 目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例
我们的hadoop集群总共有三台机器,每台机器都需要安装jdk和hadoop,那么我们是不是需要进入到hadoop03 和hadoop04中重复上面的操作安装jdk、hadoop并配置环境变量呢?答案肯定不是,效率低不说还贼啦累,所以引出集群分发脚本,请客观接着往下看!
【1】scp安全拷贝
(1)scp可以实现服务器与服务器之间的数据拷贝
(2)基本语法
scp -r $pdir/$fname $user@$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
(3)实操
① 在hadoop02上将hadoop02上的/opt/module/jdk1.8.0_212目录拷贝到hadoop03中 (推送)
scp -r /opt/module/jdk1.8.0_212 zhou@hadoop04:/opt/module
② 在hadoop03上将hadoop02中的/opt/module/hadoop-3.1.3目录拷贝到hadoop03中 (拉取)
scp -r zhou@hadoop03:/opt/module/hadoop-3.1.3 /opt/module/
③ 将jdk、hadoop安装到hadoop04中。思考可不可以在hadoop03上将hadoop02中的jdk和hadoop拷贝到hadoop04中
scp -r zhou@hadoop02:opt/module/* zhou@hadoop04:/opt/module/
这里使用安全拷贝的过程需要输入密码
【2】rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接
rsync和scp的区别:rsync做文件的复制要比scp速度快,rsync只对差异文件更新,scp则是 完 整的复制
基本语法:
rsync -av $pdir/$fname $user@host:$pdir/$fname
命令 参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径、名称
参数说明:
-a 归档拷贝
-v 显示复制过程
【3】xsync集群分发脚本
循环复制文件到所有节点的相同目录下 采用rsync xsync要同步的文件名称,期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
脚本实现:
(1)在/home/zhou/bin目录下创建sxync文件
cd /home/zhou
mkdir bin
cd bin
vim xsync
(2)在文件中添加以下代码:
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop02 hadoop03 hadoop04
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
(3)修改xsync具有执行权限 chmod +x xsync
(4) 测试脚本
xsync /home/zhou/bin
(5) 将脚本复制到/bin中,以便全局调用sudo cp xsync /bin/
(6) 将环境变量的配置文件同步分发到hadoop03 hadoop04中 root所有者
sudo ./bin/xsync /etc/profile.d/myenv.sh
把jdk和hadoop的环境变量配置文件也同步到0405中,要source一下文件才会生效才能运行java命令
(7)让环境变量生效 source /etc/profile
至此集群同步分发脚本配置完成,但同样又有新问题产生,每次在使用scp或者同步分发时,否需要我门重复的输入每台机器的登录密码,相当麻烦,那么能不能减少这样无意义输密码的无脑行为呢?SSH免密登录上场
【1】配置SSH
ssh的基本语法
ssh 另一台机器的IP地址
【2】生成公钥和私钥
cd /home/zhou/.ssh
ssh-keygen -t rsa
然后敲三个回车就会生成两个文件id_rsa(私钥) id_rsa.pub(公钥)
【3】将公钥拷贝到免密登录的目标机器上 以hadoop03为例 要将公钥分别拷贝到hadoop02 hadoop03 hadoop04中
ssh-copy-id hadoop03
还需要在另外两台机器上采用账户zhou配置免密登录到hadoop02 hadoop03 hadoop04上,重复刚才的操作即可
还需要在 hadoop02上采用 root 账号,配置一下无密登录到 hadoop02、hadoop03、hadoop04;
【4】有了免密登录之后我们在使用xsync同步分发效率就会提高
【1】集群部署规划
nn 和 2nn 不要放在同一台机器上,因为两个占用的内存都大
resourceManager也很好内存,所以一台是NameNode,一台是ResourceManager,一台是SecondaryNameNod
我这里规划 hadoop02--> NameNode ;hadoop03--> ResourceManager;hadoop04--> 2nn
【2】配置文件说明
hadoop配置文件分两类:默认配置文件和自定义配置文件,用户想修改某一默认配置值时,才需要修改自定义配置文件。更改相应属性
(1)默认配置文件
要获取的默认文件 文件存放在 Hadoop 的 jar 包中的位置
[core-default.xml] hadoop-common-3.1.3.jar/core-default.xml
[hdfs-default.xml] hadoop-hdfs-3.1.3.jar/hdfs-default.xml
[yarn-default.xml] hadoop-yarn-common-3.1.3.jar/yarn-default.xml
[mapred-default.xml] hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml
(2)自定义配置文件
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置
【3】配置集群
(1)核心配置文件core-site.xml
fs.defaultFS
hdfs://hadoop02:8020
hadoop.tmp.dir
/opt/module/hadoop-3.1.3/data
hadoop.http.staticuser.user
atguigu
(2)HDFS配置文件
dfs.namenode.http-address
hadoop02:9870
dfs.namenode.secondary.http-address
hadoop04:9868
(3)YARN配置文件
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop03
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME
(4)MapReduce配置文件
mapreduce.framework.name
yarn
(5)在集群上分发已经配置好的hadoop的配置文件
(6)查看是否分发成功
(7)配置workers
vim /opt/module/hadoop-1.3.1/etc/hadoop/workers
添加内容:
hadoop02
hadoop03
hadoop04
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
(1)如果集群是第一次启动,需要在 hadoop03 节点格式化 NameNode(注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停 止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。
(2)hdfs namenode -format 格式化namenode
(3)在hadoop02上 启动HDFS sbin/start-dfs.sh
(4)在hadoop03上启动YARN sbin/start-yarn.sh
以上操作都是在hadoop目录下执行相关命令
(5)在web端查看HDFS的namenode 浏览器中输入:http://hadoop02:9870
(6)web端查看YARN 浏览器输入:http://hadoop03:8088
(1)在集群上创建文件夹
cd $HADOOP_HOME
hadoop fs -mkdir /Atest
(2)在web上刷新查看
(3)新建一个文件 vim Atest.txt
(4)将文件上传至hdfs
hadoop fs -put Atest.txt /Atest
(5)web端查看 (需要刷新页面)
至此完全分布式集群搭建完成!
本篇文章主要记录从零搭建hadoop完全分布式集群
【1】虚拟的克隆
【2】jdk、hadoop的安装与环境变量的配置 my_env.sh
【3】同步分发脚本的编写 scp安全拷贝---> rsync 远程同步工具---> xsync集群分发脚本
【4】SSH免密登录,因为在同步分发时发现需要重复输入密码效率低,引进免密登录
【5】集群部署 集群规划 +hadoop配置文件的修改
【6】启动集群 采用单点启动方式
【7】集群测试 文件夹的创建 小文件的上传