Hadoop之基础知识与搭建

网友投稿 248 2022-11-20

Hadoop之基础知识与搭建

Hadoop之基础篇

Hadoop 概述

1.Apache Hadoop 官网与下载

官网地址: 下载地址:优势[四高]

高可用性:Hadoop底层维护多个数据副本,不会导致数据的丢失高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度高容错性:能够自动将失败的任务重新分配

3.Hadoop组成

在Hadoop2.x时代,在1.x版本基础上增加了Yarn。Yarn只负责资源的调度,MapReduce只负责运算。不同于1.x中MapReduce需要同时负责处理业务逻辑运算和资源的调度,解决了耦合性强的缺点。Hadoop3.x在组成上没有变化。由MapReduce(计算),Yarn(资源调度),HDFS(数据存储),Common(辅助工具)四部分组成

Hadoop运行环境搭建(开发应用)

1.虚拟机环境准备

使用VMwar Workstation安装CentOS7 满足以下条件:内存4G,硬盘50G,可以连接外部网络

2.使用yum命令安装必要工具包

(epel-release,net-tool,vim编译器)

yum install -y epel-release yum install -y net-tools yum install -y vim

3.关闭防火墙

在企业开发时,通常单个服务器的防火墙时关闭的。公司整体对外会设置非常安 全的防火墙

systemctl stop firewalldsystemctl disable firewalld.service

4.重启虚拟机

reboot

5.克隆相同的两台虚拟机加以配置以下内容

克隆过程中时需要关闭虚拟机,克隆后需要修改ip以及hostname 执行以下脚本​​vim /etc/sysconfig/network-scripts/ifcfg-ens33​​ 将IP内容修改为:

DEVICE=ens33TYPE=EthernetONBOOT=yesBOOTPROTO=staticNAME="ens33"IPADDR=xxx.xxx.xx.x #主机虚拟iPPREFIX=24GATEWAY=xxx.xxx.xx.2 #主机虚拟iP 后面一位固定为2DNS1=xxx.xxx.xx.2 #主机虚拟iP 后面一位固定为2

执行命令​​vim /etc/hostname​​​修改主机名称 为:​​hadoop102​​

执行命令​​vim /etc/hosts​​ 配置Linux主机host文件映射添加各台ip如下:

192.168.189.101 hadoop102192.168.189.102 hadoop103192.168.189.103 hadoop104

6.修改windows 的主机映射文件(host文件)

进入 C:\Windows\System32\drivers\etc 路径拷贝 hosts 文件到桌面使用notepad++或者文本编辑器打开桌面 hosts 文件并添加如下内容在末尾:

192.168.189.101 hadoop102192.168.189.102 hadoop103192.168.189.103 hadoop104

将桌面 hosts 文件覆盖 C:\Windows\System32\drivers\etc 路径 hosts 文件

Hadoop安装

1.在 hadoop102 安装 JDK

导入安装包 至/opt/software/解压 JDK 到/opt/module 目录下

​​software]$ tar -zxvf jdk-8u212-linuxx64.tar.gz -C /opt/module/​​

配置 JDK 环境变量

​ 执行命令​​sudo vim /etc/profile​​末尾添加如下内容,保存退出

#JAVA_HOMEexport JAVA_HOME=/opt/module/jdk1.8.0_212export PATH=$PATH:$JAVA_HOME/bin

​​source /etc/profile​​ 执行上述,让新的环境变量 PATH 生效输入​​java -version​​ 测试JDK安装是否成功,显示内容即为成功

2.在 hadoop102 安装 Hadood102

进入目录​​/opt/software/​​​解压安装包至​​/opt/module​​执行命令​​tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module ​​使用​​/opt/module​​​查看是否解压成功并且使用​​pwd​​命令获取当前安装路径配置 Hadoop环境变量

​ 执行命令​​sudo vim /etc/profile​​末尾添加如下内容,保存退出

#HADOOP_HOMEexport HADOOP_HOME=/opt/module/hadoop-3.1.3export PATH=$PATH:$HADOOP_HOME/binexport PATH=$PATH:$HADOOP_HOME/sbin

输入​​hadoop version​​ 测试JDK安装是否成功,显示内容即为成功

Hadoop 目录结构(下述加粗处理为常用)

bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)sbin 目录:存放启动或停止 Hadoop 相关服务的脚本share 目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例

完全分布式运行模式

准备工作: 1)准备 3 台客户机(关闭防火墙、静态 IP、主机名称) 2)安装 JDK 3)配置环境变量 4)安装 Hadoop 5)配置环境变量 6)配置集群 7)单点启动 8)配置 ssh 9)群起并测试集

1.到目前为止前5步已经完毕,下面继续看集群搭建以及其他的

2.编写集群分发脚本 xsync

scp(secure copy)安全拷贝 [scp 可以实现服务器与服务器之间的数据拷贝]语法:​​scp -r $pdir/$fname $user@$host:$pdir/$fname ​​

