申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址
全文共计21000字,阅读大概需要10分钟
欢迎关注我的个人公众号:不懂开发的程序猿
第1章 Hadoop概述
1.1 Hadoop是什么

1.2 Hadoop发展历史(了解)


1.3 Hadoop三大发行版本(了解)
1.4 Hadoop优势(4高)


1.5 Hadoop组成(面试重点)
1.5.1 HDFS架构概述
Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。
1.5.2 YARN架构概述
Yet Another Resource Negotiator简称YARN,另一种资源协调者,是Hadoop的资源管理器。

1.5.3 MapReduce架构概述
MapReduce将计算过程分为两个阶段:Map和Reduce
1)Map阶段并行处理输入数据
2)Reduce阶段对Map结果进行汇总
1.5.4 HDFS、YARN、MapReduce三者关系

1.6 大数据技术生态体系

1.7 大数据推荐系统架构图

第2章 Hadoop运行环境搭建(开发重点)
2.1 模板虚拟机环境准备
0)安装模板虚拟机,IP地址192.168.10.100、主机名称hadoop100、内存4G、硬盘50G
1)hadoop100虚拟机配置要求如下(本文Linux系统全程以CentOS-7.5为例,并用root用户权限进行操作)
(1)使用yum安装需要虚拟机可以正常上网,yum安装前可以先测试下虚拟机联网情况
(2)安装epel-release
注:Extra Packages for Enterprise Linux是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。相当于是一个软件仓库,大多数rpm包在官方 repository 中是找不到的)
yum install -y epel-release
(3)注意:如果Linux安装的是最小系统版,还需要安装如下工具;如果安装的是Linux桌面标准版,不需要执行如下操作
net-tool:工具包集合,包含ifconfig等命令
yum install -y net-tools
vim:编辑器
yum install -y vim
2)关闭防火墙,关闭防火墙开机自启
systemctl stop firewalld systemctl disable firewalld.service
5)在/opt目录下创建文件夹,并修改所属主和所属组
(1)在/opt目录下创建module、software文件夹
mkdir /opt/module mkdir /opt/software

6)卸载虚拟机自带的JDK
注意:如果你的虚拟机是最小化安装不需要执行这一步。
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
参数含义:
rpm -qa:查询所安装的所有rpm软件包
grep -i:忽略大小写
xargs -n1:表示每次只传递一个参数
rpm -e –nodeps:强制卸载软件
7)重启虚拟机
reboot
2.2 克隆虚拟机
vim /etc/sysconfig/network-scripts/ifcfg-ens33
改成:
DEVICE=ens33 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static NAME="ens33" IPADDR=192.168.10.102 PREFIX=24 GATEWAY=192.168.10.2 DNS1=192.168.10.2

(2)查看Linux虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8


vim /etc/hostname hadoop102
(2)配置Linux克隆机主机名称映射hosts文件,打开/etc/hosts
vim /etc/hosts
192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103 192.168.10.104 hadoop104 192.168.10.105 hadoop105 192.168.10.106 hadoop106 192.168.10.107 hadoop107 192.168.10.108 hadoop108
4)重启克隆机hadoop102
reboot
192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103 192.168.10.104 hadoop104 192.168.10.105 hadoop105 192.168.10.106 hadoop106 192.168.10.107 hadoop107 192.168.10.108 hadoop108
(d)将桌面hosts文件覆盖C:\Windows\System32\drivers\etc路径hosts文件
2.3 在hadoop102安装JDK
ls /opt/software/

4)解压JDK到/opt/module目录下
tar -zxvf jdk-8u333-linux-x64.tar -C /opt/module/
tar -zxvf jdk-8u333-linux-x64.tar.gz -C /opt/module/

5)配置JDK环境变量
(1)新建/etc/profile.d/my_env.sh文件
vim /etc/profile.d/my_env.sh
添加如下内容
#JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_333 export PATH=$PATH:$JAVA_HOME/bin
(2)保存后退出
:wq!
(3)source一下/etc/profile文件,让新的环境变量PATH生效
source /etc/profile
6)测试JDK是否安装成功
java -version

2.4 在hadoop102安装Hadoop
安装方式同上(JDK)
1)用XShell文件传输工具将hadoop-3.1.3.tar.gz导入到opt目录下面的software文件夹下面
2)进入到Hadoop安装包路径下
cd /opt/software/
3)解压安装文件到/opt/module下面
tar -zxvf hadoop-3.3.3.tar.gz -C /opt/module/
4)查看是否解压成功
ls /opt/module/hadoop-3.3.3
pwd

(2)打开/etc/profile.d/my_env.sh文件
vim /etc/profile.d/my_env.sh
在my_env.sh文件末尾添加如下内容
#HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin

保存并退出:
:wq!
(3)让修改后的文件生效
source /etc/profile
6)测试是否安装成功
hadoop version

7)重启(如果Hadoop命令不能用再重启虚拟机)
reboot
2.5 Hadoop目录结构
1)查看Hadoop目录结构

