Loading... # 介绍 自行[百度](https://www.baidu.com/s?wd=hadoop%E4%BB%8B%E7%BB%8D "百度")<-- ##### Emmm... [*hadoop.apache.org*](http://hadoop.apache.org "*hadoop.apache.org*") 高效率低成本集群生态软件,高通用性,简单 - Hadoop指Apache软件基金会的一款开源软件,利用java语言实现(开源), 允许用户使用简单的编程模型实现跨机器集群对海量数据进行分析计算处理 - Hadoop核心组件 hadoop HDFS(分布式文件存储系统):解决海量数据存储 Hadoop YARU(集群资源和任务调度框架):解决资源任务调度 hadoop NapReduce(分布式计算框架):解决海量数据计算 # 虚拟机搭建 ### 1. VM搭建虚拟机 利用VMware搭建好第一台Centos7;名字用hadoop1方便些 ### 2. VM配置虚拟网络 在VM虚拟机中依次选择-->"编辑"-->"虚拟网络编辑器" ![](https://www.zmzaxg.top/usr/uploads/2023/04/1116130320.png) 配置好NAT虚拟网络,网络ip等 ![](https://www.zmzaxg.top/usr/uploads/2023/04/1462195039.png) 配置好了退出,打开名为hadoop1的Centos虚拟机,进入到网络配置,固定好ip(下面是我配置的) ![](https://www.zmzaxg.top/usr/uploads/2023/04/2901547347.png) 配置好hadoop1后使用电脑的命令行ping通了就行;下面展示 ![](https://www.zmzaxg.top/usr/uploads/2023/04/1023709610.png) ### 3. VM克隆虚拟机 关机hadoop1,克隆出一台hadoop2和hadoop3; ![](https://www.zmzaxg.top/usr/uploads/2023/04/1037731866.png)) 依次选择-->虚拟机-->快照-->拍摄快照 ![](https://www.zmzaxg.top/usr/uploads/2023/04/2780297558.png)) 拍摄好了再接着选-->虚拟机-->管理-->克隆 ![](https://www.zmzaxg.top/usr/uploads/2023/04/2148815234.png) 记得克隆源选择-->现有快照-->初始(刚刚拍摄的)-->下一步-->创建完整克隆-->下一步-->取一下名字为hadoop2还有保存路径 下一步等待克隆完成(下面访两张图) ![](https://www.zmzaxg.top/usr/uploads/2023/04/3756405619.png)) ![](https://www.zmzaxg.top/usr/uploads/2023/04/798285117.png) 创建完成后开机hadoop,进入给固定好ip(这里我用172.168.10.2),确保实体物理主机能ping通后关闭hadoop2,再拍摄好初始快照(防止玩坏系统) hadoop3也重复操作一下,最后创建好的虚拟机hadoop集群信息分别如下 > ![](https://www.zmzaxg.top/usr/uploads/2023/04/1807364608.png) > hadoop1|(172.168.10.1) > hadoop2|(172.168.10.2) > hadoop3|(172.168.10.3) ### 工具连接 ### 4. 新建和连接 1. 为了方便管理,我们可以使用其他shell连接工具来连接上三台虚拟机,例如CRT、FinalShell、Putty、Xshell;这边我比较喜欢使用Xshell,后面内容也就使用Xshell了 Xhell-->文件-->新建 ![](https://www.zmzaxg.top/usr/uploads/2023/04/1436519434.png) 填写基本信息,切换到身份验证 ![](https://www.zmzaxg.top/usr/uploads/2023/04/3077388432.png) 填写好root和密码,确定保存会话信息,下次双击就可以直接连接上虚拟机的shell终端 ![](https://www.zmzaxg.top/usr/uploads/2023/04/372956184.png) 可以创建一个目录来存放hadoop集群,方便管理和浏览 ![](https://www.zmzaxg.top/usr/uploads/2023/04/531659006.png) 2. 连接hadoop集群 双击会话连接hadoop集群 ![](https://www.zmzaxg.top/usr/uploads/2023/04/3285910805.png) # Hadoop部署 ![](https://www.zmzaxg.top/usr/uploads/2023/04/804688733.png) ### 1. 设置主机名 一. 为每台虚拟机设置一个独一无二的主机名称 ```shell vi /etc/hostname ## 使用vi或者vim编辑hostname文件内容 ## 自己取个名字 ## 编辑主机名后,wq退出 ## 然后使用cat 打印显示出文件内容查看 ``` --- --- ### 《小技巧》 > 在Xshell中我们可以使用程序自带的工具来同时给多个终端发送指令,这样可以方便操作步骤: > -->工具-->发送键输入到-->所有会话 > ![](https://www.zmzaxg.top/usr/uploads/2023/04/3194536588.png) > 这时候我们可以看到窗口上多了个开关,如果不同时在窗口上输入,可以单独关闭 > ![](https://www.zmzaxg.top/usr/uploads/2023/04/784486038.png) --- --- 二. 在每台主机上添加好host名,方便切换操作 ![](https://www.zmzaxg.top/usr/uploads/2023/04/56842296.png) ```shell vi /etc/hosts ## 编辑ip和名字可以自己定 ////////// 172.168.10.1 hadoop1.zmzaxg.top hadoop1 172.168.10.2 hadoop2.zmzaxg.top hadoop2 172.168.10.3 hadoop3.zmzaxg.top hadoop3 ## wq退出 ``` cat /etc/hosts cat /etc/hostname 查看一下有没有全部修改好。 ![](https://www.zmzaxg.top/usr/uploads/2023/04/77490139.png) ### 2. 关闭防火墙,配置ssh免密登入 ```shell systemctl stop firewalld.service ## 停止firewalld服务 ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/3546700851.png) ```shell systemctl disable firewalld.service ## 停止firewalld服务的开机自启 ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/270134032.png) ```shell systemctl status firewalld.service ## 查看状态为非活跃即可 ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/3010989492.png) 接下来我们试试能不能使用免密登录。我这在hadoop1终端内输入ssh hadoop2如下 ![](https://www.zmzaxg.top/usr/uploads/2023/04/1361675079.png) 需要密码登录,,我们使用下面命令 ```shell ssh-keygen # 生成公钥、私钥 ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/2719558140.png) ```shell ssh-copy-id hadoop1 ssh-copy-id hadoop2 ssh-copy-id hadoop3 ##### ``` 确保在三台主机山都配置好免密登入 ![](https://www.zmzaxg.top/usr/uploads/2023/04/1463799313.png) ### 3. 集群时间同步 ```shell yum -y install ntpdate # 没有ntpdate指令就用这安装一下 ntpdate ntp4.aliyun.com # 使用阿里云的时间服务器 #####阿里的不行就换下面的NTP地址 ntp-sop.inria.frserver 210.72.145.44(中国国家授时中心服务器IP地址) ntp.sjtu.edu.cn(上海交通大学网络中心NTP服务器地址) s1a.time.edu.cn 北京邮电大学 010 s1b.time.edu.cn 清华大学 010-62795818-6105 s1c.time.edu.cn 北京大学 010-62753007 s1d.time.edu.cn 东南大学 025-3794342-309 s1e.time.edu.cn 清华大学 010-62795818-6105 s2a.time.edu.cn 清华大学 010-62795818-6105 s2b.time.edu.cn 清华大学 010-62795818-6105 s2c.time.edu.cn 北京邮电大学 010-62283044-8003 s2d.time.edu.cn 西南地区网络中心 s2e.time.edu.cn 西北地区网络中心 029-2669037 s2f.time.edu.cn 东北地区网络中心 024-23966854 s2g.time.edu.cn 华东南地区网络中心 021-62932901-8101 s2h.time.edu.cn 四川大学网络管理中心 028-85414820 s2j.time.edu.cn 大连理工大学网络中心 0411-4708642 s2k.time.edu.cn CERNET桂林主节点 0773-5845246 s2m.time.edu.cn 北京大学 time.jmu.edu.cn ``` 执行结果如下: ![](https://www.zmzaxg.top/usr/uploads/2023/04/2830336683.png) ### 4. 创建统一的工作目录 ```shell #######在三台主机上同时创建目录 mkdir -p /export/server/ # 软件安装路径 mkdir -p /export/data/ # 数据存储路径 mkdir -p /export/software/ # 安装包存放路径 ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/2566619585.png) ### 5. 安装Java JDK 1.8 http://j.zmzaxg.top:8083/index.php?share/folder&user=1&sid=4UngI7dK<--JDK1.8文件资源 在三台主机上分开安装好 一. 将javaJDK1.8上传到hadoop1主机的/export/server/文件夹上,等一下我们要把JDK安装到这目录里面。 ```shell ls # 查看当前一下 tar -zxvf [文件名] #解压压缩包到当前文件夹下 ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/2566619585.png) 等待解压完成后,可以删除压缩包 ```shell rm -rf [文件名] # 删除文件 ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/1736656306.png) 接着命令 ```shell vi /etc/profile # 编辑环境变量文件 ## 在文件内容最后插入下面几行 export JAVA_HOME=/export/server/jdk1.8.0_361 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ``` wq保存退出,在终端输入 ```shell source /etc/profile # 重新加载环境变量文件 ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/3021281830.png) 完成上面步骤之后,再次键入 ```shell java -version # 查看java的信息 ``` 如下显示出java的版本信息就是安装好了; ![](https://www.zmzaxg.top/usr/uploads/2023/04/2968279678.png) ### SCP命令远程传输 后面的两台主机也可以按照上面步骤安装一遍,但是步骤会很多,我们可以使用scp命令来远程传输文件,会更加快更加方便: ```shell scp -r /export/server/jdk1.8.0_361/ root@hadoop2:/export/server/ scp /etc/profile root@hadoop2:/etc/ ## -r包含文件夹 root@hadoop2就是以远程主机hadoop2的 root用户身份; ## ``` 给hadoop2拷完再给hadoop3拷一份,下面结果可以参考一下 ![](https://www.zmzaxg.top/usr/uploads/2023/04/452738089.png) 最后再同时给三台主机发送java -version查看一下是否都有安装完成配置好 ![](https://www.zmzaxg.top/usr/uploads/2023/04/1666233882.png) ---到此,JavaJDK1.8就安装完成了,如有做错的话仔细检查一下就可以解决。 ### 6. 安装Hadoop - 集群规划 | 主机 | 角色 | | ----- | ----------- | | node1 | NN DN RM NM | | node2 | SNN DN NM | | node3 | DN NM | http://j.zmzaxg.top:8083/index.php?share/folder&user=1&sid=4UngI7dK<--hadoop3.3.1文件资源 安装和JavaJDK安装是一样的,把压缩包上传到/export/server里使用命令 ```shell tar -zxvf [文件名] # 解压到当前路径内 ``` 等待解压完成,使用ls查看解压出来的文件夹,然后rm删除压缩包。 ![](https://www.zmzaxg.top/usr/uploads/2023/04/3460966108.png) ```shell cd [文件夹] #进入hadoop3.3.1文件夹内 ``` 进入之后ls看一下,会有一些文件夹,目录结构如下图: ![](https://www.zmzaxg.top/usr/uploads/2023/04/1119510148.png) #### 配置hadoop文件 接下来我们要修改hadoop的配置文件, 依照我上述的状态下,路径在/export/server/hadoop-3.3.1/etc/hadoop/hadoop-env.sh ```shell cd /export/server/hadoop-3.3.1/etc/hadoop/ # 进入此路径 vi hadoop-env.sh # 编辑该文件 ## 将下面几行插入到最后面 export JAVA_HOME=/export/server/jdk1.8.0_361 ##指出JavaJDK所在的路径 #指定各个进程运行的用户名 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 ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/3087824073.png) 上面已经cd进入到了hadoop目录 我们直接 ```shell vi core-site.xml ##编辑 ``` 将下面几行xml的配置全复制到 ```xml <configuration> <!-- 复制到这标签内 --> </configuration> ``` 标签内 ```shell <!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop1:8020</value> </property> <!-- 设置Hadoop本地保存数据路径 --> <property> <name>hadoop.tmp.dir</name> <value>/export/data/hadoop-3.3.1</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> ``` wq保存退出 文件系统核心配置 ```shell vi hdfs-site.xml ``` 操作同上面操作,也是放property标签内: ```shell <!-- 设置SNN进程运行机器位置信息 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop2:9868</value> </property> ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/2120218097.png) wq保存退出 MapReduce模块 ```shell vi mapred-site.xml ``` 将下面xml配置放入标签内 ```shell <!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- MR程序历史服务地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop1:10020</value> </property> <!-- MR程序历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop1: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> ``` wq保存退出 YARN模块 ```shell vi yarn-site.xml ``` 操作同上面操作 ```shell <!-- 设置YARN集群主角色运行机器位置 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop1</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://hadoop1:19888/jobhistory/logs</value> </property> <!-- 历史日志保存的时间 7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> ``` wq保存退出 workers ip信息 ```shell vi workers ##编辑内容为主机,下面是我的配置 hadoop1.zmzaxg.top hadoop2.zmzaxg.top hadoop3.zmzaxg.top ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/1815277304.png) --到此,Hadoop的配置就完成了 ---同时我们的第一台hadoop1主机安装配置都ok了 #### 分发同步 后面我们还要给另外两台主机也配置好,如果再次重复操作就会很繁琐。 下面就使用分发同步操作 第一步我们先cd到server ```shell cd /export/server ##切换到路径 #####scp 拷贝到远程主机上 scp -r hadoop-3.3.1 root@hadoop2:$PWD scp -r hadoop-3.3.1 root@hadoop3:$PWD ``` 最后检查一下另外两台主机上是否多了hadoop文件夹 ![](https://www.zmzaxg.top/usr/uploads/2023/04/3463344667.png) 拷完了我们再接着同时给三台主插入系统环境变量 ```shell vi /etc/profile #####在内容最后面插入下面内容 export HADOOP_HOME=/export/server/hadoop-3.3.1 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin ``` ![](https://www.zmzaxg.top/usr/uploads/2023/04/1250800488.png) 然后使用命令重载一下三台主机的profile配置文件 ```shell source /etc/profile #重载一下配置文件 ##### hadoop ##使用hadoop命令,检查一下有没有正确配置输出hadoop指令使用说明 ``` ### 7. 格式化操作(初始化)!!!!! ### NameNode format (1). 首次搭建使用之前我们需要format(初始化)操作 (2). format只能进行一次,后续不再需要 (3). 多次format会造成数据丢失,hdfs集群主从角色之间互不识别;如果发生,可以通过删除所有机器hadoop.tmp.dir目录重新format解决 ```shell #####只在主角色主机内使用下面命令来初始化操作 hdfs namenode -format ``` 操作好等待结束,检查一下输出内容有下面图片标出的就表示已经初始化成功了(!!!千万不要在次操作!!!) ![](https://www.zmzaxg.top/usr/uploads/2023/04/3700813504.png) 以上步骤结束就是初次搭建启动的完成,后面就可以瞎锅巴玩耍hadoop了!! | ---!!恭喜你,完成了Hadoop搭建!!--- | | --------------------------------- | ### 8.hadoop初体验 #### 启停命令和脚本 ##### 手动逐个进程控制 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/2376601556.png) ##### shell一键启停 + HDFS集群 + start-dfs.sh + stop-dfs.sh + YARN集群 + start-yarn.sh + stop-yarn.sh + Hadoop集群 + start-all.sh + stop-all.sh #### 启停使用 如果在启动那段时间jps查看进程存在,过一会进程没了就是配置不正确导致的闪退,如果发生,可以到hadoop的启动日志看看:/export/server/hadoop-3.3.1/logs/ ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/4178055418.png) ##### 一键脚本 start-all.sh 红框为HDFS集群进程,还有个辅助角色SecondaryNameNode ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/3745296857.png) stop-all.sh ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/3859117107.png) ##### 分集群类型一键脚本 我们先到hadoop1使用HDFS的一键启动脚本 ```shell start-dfs.sh ``` ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/2458645919.png) 然后我们使用javaps看一下进程 ```shell jps ``` 可以看到一主一从的NameNode和DataNode ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/3571616149.png) 看看hadoop2和hadoop3 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/2061156768.png) 如上面图片一样HDFS集群就是成功启动了,接着再去启动第二个YARN集群 到hadoop1使用一键脚本启动 ```shell start-yarn.sh ``` 等待主角色和nodemanagers从角色启动好 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/3552610915.png) javaps看一下进程:jps ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/1031552340.png) 到另外两台主机看看从角色有没有启动 有NodeManager进程存在即成功! ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/2541175712.png) ##### hadoop集群的web + HDFS集群 + 地址:http://namenode_host:9870 + 即主机加端口9870,可以用配置的hostname或者ip + 用于集群总览概况,集群配置信息显示,最常用的就是=》`Utilities` =》 `Browse the file system` 里面的文件系统,来上传文件下载文件以及对文件管理和浏览 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/3941257583.png) + YARN集群 + 地址:http://resourcemanager_host:8088 + 即主机加端口8088,可以用配置的hostname或者ip + 这里会显示当前集群的执行程序,用于方便监控集群中的资源,时间,状况 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/05/3763960157.png) #### HDFS初体验 。。。 最后修改:2024 年 08 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 3 觉得文章有用,可以赞赏请我喝瓶冰露