1. 虚拟机环境准备
-
安装虚拟机
-
修改虚拟机的静态IP
修改
ifcfg-ens33
的内容vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" # 使用静态IP地址,默认为dhcp IPADDR="192.168.248.100" # 设置的静态IP地址 NETMASK="255.255.255.0" # 子网掩码 GATEWAY="192.168.248.2" # 网关地址 DNS1="192.168.248.2" # DNS服务器 DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="49aa9830-553b-4310-b22c-7275d35b34c8" DEVICE="ens33" ONBOOT="yes" #是否开机启用
-
修改主机名
$ hostnamectl set-hostname hadoop102
-
关闭防火墙
systemctl stop firewalld
-
配置hosts
vim /etc/hosts
192.168.248.102 hadoop102 192.168.248.103 hadoop103 192.168.248.104 hadoop104
-
创建 dwjf321用户
-
配置 dwjf321用户具有root权限
-
在 /opt 目录下创建文件夹
(1) 在 /opt 目录下创建 module、software 文件夹
$ sudo mkdir module $ sudo mkdir software
(2) 修改 module、software 文件夹的所有者权限
$ sudo chown dwjf321:wheel module/ software/
2. 安装 JDK
-
卸载现有 JDK
$ rpm -qa | grep java
-
如果安装的版本低于1.7,卸载该JDK:
$ sudo rpm -e 软件包
-
解压JDK 到 /opt/module 目录下
$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
-
配置 JDK 环境变量
$ sudo vi /etc/profile
#JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_144 export PATH=$PATH:$JAVA_HOME/bin
修改后使文件生效
$ source /etc/profile
-
测试 JDK 是否安装成功
$ java -version
3. SSH 免密登录配置
3.1 ssh连接另一台电脑基本语法
$ ssh 192.168.248.102
3.2 无密钥配置
-
免密登录原理
-
生成公钥和私钥
$ ssh-keygen -t rsa
一直敲回车键,就会在 ~/.shh 目录生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)。
-
将公钥拷贝到要免密登录的目标机器上
$ ssh-copy-id hadoop102 $ ssh-copy-id hadoop103 $ ssh-copy-id hadoop104
还需要在hadoop103上采用 dwjf321 账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
-
.ssh文件夹下(~/.ssh)的文件功能解释
known_hosts 记录ssh访问过计算机的公钥(public key) id_rsa 生成的私钥 id_rsa.pub 生成的公钥 authorized_keys 存放授权过得无密登录服务器公钥
5. 编写集群分发脚本 xsync
5.1 scp(secure copy)安全拷贝
-
scp定义:
scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
-
基本语法
scp -r p d i r / pdir/ pdir/fname u s e r @ h a d o o p user@hadoop user@hadoophost: p d i r / pdir/ pdir/fname
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
-
案例实操
将hadoop101中/etc/profile文件拷贝到hadoop103和 hadoop104 的/etc/profile上
$ sudo scp /etc/profile root@hadoop103:/etc/profile $ sudo scp /etc/profile root@hadoop104:/etc/profile
注意:拷贝过来的配置文件别忘了source一下/etc/profile。
5.2 rsync 远程同步工具
rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync 和scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。
-
基本语法
rsync -rvl p d i r / pdir/ pdir/fname u s e r @ h a d o o p user@hadoop user@hadoophost: p d i r / pdir/ pdir/fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
选项 功能 -r 递归 -v 显示复制过程 -l 拷贝符号连接 -
案例实操
把hadoop102机器上的/opt/software目录同步到hadoop103服务器的root用户下的/opt/目录
$ rsync -rvl /opt/software/ root@hadoop103:/opt/software
5.3 xsync集群分发脚本
-
需求:循环复制文件到所有节点的相同目录下
-
需求分析:
-
rsync命令原始拷贝:
$ rsync -rvl /opt/module root@hadoop103:/opt/
-
期望脚本:
xsync 要同步的文件名称
-
说明
在/home/dwjf321/bin这个目录下存放的脚本,dwjf321 用户可以在系统任何地方直接执行。
-
-
脚本实现
-
在/home/dwjf321 目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
[dwjf321@hadoop102 ~]$ mkdir bin [dwjf321@hadoop102 ~]$ cd bin/ [dwjf321@hadoop102 bin]$ touch xsync [dwjf321@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
-
修改脚本 xsync 具有执行权限
$ chmod 777 xsync
-
调用脚本形式:xsync 文件名称
$ xsync /home/atguigu/bin
注意:如果将xsync放到 /home/dwjf321/bin 目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。
-
6. 安装 Hadoop
-
集群部署规划
hadoop102 hadoop103 hadoop104 HDFS NameNode DataNode DataNode SecondaryNameNode DataNode YARN NodeManager ResourceManager NodeManager NodeManager -
下载 hadoop
$ cd /opt/software
$ wget https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
-
解压
$ tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
-
将 hadoop 添加到环境变量
$ sudo vim /etc/profile
##HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-2.7.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
-
让修改后的文件生效
$ source /etc/profile
-
测试是否安装成功
$ hadoop version
-
分发 /etc/profile
$ su - $ xsync /etc/profile
然后在 hadoop103、hadoop104 节点执行
$ source /etc/profile
-
修改 ~/.bashrc 使环境变量对当前用户有效
cat /etc/profile >> ~/.bashrc
6.1 hadoop 目录结构
-
查看 hadoop 目录结构
$ ll drwxr-xr-x. 2 dwjf321 wheel 4096 5月 22 2017 bin drwxr-xr-x. 3 dwjf321 wheel 4096 5月 22 2017 etc drwxr-xr-x. 2 dwjf321 wheel 4096 5月 22 2017 include drwxr-xr-x. 3 dwjf321 wheel 4096 5月 22 2017 lib drwxr-xr-x. 2 dwjf321 wheel 4096 5月 22 2017 libexec -rw-r--r--. 1 dwjf321 wheel 15429 5月 22 2017 LICENSE.txt -rw-r--r--. 1 dwjf321 wheel 101 5月 22 2017 NOTICE.txt -rw-r--r--. 1 dwjf321 wheel 1366 5月 22 2017 README.txt drwxr-xr-x. 2 dwjf321 wheel 4096 5月 22 2017 sbin drwxr-xr-x. 4 dwjf321 wheel 4096 5月 22 2017 share
-
重要目录
(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
6.2 配置集群
6.2.1 核心配置文件
配置 core-site.xml
vim 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>
6.2.2 HDFS配置文件
配置 hadoop-env.sh
$ vim hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置 hdfs-site.xml
$ vim hdfs-site.xml
在该文件中编写如下配置
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
6.2.3 YARN配置文件
配置yarn-env.sh
$ vim yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置yarn-site.xml
$ vim 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>
6.2.4 MapReduce配置文件
配置mapred-env.sh
$ vim mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置mapred-site.xml
$ cp mapred-site.xml.template mapred-site.xml
$ vim mapred-site.xml
在该文件中增加如下配置
<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
6.2.5 在集群上分发配置好的 hadoop 配置文件
$ xsync /opt/module/hadoop-2.7.2/
6.2.6 格式化 NameNode
如果集群是第一次启动,需要格式化 NameNode
$ hadoop namenode -format
6.3 群起集群
6.3.1 配置 slaves
$ cd /opt/module/hadoop-2.7.2/etc/hadoop/
$ vim slaves
在改文件中添加如下内容:
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
$ xsync slaves
6.3.2 启动集群
-
如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
$ bin/hdfs namenode -format
-
在 hadoop102 启动HDFS
[dwjf321@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
-
在 hadoop103 启动 YARN
[dwjf321@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
注意:NameNode 和 ResourceManger 如果不是同一台机器,不能在 NameNode 上启动 YARN ,应该在 ResouceManager 所在的机器上启动 YARN。
-
Web端查看 SecondaryNameNode
浏览器中输入:http://hadoop104:50090/status.html