【无标题】第二章 Hadoop3安装
2.1 启动Docker容器2.1.1 加载镜像用来将一个Docker镜像从/cg/images/hadoop_node.tar.gz压缩包加载到本地Docker环境里面docker load /cg/images/hadoop_node.tar.gz运行结果如下docker run --name master --privileged --ulimit nofile65535:65535 --hostname master --ip 172.18.0.2 --add-hostslave1:172.18.0.3 --add-hostslave2:172.18.0.4 --add-hostslave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro -v /headless/course/:/course hadoop_node /service_start.sh docker run --name slave1 --privileged --ulimit nofile65535:65535 --hostname slave1 --ip 172.18.0.3 --add-hostmaster:172.18.0.2 --add-hostslave2:172.18.0.4 --add-hostslave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh docker run --name slave2 --privileged --ulimit nofile65535:65535 --hostname slave2 --ip 172.18.0.4 --add-hostmaster:172.18.0.2 --add-hostslave1:172.18.0.3 --add-hostslave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh docker run --name slave3 --privileged --ulimit nofile65535:65535 --hostname slave3 --ip 172.18.0.5 --add-hostmaster:172.18.0.2 --add-hostslave1:172.18.0.3 --add-hostslave2:172.18.0.4 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.shdocker run创建并启动一个docker容器--name master容器的名字叫master--privileged赋予容器特权模式。允许它访问主机上所有设备。--ulimit nofile65535:65535设置容器的最大文件描述符数量软限制/硬限制。默认值较小HadoopHDFS等大数据组件会频繁打开文件/网络连接必须调高避免“too many open files”错误。--hostname master定义容器内主机名为 master。--ip 172.18.0.2手动分配静态IP地址适用于需要固定IP的集群(很多台电脑组成的一个集合)环境。--add-host将 slave1、slave2、slave3 的IP映射写入容器内的 /etc/hosts 文件实现主机名解析加入集群。-v /cgsrc:/cgsrc: ro 将主机的 /cgsrc 目录以只读模式挂载到容器内相同路径。-v /headless/course/:/course 将主机目录 /headless/course/ 挂载到容器的 /course 目录默认读写权限。hadoop_node指定使用的Docker镜像名称。/service_start.sh是容器启动后自动执行的脚本通常用于初始化服务如启动Hadoop集群。-itd组合参数表示以交互终端模式后台运行容器。2.1.2 启动容器docker ps查看所有启动的容器docker ps -a查看所有容器docker start容器的名字启动容器2.1.3 进入容器docker exec -it --privileged 容器的名字 /bin/bash 进入容器2.2 配置java环境2.2.1 创建java文件夹cd 文件夹切换目录mkdir 创建的文件夹创建文件2.2.2 复制文件cp 被复制文件的地址及文件名 粘贴到的地址 复制文件cp /cgsrc/jdk-8u171-linux-x64.tar.gz /usr/local/java/ls 列出目录下内容默认仅显示文件名/目录名常用选项-l 显示详细信息-a 显示隐藏文件-h 人类可读的文件大小ll列出目录下内容ls -l的别名显示权限、所有者、大小等详细信息2.2.3 解压tar -zxvf 压缩包的名字解压tar -zxvf jdk-8u171-linux-x64.tar.gz2.2.4 删除rm -f要删除的文件名 删除文件-r递归删除目录-f强制删除rm -f jdk-8u171-linux-x64.tar.gz2.2.5 编辑环境变量vim 文件的名字 编辑文件的内容vimvim ~/.bashrc进入文件过后(i进入insert模式 esc退出模式wq!退出编辑2.2.6 让环境变量生效source ~/.bashrc #让环境变量生效 echo $JAVA_HOME #检验变量值 java -version #查看java版本2.3 配置分布式模式HDFSNameNode(1个) DataNode(多个) SecondaryNameNode(1个尽量不要与NN安装在同一台服务器)YARNResourceManager(1个) 很消耗内存尽量不要和NN2NN放在同一台服务器上。NodeManager(多个)hadoop1hadoop2hadoop3hadoop4NameNodeDataNodeDataNodeDataNodeSecondaryNodeNameNodeNodeManagerResourcdManagerNodeManagerNodeManager2.3.1 准备工作ifconfig 接口名 行为 用于配置和显示网络接口信息ifconfig #显示所有网络接口信息 ifconfig I0 #显示特定接口信息 ifconfig I0 up #启用网络接口 ifconfig I0 down #禁用网络接口 ifconfig I0 192.168.1.100 #为接口分配IP地址IP地址与Mask地址区IP地址Mask地址用于标识网络中的设备。分为IPv432位和IPv6128位包含网络部分和主机部分具体划分由子网掩码决定用于划分IP地址的网络部分和主机部分由连续的1网络位和0主机位组成。与IP地址进行按位“与”运算可得到网络地址。IP地址标识设备Mask地址定义网络范围IP地址可变Mask地址通常由网络规划固定ping ip地址 ICMP协议测试两台计算机之间的连通性(OSI第三层ping master2.3.2 SSH(Secure Shell安全外壳协议)一台电脑控制另一台电脑(有密码)第一步客户端生成密钥对(私钥)和(公钥)。第二步客户端发送公钥到服务器运行第三步服务器用公钥加密1.生成公钥和私钥cd ~/.ssh #到.ssh目录中ssh-keygen -t rsa #执行该命令后遇到提示信息均按Enter即一键获取完整项目代码.ssh文件夹下的文件功能解:known_hosts 记录ssh访问过计算机的公钥(public key)id_rsa 生成的私钥id_rsa.pub 生成的公钥authorized_keys 存放授权过的无密码登录服务器公钥2.将公钥文件追加到另一个文件authorized_keys中cat 文件名 显示文件内容cat 文件名1 合并后文件名 合并文件cat ./id_rsa.pub ./authorized_keys #完成后可以执行 ssh 本机 来验证一下可能会遇到提示信息只要输入 yes 即可测试成功后执行 exit 命令返回原来的终端。3.scp 一台电脑文件地址用户是root另一台台电脑:文件复制到的路径 将公钥复制到被控制电脑scp ~/.ssh/id_rsa.pub rootslave1:/root #scp从一台电脑的/.ssh/id_rsa.pub的文件复制到slave1这台电脑上用户是root,放到了slave1里面的/root这个路径下面 #执行scp复制文件时会要求输入相应的slave的密码默认为83953588abc #要在本机控制别人的上执行安全拷贝1.从hadoop102服务器上将本服务器的文件推给hadoop103:scp -r jdkı.8.0_212/ roothadoop103:/opt/module/2.在hadoop103服务器上操作将hadoop102的文件拿过来scp -r roothadoop102:/opt/module/jdkı.8.0_212/ ./同理hadoop也可以这么操作scp -r roothadoop102:/opt/module/hadoop-3.1.3/ ./scp rootmaster:/root/.ssh/id_rsa.pub ~/3.在103服务器上将102的文件拷贝到104scp -r roothadoop102:/opt/module/* roothadoop104:/opt/module/scp rootmaster:/root/.ssh/id_rsa.pub rootslave3:/root4.传输完成后在被控制电脑上将SSH公钥加入授权cat ~/id_rsa.pub ~/.ssh/authorized_keys rm -f ~/id_rsa.pub这样就可以在控制电脑上无密码 ssh 被控制电脑 登录到各个被控制电脑了。2.4 安装Hadoop并配置环境2.4.1 安装Hadoop1.将hadoop包复制到/usr/local下面cp /cgsrc/hadoop-3.4.0.tar.gz /usr/local/2.解压tar 解压压缩-z 使用gzip解压× 解压文件c 压缩文件v 显示解压过程f 指定文件名tar -zxvf hadoop-3.4.0.tar.gz3.修改名字mv 旧的名字 新名字 移动/重命名文件mv hadoop-3.4.0 hadoop4.修改配置文件vim /.bashrc在配置文件添加hadoop的相关路径让配置文件生效5.查看hadoop的版本hadoop version1.bin:存放操作命令具体包含如(hdfs,mapred,yarn)2.etc:所有配置文件3.include:头文件4.Iib:本地库(native库) 压缩的动态链接5.libexec:拓展库6.sbin:集群相关的命令7.share:学习的资料文档2.4.2 配置集群环境/usr/local/hadoop/etc/hadoop/的配置文件下的workers(DataNode节点)core-site.xml 整个集群的核心配置hdfs-site.xml 配置hdfsmapred-site.xml 配置mapreduceyarn-site.xml 配置yarnhadoop-env.sh1.编辑workersvim workersmaster slave1 slave2 slave32.修改core-site.xmlconfiguration !--默认文件系统的URI地址(内部接口) -- property namefs.defaultFS/name valuehdfs://master:9000/value /property !--临时工作目录(默认一个月就删除) -- property namehadoop.tmp.dir/name valuefile:/usr/local/hadoop/tmp/value /property /configuration3.配置hdfsconfiguration !--secondary namenode -- property namedfs.namenode.secondary.http-address/name valuemaster:50090/value /property !--hdfs 存数据的份数 -- property namedfs.replication/name value3/value /property !--namenode 元数据所在的物理地址 -- property namedfs.namenode.name.dir/name valuefile:/usr/local/hadoop/tmp/dfs/name/value /property !--datanode数据 存储的物理地址 -- property namedfs.datanode.data.dir/name valuefile:/usr/local/hadoop/tmp/dfs/data/value /property /configuration4.配置mapreduceconfiguration !--mapreduce程序运行在yarn上 -- property namemapreduce.framework.name/name valueyarn/value /property !--job的历史服务器端地址内部通讯端口 -- property namemapreduce.jobhistory.address/name valuemaster:10020/value /property !--历史服务器web端地址 -- property namemapreduce.jobhistory.webapp.address/name valuemaster:19888/value /property /configuration5.配置yarnconfiguration !--指定yarn ResourceManager主机名客户端等通过该主机名访问RM -- property nameyarn.resourcemanager.hostname/name valuemaster/value /property !--配置NodeManager的辅助服务这里是YARN上运行MapReduce的必须配置 -- property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property !--NodeManager监控本地磁盘的健康状况(磁盘上限98.5) -- property nameyarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage/name value98.5/value /property /configuration2.4.3 配置slave节点1.将/usr/local/下面的hadoop文件压缩成hadoop.master.tar.gz,并放到root文件夹下tar -zcvf ~/hadoop.master.tar.gz ./hadoop2.将master这台机器上的root/hadoop.master.tar.gz这个压缩包上传复制到slave1这台机器的/root路径下并且登录slave1的账户是root3.将~/hadoop.master.tar.gz的这个文件解压而且解压到/usr/local文件夹下面tar -zxvf ~/hadoop.master.tar.gz -C /usr/local/4.格式化节点配置集群的时候执行一次hdfs namenode -format5.启动hdfsstart-dfs.sh #启动 stop-dfs.sh #关闭 jps #jps用于列出当前系统所有正在运行的 Java 虚拟机进程及其 PIDusr/local/hadoop/sbin/目录下master节点:namenode secondarynamenode DataNode(workers如果有localhost就有)slave1,2,3 :datanode如果没有说明(core-site.xml hdfs-site.xml等有问题)172.18.0.2:9870 在浏览器web中查看节点状态6.启动yarn必须是在启动了hdfs的前提条件下start-yarn.sh #启动 stop-yarn.sh #关闭master节点resourcemanagernodemanagerslave123nodemanager172.18.0.28088在浏览器web中查看节点状态2.5 环境测试启动hdfs start-dfs.shnamenode(1个) secondary namenode (1个)datanode(slave1 slave2 slave3 master)启动yarn start-yarn.shresoucemanager(1个) nodemanager(slave1.2.3 master)启动顺序:start-dfs.sh 》 start-yarn.sh关闭的顺序:stop-yarn.sh 》 stop-dfs.sh172.18.0.2:9870 172.18.0.2(namenode所在机器的ip) 9870是默认的web端访问hdfs的端口号172.18.0.2.8088 172.18.0.2(resouce manager所在电脑的ip地址) 8088是默认的web端访问yarn的端口号2.5.1 测试hdfs上传文件1.创建一个本地文件csh.txtvi 文件名名字2.创建一个hdfs的文件夹hadoop fs -mkdir 文件夹的路径和名字3.将本地文件上传到hdfs系统里面的文件夹里hadoop fs -put 本地文件的路径和名字 要上传到hdfs这个系统的具体路径4.查看文件是否上传成功引入QQ邮箱 123456qq.com逻辑地址并非真正意义上存放文件的地址如上QQ邮箱物理地址真实存放文件的地址hdfs系统逻辑地址:/cInput/csh.txt物理地址:hdfs里面配置的/usr/local/hadoop/tmp/dfs/data/usr/local/hadoop/tmp/dfs/data/current/BP-138730807-172.18.0.2-1774329732458/current/finalized/subdir0/subdir0问题:hdfs存放数据(datanode真正存放数据的节点)hdfs默认存3份存哪几个机器上如下图:存放位置在masterslave3slave1上面(不同电脑有不同分配)pwd 用于显示用户当前所处的完整工作目录路径2.5.2 测试大文件上传1.本地有一个大文件2.在HDFS系统里面创建一个新的文件夹3.本地大文件上传到新的文件夹4.查看反思hdfs系统存放文件是按照块存储。如果是大文件分成多个块分别存储。hdfs:/bigFiles/jdk-8u171-linux-x64.tar.gz物理地址:/usr/local/hadoop/tmp/dfs/datacat blk_1073741826 tmp.tar.gz #将其追加到tmp.tar.gztar -zxvf tmp.tar.gz #解压2.5.3 wordcount测试副线任务修改配置文件mapred-site.xml (在matser slave1 slave2 slave3上都执行)为什么配这些属性在mapred-site.xml中配置下列属性主要是为了确保MapReduce作业在YARN环境下运行时能够正确找到Hadoop的相关路径和依赖库。这些属性的具体用途如下yarn.app.mapreduce.am.env该属性用于设置MapReduce ApplicationMasterAM进程的环境变量。AM负责协调MapReduce作业的执行包括任务的调度和监控。通过设置HADOOP_MAPRED_HOMEAM能够定位Hadoop的安装路径从而加载必要的库和配置文件。mapreduce.map.env该属性用于设置Map任务的环境变量。Map任务在执行时需要访问Hadoop的核心库和配置文件HADOOP_MAPRED_HOME的配置确保了任务能够正确加载这些资源。mapreduce.reduce.env该属性用于设置Reduce任务的环境变量。与Map任务类似Reduce任务也需要访问Hadoop的核心库和配置文件HADOOP_MAPRED_HOME的配置确保了任务能够正确加载这些资源。HADOOP_MAPRED_HOME/usr/local/hadoop表示Hadoop的安装路径为/usr/local/hadoop。?xml version1.0? ?xml-stylesheet typetext/xsl hrefconfiguration.xsl? !-- Licensed under the Apache License, Version 2.0 (the License); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. -- !-- Put site-specific property overrides in this file. -- configuration !--mapreduce程序运行在yarn上 -- property namemapreduce.framework.name/name valueyarn/value /property !--job的历史服务器端地址内部通讯端口 -- property namemapreduce.jobhistory.address/name valuemaster:10020/value /property !--历史服务器web端地址 -- property namemapreduce.jobhistory.webapp.address/name valuemaster:19888/value /property !-- 设置MapReduce Application Master环境变量 -- property nameyarn.app.mapreduce.am.env/name valueHADOOP_MAPRED_HOME/usr/local/hadoop/value /property !-- 设置Map任务执行时的环境变量 -- property namemapreduce.map.env/name valueHADOOP_MAPRED_HOME/usr/local/hadoop/value /property !-- 设置Reduce任务执行时的环境变量 -- property namemapreduce.reduce.env/name valueHADOOP_MAPRED_HOME/usr/local/hadoop/value /property /configuration主线任务2.5.1上传了HDFS(/cInput/csh.txt)小文件,我们统计这个文件里面每个单词出现的频率1.确保你的HDFS系统里面/cInput/csh.txt这个文件是存在的2.测试wordcount是否可以执行成果cd /usr/local/hadoop/share/hadoop/mapreduce/hadoop jar jar包的名字 调用方法的名字(wordcount) 输入路径 (/cInput/csh.txt这个输入文件必须存在) 输出路径(必须不存在,如果已经存在会报错) 在 Hadoop 集群上运行指定的 Jar 包程序调用其中的特定方法处理输入路径中的数据并将结果写入输出路径hadoop jar hadoop-mapreduce-examples-3.4.0.jar wordcount /cInput/csh.txt /cOutput #调用Hadoop的wordcount方法对输入文件/cInput/csh.txt进行词频统计并将结果输出到/cOutput目录3.解读wordcount运行过程和结果展示mapreducemapreduce 先动map再动reduce如上是否成功job completed successfully多了一个cOutput说明有输出如下真正的输出结果在part-r-00000里面4.查看结果hadoop fs -cat 文件路径和文件名 查看hdfs中文件的内容拓展1.常用端口号hadoop 3.xHDFS NameNode内部通道端口8020/9000/9820HDFS NameNode对用户的查询端口9870Yarn查看任务运行情况的端口8088历史服务器19888hadoop2xHDFS NameNode内部通常端口8020/9000HDFS NameNode对用户的查询端口50070Yarn查看任务运行情况的端口8088历史服务器198882.常用的配置文件hadoop 3.xcore-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers (/hadoop/etc/hadoop)hadoop 2.xcore-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slaves