文章目录
上一节: https://blog.csdn.net/m0_56600567/article/details/125676674
Apache Hadoop概述
Hadoop介绍
狭义上Hadoop指的是Apache软件基金会的一款开源软件。
用java语言实现,开源
允许用户使用简单的编程模型实现跨机器集群对海量数据进行分布式计算处理
- Hadoop核心组件
Hadoop HDFS(分布式文件存储系统)︰解决海量数据存储
Hadoop YARN(集群资源管理和任务调度框架)︰解决资源任务调度Hadoop MapReduce(分布式计算框架)︰解决海量数据计算
广义上Hadoop指的是围绕Hadoop打造的大数据生态圈。
Hadoop现状
- HDFS作为分布式文件存储系统,处在生态圈的底层与核心地位;
- YARN作为分布式通用的集群资源管理系统和任务调度平台,支撑各种计算引擎运行,保证了Hadoop地位;
- MapReduce作为大数据生态圈第一代分布式计算引擎,由于自身设计的模型所产生的弊端,导致企业一线几乎不再直接使用MapReduce进行编程处理,但是很多软件的底层依然在使用MapReduce引擎来处理数据
Hadoop特性优点
- 扩容能力(scalability)
Hadoop是在可用的计算机集群间分配
数据并完成计算任务的,这些集群可方
便灵活的方式扩展到数以千计的节点。 - 成本低(Economical)
Hadoop集群允许通过部署普通廉价的机
器组成集群来处理大数据,以至于成本很
低。看重的是集群整体能力。 - 效率高(efficiency)
通过并发数据,Hadoop可以在节
点之间动态并行的移动数据,使得
速度非常快。 - 可靠性(reliability)
能自动维护数据的多份复制,并且在任务
失败后能自动地重新部署(redeploy)计
算任务。所以Hadoop的按位存储和处理
数据的能力值得人们信赖。
Hadoop应用
- Yahoo
支持广告系统
用户行为分析
支持Web搜索
反垃圾邮件系统 - Facebook
存储处理数据挖掘和日志统计
构建基于Hadoop数据仓库平台(Apache Hive来自FB) - IBM
蓝云基础设施构建
商业化Hadoop发行、解决方案支持 - 百度
用户搜索表征的需求数据、阿拉丁爬虫数据存储
数据分析和挖掘 竞价排名 - 阿里巴巴
为电子商务网络平台提供底层的基础计算和存储服务
交易数据、信用数据 - 腾讯
用户关系数据
基于Hadoop、Hive构建TDW(腾讯分布式数据仓库) - 华为
对Hadoop的HA方案,以及HBase领域有深入研究
Hadoop集群简介
Hadoop集群包括两个集群:HDFS集群、YARN集群
- HDFS集群(分布式存储)
主角色:NameNode(NN)
从角色:DataNode(DN)
主角色辅助角色:SecondaryNameNode(SNN)
- YARN集群(资源管理、调度)
主角色:ResourceManager(RM)
从角色:NodeManager(NM)
-
两个集群逻辑上分离、通常物理上在一起
逻辑上分离
两个集群互相之间没有依赖、互不影响
物理上在一起
某些角色进程往往部署在同一台物理服务器上 -
两个集群都是标准的主从架构集群
Hadoop集群搭建
集群角色规划
- 角色规划的准则
根据软件工作特性和服务器硬件资源情况合理分配 - 角色规划注意事项
资源上有抢夺冲突的,尽量不要部署在一起
工作上需要互相配合的。尽量部署在一起
服务器基础环境:
主机名 (3台机器)
cat /etc/hostname
hosts映射(3台机器)
cat /etc/hosts
防火墙关闭(3台机器)
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #禁止防火墙开启自启
systemctl status firewalld.service #查看防火墙状态
ssh免密登录
ssh-keygen #一直回车即可 生成公钥、私钥
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3 #依次输入,上传公钥到服务器
ssh node1
ssh node 2
ssh node3 #验证:在已经配置了的机器上
集群时间同步(3台机器)
yum -y install ntpdate
ntpdate ntp4.aliyun.com
如果没有出现上图,则可能是因为网络问题 ,再次执行即可
创建统一工作目录(3台机器)
mkdir -p /export/server/ #软件安装路径
mkdir -p /export/data/ #数据存储路径
mkdir -p /export/software/ #安装包存放路径
ls /export/ #验证3个目录是否都已经创建了
JDK 1.8安装(3台机器)选择在第一台机器安装,在发送给其他机器
- 找到目录
- 将安装包拖拽进去
- 打开目录:cd /export/server
查看:ll
- 解压:tar -zxvf jdk-8u241-linux-x64.tar.gz
- 检查:ll
可以选择删除压缩包:rm -rf jdk-8u241-linux-x64.tar.gz- 配置环境变量
官方文档
配置环境变量
vim /etc/profile
#Go #跳转到文件末行
写入文件末行后保存
export JAVA_HOME=/export/server/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
如何保存?小白不会保存?在文本末端按esc,然后是(shift+z)按两次,即可保存退出了
注意:如果出现如下问题:
解决方案:来自转载
- #重新加载环境变量文件
source /etc/profile
#检查是否生效:成功显示版本就生效了哦
java -version
- 剩下两台机器,采用远程拷贝,拷贝jdk+环境变量
#使用绝对路径来做
cd ~
#scp 远程拷贝
scp -r /export/server/jdk1.8.0_241/ root@node2:/export/server/
scp -r /export/server/jdk1.8.0_241/ root@node3:/export/server/
scp -r /etc/profile root@node2:/etc/
scp -r /etc/profile root@node3:/etc/- 对3太机器同时发送命令,依次查看是否都安装好了jdk,配置好了环境变量
#重新加载环境变量文件
source /etc/profile
#检查是否生效:成功显示版本就生效了哦
java -version
上传解压Hadoop
- 上传安装包到对应的位置并查看
- 进行解压:tar -zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz (可以将安装包删除:rm -rf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz )
- 打开文件(cd hadoop-3.3.0),查看内容(ll)
- 主要的几个目录:
- 修改配置文件
官网文档:https://hadoop.apache.org/docs/r3.3.0/
pwd–>ll—>cd etc/ —>ll —>cd hadoop/–>pwd—>ll
- 修改 hadoop-env.sh
- 打开文件:vim hadoop-env.sh,去往最后一行:Go
- 插入:
export JAVA_HOME=/export/server/jdk1.8.0_241
#文件最后添加
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
- 保存并退出:esc —>shift+zz
- 修改 core-site.xml
- 打开文件:vim core-site.xml
- <configuration>添加内容的位置</configuration>
<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<!-- 设置Hadoop本地保存数据路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop-3.3.0</value>
</property>
<!-- 设置HDFS web UI用户身份 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 整合hive 用户代理设置 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!-- 文件系统垃圾桶保存时间 -->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
- 保存并退出:esc —>shift+zz
- 配置hdfs-site.xml
- 打开hdfs-site.xml:vim hdfs-site.xml
- <configuration>添加内容的位置</configuration>
<!-- 设置SNN进程运行机器位置信息 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:9868</value>
</property>
- 保存并退出:esc —>shift+zz
- 配置mapred-site.xml
-
打开:vim mapred-site.xml
-
插入:
<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR程序历史服务地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<!-- MR程序历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
- 保存并退出:esc —>shift+zz
- yarn-site.xml
-
打开:vim yarn-site.xml
-
插入
注意:中间的注释可以删除:dd
i进入插入模式,
<!-- 设置YARN集群主角色运行机器位置 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 是否将对容器实施物理内存限制 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置yarn历史服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
</property>
<!-- 历史日志保存的时间 7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
- 保存并退出:esc —>shift+zz
- workers
-
打开:vim works
-
删除: dd,添加
node1.itcast.cn node2.itcast.cn node3.itcast.cn
-
保存并退出:esc —>shift+zz
- 剩下两台机器,采用远程拷贝
cd /export/server
scp -r hadoop-3.3.0 root@node2:$PWD
scp -r hadoop-3.3.0 root@node3:$PWD
- 将hadoop添加到环境变量(3台机器)
打开:vim /etc/profile
到末行:Go
添加:
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 远程拷贝给其他机器
scp -r /etc/profile root@node2:/etc/
scp -r /etc/profile root@node3:/etc/
- 3台机器执行:source /etc/profile
- 验证:hadoop
格式化操作
- 首次启动HDFS时,必须对其进行格式化操作。
- format本质上是初始化工作,进行HDFS清理和准备工作
- 只能初始化一次
- 第一台机器!!!
hdfs namenode -format
成功标志:
如果多次format除了造成数据丢失外,还会导致hdfs集群主从角色之间互不识别。通过删除所有机器hadoop.tmp.dir目录重新format解决
以下链接可能有用,我自己没有试过
重新格式化
重新格式化需注意问题
Hadoop集群启停命令、Web UI
手动逐个进程启停
优点:可以精准控制每个进程启停,避免群起群停。
缺点:比较麻烦。
- HDFS集群:
#hadoop2.x版本命令
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
#hadoop3.x版本命令
hdfs --daemon start|stop namenode|datanode|secondarynamenode
- YARN集群
#hadoop2.x版本命令
yarn-daemon.sh start|stop resourcemanager|nodemanager
#hadoop3.x版本命令
yarn --daemon start|stop resourcemanager|nodemanager
shell脚本一键启停
前提:配置好机器之间的SSH免密登录和workers文件。
- HDFS集群
start-dfs.sh
stop-dfs.sh
- YARN集群
start-yarn.sh
stop-yarn.sh
- Hadoop集群
start-all.sh
stop-all.sh
启动第一台机器
第一台机器输入命令:start-dfs.sh
然后依次在第一台,第二台,第三台机器上输入jps
结果:
没有试过,但是有人遇到了这样的问题:hadoop集群启动的时候,从机的DataNode没有启动的原因及解决
补充记忆:
- 在这里使用Java进程查看是否启动成功,进程是ps(progress),Java进程命令是jps
- 在屏幕内容过多时,使用CTRL+l进行清屏操作
如何查看是否启动成功?
- 通过进程查看
注意:
如果出现一个进程查看的时候存在,过一会就不在了,叫做进程的闪退,说明配置有问题 - 看日志
Hadoop启动日志路径:/export/server/hadoop-3.3.0/logs/
集群的Web页面浏览
HDFS集群
地址:http://namenode_host:9870
其中namenode_host是namenode运行所在机器的主机名或者ip
浏览文件系统:
YARN集群
地址:http://resourcemanager_host:8088
其中resourcemanager_host是resourcemanager运行所在机器的主机名或者ip