Hadoop概述
Hadoop2.X组成
Hadoop包括Common、HDFS、Yarn、MapReduce
- Common辅助工具
- HDFS数据存储
- NameNode:存储文件元数据,可以理解为目录
- DataNode:本地文件系统存储文件块数据,即实实在在的数据
- SecondaryNameNode:监控HDFS状态的辅助后台程序
- Yarn资源调度
- ResourceManager(RM):处理客户端请求,监控NodeManager,监控ApplicationMaster,资源调度与分配
- NodeManager(NM):管理单个节点上的资源,处理RM、ApplicationMaster的命令
- ApplicationMaster(AM):
- Container:资源抽象,封装
- MapReduce计算
- Map阶段:并行处理输入数据
- Reduce阶段:对Map结果汇总
虚拟机环境配置
CentOS7中,如果选择GNOME桌面,无法自定义安装程序,因此系统会安装openjdk 1.7和1.8两个版本,默认是1.8-u102,我们需要删除这两个。
先查看
[root@hadoop101 ~]# rpm -qa|grep java
再删除对应的版本号
[root@hadoop101 ~]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.242.b08-1.el7.x86_64
[root@hadoop101 ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.251-2.6.21.1.el7.x86_64
接着,配置网络
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
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"
DEVICE="ens33"
ONBOOT="yes"
IPV6_PRIVACY="no"
IPADDR=192.168.133.130
GATEWAY=192.168.133.2
NETMASK=255.255.255.0
DNS1=192.168.133.2
关闭防火墙
[root@hadoop101 ~]# systemctl stop firewalld.service
防火墙开机禁用
[root@hadoop101 ~]# systemctl disable firewalld.service
接着,开启虚拟机ip和名称的映射,进入/etc/hosts修改
[root@hadoop104 opt]# vim /etc/hosts
添加下面内容
192.168.133.131 hadoop102
192.168.133.132 hadoop103
192.168.133.133 hadoop104
然后可以克隆另一台虚拟机。
克隆完成后只要改ip和hostname,其他的不用改。
修改ip,进入文件修改
[root@hadoop101 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改hostname,先查看当前hostname,和前一台机器一样是叫hadoop101
[root@hadoop101 ~]# hostname
这里改成hadoop102
[root@hadoop101 ~]# hostnamectl set-hostname hadoop102
然后重启虚拟机。
安装JDK和Hadoop
进入/opt/目录,创建两个文件夹software、module,并且删除无用的rh/文件夹
[root@hadoop102 /]# cd /opt/
[root@hadoop102 opt]# mkdir software
[root@hadoop102 opt]# mkdir module
[root@hadoop102 opt]# rm -rf rh/
这里software存放安装包,module是安装目录。
现在可以看看opt/文件夹下的内容
[root@hadoop102 opt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 10月 21 14:22 module
drwxr-xr-x. 2 root root 6 10月 21 14:21 software
再将JDK和Hadoop的tar包放进software目录。
software目录内容
[root@hadoop102 opt]# cd software/
[root@hadoop102 software]# ll
总用量 377944
-rw-r--r--. 1 root root 243900138 10月 21 14:28 hadoop-2.8.2.tar.gz
-rw-r--r--. 1 root root 143111803 10月 21 14:28 jdk-8u261-linux-x64.tar.gz
将tar包解压到module目录
[root@hadoop102 software]# tar -zxvf jdk-8u261-linux-x64.tar.gz -C /opt/module/
[root@hadoop102 software]# tar -zxvf hadoop-2.8.2.tar.gz -C /opt/module/
查看module目录
[root@hadoop102 software]# cd ..
[root@hadoop102 opt]# cd module/
[root@hadoop102 module]# ll
总用量 0
drwxr-xr-x. 9 502 dialout 149 10月 20 2017 hadoop-2.8.2
drwxr-xr-x. 8 10143 10143 273 6月 18 14:59 jdk1.8.0_261
配置环境变量,编辑profile文件
[root@hadoop102 jdk1.8.0_261]# vim /etc/profile
在文件末尾插入
##JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_261
export PATH=$PATH:$JAVA_HOME/bin
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.8.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
然后
[root@hadoop102 hadoop-2.8.2]# source /etc/profile
这样Java和Hadoop就可以用了,通过java -version和hadoop命令查看是否安装完成。
也可以用scp或rsync命令去拷贝。scp是直接拷贝,rsync是拷贝差异文件速度更快。
除此之外,还有xsync命令,循环复制文件到所有节点的相同目录下。
虚拟机的相关配置
在虚拟机上安装完Java和Hadoop并配置好环境变量之后,先创建input文件夹# mkdir input,在/opt/module/hadoop-2.8.2目录下创建该文件夹,。/opt/software/文件夹下存放Java和Hadoop的安装包,/opt/module/是存放Java和Hadoop安装的位置,这里Hadoop是2.8.2、JDK是1.8 。
将.xml文件拷贝到input文件夹下
[root@hadoop-1 hadoop-2.8.2]# cp etc/hadoop/*.xml input/
查看拷贝结果
[root@hadoop-1 hadoop-2.8.2]# ls input/
capacity-scheduler.xml core-site.xml hadoop-policy.xml hdfs-site.xml httpfs-site.xml kms-acls.xml kms-site.xml yarn-site.xml
运行jar包
[root@hadoop-1 hadoop-2.8.2]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.2.jar grep input/ output 'dfs[a-z.]+'
注意:这里是把输入放在input文件夹,把输出放在output问价夹,input文件夹是前面创建的,output不能自己创建待会会程序自己创建。
接着查看output是不是创建了
[root@hadoop-1 hadoop-2.8.2]# ll
总用量 124
drwxr-xr-x. 2 502 dialout 194 10月 20 2017 bin
drwxr-xr-x. 3 502 dialout 20 10月 20 2017 etc
drwxr-xr-x. 2 502 dialout 106 10月 20 2017 include
drwxr-xr-x. 2 root root 187 10月 21 09:31 input
drwxr-xr-x. 3 502 dialout 20 10月 20 2017 lib
drwxr-xr-x. 2 502 dialout 239 10月 20 2017 libexec
-rw-r--r--. 1 502 dialout 99253 10月 20 2017 LICENSE.txt
-rw-r--r--. 1 502 dialout 15915 10月 20 2017 NOTICE.txt
drwxr-xr-x. 2 root root 88 10月 21 09:44 output
-rw-r--r--. 1 502 dialout 1366 10月 20 2017 README.txt
drwxr-xr-x. 2 502 dialout 4096 10月 20 2017 sbin
drwxr-xr-x. 4 502 dialout 31 10月 20 2017 share
再进入output文件夹,
[root@hadoop-1 hadoop-2.8.2]# cd output/
[root@hadoop-1 output]# ll
总用量 4
-rw-r--r--. 1 root root 11 10月 21 09:44 part-r-00000
-rw-r--r--. 1 root root 0 10月 21 09:44 _SUCCESS
查看part-r-00000文件的内容
[root@hadoop-1 output]# cat part-r-00000
1 dfsadmin
如果内容是这样,就表示成功。
Word Count案例
hadoop目录下创建wcinput文件夹,创建wc.input文件,并在文件里面写入任意字母文本
[root@hadoop-1 hadoop-2.8.2]# mkdir wcinput
[root@hadoop-1 hadoop-2.8.2]# cd wcinput/
[root@hadoop-1 wcinput]# ll
总用量 0
[root@hadoop-1 wcinput]# touch wc.input
[root@hadoop-1 wcinput]# vim wc.input
接着,运行
[root@hadoop-1 hadoop-2.8.2]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.2.jar wordcount wcinput/ wcoutput
类似上面的wcinput/是已经创建好的,作为输入;wcoutput是未创建的作为输出位置
进入wcoutput查看
[root@hadoop-1 hadoop-2.8.2]# cd wcoutput/
[root@hadoop-1 wcoutput]# ll
总用量 4
-rw-r--r--. 1 root root 131 10月 21 10:27 part-r-00000
-rw-r--r--. 1 root root 0 10月 21 10:27 _SUCCESS
查看part-r-00000文件,里面是计数结果
[root@hadoop-1 wcoutput]# cat part-r-00000