Hadoop7.08
2021/7/10 23:08:29
本文主要是介绍Hadoop7.08,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
昨日内容概要
-
Hadoop环境准备
1.解压hadoop压缩包(2.X版本) 2.配置环境变量并重新加载 3.检测是否正常启动
-
Hadoop目录结构
bin 程序文件 etc 配置文件 share 说明文档 sbin 操作命令 readme 产品说明
-
Hadoop官网案例
1.grep过滤案例 hadoop jar share/.... grep 目标文件 输出位置 2.wordcount统计案例 hadoop jar share/.... word 目标文件 输出位置
-
异常情况
服务无法正常启动或者中途自动结束的情况 1.配置文件书写格式不到位 2.计算机硬件设备要求不够
-
伪分布式
分布式:将一个整体拆分成多个个体分撒在不同的机器上运行 伪分布式:用一台机器模拟多台机器的效果 完全分布式:真正的使用多台机器 说白了 在linux中所有的功能基本都是靠配置文件的形式来实现 hadoop/etc/hadoop2.X 配置文件常见后缀名 .xml .ini .conf 常见软件端口号 50070 # hadoop hdfs 8088 # hadoop yarn/mapreduce 3306 # MySQL 6379 # redis 27017 # mongodb
-
完全分布式
1.多台机器准备 2.文件拷贝 全量拷贝 scp 增量拷贝 rsync 3.如何高效管理多台机器 自定义内容分发脚本(shell语言) 1.脚本文件代码格式 2.修改文件权限chmod
今日内容概要
-
完全分布式环境搭建
可能会出现你们的机器无法操作的局面 不停的使用jps查看 哪个服务停了就去启动
-
配置集群
-
单点启动
一台台机器依次启动(效率低下 不推荐)
-
ssh配置
公钥私钥交互
-
群起配置
一台机器可以操作集群所有机器(实际工作推荐)
今日内容详细
完全分布式(开发重点)
1)准备 3台客户机 2)安装 JDK 3)配置环境变量 4)安装 Hadoop 5)配置环境变量 6)配置集群 7)单点启动 8)配置 ssh 9)群起并测试集群 详细: 1)准备 3台客户机(关闭防火墙、静态 ip、主机名称) 克隆机器修改主机名和主机IP地址 2)安装 JDK 利用scp命令拷贝数据文件至三个客户机 scp -r /opt/module root@hadoop102:/opt/module scp -r /opt/module root@hadoop103:/opt/module scp -r /opt/module root@hadoop104:/opt/module """ 也可以在A机器将B机器文件拷贝给C机器 scp -r root@hadoop101:/opt/module root@hadoop103:/opt/module """ # 扩展:拷贝文件的命令有scp(全量拷贝)、rsync(增量拷贝) """ scp(全量拷贝) scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname 命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称 rsync(增量拷贝) rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname 命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称 参数详解 r 递归 v 显示复制过程 l 拷贝符号连接 """ 3)配置环境变量 1.利用scp命令拷贝环境变量文件至三个客户机 scp /etc/profile root@hadoop102:/etc/profile scp /etc/profile root@hadoop103:/etc/profile scp /etc/profile root@hadoop104:/etc/profile 2.source文件配置 source /etc/profile 3.验证是否成功 java 4)扩展:集群分发脚本 复制文件到所有节点的相同目录下 1.在/usr/local/bin下创建sync文件并填写以下内容 [jason@hadoop102 ~]$ cd /usr/local/bin [jason@hadoop102 bin]$ touch xsync [jason@hadoop102 bin]$ vi xsync """ 文件内容 #!/bin/bash #1 获取输入参数个数,如果没有参数,直接退出 pcount=$# if((pcount==0)); then echo no args; exit; fi #2 获取文件名称 p1=$1 fname=`basename $p1` echo fname=$fname #3 获取上级目录到绝对路径 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir #4 获取当前用户名称 user=`whoami` #5 循环 for((host=103; host<105; host++)); do echo ------------------- hadoop$host -------------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done """ 2.修改权限 chmod 777 xsync 3.测试 在当前机器随便找一个其他机器没有的目录 xsync test/ 5)集群配置 集群部署规划 hadoop102 hadoop103 hadoop104 HDFS NameNode/DataNode DataNode SecondaryNameNode/DataNode YARN NodeManager ResourceManager/NodeManager NodeManager '''在102上修改,然后用xsync脚本直接同步''' 1.配置 core-site.xml(修改主机名即可) [jason@hadoop102 hadoop]$ vi core-site.xml """ <!-- 指定 HDFS 中 NameNode 的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9000</value> </property> <!-- 指定 Hadoop 运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property> """ 2.HDFS 配置文件 1.配置 hadoop-env.sh [jason@hadoop102 hadoop]$ vi hadoop-env.sh """内容(有就不用改了) export JAVA_HOME=/opt/module/jdk1.8.0_144 """ 2.配置 hdfs-site.xml(将伪分布式配置删除添加下列配置) [jason@hadoop102 hadoop]$ vi hdfs-site.xml """内容 <!-- 指定 Hadoop 辅助名称节点主机配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:50090</value> </property> """ 3.YARN 配置文件 1.配置 yarn-env.sh [jason@hadoop102 hadoop]$ vi yarn-env.sh """内容(有就不用改了) export JAVA_HOME=/opt/module/jdk1.8.0_144 """ 2.配置 yarn-site.xml(修改主机名即可) [jason@hadoop102 hadoop]$ vi yarn-site.xml """内容 <!-- Reducer 获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定 YARN 的 ResourceManager 的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> """ 4.MapReduce 配置文件 1.配置 mapred-env.sh [jason@hadoop102 hadoop]$ vi mapred-env.sh """内容(伪分布式配了就不用改了) export JAVA_HOME=/opt/module/jdk1.8.0_144 """ 2.配置 mapred-site.xml(伪分布式配了就不用改了) [jason@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml [jason@hadoop102 hadoop]$ vi mapred-site.xml """内容 <!-- 指定 MR 运行在 Yarn 上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> """ 3.在集群上分发配置好的 Hadoop 配置文件 [jason@hadoop102 etc]$ xsync hadoop/ 4.查看文件分发情况 [jason@hadoop103 hadoop]$ cat /opt/module/hadoop- 2.7.2/etc/hadoop/core-site.xml
集群单点启动
1.如果集群是第一次启动,需要格式化 NameNode(我们不是 因为前面弄了伪分布式) [jason@hadoop102 hadoop-2.7.2]$ hadoop namenode -format """ 如果集群不是第一次启动,需要删除data和logs目录 [jason@hadoop102 hadoop-2.7.2]$ rm -rf data/ logs/ [jason@hadoop103 hadoop-2.7.2]$ rm -rf data/ logs/ [jason@hadoop104 hadoop-2.7.2]$ rm -rf data/ logs/ """ 2.在 hadoop102 上启动 NameNode和DataNode [jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode [jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode 3.去103和104启动datanode(namenode就一个) [jason@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode [jason@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode 4.浏览器验证 hadoop102:50070
集群ssh配置
""" 上述单点启动的方式每次都一个一个节点启动 如果节点数量很多该如何解决 """ # 公钥私钥工作原理 # 知识补充:查看know_hosts文件(访问过的主机地址) [jason@hadoop102 ~]$ ll # 无法查看 [jason@hadoop102 ~]$ ls -al # 可以查看 [jason@hadoop102 ~]$ cd .ssh [jason@hadoop102 .ssh]$ ll [jason@hadoop102 .shh]$ cat known_hosts # 生成公钥私钥 [jason@hadoop102 .ssh]$ ssh-keygen -t rsa # 连续回车即可 # 将102公钥拷贝到103和104 [jason@hadoop102 .shh]$ ssh-copy-id hadoop103 [jason@hadoop102 .shh]$ ssh-copy-id hadoop104 """ hadoop103中的.ssh在拷贝前后文件是有变化的 hadoop104中的.ssh在拷贝前后文件是有变化的 """ # 免密直接访问103和104 ssh hadoop103/hadoop104 # 自己用ssh访问自己也需要输入密码,可以采用相同措施解决 [jason@hadoop102 .shh]$ ssh-copy-id hadoop102 # 由于hadoop103上有一个resurcemanage所以也需要配置ssh [jason@hadoop103 .ssh]$ ssh-keygen -t rsa [jason@hadoop103 .shh]$ ssh-copy-id hadoop102 [jason@hadoop103 .shh]$ ssh-copy-id hadoop103 [jason@hadoop103 .shh]$ ssh-copy-id hadoop104
集群群起
1.配置 文件位置:/opt/module/hadoop-2.7.2/etc/hadoop/slaves [jason@hadoop102 hadoop]$ vi slaves """内容(内容清空再添加) hadoop102 hadoop103 hadoop104 """ # 注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。 2.同步所有节点配置文件 [jason@hadoop102 hadoop]$ xsync slaves 3.将之前单节点启动的datanode、namenode全部退出 [jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode [jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop namenode [jason@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode [jason@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode 4.启动HDFS [jason@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh 5.验证每个节点对于启动的服务 jps查看照着之前的表格比较不能出错 6.启动yarn(一定要在hadoop103上启动 因为rm在这里) """ 这里需要将hadoop03的公钥分别发送给hadoop102、hadoop103、hadoop104 """ [jason@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh 7.验证每个节点对于启动的服务 jps查看照着之前的表格比较不能出错
集群测试
1.上传文件到集群 1.小文件 [jason@hadoop102 hadoop-2.7.2]$ bin/hdfs dfs -put wcinput/wc.input / 2.大文件 [jason@hadoop102 hadoop-2.7.2]$ bin/hdfs dfs -put /opt/software/hadoop-2.7.2.tar.gz / 3.浏览器界面测试
集群启动停止总结
1. 各个服务组件逐一启动/停止 (1)分别启动/停止 HDFS 组件 hadoop-daemon.sh start/stop namenode/datanode/ secondarynamenode (2)启动/停止 YARN yarn-daemon.sh start /stop resourcemanager/nodemanager 2. 各个模块分开启动/停止(配置 ssh 是前提)常用 (1)整体启动/停止 HDFS start-dfs.sh/stop-dfs.sh (2)整体启动/停止 YARN start-yarn.sh/stop-yarn.sh
集群时间同步
时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时 的同步,比如,每隔十分钟,同步一次时间 1. 时间服务器配置(必须 root 用户) (1)检查 ntp 是否安装 [root@hadoop102 hadoop-2.7.2]# rpm -qa | grep ntp (2)修改 ntp 配置文件 [root@hadoop102 hadoop-2.7.2]# vi /etc/ntp.conf a)修改1(授权 192.168.1.0-192.168.1.255 网段上的所有机器可以从这台机器上查 询和同步时间) # 解开注释 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap b)修改2(集群在局域网中,不使用其他互联网上的时间) # 加上注释 #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群 中的其他节点提供时间同步) server 127.127.1.0 fudge 127.127.1.0 stratum 10 (3)修改/etc/sysconfig/ntpd 文件 [root@hadoop102 hadoop-2.7.2]$ vim /etc/sysconfig/ntpd 增加内容如下(让硬件时间与系统时间一起同步) SYNC_HWCLOCK=yes (4)重新启动 ntpd 服务 [root@hadoop102 桌面]$ service ntpd start [root@hadoop102 桌面]$ service ntpd status (5)设置 ntpd 服务开机启动 [root@hadoop102 桌面]$ chkconfig ntpd on 2. 其他机器配置(必须 root 用户) 分 时 日 月 周 (1)在其他机器配置 1 分钟与时间服务器同步一次 root@hadoop103 hadoop2-7.2]$ crontab -e 编写定时任务如下: */1 * * * * /usr/sbin/ntpdate hadoop102 (2)修改任意机器时间 [root@hadoop103 ~]$ date -s "2020-11-11 11:11:11" (3)一分钟后查看机器是否与时间服务器同步 [root@hadoop103 ~]$ date # 测试的时候可以将 10 分钟调整为 1 分钟,节省时间。 (4)主动同步时间 [root@hadoop103 root]$ /usr/sbin/ntpdate hadoop102
Hadoop源码编译
""" 我们从apche官网下载的hadoop包是32位的,如果我们需要将其编译成64位 可以在centos64位的环境下编译之后就会是64位并且在编译过程中还可以加入一些额外的功能 """ 1.前期准备工作 1.1.CentOS 联网 1.2.jar包准备(hadoop 源码、JDK8、maven、ant 、protobuf) 1)hadoop-2.7.2-src.tar.gz 2)jdk-8u144-linux-x64.tar.gz 3)apache-ant-1.9.9-bin.tar.gz(build 工具,打包用的) 4)apache-maven-3.0.5-bin.tar.gz 5)protobuf-2.5.0.tar.gz(序列化的框架) 2.jar包安装 2.1.JDK解压、配置环境变量 JAVA_HOME 和 PATH,验证 java-version(如下都需要验证是否配置成功) [software] tar -zxf jdk-8u144-linux- x64.tar.gz -C /opt/module/ [software] vi /etc/profile #JAVA_HOME: export JAVA_HOME=/opt/module/jdk1.8.0_144 export PATH=$PATH:$JAVA_HOME/bin [software] source /etc/profile 验证命令:java-version 2.2.Maven 解压、配置 MAVEN_HOME 和 PATH [software] tar -zxvf apache-maven-3.0.5- bin.tar.gz -C /opt/module/ [apache-maven-3.0.5] vi conf/settings.xml <mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</ur l> </mirror> </mirrors> [apache-maven-3.0.5] vi /etc/profile #MAVEN_HOME export MAVEN_HOME=/opt/module/apache-maven-3.0.5 export PATH=$PATH:$MAVEN_HOME/bin [software] source /etc/profile 验证命令:mvn -version 2.3.ant 解压、配置 ANT _HOME 和 PATH [software] tar -zxvf apache-ant-1.9.9- bin.tar.gz -C /opt/module/ [apache-ant-1.9.9] vi /etc/profile #ANT_HOME export ANT_HOME=/opt/module/apache-ant-1.9.9 export PATH=$PATH:$ANT_HOME/bin [software] source /etc/profile 验证命令:ant -version 2.4.安装 glibc-headers 和 g++ 命令如下 [apache-ant-1.9.9] yum install glibc-headers [apache-ant-1.9.9] yum install gcc-c++ 2.5.安装 make 和 cmake [apache-ant-1.9.9] yum install make [apache-ant-1.9.9] yum install cmake 2.6.解压 protobuf ,进入到解压后 protobuf 主目录,/opt/module/protobuf-2.5.0,然后相继执行命令 [software] tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/ [opt] cd /opt/module/protobuf-2.5.0/ [protobuf-2.5.0] ./configure [protobuf-2.5.0] make [protobuf-2.5.0] make check [protobuf-2.5.0] make install [protobuf-2.5.0] ldconfig [hadoop-dist] vi /etc/profile #LD_LIBRARY_PATH export LD_LIBRARY_PATH=/opt/module/protobuf-2.5.0 export PATH=$PATH:$LD_LIBRARY_PATH [software] source /etc/profile 验证命令:protoc --version 2.7.安装 openssl 库 [software] yum install openssl-devel 2.8.安装 ncurses-devel 库 [software] yum install ncurses-devel 3.编译源码 1.解压源码到/opt/目录 [software] tar -zxvf hadoop-2.7.2-src.tar.gz -C /opt/ 2.进入到 hadoop 源码主目录 [hadoop-2.7.2-src] pwd /opt/hadoop-2.7.2-src 3.通过 maven 执行编译命令(大概需要30分钟) [hadoop-2.7.2-src] mvn package -Pdist,native - DskipTests -Dtar 4.成功的64位hadoop包在/opt/hadoop-2.7.2-src/hadoop-dist/target下 [target] pwd /opt/hadoop-2.7.2-src/hadoop-dist/target 5.编译源码过程中常见的问题及解决方案 1.MAVEN install 时候 JVM 内存溢出 处理方式:在环境配置文件和 maven 的执行文件均可调整 MAVEN_OPT 的 heap 大 小。(详情查阅 MAVEN 编译 JVM 调优问题,如:http://outofmemory.cn/code- snippet/12652/maven-outofmemoryerror-method) 2.编译期间 maven 报错。可能网络阻塞问题导致依赖库下载不完整导致,多次执行命 令(一次通过比较难): mvn package -Pdist,nativeN -DskipTests -Dtar 3.报 ant、protobuf 等错误,插件下载未完整或者插件版本问题,最开始链接有较多特 殊情况,同时推荐
这篇关于Hadoop7.08的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2023-05-13Windows下hadoop环境搭建之NameNode启动报错
- 2023-04-14hadoop伪分布式集群的安装(不是单机版)
- 2022-12-05Hadoop生态系统—数据仓库Hive的安装
- 2022-11-02Win10搭建Hadoop环境
- 2022-10-19Hadoop生态系统(数据仓库Hive的安装)
- 2022-10-03Hadoop、storm和Spark Streaming简单介绍
- 2022-10-03胖虎的Hadoop笔记——Hadoop的伪分布式部署
- 2022-09-11Ubuntu搭建全分布式Hadoop
- 2022-09-11Ubuntu搭建全分布式Hadoop
- 2022-09-09Ubuntu下安装伪分布式HADOOP遇到的一些问题