​ ​​命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称​​

使用scp 拷贝拉取文件到Hadoop103 Hadoop104主机下

使用hadoop102主机推送到103​​scp -r /opt/module/jdk1.8.0_212 atguigu@hadoop103:/opt/module​​使用hadoop103主机拉取hadoop102数据​​scp -r atguigu@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/​​使用hadoop103实现跨机器拉取数据​​scp -r atguigu@hadoop102:/opt/module/* atguigu@hadoop104:/opt/module​​rsync 远程同步工具差异点:rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更 新。scp 是把所有文件都复制过去

语法:​​rsync -av $pdir/$fname $user@$host:$pdir/$fname​​

命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称 归档拷贝-a 显示复制过程-v

使用:​​rsync -av hadoop-3.1.3/ atguigu@hadoop103:/opt/module/hadoop-3.1.3/​​xsync 集群分发脚本在当前账户 /bin 目录下创建 xsync 文件

mkdir bin cd binvim xsync # 添加如下代码

#!/bin/bash#1. 判断参数个数if [ $# -lt 1 ]then echo Not Enough Arguement! exit;fi#2. 遍历集群所有机器for host in hadoop102 hadoop103 hadoop104do 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 donedone

修改脚本 xsync 具有执行权限​​chmod +x xsync​​测试脚本-分发到其他主机​​xsync ./bin/xsync​​分发环境变量至其他主机​​xsync /etc/profile​​执行​​source /etc/profile​​ 让其他主机环境变量生效

3.SSH 无密登录配置

免密登录原理

生成公钥和私钥进入 /home/账户/.ssh,执行​​ssh-keygen -t rsa​​ 然后敲3个回车,生成id_rsa(私钥),id_rsa.pub(公钥)将公钥拷贝到要免密登录的其他目标机器上

ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104

相同的策略配置hadoop103,hadoop104

4.集群配置

NameNode 和 SecondaryNameNode 不要安装在同一台服务器ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在 同一台机器上。


hadoop102

hadoop103

hadoop104

HDFS

NameNode DataNode

DataNode

SecondaryNameNode DataNode

YARN

NodeManager

ResourceManager NodeManager

NodeManager

配置文件说明

自定义配置文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径上,可以根据项目需求重新进行修改配置。以下为具体配置集群

1.核心配置文件

配置 core-site.xml

cd $HADOOP_HOME/etc/hadoopvim core-site.xml#文件内容配置如下: fs.defaultFS hdfs://hadoop102:8020 hadoop.tmp.dir /opt/module/hadoop-3.1.3/data

2.HDFS 配置文件

配置 hdfs-site.xml

vim hdfs-site.xml#文件内容配置如下: dfs.namenode.hadoop102:9870 dfs.namenode.secondary.hadoop104:9868

3.YARN 配置文件

配置 yarn-site.xml

vim 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

4.MapReduce 配置文件

配置 mapred-site.xml

vim mapred-site.xml#文件内容配置如下: mapreduce.framework.name yarn

在集群上分发配置好的 Hadoop 配置文件

​​xsync /opt/module/hadoop3.1.3/etc/hadoop/​​

去 103 和 104 俩节点上查看文件分发情况

​​cat /opt/module/hadoop3.1.3/etc/hadoop/core-site.xml​​

5.群起集群

配置 workers

使用命令​​vim /opt/module/hadoop3.1.3/etc/hadoop/workers​​在该文件中增加如下内容:

hadoop102hadoop103hadoop104

小注意点:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。 执行命令​​xsync /opt/module/hadoop-3.1.3/etc​​

启动集群如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode(注意:格式 化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找 不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停 止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。

​​hdfs namenode -format​​

使用命令​​sbin/start-dfs.sh​​启动 HDFS使用命令​​sbin/start-yarn.sh​​启动 YARN(在配置了 ResourceManager 的节点(hadoop103))Web 端查看 HDFS 的 NameNode浏览器中输入:HDFS 上存储的数据信息Web 端查看 YARN 的 ResourceManager浏览器中输入:YARN 上运行的 Job 信息配置历史服务器

#配置 mapred-site.xml vim mapred-site.xml #在该文件里面增加如下配置 mapreduce.jobhistory.address hadoop102:10020 mapreduce.jobhistory.webapp.address hadoop102:19888 #分发配置 xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml #在 hadoop102 启动历史服务器 mapred --daemon start historyserver #查看历史服务器是否启动 jps #查看 JobHistory HDFS 系统上。日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。 注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryServer。

# 配置 yarn-site.xmlvim yarn-site.xml#在上诉文件里面增加如下配置。 yarn.log-aggregation-enable true yarn.log.server.url 设置日志保留时间为 7 天 --> yarn.log-aggregation.retain-seconds 604800# 分发配置xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml# 关闭 NodeManager 、ResourceManager 和 HistoryServersbin/stop-yarn.sh # 103主机mapred --daemon stop historyserver # 103主机# 启动 NodeManager 、ResourceManage 和 HistoryServerstart-yarn.shmapred --daemon start historyserver# 删除 HDFS 上已经存在的输出文件hadoop fs -rm -r /output

集群基本测试上传文件到集群​​ hadoop fs -mkdir /input​​​ |​​hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input​​上传文件后查看文件存放在什么位置​​pwd​​

​​/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598- 192.168.10.102-1610603650062/current/finalized/subdir0/subdir0​​

查看文件使用​​cat blk_文件编码​​

拼接​​cat blk_文件编码>>tmp.tar.gz​​下载​​ hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./​​执行 wordcount 程序

​​hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output​​

6.集群启动/停止方式总结/常用脚本

个模块分开启动/停止(配置 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​​

写 Hadoop 集群常用脚本

Hadoop 集群启停脚本(包含 HDFS,Yarn,Historyserver):myhadoop.sh

cd /home/atguigu/bin vim myhadoop.sh #输入如下内容 #!/bin/bashif [ $# -lt 1 ]then echo "No Args Input..." exit ;ficase $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

保存后退出,然后赋予脚本执行权限​​ chmod +x myhadoop.sh​​查看三台服务器 Java 进程脚本:jpsall

cd /home/atguigu/binvim jpsall#输入如下内容#!/bin/bashfor host in hadoop102 hadoop103 hadoop104do echo =============== $host =============== ssh $host jps done

保存后退出,然后赋予脚本执行权限​​chmod +x jpsall​​分发/home/atguigu/bin 目录,保证自定义脚本在三台机器上都可以使用

​​xsync /home/atguigu/bin/​​

## 5.常用端口号说明与集群时间同步

常用端口号说明

端口名称

Hadoop2.x

Hadoop3.x

NameNode 内部通信端口

8020 / 9000

8020 / 9000/9820

NameNode HTTP UI

50070

9870

MapReduce 查看执行任务端口

8088

8088

历史服务器通信端口

19888

19888

集群时间同步

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期 和公网时间进行校准; 如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差, 导致集群执行任务时间不同步。

时间服务器配置(必须 root 用户)查看所有节点 ntpd 服务状态和开机自启动状态

systemctl status ntpdsystemctl start ntpdsystemctl is-enabled ntpd

修改 hadoop102 的 ntp.conf 配置文件​​vim /etc/ntp.conf​​

取消注释​​#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap​​

注释调以下代码,使集群在局域网中,不使用其他互联网上的时间

server 0.centos.pool.ntp.org iburstserver 1.centos.pool.ntp.org iburstserver 2.centos.pool.ntp.org iburstserver 3.centos.pool.ntp.org iburst

当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中 的其他节点提供时间同步

server 127.127.1.0fudge 127.127.1.0 stratum 10

修改 hadoop102 的/etc/sysconfig/ntpd 文件

sudo vim /etc/sysconfig/ntpd # 增加内容如下(让硬件时间与系统时间一起同步)SYNC_HWCLOCK=yes

重新启动 ntpd 服务​​systemctl start ntpd​​设置 ntpd 服务开机启动​​systemctl enable ntpd​​其他机器配置(必须 root 用户)关闭所有节点上 ntp 服务和自启动

systemctl stop ntpdsystemctl disable ntpd

在其他机器配置 1 分钟与时间服务器同步一次

crontab -e # 103节点# 编写定时任务如下*/1 * * * * /usr/sbin/ntpdate hadoop102#查看时间date# 修改机器时间date -s "2022-4-30 11:11:11"