2)重要目录
(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
第3章 Hadoop运行模式
3.1.0 本地运行模式(官方WordCount)(省略)
3.1.1 伪分布式运行模式(省略)
3.2 完全分布式运行模式(开发重点)
3.2.1 虚拟机准备
3.2.2 编写集群分发脚本xsync
1)scp(secure copy)安全拷贝
(1)scp定义
scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
(2)基本语法
scp -r $pdir/$fname $user@$host:$pdir/$fname
scp -r /opt/module/jdk1.8.0_333 root@hadoop103:/opt/module
(b)在hadoop103上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上。
scp -r root@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
(c)在hadoop103上操作,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上。
scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module
2)rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1)基本语法
rsync -av $pdir/$fname $user@$host:$pdir/$fname
| 选项 | 功能 |
|---|---|
| -a | 归档拷贝 |
| -v | 显示复制过程 |
3)xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a)rsync命令原始拷贝:
rsync -av /opt/module root@hadoop103:/opt/
echo $PATH

(3)脚本实现
(a)在/root/bin目录下创建xsync文件
cd /root mkdir bin cd bin vim xsync

在该文件中编写如下代码
#!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 for host in hadoop102 hadoop103 hadoop104 do 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 done done

(b)修改脚本 xsync 具有执行权限
chmod 777 xsync
(c)测试脚本
xsync /root/bin
(d)将脚本复制到/bin中,以便全局调用
cp xsync /bin/
source /etc/profile
3.2.3 SSH无密登录配置
ssh hadoop103
(2)ssh连接时出现Host key verification failed的解决方法
如果出现如下内容
Are you sure you want to continue connecting (yes/no)?
exit
(1)免密登录原理

(2)生成公钥和私钥
cd /root ls -al cd .ssh/ ssh-keygen -t rsa
ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104
注意:
还需要在hadoop103上采用root账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
还需要在hadoop104上采用root账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;
3).ssh文件夹下(~/.ssh)的文件功能解释
| known_hosts | 记录ssh访问过计算机的公钥(public key) |
|---|---|
| id_rsa | 生成的私钥 |
| id_rsa.pub | 生成的公钥 |
| authorized_keys | 存放授权过的无密登录服务器公钥 |
3.2.4 集群配置
3)配置集群
(1)核心配置文件
配置core-site.xml
cd $HADOOP_HOME/etc/hadoop vim core-site.xml
内容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> <!-- 指定hadoop数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <!-- 配置HDFS网页登录使用的静态用户为atguigu --> <property> <name>hadoop.http.staticuser.user</name> <value>atguigu</value> </property> </configuration>
vim hdfs-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- nn web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop102:9870</value> </property> <!-- 2nn web端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property> </configuration>
vim yarn-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> </configuration>
vim mapred-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
4)在集群上分发配置好的Hadoop配置文件
xsync /opt/module/hadoop-3.3.3/etc/hadoop/
5)去hadoop103和hadoop104上查看文件分发情况
cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
3.2.5 群起集群
1)配置workers
vim /opt/module/hadoop-3.3.3/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102 hadoop103 hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
xsync /opt/module/hadoop-3.1.3/etc
hdfs namenode -format (2)启动HDFS
sbin/start-dfs.sh
(3)在配置了ResourceManager的节点(hadoop103)启动YARN
sbin/start-yarn.sh

hadoop fs -mkdir /input hadoop fs -put $HADOOP_HOME/wcinput/world.txt /input
上传大文件
hadoop fs -put /opt/software/jdk-8u333-linux-x64.tar.gz /
(4)下载
hadoop fs -get /jdk-8u333-linux-x64.tar.gz ./
(5)执行wordcount程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
3.2.6 配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
1)配置mapred-site.xml
和前面配置自定义配置文件类似
vim mapred-site.xml
在该文件里面增加如下配置。
<!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop102:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop102:19888</value> </property>
2)分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
3)在hadoop102启动历史服务器
mapred --daemon start historyserver
4)查看历史服务器是否启动
jps
3.2.7 配置日志的聚集
vim yarn-site.xml
在该文件里面增加如下配置。
<!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://hadoop102:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
2)分发配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
3)关闭NodeManager 、ResourceManager和HistoryServer
sbin/stop-yarn.sh mapred --daemon stop historyserver
4)启动NodeManager 、ResourceManage和HistoryServer
start-yarn.sh mapred --daemon start historyserver
5)删除HDFS上已经存在的输出文件
hadoop fs -rm -r /output
6)执行WordCount程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
7)查看日志
(1)历史服务器地址
http://hadoop102:19888/jobhistory
(2)历史任务列表
(4)运行日志详情

3.2.8 集群启动/停止方式总结
1)各个模块分开启动/停止(配置ssh是前提)常用
(1)整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
(2)整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
hdfs --daemon start/stop namenode/datanode/secondarynamenode
(2)启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
3.2.9 编写Hadoop集群常用脚本
1)Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
cd /root/bin vim myhadoop.sh
输入如下内容
#!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case $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 777 myhadoop.sh
2)查看三台服务器Java进程脚本:jpsall
cd /root/bin vim jpsall
输入如下内容
#!/bin/bash for host in hadoop102 hadoop103 hadoop104 do echo =============== $host =============== ssh $host jps done
保存后退出,然后赋予脚本执行权限
chmod 777 jpsall
3)分发/home/atguigu/bin目录,保证自定义脚本在三台机器上都可以使用
xsync /root/bin/
3.2.10 常用端口号说明

第4章 常见错误及解决方案
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 #::1 hadoop102
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215605.html原文链接:https://javaforall.net
