Hadoop环境搭建
- 仅是个人学习记录,内容来源尚硅谷大学
1、Hadoop是什么
- Hadoop是一个由Apache基金会所开发的分布式系统基础框架。主要解决,海量数据的存储和海量数据的分析计算问题。广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。
2、Hadoop优势
-
高可靠性:Hadoop底层维和多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
-
高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
-
高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
-
高容错性:能够自动将失败的任务重新分配。
3、Hadoop组成
Hadoop1.x
- MapReduce:负责计算和资源调度
- HDFS:负责数据存储
- Common:辅助工具
Hadoop2.x
- MapReduce:负责计算
- Yarn:负责资源调度
- HDFS:负责数据存储
- Common:辅助工具
Hadoop1.x中的MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大。
在Hadoop2.x中新增了Yarn。Yarn只负责资源的调度。
Hadoop3.x在组成上没有变化。
4、Hadoop运行环境的搭建
-
安装模板虚拟机hadoop100,使用CentOS7(采用最小化安装)
-
进入系统后先安装net-tools和vim和epel-release
yum -y install net-toolsyum -y install vimyum -y install epel-release -
关闭防火墙,关闭防火墙开机自启
systemctl stop firewalld systemctl disable firewalld.service -
创建用户tomato,并修改密码
useradd tomato passed 955955 -
配置tomato用户具有root权限,方便后期sudo执行root权限的命令
vim /etc/sudoers修改文件,在%wheel这行下面添加一行,如下
## Allow root to run any commands anywhere root ALL=(ALL) ALL ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL atguigu ALL=(ALL) NOPASSWD:ALL -
在/opt目录下创建module、software文件夹
-
将文件夹所有者和所属组改为tomato用户
chown tomato:tomato /opt/module chown tomato:tomato /opt/software -
重启虚拟机
5、克隆虚拟机
-
克隆三台虚拟机:hadoop102,hadoop103,hadoop104
-
-
修改克隆机IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33 改成 DEVICE=ens33 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static NAME="ens33" IPADDR=192.168.50.102 PREFIX=24 GATEWAY=192.168.50.2 DNS1=192.168.50.2 -
更改Linux虚拟机的虚拟网络编辑器,更改VMnet8类型为NAT模式,子网IP网段和DNS和网关与虚拟机IP一致,同时修改Windows系统中VMnet8的IP地址,与上述一致,保证三部分的地址是相同的。
-
-
修改主机名(hostname),主机映射(hosts),重启虚拟机。同时修改windows的主机映射文件,C:\Windows\System32\drivers\etc 内容如下
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 -
将JDK和Hadoop软件包导入/opt/software/下,解压
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/- 配置JDK环境变量
sudo vim /etc/profile.d/my_env.sh 添加如下内容 #JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin 测试是否安装成功 java -version-
解压Hadoop
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/ -
配置环境变量
sudo /etc/prifile.d/my_env.sh 末尾添加(shift+g) #HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin 测试hadoop hadoop version
-
Hadoop的目录结构
(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
6、完全分布式运行模式搭建
1)准备3台客户机(关闭防火墙、静态IP、主机名称)
2)安装JDK
3)配置环境变量
4)安装Hadoop
5)配置环境变量
6)配置集群
7)单点启动
7)配置ssh
9)群起并测试集群
-
编辑集群分发脚本xsync
- 在tomato用户目录下创建bin目录,/home/tomato/bin/,创建脚本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-
更改权限
chmod 777 xsync
-
配置SSH无密登陆配置
-
进入目录 cd /home/tomato/.ssh
-
生成公钥和密钥
ssh-keygen -t rsa三下回车
-
将公钥拷贝到要免密登录的目标机器上
ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104- 注意:还需要在hadoop103和hadoop104采用tomato账号配置到hadoop102、hadoop103、hadoop104服务器上
- 还需要在hadoop102上用root账号配置一遍
-
-
用xsync将hadoop102上的配置文件(/etc/profile.d/my_env.sh)、软件目录/opt/module/和xsync分发脚本,分别分发到hadoop103,hadoop104上,并让环境变量生效。
source /etc/profile
7、集群配置
- 集群部署规划
注意:
- NameNode和SecondaryNameNode不要安装在同一台服务器
- ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
| hadoop 102 | hadoop103 | hadoop104 | |
|---|---|---|---|
| HDFS | NameNode DataNode |
DataNode | SecondaryNameNode DataNode |
| YARN | NodeManager | ResourceManager NodeManager |
NodeManager |
-
配置文件说明
- 默认配置文件
要获取的默认文件 文件存放在Hadoop的jar包中的位置 [core-default.xml] hadoop-common-3.1.3.jar/core-default.xml [hdfs-default.xml] hadoop-hdfs-3.1.3.jar/hdfs-default.xml [yarn-default.xml] hadoop-yarn-common-3.1.3.jar/yarn-default.xml [mapred-default.xml] hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml - 自定义配置文件
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml
-
配置文件
-
配置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> -
配置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> -
配置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> -
配置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> -
并将上述所有文件分发到其他服务器
xsync $HADOOP_HOME$/etc/hadoop/ -
到此,集群可以正常的运行,但为了查看程序的历史运行情况,还需要配置一下历史服务器。
-
配置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> -
开启日志聚集:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
-
配置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> -
最后,我们分发一下所有配置文件
xsync $HADOOP_HOME$/etc/hadoop/
-
-
启动集群
-
初始化NameNode节点
hdfs namenode -format -
在hadoop102上启动HDFS
sbin/start-dfs.sh -
在配置了ResourceManager的节点hadoop103上启动YARN
sbin/start-yarn.sh -
可以使用jps查看节点运行状态
-
-
在Web端可以查看HDFS的NameNode
- http://hadoop102:9870
- 可以查看HDFS上存储的数据信息
-
查看YARN的ResourceManager
- http://hadoop103:8088
- 可以查看运行的Job信息
-
测试集群
-
上传文件
fs -mkdir /input hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /input -
磁盘存储位置
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-192.168.10.102-1610603650062/current/finalized/subdir0/subdir0
-
-
配置集群启停脚本
cd /home/tomato/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
-
配置查看三台服务器Java进程的脚本:jpsall
vim jpsall#!/bin/bash for host in hadoop102 hadoop103 hadoop104 do echo =============== $host =============== ssh $host jps done- 更改权限后,分发脚本
xsync /home/atguigu/bin/
8、常用端口号说明
| 端口名称 | Hadoop2.x | Hadoop3.x |
|---|---|---|
| NameNode内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 |
| NameNode HTTP UI | 50070 | 9870 |
| MapReduce查看执行任务端口 | 8088 | 8088 |
| 历史服务器通信端口 | 19888 | 19888 |

浙公网安备 33010602011771号