### 6.常见错误及解决方案

防火墙没关闭、或者没有启动

YARN INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032

主机名称配置错误IP 地址配置错误ssh 没有配置好root 用户和 使用用户 两个用户启动集群不统一配置文件修改不细心不识别主机名称

java.net.UnknownHostException: hadoop102: hadoop102 at java.net.InetAddress.getLocalHost(InetAddress.java:1475) at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287) at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:415)

解决办法:

在/etc/hosts 文件中添加 192.168.10.102 hadoop102主机名称不要起 hadoop hadoop000 等特殊名称

DataNode 和 NameNode 进程同时只能工作一个

执行命令不生效,粘贴 Word 中命令时,遇到-和长–没区分开。导致命令失效 解决办法:尽量不要粘贴 Word 中代码。jps 发现进程已经没有,但是重新启动集群,提示进程已经开启。

原因是在 Linux 的根目录下/tmp 目录中存在启动的进程临时文件,将集群相关进程删 除掉,再重新启动集群。

jps 不生效

原因:全局变量 hadoop java 没有生效。解决办法:需要 source /etc/profile 文件。

8088 端口连接不上

执行​​cat /etc/hosts​​注释掉如下代码

#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4#::1 hadoop102

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:实现PROFINET网络与串口网络之间的数据通信
下一篇:开发一个不需要重写成Hive QL的大数据SQL引擎
相关文章

 发表评论

暂时没有评论,来抢沙发吧~