使用hadoop3.1.5,centOS 7,以及jdk8作为实验环境。
完成hadoop,三个模块,安装,调试,以及简单实验。此文章最后将分析一段日志里面的单词的出现个数,作为实验的最终目的。
1.hdfs(Hadoop Distributed File System)(其实就是一个文件系统,理解成存放数据的大硬盘)
2.yarn(Yet Another Resource Negotiator)(一个资源调度器,安排谁来干什么)
3.map/reduce(计算框架,帮助进行计算的)
0.1首先安装虚拟机软件
0.1.1 首先安装一个虚拟机软件VMware或者virtualBox。
0.1.2 然后使用。这里使用的是CentOS-7-x86_64-DVD-1810.iso 安装。关于linux发行版的安装,不多做解释。
配置使用以下的默认配置就可以了。安装完一份,使用复制虚拟机,再复制一模一样的三份出来。
选择最低基础设施服务器,也可以更高,低了需要手动安装一些
然后下一步,在这里安装的过程中配置以下root密码,这里使用root,由于太短,需要按两次确认才可以。
然后等待安装完成。
安装完成后,复制此虚拟机3份,修改在虚拟机的名字,在自己新建的hadoop文件夹下,方便管理,如下。
0.1.3 配置网络,注意,这边推荐使用static而不是dhcp,这样自己的ip地址不会因为路由的分配不同,而发生改变,除非路由根据mac绑定分配ip。关于linux网络配置,请自行百度。此处注意对虚拟机网卡的配置,选择无线桥接。配置完成之后,应该四台虚拟机都可以和本机相互ping通,四台虚拟机也能互相ping通。然后使用xshell连接四台虚拟机,这样可以远程连接四台设备,而不用在虚拟机中操作了,这边完成如下
0.1.4 检查是否安装了java,hadoop的运行是需要java环境的,参见 https://www.cnblogs.com/yjlch1016/p/8900841.html,或者直接下载rpm包安装,更简单,不用配置环境变量 安装好四台之后。如下:
0.1.5为了方便起见,可以修改linux主机名,方便观察设备。修改如下
hostnamectl set-hostname xxx 可以修改主机名为xxx
hostname 可以查看主机名
此处将200的主机名改为master 201-203 分别为slave1-3
1.1安装hadoop
1.1.1 解压hadoop,配置
1、在linux /usr/local路径创建目录:mkdir /usr/local/
2、解压hadoop到local目录中:tar -zxvf hadoop-2.2.0.tar.gz -C /usr/local/hadoop
3、重命名 mv hadoop-3.1.2/ hadoop/
4、进入目录:/usr/local/hadoop/,为hadoop主目录
5、告诉hadoop,java在哪里,修改/usr/local/hadoop/etc/hadoop/hadoop-env.sh 。
47行修改为JAVA_HOME目录。export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64/
6、配置core-site,指名使用的文件系统时啥,在哪,以及hadoop运行期间产生的文件,放在那,这个也需要在每台设备上面配置,
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop</value>
</property>
注意,这里的master需要配置一下域名解析,改一下etc/hosts,这样可以直接通过名称访问到设备。
192.168.1.200 master
192.168.1.201 slave1
192.168.1.202 slave2
192.168.1.203 slave3
7、解释一下,当4台设备通过主机名可以互相ping通,本机也能ping通,就可以了,这是基础的配置。hadoop由一台master带起若干台slave(在hadoop3中改为worker,其实是一个东西)。然后hadoop里面的hdfs也就是master运行nameNode,slave运行dataNode;在yarn中master运行ResourceManager,slave运行NodeManager。
master | slave | |
hdfs | nameNode | dataNode |
yarn | ResourceManager | NodeManager |
1.2 配置运行hdfs
1.2.1、运行hdfs很简单,hdfs是分布式的文件系统,nameNode负责管理,而dataNode负责实际存储。
所以启动他只需要3个点,启动nameNode,启动dataNode,将2者关联起来
1.2.2、启动nameNode,大家都用过硬盘u盘,使用前需要格式化,hdfs也是一样,首先需要格式化,注意,此处只需要格式化nameNode,因为他是管理者,实际的存储dataNode并不需要格式化,或者说nameNode已经规定好了。
使用命令:hdfs --daemon start namenode
1.2.3 启动dataNode
使用命令:hdfs --daemon start datanode
当nameNode以及datanode启动完成之后。使用jsp检查是否启动。
也可以访问master:9870页面查看其所属节点。如下则以及成功。
1.2.4 关联nameNode和datanode。其实观察上图可知,已经关联成功了。怎么关联的呢,参见1.1.1的第6步,已经告诉datanode的namenode指向master。 可以使用:hdfs dfsadmin -report 指令上报hdfs集群信息
1.3 配置运行yarn
部署yarn同理,只需要给所有的nodeManager的yarn-site.xml加上一个ResourceManager在哪的配置就可以了,如下告诉自己的管理者resourcemanager在master上,就可以了。注:master是不用加此配置的,因为自己是resourcemanager不需要告诉自己resourcemanager在哪。
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
成功之后访问如下
1.4 运行示例程序
下面使用yarn来分配资源,在hdfs中调用tys-receive-2019-04-09.0.log文件,来进行wordcount数据处理,如果正常,可以在 hdfs的/output目录下找到结果
运行示例程序:hadoop jar /home/hadoop/hadoop/share/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /tys-receive-2019-04-09.0.log /output