通过百度网盘分享的文件:Hadoop相关需要的软件 链接:https://pan.baidu.com/s/1XzDvyhP4_LQzAM1auQCSrg?pwd=tph5 提取码:tph5
VMware下安装CentOS
安装好后要右键,找到用管理员的方式打开
也可以设置成每次打开都是以管理员身份运行
来到这个界面可以等待60秒,也可以按下tab键下一步。
我这里选择英文,各位可以选择中文。
继续添加
设置密码
到这里就安装好啦
1.重启服务
2.修改配置文件
如果进入的是空表,用cd进入这里,然后用“ll”查看那个带ifcfg的文件,进入编辑
我这里是ifcfg-ens33
如果你这里是$符号请用这个命令,使用超级用户,变成#
DEVICE是指设备名
HWADDR是指网卡地址
ONBOOT是设置系统启动时是否激活网卡
BOOTPROTO的值可以设置为dhcp、none、bootp、static
dhcp 设置网卡绑定的时候通过DHCP协议的方法来获得地址
none 设置网卡绑定的时候不使用任何协议
bootp 设置网卡绑定的时候使用BOOTP协议
static 设置网卡绑定的时候使用静态协议
将该文件的ONBOOT=no改为ONBOOT=yes,将BOOTPROTO=dhcp改为BOOTPROTO=static
添加IP地址IPADDR、子网掩码NETMASK、网关GATEWAY以及DNS1等信息
这是我未修改的样子(不会如何修改的跟保存的请百度)
点击编辑里面的虚拟网络编辑器
要用管理员身份使用软件才能更改设置
当使用管理员身份后这里会有三个,选NAT模式
这里最后一段要选不一样的,最好是3位数
这里两个要一样
修改完保存退出后重启一下服务
查看IP
3.ping一下百度跟本地,看一下连接是否通畅
ctel+c退出ping
4.安装yum源
执行cd /etc/yum.repos.d 进入etc/yum.repos.d目录
查看yum.repos.d目录下的文件
CentOS-base.repo 是网络的
CentOS-Media.repo是本地的
5.执行重命名命令
如果要用网络下载,就改名全部(改名是为了禁用,需要用的话就把名字改回去)
CentOS-base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Vault.repo CentOS-Media.repo
将baseurl的值修改为:file:///media/ ,将gpgcheck的值改为0 ,将enabled的值修改为 1
修改前:
修改后
6.挂载
执行以下命令进行挂载
如果没有第一条的话,修改第二条
7.更新yum源。
8.用阿里云安装软件
打开阿里云登录
9.安装Java
使用xshell7
使用ctel+alt+f打开共享文件
放到opt目录下
在命令行安装Java
进入opt目录安装
1.把Hadoop安装包hadoop-xxxxx / 上传到虚拟机master的/opt目录下
然后进入opt目录下输入下面语句,将hadoop安装包解压到虚拟机上
Hadoop配置涉及的文件都在/usr/local/hadoop-2.6.4/etc/hadoop/目录下
2.修改core-site.xml文件
然后在hadoop目录下创建一个tmp文件夹
3.修改hadoop-env.sh
4.修改yarn-env.sh文件
5.复制mapred-site.xml.template 并命名为mapred-site.xml并修改
修改mapred-site.xml文件
6.修改yarn-site.xml文件
7.修改slaves文件
8.修改hdfs-site.xml文件
9.返回最初目录,进入/etc,修改hosts文件
在最后面添加以下代码,主要符合自己的ip跟主机名
在自己的电脑上hosts也添加
·
10.修改完后关机,进行克隆。
右击master,管理,克隆
11.打开虚拟机slave1
(1)执行以下命令,删除70-persistent-net.rules
(2)执行命令:
查看HWADDR,记录HWADDR(每个机器的此值是不一样的)
找不到另一种方法(如果是可视化的)
(3)修改/etc/sysconfig/network-scripts/ifcfg-eth0文件,修改HWADDR、IPADDR以及注释掉UUID开头的一行代码,并修改HWADDR的内容为实际的地址
如果进入的是空表,用cd进入这里,然后用“ll”查看那个带ifcfg的文件,进入编辑
我这里是ifcfg-ens33
如果你这里是$符号请用这个命令,使用超级用户,变成#
图形化界面也可以在这里修改
修改后重启服务:
(4)修改主机名,执行命令
6版本的:
修改机器名为 slave1.centos.com
7版本的:
修改为 slave1.centos.com
修改用户名:
(5)使用reboot命令重启虚拟机。
(6)验证slave1是否配置成功。在master下执行ping slave1 如果ping得通,说明配置成功。
注意要master跟slave1两个虚拟机都打开才能互ping
12.重复(1)~(5)的相关步骤,克隆master到slave2、slave3,并修改slave2、slave3的相关配置。
13.配置SSH免密登录
(1)在master虚拟机上使用ssh-keygen产生公钥(id_rsa.pub)与私钥(id_rsa)两个文件
输入以下命令执行后,接着按三次‘Enter’
ssh-keygen用来生成RSA类型的密钥以及管理该密钥,参数“ -t ”用于指定要创建的SSH密钥类型为RSA
三次回车
1.保存密钥
2.不对私钥设口令
3.确认不设口令
(2)用ssh-copy-id将公钥复制到远程机器中(4个都要)
(3)验证SSH是否能够无密钥登录
在master下分别输入ssh slave1、ssh slave2、ssh slave3,exit 退出
14.时间同步
(1)在每个节点输入以下代码安装NTP
安装成功
(2)设置master节点为NTP服务主节点,那么配置如下
使用如下命令来打开/etc/ntp.conf文件,注释掉server开头的就行,并添以下内容。
(3)分别在slave1 slave2 slave3 中配置NTP,同样修改/etc/ntp.conf文件,注释掉server开头的,并添加以下内容
(4)执行命令,永久性关闭防火墙,主从节点都要关闭
6版本:
7版本:
查看防火墙状态
绿的running表示防火墙开启
执行开机禁用防火墙自启命令 :
执行后当前状态下还是启动的,需要重启才永久关闭。
重启后查看
注意:主从节点都要关闭
slave1
关机后重启查看slave1:
重复上面步骤把slave2、slave3的防火墙也永久关闭
关于防火墙的其他命令:
执行关闭命令: systemctl stop firewalld.service (开机启动)
再次执行查看防火墙命令:systemctl status firewalld.service
执行开机禁用防火墙自启命令 : systemctl disable firewalld.service (开机不启动)
启动:systemctl start firewalld.service
防火墙随系统开启启动 : systemctl enable firewalld.service
(5)启动ntp服务
①.在master结点执行命令
查看是否启动成功
重启后查看
②.在slave1、slave2、slave3上分别执行下面代码,即可同步时间
slave1:
slave2:
slave3:
③.在slave1、slave2、slave3上分别执行下面命令,即可永久启动NTP服务。
重启后查看
15.启动关闭集群
做完Hadoop的所有配置后,即可执行格式化NameNode操作,该操作会在NameNode所在机器初始化一些HDFS的相关配置,并且该操作在集群搭建过程中只需执行一次,执行格式化之前可以先配置环境变量。
(1)配置环境变量,在master、slave1、slave2、slave3上修改 文件,添加以下内容,保存退出后执行source /etc/profile来使配置生效
master:
slave1:
slave2:
slave3:
格式化只需执行命令 hdfs namenode -format ,若出现 Storage directory /data/hadoop/hdfs/name has been successfully formatted 提示,则格式化成功。
格式化完成之后即可启动集群,启动集群只需要在master节点直接进入Hadoop安装目录,分别执行以下命令即可。
(2)启动命令集群
进入Hadoop安装目录
启动HDFS相关服务
启动YARN相关服务
启动日志相关服务
集群启动之后,在主节点master,子节点slave1、slave2、slave3分别执行 jps 命令,出现以下信息,表示集群启动成功。
slave1
slave2
slave3
(3)关闭集群命令
同理,关闭集群只需要在master节点直接进入Hadoop安装目录,分别执行下面命令即可。
进入Hadoop安装目录
关闭YARN相关服务
关闭HDFS相关服务
关闭日志相关服务
(4)创建一键启动程序
(hadoop自带的一键启动关闭)
在/usr/local/hadoop-2.6.4/sbin 目录下创建一个脚本
里面填写
给权限(给到权限后会变颜色)
一键启动集群
一键关闭集群
16.监控集群
服务 Web接口 默认端口 NameNode http://namenode_host:port/ 50070 ResourceManager http://resourcemanager_host:port/ 8088 MapReduce JobHistory Server http://jobhistoryserver_host:port/ 19888
为了能够顺利在浏览器打开Hadoop集群相关服务的监控界面,需要朽败本地hosts文件。hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个网址时,系统会首先自动从hosts文件中寻找对应的IP地址。一旦找到,系统会立即打开对应网页。添加下面内容。
192.168.235.233 master master.centos.com 192.168.235.234 slave1 slave1.centos.com 192.168.235.235 slave2 slave2.centos.com 192.168.235.236 slave3 slave3.centos.com
(1)HDFS监控
在浏览器的地址栏输入“http://master:50070”,按回车键即可看到HDFS的监控界面(需要先启动集群)
http://master:50070 #或者192.168.235.233:50070
①Overview记录了NameNode的启动时间、版本号、编译版本等一些信息。
②Summary是集群信息,提供了当前集群环境的一些有用信息,从图中可知所有DataNode节点的基本存储信息,例如硬盘大小以及有多少被HDFS使用等一些数据信息,同时还标注了当前集群环境中DataNode的信息,对活动状态的DataNode也专门做了记录。
③NameNode Storage提供了NameNode的信息,最后的State标示此节点为活动节点,可正常提供服务。
http://master:50070 HDFS监控1
如上图所示,选择Utilities >> Browse the file system 菜单命令可以查看HDFS上的文件信息
在浏览器中访问“http://master:50070/dfshealth.jsp”得到下图所示的页面,
http://master:50070/dfshealth.jsp
单击“Browse the filesystem”超链接可以打开文件存储目录,如下图所示。
“NameNode Logs”为用户提供NameNode节点的log信息,如下图所示。
(2)YARN监控
在浏览器的地址栏输入“http://master:8088”,即可看到YARN的监控界面,如下图所示。
http://master:8088
(3)日志监控
在浏览器的地址栏输入“http://master:19888”,即可看到日志的监控界面,如下图所示。
http://master:19888
17HDFS文件处理
可以通过Hadoop dfs –help命令来查看HDFS Shell命令的说明。大部分的HDFS Shell和Linux的shell相似。
一般的shell命令格式为:
bin/hadoop commandgenericOptions
command 是命令
genericOptions 是一般的参数
commandOptions 是命令参数
在hadoop dfs –ls /input 这条命令中,command是dfs,genericOptions对应-ls等参数,commandOptions对应于/input 这个路径参数。
更多相关命令如下:
1.-appendToFile
(1)将本地文件附加到集群 本地文件一一定要存在 集群上可以没有 集群帮用户创建,在/usr/local/hadoop-2.6.4/etc/hadoop路径下编辑一个文件vi bbb.txt 并写下面内容“this is bbb.txt”,然后使用下面命令上传到集群(前提是已启动了集群)。
(2)将多个本地文件附加到集群文件
最后一个路径 是集群文件的路径 其他前面的都是本地文件
查看结果
2.-cat
查看刚刚上传到集群的文件
4.-Chmod
修改权限
4.-copyFromLocal
从本地复制一份到集群上
5.-copyFromLocal
从集群复制到本地
6.-get
从集群上获得到本地
7.-cp
复制
8.-count
查看文件数量
9.-df
查看使用空间
10.-du
查看文件长度(显示hdfs对应路径下每个文件夹和文件的大小)
11.-moveFromLocal
从本地移动到集群
12.-rm /-rmdir(删除空文件夹)
删除集群上的文件
13.- tail
显示文件最后1k内容
14.-test -d/-e
查看文件或者目录的反馈(这里能正常执行,说明命令是正确的)
15.-mkdir
创建文件夹
16.-mv
移动文件
17.touchz
创建文件
18.-text
将文本文件或某些格式的非文本文件通过文本格式输出
19.-stat
返回对应路径的状态信息
%b(文件大小),%o(Block大小),%n(文件名),%r(副本个数),%y(最后一次修改日期和时间)
20.-put
将本地文件放到hdfs某个目录
21.-getmerge
把两个文件的内容合并起来(注:合并后的文件位于当前目录,不在hdfs中,是本地文件)
22.-grep
从hdfs上过滤包含某个字符的行内容
1.Hadoop实现MapReduce执行wordcount
(1)VMware里面启动集群,在根目录下面创建一个文本,里面填写一些文本
(2)在集群里面创建一个input文件夹
(3)然后把本地的a.txt文本上传到集群上的input文件夹里面
(4)输入命令进行词频统计
(5)然后就会在集群里面产生一个output文件,里面有两个文本
(6)执行命令查看词频统计结果
注意:误删了output里面的文本的话的不能恢复的,可以删掉原来的output文件,重新创建一个,重新进行词频统计即可。
(7)如果想要做另一个文本的词频统计,需要把后面的output改个名字,就是从新统计的意思
2.使用Eclipse创建MapReduce工程执行wordcount
(1)添加Hadoop插件
找到eclipse的安装路径,然后将插件移动到这个路径下
(2)增加Map/Reduce功能区
打开eclipse进行以下操作
(3)增加Hadoop集群的连接
单击下图所示界面右下方的蓝色小象图标(其右上方右+号),就会弹出连接Hadoop集群的配置窗口。
在VMware的Hadoop集群里输入以下代码,查看hdfs端口号(先启动集群)
配置namenode节点的ip(自己的虚拟机IP)地址及端口。
相关的Hadoop集群的连接信息有以下各项。
Location name:命名新建的Hadoop连接名称,如Hadoop Cluster。
Map/Reduce Master:填写Hadoop集群的ResourceManager的IP和端口。
DFS Master:填写Hadoop集群的NameNode的IP地址和连接端口。
填写完以上信息后,单击“Finish”按钮。
(4)浏览HDFS上的目录及文件
在配置完Hadoop集群连接后,确认Hadoop集群已经启动,就可以在Eclipse界面浏览HDFS上的目录及文件,如下图所示。还可以通过鼠标来执行文件操作,例如文件的上传和删除等。需要注意的事,每次执行操作后,需要刷新HDFS列表,从而获得文件目录的最新状态。
3.新建MapReduce工程
(1)导入MapReduce运行依赖的相关JAR包
在主菜单上单击“Window”并选择“Preferences”,例如下图所示Preference界面中,选择“Hadoop Map/Reduce”,单击“Browse...”按钮,再选中Hadoop的安装文件夹路径(相应版本的Hadoop安装包需要预先解压再本地电脑上)。最后单击“Apply”按钮并单击确定。
(2)创建MapReduce工程
从菜单栏开始,单击“File”菜单,选择“New”命令,在出现的选项中单击“Project”项,再选择“Map/Reduce Project”选项。
在"MapReduce Project"的创建界面中,填写工程名“MemberCount”,然后单击“Finish”按钮。
在主界面左侧的“Project Explorer”栏,可以看到已经创建好的工程MemberCount,Map Reduce编程所需要的JAR包已经全部自动导入。新工程已创建完成,接下来就可以正式进行MapReduce编程工作了。
创建完成MapReduce工程
4.编写wordcount的代码 ,描述他是怎么工作的。并且上传到集群完成一次完整的Wordcount
(1)创建一个class文件并命名为WordCount
(2)内容代码与解析如下
①应用程序Driver分析
这里的Driver程序主要指的是main函数,在main函数里面进行MapReduce程序的一些初始化设置,并提交任务,等待程序运行完成。总结为MapReduce任务初始化的通用代码。
②Mapper模式分析
在MapReduce程序中,最重要的代码实现就是Mapper模块中的map函数以及Reducer模块中的reduce函数。这里先看Mapper,也就是源码中的TokenizerMapper
③Reducer模式分析
继续分析Reduce,即源码中的IntSumReducer
这是wordcount的完整代码
④以下为待会任务需要修改后的完整代码
注意class名称与包名是否一致
⑤注意:确保自己电脑上的java版本跟Hadoop上的版本一致,我这里的是jdk-7u80-windows-x64(1.7)
写完代码后,把项目代码调整为1.7版本
⑥编译生成JAR包文件,并提交Hadoop集群执行
上传到Hadoop集群服务器节点
这里我放到这个路径 /usr/local/hadoop-2.6.4
需要做统计的文本也上传到Hadoop,并上传到集群(130万行数据的文本)
在Hadoop集群服务器的终端,以hadoop jar命令提交任务
注意输出的文件名每次不能相同
可以看到数据量的达到130万行的量级
做10次
⑦Combiner
Combiner是一个运行在Map端的“迷你Reduce”过程,它只处理单台机器生成的数据。声明的Combiner继承的是Reduce,其方法实现原理和Reduce的实现原理基本相同,不同的是,Combiner操作发生在Map端,或者说Combiner运行在每一个运行Map任务的节点上。它会接收特定节点上的Map输出作为输入,对Map输出的数据先做一次合并,再把结果发送到Reducer。需要注意的是,Combiner的加入不影响原逻辑,即Combiner不影响最终运行结果,影响的只是效率。
值得一提的是,并非所有的MapReduce程序都可以加入Combiner,仅当Reduce输入的键值对类型与Reduce输出的键值对类型一样,并且计算逻辑不影响最终计算结果时,才可以在MapReduce程序中加入Combiner。
前面讲过Combiner继承的是Reducer,所以声明Combiner的时候必须继承Reducer,在Combiner类里面重写Reduce方法。
除了声明Combiner类外,还需要在驱动类里面配置Combiner类
job.setCombinerClass(LogCountCombiner.class);
有时候甚至不必特意声明一个Combiner类。当Combiner和Reduce的实现逻辑相同的时候,可以不用声明Combiner类,而在驱动类里面添加代码
job.setCombinerClass(IntSumReducer.class);
完整代码如下:(注意修改包名和类名是否相同)
或者
同样需要进行打包
设置接口
上传到集群
继续做在Hadoop集群服务器的终端,以hadoop jar命令提交任务(本次添加了Combiner)
注意输出的文件名每次不能相同
做10次
这里可以看到所使用的文本跟上面没加Combiner的文本是同一个,所以数据量是130万行
总结:wordcount加了combiner的代码后,运行效率提高了。
代码总结: