赞
踩
本文这里的hadoop3.1.3的集群仅仅指hadoop本身的搭建,不涉及到其他框架整合;Flink实时电商实战项目中HDFS部分是基于此版本,B站上有这个版本的安装视频:
Flink实时电商项目实战
项目框架链接
提取码:whqf
gitee地址
VMware16(注意不要使用15,容易蓝屏,如果出现蓝屏,大概率是系统兼容性问题,建议改用16,激活码搜索即可,很方便)
安装硬件,安装虚拟机;
账户:root 密码:root
用户名:chenxu 密码:root
配置IP时要注意:VMware、win10、Hadoop都要配置;
Hadoop静态IP地址更改
进入终端命令行:su root (输入密码)
输入命令:vim etc/sysconfig/network-scripts/ifcfg-ens33
dhcp表示动态获取IP地址,改为static;
增加内容:
#IP地址
IPADDR=192.168.10.100 #100表示hadoop100
#网关
GATEWAY=192.168.10.2
#域名解析器
DNS1=192.168.10.2
输入完之后按一下ESC进入EX模式,输入wq保存并退出;
配置主机名称:vim /etc/hostname
配置Linux克隆机主机名称映射hosts文件,打开/etc/hosts;(这么做的目的是为了让)以后修改IP时方便修改;
加入以下内容:
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
远程控制Xshell安装完毕后,连接远程服务器;
账号密码:root;
配置主机名称映射,进入"C:\Windows\System32\drivers\etc"路径下的hosts文件中,加入之前加入的IP和主机名称内容;
可以先修改hosts文件的属性,改为可更改后再修改;(也可以直接复制出来修改,修改完之后再粘贴回去)
下载Xftp(从windows传输文件到虚拟机种);
安装epel-release;
yum install -y epel-release
关闭防火墙自启动:
创建一个系统用户,并修改用户密码:(安装时已创建,不需要再创建)
useradd 用户名
passwd 密码
给用户赋予root权限:
输入命令vim /etc/sudoers
找到%wheel ALL=(ALL) ALL这一行,在下一行加上
用户名 All=(ALL) NOPASSWD:ALL
其中,nopass表示以后不需要密码,可获得root权限,也可以不加NOPASS;
后续使用用户时,加上sudo,有root效果;
切换root账号:
卸载对应安装的JDK
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
其中rpm -qa | grep -i java命令是一个遍历查询指令;
重启虚拟机;
先克隆3台:hadoop100、hadoop102、hadoop103、hadoop104;
先关闭现行的虚拟机,再克隆;
在VMware列表中删除,并不会直接删除源文件,要选择在磁盘中删除;
进入新生成的克隆虚拟机,进入root权限后,只需要再次输入命令
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改IPADDR,之后输入命令vim /etc/hostname 修改hostname;
输入命令 vim /etc/hosts(之前已经修改完毕,可以不用动);
部署完之后,拷贝至其他;
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
解压文件至…目录;
配置JDK环境变量;
cd /etc/profile.d进入特定文件夹中,创建一个文件sudo vim my_env.sh,不要更改原文件;
进入存放JDK的module目录下,运用pwd命令找到JDK的路径;
在my_env.sh文件中写上:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=
P
A
T
H
:
PATH:
PATH:JAVA_HOME/bin
接下来
source /etc/profile
解压安装
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
配置环境变量
找到hadoop的目录,pwd获得路径;
cd /etc/profile.d/my_env.sh 进入之前创建好的文件,
添加内容:
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=
P
A
T
H
:
PATH:
PATH:HADOOP_HOME/bin
export PATH=
P
A
T
H
:
PATH:
PATH:HADOOP_HOME/sbin
然后输入source /etc/profile
注意etc、bin、sbin目录,以后要用到;
1、准备3台客户机
2、安装JDK/etc
4、安装hadoop
5、配置环境变量
6、配置集群
7、单点启动
8、配置ssh
9、群起并测试集群
hadoop102已经准备好了,现在的目标就是将hadoop102拷贝至其他服务器;
1、具体命令行为:scp -r $文件路径/名称 目的地用户@主机:目的地路径/名称;
scp -r hadoop-3.1.3 chenxu@hadoop103:/opt/module(从102复制到-103)
注意:如果其他服务器没有对应文件权限,赋予其module777权限;
2、也可以去要粘贴的地址,将文件拉过来:
scp -r chenxu@hadoop102:/opt/module/hadoop-3.1.3 ./(从103把102的信息拉过去)
即在之前的命令行后 加一个要粘贴的地址;文件名也改到第一个地址后;
3、scp -r chenxu:hadoop102:/opt/module/* chenxu@hadoop104:/opt/module/(从103把102的信息复制到104)
案例实操:
1、前提:hadoop102、hadoop103、hadoop104都已经创建好的/opt/module,/opt/software两个目录,并且已经把这个目录修改为chenxu:chenu;
用于备份和镜像;(只复制不用的文件)
rsync -av 内容 目的地用户@主机:路径或者文件名称
实操:删掉hadoop-3.1.3目录下的wcinput和wcoutput文件,再从hadoop102同步过去:
用法:xsync + 要同步的文件名;
期望脚本在任何路径下都能使用(脚本要放在声明了全局环境变量的路径中):
echo $PATH查看全局变量位置:为了简单,这里直接用已经存在的路径;在/usr/local/bin目录下创建bin目录,存放脚本(vim xsync);(脚本执行地址 /usr/local/bin)
脚本实现:
#!/bin/bash #1.判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2.遍历集群所有机器 for host in hadoop102 hadoop103 hadoop104 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
chmod 777 xsync 赋予权限;
运行,发现其他几台服务器创建成功;
分发环境变量;
sudo xsync /etc/profile.d/my_env.sh
注意:如果是用sudo(即root权限)来执行,可能会找不到命令,此时可以用绝对路径:sudo ./bin/xsync /etc/profile.d/my_env.sh这种格式;
然后在103和104服务器上source一次;
ssh +主机 进入对应主机,exit退出;
免密配置方法:
进入/home/chenxu用户目录----ls -al查看虽有隐藏文件----发现有ssh文件,里面有一个known-hosts(注意,只有用过,即ssh访问过的文件才有)—输入命令行ssh-keygen -t rsa,然后三次回车;
注意:
[root@localhost ~]``# cd /root/.ssh/ 【root用户就在root目录下的.ssh目录】
[root@localhost ~]``# cd /home/omd/.ssh/ 【普通用户就是在家目录下的.ssh目录】
3个集群都配置一次:
ssh-copy-id hadoop102,ssh-copy-id hadoop103,ssh-copy-id hadoop104,配置完成;
然后对hadoop103、hadoop104做同样操作;
或者也可以这样做:(推荐)
也可以把每一个账户的root账号进行同样的ssh免密配置,这里只对hadoop102的root做操作;(直接cd进入根目录,找到.ssh/目录操作)
现在再调用xsync,可以不用再输出密码;
NameNode、SecondaryNameNode、ResourceManager不要安装再同一台服务器;
配置前两个;
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
2、HDFS配置文件:hdfs-site.xml;
<!-- nn web端访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn wen端访问地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
9870和9868分别为两者以后的访问端口;
(9868一般不需要用,但是9870使用频率会很高,记住这个端口号)
yarn-site.xml
<!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property>
mapred-site.xml;
<!-- 指定MapReduce -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
接下来把配置好的hadoop分发到hadoop103和hadoop104;
找到/opt/module/hadoop-3.1.3/etc/hadoop目录下的workers文件,添加内容:(作为主机名称)
hadoop102
hadoop103
hadoop104
注意:不能有空格和空行
如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,NameNode和DataNode的id会不一致,集群找不到以往数据,会报错;所以需要格式化NameNode的话,一定要先停止namenode和datanode,并且删除所有机器的data和logs目录(再module/hadoop-3.1.3目录下,再进行格式化;
初始化:hdfs namenode -format,初始化后hadoop-3.1.3目录下多出data和logs文件夹;(data/dfs/name/current下可以看到镜像文件和Version,即当前版本的版本号)
启动集群:/opt/module/hadoop-3.1.3/sbin/目录下
启动 start-dfs.sh;
找到各自服务器的hadoop-3.1.3/jps目录下的文件是否与之前要配置NameNode、SecondaryNameNode和ResourceManager的位置一致;
如果其他文件创建失败,可能是权限不够导致的;
接下来在配置了ResourcrManager的节点(hadoop103)上启动Yarn;
sbin/start-yarn.sh;
此时我们可以得到两个web页面:
hadoop102:9870(Utilities—Browse Directory);hadoop103:8088(yarn资源调度监控网);
在hadoop-3.1.3目录下:
hadoop fs -mkdir /input 上传并建立一个目录
hadoop fs -put wcinput/word.txt /wcinput 上传本地文件到/wcinput中,如果接收目录不存在,会自动创建;
上传文件之后,可以下载;tail the file可以查看文件信息;
上传大文件:hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz
实际上这些数据只是在页面上展示,而不是存储在这里,实际存储在DataNode中,而DataNode的数据存储在hadoop-3.1.3/data目录下;
具体路径为:
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1173909124-192.168.10.102-1616131443559/current/finalized/subdir0/subdir0;
如果涉及到解压型文件,可以用文件名 + >> +文件类型的形式来追加
比如:cat blk_1073741826>> tmp.tar.gz,cat blk_1073741826>> tmp.tar.gz就取出来了,解压之后就是之前上传的JDK文件;
例子:执行一个wordcount程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput(集群模式下的计算 输入和输出结果都需要在集群的路径中) /wcoutput(观察9870端口的Browse Directory窗口的路径信息)
运行过程中观察yarn提供的网站(8088端口),发现有任务正在进行;
yarn的服务端口号是8032,即提交任务的端口是8032;
配置在mapred-site.xml文件中;
在原基础上加上:
<!-- 历史服务器地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
然后分发给其他服务器:xsync mapred-site.xml
重启一下yarn;
进入hadoop102 ,bin/mapred --daemon start historyserver;(mapred是命令 在bin目录下 daemon表示守护进程或者说是后台启动;historserver是历史服务器)
查看是否启动:jps(JobHistoryServer)
启动之后,可以在页面的History选项中查看历史状态,configuration中可以擦看历史参数状态;
比如不小心把三个服务器的某一data文件删了:
1:先kill进程;(停掉所有的集群)
2:删除所有服务器的data和logs;
3:进行初始化;
4:启动集群;
之所以要全部删除再初始化,是因为每一个DataNode和NameNode都有自己的ID,是唯一对应的,如果信息不全部删除,是无法匹配的;
好处:查看程序运行情况,方便开发调试;
概念:应用运行完成以后,将程序运行日志上传到HFDS系统上,所有服务器日志聚集到HFDS,用户可以直接查看;
注意:开启日志查看功能,需要重新启动NodeManager,ResourceManager,HistoryServer;
具体步骤:
进入hadoop102服务器的/etc/hadoop目录下;
配置yarn-site.xml
添加如下设置:
<!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://hadoop102:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
之后分发配置 xsync yarn-site.xml
前往hadoop102服务器关闭NodeManager,ResourceManager和HistoryServer:
mapred --daemon stop historyserver
前往hadoop103服务器hadoop-3.1.3目录下关闭yarn:
sbin/stop-yarn.sh
开启yarn:
sbin/start-yarn.sh
再次启动NodeManager,ResourceManager和HistoryServer:
mapred --daemon start historyserver
这样后续执行命令就会自动生成日志并保存;
可以进入hadoop102服务器的hadoop-3.1.3/目录下执行一个命令hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output2试试;
各个模块分开启动/停止(配置ssh是前提)(常用) 整体启动/停止 HDFS start-dfs.sh/stop-dfs.sh 整体启动/停止YARN start-yarn.sh/stop-yarn.sh 各个服务逐一启动停止: 分别启动/停止HDFS组件: hdfs --daemon start/stop namenode/datanode/secondarynamenode; 启动/停止YARN: yarn --daemon start/stop resourcemanager/nodemanager;
进入hadoop102根目录 cd /usr/local/bin----
vim myhadoop.sh;创建好之后先赋予权限,方便修改;
#!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit; fi case $1 in "start") echo "=============启动 hadoop集群 =============" echo " --------------启动hdfs --------------" ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh" echo " --------------启动yarn --------------" ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh" echo "-------------- 启动historyserver --------------" ssh hadoop104 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver" ;; "stop") echo " ===========关闭 hadoop集群" echo "------------关闭historyserver ----------------" ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver" echo "-------------关闭yarn ---------------------" ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh" echo " ------------关闭hdfs --------------------" ssh hadoop104 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh" ;; *) echo "Input Args Error..." ;; esac
myhadoop.sh start/stop控制启动和停止;
进入hadoop102根目录 cd /usr/local/bin----
sudo vim jpsall:
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =========== $host ============
ssh $host jps
done
jpsall直接启动即可;
然后利用xsync分发程序,记得开放其他服务器bin目录的权限
注意,这里最好不要去固定你的集群时间,让他自动连网同步即可,如果集群时间不一致:
下载ntpd服务,可以自行搜索;
先查看一下状态
systemctl status ntpd
再重启一下服务
sudo systemctl start ntpd
这里会涉及到后续hbase的启动问题,有时候hbase不能同时启动3个region server并不是其他问题,就是时间不一致导致的;
hadoop3.x: - HDFS NameNode 内部通讯接口:8020/9000/9820 - HDFS NameNode 对用户的查询接口:web端9870(服务端口号9820) - Yarn查看任务运行情况:web端8088(服务端口号8032) - 历史服务器: web端19888(不用直接进入,点击history选项进入)(服务端口号10020) hadoop2.x: - HDFS NameNode 内部通讯接口:8020/9000 - HDFS NameNode 对用户的查询接口:50070 - Yarn查看任务运行情况:8088 - 历史服务器 19888 2181:zookeeper的端口号: 2888:单个服务器与集群Leader服务器交换信息的端口号 3888:执行选举时服务器相互通信的端口号 6379:Redis的端口号 16010:HBASE的web端口号 16000:HBASE的服务端口号 8485:journalnode默认的端口号 9092:kafka的端口号 41414:flume监控的端口
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。