20220703
1.Hadoop是什么
Hadoop是apache开发的分布式系统基础架构
Hadoop主要解决的问题是海量数据的存储和计算(重点)
广义上讲,Hadoop不单指一个框架,指的是整个Hadoop生态圈
2.Hadoop优势
高可靠性:在不同的机器上有多个数据副本
高扩展性:可动态的扩展节点
高效性:并行工作
高容错性;能够自动将失败任务重新分配
3.组成
MapReduce负责计算
Yarn负责资源调度
HDFS负责存储
还有其他辅助工具
4.HDFS架构
NameNode负责存储元数据
SecondryNameNode负责备份NameNode,当NN出现故障时,由2NN接替管理工作
DataNode负责存储文件块数据,以及块数据的校验和。
5.Yarn架构
ResourceManager负责整个集群的资源调度工作(RM),整个集群的老大
NodeManager负责单节点的资源调度工作(NM),单节点的老大
节点中还存在ApplicationMaster(AM)和Container,前者负责单个任务,后者相当于独立的服务器(微服务),封装了任务运行所需要的各种资源;
一般一个容器最小的内存为1G,1个CPU
6.MapReduce架构
Map阶段将任务分解
Reduce阶段将结果汇总
7.三者间的配合工作(个人理解)
客户端传来任务,RM查看NN后,负责安排各个节点的NM来创建容器,容器类型有负责AM,MapTask和ReduceTask,各个容器去各自节点的DN执行任务,最后反馈给ReduceTask的容器,并记录在NN,然后给客户端。
相当于客户端发送请求,Yarn查看HDFS后,分配MapReduce去具体执行,执行完成后将结果返回给HDFS,并反馈给客户端;
8.大数据生态体系
数据库(结构化数据)---Sqoop数据传递---HDFS文件存储---YARN资源管理---MapReduce离线计算(基于硬盘)---Hive数据查询---Oozie任务调度
文件日志(半结构化数据)---Flume日志收集---HDFS文件存储---HBase非关系型数据库---YARN资源管理---Spark Core内存计算---Spark Milb数据挖掘、Spark Sql数据查询{这两个也是离线计算};Spark Streaming实时计算、Storm实时计算、Flink{这三个是实时计算的};---Azkaban任务调度
视频、PPT等(非结构化数据)---Kafka消息队列
数据来源层---数据传输层---数据存储层---资源管理层---数据计算层---任务调度层---业务模型层
1)Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
2)Flume:Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;
3)Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统;
4)Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
5)Flink:Flink是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。
6)Oozie:Oozie是一个管理Hadoop作业(job)的工作流程调度管理系统。
7)Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
8)Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
9)ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
9.虚拟机配置IP和名称
/etc/sysconfig/network-scripts/ifcfg-ens33(不一定是ens33,具体看文件夹中)
/etc/hostname
配置IP映射文件/etc/hosts
10.Windows主机配置IP映射文件:位置:C:WindowsSystem32driversetc
11.准备虚拟机,关闭防火墙,yum必要软件,配置以上3个文件,就可以作为克隆模板了。
今天把虚拟机克隆好就能休息了!
20:44已处理完,over
20220704
昨天安装好虚拟机,今天安装jdk和Hadoop,记录一下过程中的问题。
1.课程给的资料包太大,没有下载,所以需要自己找安装包;
最后通过Linux命令:wget https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz
此命令是将链接中的包下载到当前目录;
下载过程中遇到几个问题
第一个问题是网上搜到的链接太老了,wget下载后解压错误,看了文件大小知道是文件有问题,
解决办法是去官网找合适的链接,然后下载(我找的最新版本的); https://www.oracle.com/java/technologies/downloads/#license-lightboxhttps://www.oracle.com/java/technologies/downloads/#license-lightbox
第二个问题是wget下载时域名解析失败,报错(wget: unable to resolve host address '');
解决办法是修改/etc/resolv.conf文件,添加域名解析器;
vim /etc/resolv.conf nameserver 8.8.8.8 #google域名服务器
安装JDK后要配置环境变量,集群中其他也要配置,不要忘了这步;
JDK配置在/etc/profile.d/my_env.sh这个文件中,只需要同步后source /etc/profile即可(Hadoop的环境变量也配置在此文件中)
2.Hadoop目录结构
重要目录
(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
3.一台设备上安装好了JDK和Hadoop(包括配置好环境变量)后,直接通过scp -r命令,将JDK和Hadoop传到其他设备,还有/etc/profile.d/my_env.sh也需要传过去,并source一下;
4.用rsync同步数据时,出现错误,当前文件夹中搞了很多系统数据;
解决方法:写了shell脚本,对照其他设备的本目录,比对进行删除;
其中遇到的问题时shell脚本中的循环判断用到了ssh,每次都要手动输入密码,很繁琐,需要优化!
刚看到后边的课程,紧跟着就是SSH免密登录,很好~明天学
20220705
1.配置SSH免密登录
cd到家目录的.ssh目录下,例如/home/dyl/.ssh
生成公钥和私钥
将公钥拷贝到要免密登录的目标机器上
cd /home/dyl/.ssh ssh-keygen -t rsa ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104
注:需要在每台设备上都操作一遍,另外需要在你计划作为主机的设备上用root用户执行一遍;
2.集群配置
A.集群部署规划
注意:
- NameNode和SecondaryNameNode不要安装在同一台服务器
- ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
| hadoop102 | hadoop103 | hadoop104 | |
| HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
| YARN | NodeManager | ResourceManager NodeManager | NodeManager |
B.配置文件说明
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这个路径上,用户可以根据项目需求重新进行修改配置。
C.配置集群
$HADOOP_HOME/etc/hadoop此目录下修改配置文件
core-site.xml
fs.defaultFS hdfs://hadoop102:8020 hadoop.tmp.dir /opt/module/hadoop-3.1.3/data hadoop.http.staticuser.user dyl
hdfs-site.xml
dfs.namenode.http-address hadoop102:9870 dfs.namenode.secondary.http-address hadoop104:9868
yarn-site.xml
yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop103 yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
mapred-site.xml
mapreduce.framework.name yarn
--以上配置完后,在集群上分发配置文件,并去各设备上查看分发情况
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
3.补充一下昨天的xsync脚本
#!/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
4.群起集群
A.配置worker
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
加入以下内容
hadoop102 hadoop103 hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
5.上传HDFS后文件存储路径:/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-192.168.10.102-1610603650062/current/finalized/subdir0/subdir0
然后用xsync同步所有节点配置文件;
6.Hadoop命令:
hadoop fs 前缀,-put上传,-get下载;
hadoop jar使用share目录下的jar包
7.配置历史服务器
1)配置mapred-site.xml---mapred-site.xml
mapreduce.jobhistory.address hadoop102:10020 mapreduce.jobhistory.webapp.address hadoop102:19888
2)后续操作
#分发配置 xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml #启动历史服务器 mapred --daemon start historyserver #查看启动情况 jps #查看JobHistory http://hadoop102:19888/jobhistory
8.配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上
1)配置yarn-site.xml
yarn.log-aggregation-enable true yarn.log.server.url http://hadoop102:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 604800
2)后续操作
#分发配置 xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml #重启yarn和historyserver 此处省略 #删除已经存在的输出文件 hadoop fs -rm -r /output #执行wordcount程序 hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output #查看日志(此网站内点开刚才运行的任务,有个logs链接可以点进去) http://hadoop102:19888/jobhistory
9.shell脚本
1)启停Hadoop集群的脚本,放在家目录的bin下
#!/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 hadoop102 "/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 hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
2)查看三台服务器Java进程的脚本
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
3)写完用xsync脚本分发出去
10.常用端口号说明
| 端口名称 | Hadoop3.x |
| NameNode内部通信端口 | 8020 / 9000/9820 |
| NameNode HTTP UI | 9870 |
| MapReduce查看执行任务端口 | 8088 |
| 历史服务器通信端口 | 19888 |
11.集群时间同步
1)首先设置时区
#展示时区列表 timedatectl list-timezones #设置系统时区 sudo timedatectl set-timezone Asia/Shanghai #查看系统时区 timedatectl
2)用chrony配置时间同步
主机同步网络的时间,集群中的其他机器同步主机的时间
过程中遇到的问题:
1.vi时总提示Can't write viminfo file /*/.viminfo!
可以使用rm -f .viminf*.tmp解决,但是我这样没解决好;
2.Hadoop3.1.3不能对应JDK18;后来查了资料要对应JDK8;注册了官网账号,从官网上下载了压缩包。
3.同步时间的时候有个问题想不明白;我根据教程把时间同步都配置好了,但是我把主机的时间改了,其他机器的时间并不会同步修改,这点暂时没搞懂,还不知道怎么实现,等一个有缘人解答!!!
二.明天的计划20220703
明天要上班啦,正常5点半下班,估计要拖到5点,路程1小时,到家7点,学习俩小时,9点
20220704
今天的学习中由于出现了问题,不想一直手动删除文件,写了比对其他服务器删除文件的shell脚本,成就感还是有一些的。摸鱼学习了一天,虽然成果不显著,总算是没白费!
三.心得20220703
今天看了Hadoop开篇课程,认识了大数据开发的岗位,理清楚了之前的工作做的是以存储过程为工具的ETL工作。后续想去面试中厂大厂,想尽快跳槽,再次进入大数据行业。大厂可能不太现实,可以重新整理一下简历,学习一下大数据必备技能,重新开始面试。
那么现在就需要学一下基础,去整一些项目,然后开始刷面试题。
Hadoop环境搭建和简单的使用已经学过了,可以过一遍,主要学习使用,优化和面试部分;
20220704
公司的游客网络实在太慢,视频也看不了,还是在家学吧, 或者把资料和视频下载下来!



