超详细的hadoop完全分布式集群的搭建

13 篇文章 0 订阅
13 篇文章 1 订阅

HDFS (hadoop distributed file system) : hadoop分布式文件系统@[toc]

前言

> 这是学习使用的,因为用虚拟机,通过root用户进行搭建,常规是使用普通用户进行搭建的,并且平时的搭建namenode和datanode通常不在同一个节点.这里主要是学习使用

编程环境

CentOS-7-x86_64-Minimal-1908.iso            linux操作系统
VMware-workstation-full-14.1.1.28517         虚拟机
MobaXterm                                                   远程连接工具

需要的jdk和hadoop压缩包

jdk-8u221-linux-x64.tar.gz
hadoop-2.7.6.tar.gz

集群搭建所需的环境

  1. 三台机器的防火墙必须是关闭的(firewalld,NetworkManager,SELinux).
  2. 确保三台机器的网络配置畅通(NAT模式,静态IP,主机名的配置)
  3. 确保/etc/hosts文件配置了ip和hostname的映射关系
  4. 确保配置了三台机器的免密登陆认证(克隆会更加方便)
  5. 确保所有机器时间同步
  6. jdk和hadoop的环境变量配置

软件资源连接 密码 67e7

此完全分布式文件系统中hdfs和yarn的相关守护进程的布局如下

hdp01:	namenode,datanode,nodemanager,ResourceManager
hdp02:	datanode,datanode,nodemanager,secondarynamenode
hdp03:	datanode,datanode,nodemanager

集群搭建步骤

一.创建一个虚拟机 had01 ,网络连接方式均为NAT模式

二.设置虚拟机静态ip

登录虚拟机 had01 ,设置该虚拟机的静态ip为192.168.10.101(这个静态ip,只要在正常范围均可)
主机名已经在创建虚拟机的同时设置了

# 进入ifcfg-ens33文件添加静态ip等
vi /etc/sysconfig/network-scripts/ifcfg-ens33

在这里插入图片描述
除此之外还需要增加一些属性,之后保存并退出.
在这里插入图片描述
重启网络,并查看ip是否修改成功

[root@hdp01 ~]# systemctl restart network   <------重启网络

[root@hdp01 ~]# ip addr  <-----查看ip
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f2:6e:3c brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.101/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::9808:439a:cc45:f571/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
---->可以看到上面的ip是192.168.10.101 说明修改成功

三.关闭防火墙,NetworkManager,SELinux

systemctl disable firewalld   <----设置开机不自启(永久关闭,但是需要重启生效)
systemctl stop firewalld      <----关闭防火墙(临时关闭)  

systemctl disable NetworkManager  <---设置NetworkManager开机不自启(需重启生效)
systemctl stop NetworkManager     <---临时关闭NetworkManager  

vi /etc/selinux/config            

---->进入config文件,修改一个地方

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing   <---- 将enforcing修改成disabled即可  (禁用安全机制)
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

四.预先设置分布式中所有主机的主机名和ip的映射关系

vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.101 hdp01       <------新增部分
192.168.10.102 hdp02	   <------新增部分
192.168.10.103 hdp03	   <------新增部分

五.配置虚拟机的免密登录

[root@hdp01 ~]# ssh-keygen -t rsa   然后一路回车即可,直至看到一个密钥图,说明生成密钥对成功
[root@hdp01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub hdp01   <--由于虚拟机的主机名和需要接收公钥的主机名相同,可以将root@hdp01简写成hdp01
[root@hdp01 ~]# ssh hdp01  
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'hdp01 (192.168.10.101)' can't be established.
ECDSA key fingerprint is SHA256:LN4Ci9X8WIUX8SCBM9KTfX9ZYe89P4BE/EP148Ua5sY.
ECDSA key fingerprint is MD5:fe:4d:48:28:0d:67:5f:e1:31:2b:a6:d8:39:c0:76:2f.
Are you sure you want to continue connecting (yes/no)? yes  <---- '到这里输入yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@hdp01's password:  <----这里输入密码

Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'hdp01'"
and check to make sure that only the key(s) you wanted were added.

---->到这里我们试一下是否已经成功实现免密登录了 

[root@hdp01 ~]# ssh hap01  <--------
Last login: Wed Jun  3 20:58:39 2020 from gateway
[root@hdp01 ~]#
--->发现确实没有再出现需要输入密码的情况,免密登录成功
[root@hdp01 ~]# ssh localhost    <---------- 取消询问
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:LN4Ci9X8WIUX8SCBM9KTfX9ZYe89P4BE/EP148Ua5sY.
ECDSA key fingerprint is MD5:fe:4d:48:28:0d:67:5f:e1:31:2b:a6:d8:39:c0:76:2f.
Are you sure you want to continue connecting (yes/no)? yes   <----输入yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Last login: Wed Jun  3 21:20:26 2020 from hdp01
[root@hdp01 ~]# ssh 0.0.0.0     <---------- 取消询问
The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
ECDSA key fingerprint is SHA256:LN4Ci9X8WIUX8SCBM9KTfX9ZYe89P4BE/EP148Ua5sY.
ECDSA key fingerprint is MD5:fe:4d:48:28:0d:67:5f:e1:31:2b:a6:d8:39:c0:76:2f.
Are you sure you want to continue connecting (yes/no)? yes   <---输入yes
Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
Last login: Wed Jun  3 21:45:07 2020 from localhost

------>
免密登陆只要在namenode所在节点以及ResourceManager所在节点对所有节点免密即可。因为在集群启动及运行过程中namenode和resourceManager需要和其他节点进行通信。

六.搭建时间服务器
--------->     时间服务器的搭建

七,安装jdk
①在/root目录下新建一个目录software

mkdir /root/software

②通过远程工具将jdk压缩包上传至虚拟机中
在这里插入图片描述

[root@hdp01 ~]# cd /root/software  <----进入software目录
[root@hdp01 software]# ll   <----查看jdk文件详情
总用量 190524
-rw-r--r--. 1 root root 195094741 6月   3 22:00 jdk-8u221-linux-x64.tar.gz

④将jdk压缩包解压并拆包至 /usr/local/目录下

tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local

⑤将jdk1.8.0_221 jdk更名为jdk (不嫌名字长也可以不更名)

cd /usr/local
mv jdk1.8.0_221 jdk

⑥配置jdk的环境变量

vi /etc/profile

在文件的最后添加一下内容
# java environment
export 	JAVA_HOME=/usr/local/jdk
export  PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

⑦重新加载配置文件

source /etc/profile

⑧验证环境变量配置是否成功

javac  或者  java -version  有东西出来就说明配置成功

[root@hdp01 local]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
----->环境变量配置成功

八,安装hadoop
①将hadoop打包文件通过远程工具传到虚拟机的/root/software/目录下
②解包到/usr/local/目录下

[root@hdp01 software]# cd /root/software  <-----进入/root/software目录下
[root@hdp01 software]# ll  <---查看文件详情
总用量 402192
-rw-r--r--. 1 root root 216745683 6月   3 22:15 hadoop-2.7.6.tar.gz
-rw-r--r--. 1 root root 195094741 6月   3 22:00 jdk-8u221-linux-x64.tar.gz

[root@hdp01 software]# tar -zxvf  hadoop-2.7.6.tar.gz -C /usr/local

③更名

[root@hdp01 software]# cd /usr/local
[root@hdp01 local]# mv hadoop-2.7.6 hadoop

④配置环境变量

[root@hdp01 local]# vi /etc/profile   <----进入profile文件
----->在文件底部添加如下内容
# hadoop environment
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

⑤加载配置表

[root@hdp01 local]# source /etc/profile

⑥验证环境变量是否配置成功

hadoop  或者  hadoop version

[root@hdp01 local]# hadoop version
Hadoop 2.7.6
Subversion https://shv@git-wip-us.apache.org/repos/asf/hadoop.git -r 085099c66cf28be31604560c376fa282e69282b8
Compiled by kshvachk on 2018-04-18T01:33Z
Compiled with protoc 2.5.0
From source with checksum 71e2695531cb3360ab74598755d036
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.6.jar
-----> 环境变量配置成功

九,配置文件 (共有7个文件需要配置)
这些配置文件都在$HADOOP_HOME/etc/hadoop/目录下
搭建hadoop需要配置8个文件

core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
hadoop-env.sh
mapred-env.sh
yarn-env.sh
slaves

①配置core-site.xml

[root@hdp01 local]# cd $HADOOP_HOME/etc/hadoop    <---进入hadoop目录
[root@hdp01 hadoop]# ll    <----查看文件详情
总用量 152
-rw-r--r--. 1 20415 101  4436 4月  18 2018 capacity-scheduler.xml
-rw-r--r--. 1 20415 101  1335 4月  18 2018 configuration.xsl
-rw-r--r--. 1 20415 101   318 4月  18 2018 container-executor.cfg
-rw-r--r--. 1 20415 101   774 4月  18 2018 core-site.xml
-rw-r--r--. 1 20415 101  3670 4月  18 2018 hadoop-env.cmd
-rw-r--r--. 1 20415 101  4224 4月  18 2018 hadoop-env.sh
-rw-r--r--. 1 20415 101  2598 4月  18 2018 hadoop-metrics2.properties
-rw-r--r--. 1 20415 101  2490 4月  18 2018 hadoop-metrics.properties
-rw-r--r--. 1 20415 101  9683 4月  18 2018 hadoop-policy.xml
-rw-r--r--. 1 20415 101   775 4月  18 2018 hdfs-site.xml
-rw-r--r--. 1 20415 101  1449 4月  18 2018 httpfs-env.sh
-rw-r--r--. 1 20415 101  1657 4月  18 2018 httpfs-log4j.properties
-rw-r--r--. 1 20415 101    21 4月  18 2018 httpfs-signature.secret
-rw-r--r--. 1 20415 101   620 4月  18 2018 httpfs-site.xml
-rw-r--r--. 1 20415 101  3518 4月  18 2018 kms-acls.xml
-rw-r--r--. 1 20415 101  1527 4月  18 2018 kms-env.sh
-rw-r--r--. 1 20415 101  1631 4月  18 2018 kms-log4j.properties
-rw-r--r--. 1 20415 101  5540 4月  18 2018 kms-site.xml
-rw-r--r--. 1 20415 101 11801 4月  18 2018 log4j.properties
-rw-r--r--. 1 20415 101   951 4月  18 2018 mapred-env.cmd
-rw-r--r--. 1 20415 101  1383 4月  18 2018 mapred-env.sh
-rw-r--r--. 1 20415 101  4113 4月  18 2018 mapred-queues.xml.template
-rw-r--r--. 1 20415 101   758 4月  18 2018 mapred-site.xml.template
-rw-r--r--. 1 20415 101    10 4月  18 2018 slaves
-rw-r--r--. 1 20415 101  2316 4月  18 2018 ssl-client.xml.example
-rw-r--r--. 1 20415 101  2697 4月  18 2018 ssl-server.xml.example
-rw-r--r--. 1 20415 101  2191 4月  18 2018 yarn-env.cmd
-rw-r--r--. 1 20415 101  4567 4月  18 2018 yarn-env.sh
-rw-r--r--. 1 20415 101   690 4月  18 2018 yarn-site.xml

[root@hdp01 hadoop]# vi core-site.xml

------>在文件内的configuration标签内添加一下内容
<configuration>
        <property>
                <name>fs.defaultFS</name>     <-----  默认的文件系统,file:/// 表示本地文件系统 ,hdfs表示使用的是hadoop分布式文件系统,在core-site.xml中包括fs.defaultFS以允许dfs命令,而无需在命令中提供完整的站点名称。 运行hdfs dfs -ls /代替hdfs dfs -ls hdfs://ip(或hostname)/ hdp01:9000 中9000表示datanode发送心跳信息的接收对象即namenode的ipc服务端口,hdp01表示namenode所在主机名或者ip,2.7版本及之后df.default.name属性被df.defaultFS属性替代
                <value>hdfs://hdp01/</value>
        </property>

        <property>
                <name>hadoop.tmp.dir</name>   <-----其他目录的基础路径,有三个HDFS属性,其值包含hadoop.tmp.dir,dfs.name.dir:namenode存储元数据的目录,默认值为$ {hadoop.tmp.dir}/dfs/name,
dfs.data.dir:HDFS数据块的存储目录,默认值为$ {hadoop.tmp.dir}/dfs/data, fs.checkpoint.dir:辅助名称节点存储其检查点的目录,默认值为$ {hadoop.tmp.dir}/dfs/namesecondary
                <value>/usr/local/hadoop/tmp</value>
        </property>
</configuration>

②配置hdfs-site.xml

[root@hdp01 hadoop]# vi hdfs-site.xml  
--->进入hdfs-site.xml文件后,在configuration标签内添加一下内容
<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>    <----namenode守护进程管理的元数据文件fsimage存储的位置
                <value>file://${hadoop.tmp.dir}/dfs/name</value>      
        </property>

        <property>
                <name>dfs.datanode.data.dir</name>    <-----
                <value>file://${hadoop.tmp.dir}/dfs/data</value>     <-----datanode守护进程所管理的块文件的存储路径
        </property>

        <property>
                <name>dfs.replication</name>    <-----datanode中块的副本数
                <value>3</value>
        </property>

        <property>
                <name>dfs.blocksize</name>    <-----新文件的默认块大小(每个块的最大大小,超过这个大小会用另外一个块去存数据),以字节为单位。可以使用以下后缀(不区分大小写):k(kilo),m(mega),g(giga),t(tera),p(peta),e(exa)指定大小(例如128k,512m,1g等,注意单位之间的换算是1024),或提供完整大小(以字节为单位)(例如134217728表示128 MB)。
                <value>134217728</value>
        </property>

        <property>
                <name>dfs.namenode.secondary.http-address</name>    <-----secondary namenode的HTTP服务的端口和地址:主机名(或主机ip)
                <value>hdp02:50090</value>
        </property>
</configuration>

③配置mapred-site.xml

[root@hdp01 hadoop]# mv mapred-site.xml.template mapred-site.xml   拷贝一份并去掉.template后缀,才能进入文件中编辑
[root@hdp01 hadoop]# vi mapred-site.xml
----> 进入mapred-site.xml文件,在configuration标签内添加以下内容

<configuration>
        <property>
                <name>mapreduce.framework.name</name>    <-----执行MapReduce任务时的运行时框架,可以是以下三个中的其中之一:local, classic or yarn
                <value>yarn</value>
        </property>

        <property>
                 <name>mapreduce.jobhistory.address</name>   <-----MapReduce JobHistory的IPC服务的端口和主机地址(主机名或ip)
                 <value>hdp01:10020</value>
        </property>

        <property>
                <name>mapreduce.jobhistory.webapp.address</name>   <-----MapReduce JobHistory的Web UI的端口和地址(主机名或ip)
                <value>hdp01:19888</value>
        </property>
</configuration>

④配置yarn-site.xml

[root@hdp01 hadoop]# vi yarn-site.xml
---> 进入yarn-site.xm文件,在configuration标签内添加如下内容
<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>   <-----NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序;以逗号分隔的服务列表,其中服务名称应仅包含a-zA-Z0-9_并且不能以数字开头
                <value>mapreduce_shuffle</value>
        </property>

        <property>
                <name>yarn.resourcemanager.hostname</name>   <-----resourcemanager的主机名
                <value>hdp01</value>
        </property>
</configuration>

⑤配置hadoop-env.sh

[root@hdp01 hadoop]# vi hadoop-env.sh
-----> 进入hadoop-env.sh文件内
将大约第25行的
export JAVA_HOME=${JAVA_HOME} 修改成为jdk的安装路径
修改成-->  export JAVA_HOME=/usr/local/jdk

⑥配置yarn-env.sh

[root@hdp01 hadoop]# vi yarn-env.sh
-----> 进入yarn-env.sh文件内
将大约第23行的
 # export JAVA_HOME=/home/y/libexec/jdk1.6.0/
 修改为
 export JAVA_HOME=/usr/local/jdk    注释解开,并把环境变量的路径修改为自己安装jdk的路径

至于⑤和⑥的JAVA_HOME环境变量为什么需要写成绝对路径而不是引用系统中已经配好的JAVA_HOME环境变量,还有待查阅

⑦配置slaves文件

[root@hdp01 hadoop]# vi slaves
------>进入slaves文件内,并将需要部署datanode守护进程的主机名都写在这里(此次安装准备三个虚拟机,分别是hdp01,hdp02,hdp03)

hdp01
hdp02
hdp03

----------->到这里配置文件的配置就完成了

十,克隆两个虚拟机
主机名分别为hdp02 hdp03
克隆虚拟机的流程
①先关闭被克隆的虚拟机
②虚拟机上右击–管理–克隆
在这里插入图片描述
③点击下一步
在这里插入图片描述
④点击下一步
在这里插入图片描述
⑤选择创建完整克隆
在这里插入图片描述
⑥设置虚拟机的主机名,位置,点击完成,过一会就克隆完成,点击关闭即可
在这里插入图片描述
⑦开启虚拟机
在这里插入图片描述
⑧用root用户登录虚拟机
在这里插入图片描述
⑨修改主机名

[root@hdp02 ~]# hostnamectl set-hostname hdp02     <----设置主机名
[root@hdp02 ~]# hostname                           <----查看主机名是否修改成功
hdp02 

⑩修改虚拟机静态ip

[root@hdp02 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
----->进入ifcfg-ens33文件中修改ip即可

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
UUID=49c77ab0-78d7-488e-a93e-e2de41dc23dd
DEVICE=ens33
ONBOOT=yes
IPV6_PRIVACY=no
IPADDR=192.168.10.101    <-----只需要将ip修改即可,这里修改成192.168.10.102
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=114.114.114.116

⑪重启网络

[root@hdp02 ~]# systemctl restart network

⑫查看ip验证是否修改成功

[root@hdp02 ~]# ip addr | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.10.102/24 brd 192.168.10.255 scope global ens33
------>ip修改成功

------> 一台虚拟机克隆结束,后面按照同样的方法克隆第三台 hdp03
⑬虚拟机克隆完成后,通过ssh命令测试一下三台虚拟机之间是否能够免密登录,去掉询问

[root@hdp01 ~]# ssh hdp02
[root@hdp01 ~]# ssh hdp03
[root@hdp01 ~]# ssh hdp01
[root@hdp02 ~]# ssh hdp01
[root@hdp02 ~]# ssh hdp02
[root@hdp02 ~]# ssh hdp03
[root@hdp03 ~]# ssh hdp01
[root@hdp03 ~]# ssh hdp02
[root@hdp03 ~]# ssh hdp03
---->都不用输入密码即可完成连接,说明相互之间免密登录是可以的

这里需要注意的是:进行远程连接之后,还需要登出回到原来的用户,否则开启集群的时候会有问题

十一,在hdp01虚拟机上进行集群格式化

[root@hdp01 hadoop]# hdfs namenode -format

----->格式化之后只要出现下面这句就说明格式化成功
20/06/04 00:36:53 INFO common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted.

十二,启动集群
这里需要注意的是,如果namenode和resourcemanager不在同一个节点 ,启动集群不可以使用start-all.sh,而应该在namenode所在节点使用start-dfs.sh,在resourcemanager节点使用start-yarn.sh分别启动
①开启namenode,secondary namenode,datanode

[root@hdp01 hadoop]# start-dfs.sh
Starting namenodes on [hdp01]
hdp01: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-hdp01.out
hdp02: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-hdp02.out
hdp01: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-hdp01.out
hdp03: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-hdp03.out
Starting secondary namenodes [hdp02]
hdp02: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-hdp02.out

②开启resourcemanager,nodemanager

[root@hdp01 hadoop]# start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-root-resourcemanager-hdp01.out
hdp02: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-hdp02.out
hdp03: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-hdp03.out
hdp01: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-hdp01.out

③查看三台虚拟机的相关守护进程是否开启
分别在三台虚拟机执行jps命令,可以看到已经按照之前的预想构建了完全分布式集群
在这里插入图片描述
十三,查看webui网站是否能成功连接
在浏览器中输入http://namenode所在主机ip:50070/
可以看到这里成功连接上了
在这里插入图片描述

十三.进行简单的功能测试(统计每个单词出现的次数)

①在linux文件系统中准备一个含有文本内容的文件 ```shell cd /root touch word.txt vi word.txt

---->编辑word.txt文件

looking in your eyes I see your smile
looking in your eyes I see my dream
notyhing can stop us
we’re heart to heart never to be apart
I’m so glad to find you I will never lose you
I will stay here with you
through all good and bad times
we will have each other
no matter how far we are apart
toy belong to me and I belong to you
I’ll love you with my heart forever and ever
I will think about you all my days and all nights
we will be toghether
beause our love will be for ever
you belong to me
youo will always be my love
you belong to me I belong to you
you will always be my love

②在hdfs文件系统中新建一个目录/datasource
```shell
[root@hdp01 ~]# hdfs dfs -mkdir /datasource

这个目录可以在webui网站上看到
在这里插入图片描述
③将linux文件系统中准备的文件上传至hdfs文件系统中的/datasource目录下

[root@hdp01 ~]# hdfs dfs -put /root/word.txt /datasource

确认是否成功上传至hdfs文件系统中
在这里插入图片描述
④用hadoop命令运行自带的单词统计程序wordcount (执行相应的jar文件)
命令的格式:

hadoop 命令
jar  执行jar文件
需要执行的jar文件的路径
wordcount  单词统计命令
/datasource  需要统计的文件所在目录
/output     结果输出目录
[root@hdp01 ~]#  hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /datasource /output
20/06/04 05:49:25 INFO client.RMProxy: Connecting to ResourceManager at hdp01/192.168.10.101:8032
20/06/04 05:49:28 INFO input.FileInputFormat: Total input paths to process : 1
20/06/04 05:49:28 INFO mapreduce.JobSubmitter: number of splits:1
20/06/04 05:49:28 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1591218958351_0001
20/06/04 05:49:29 INFO impl.YarnClientImpl: Submitted application application_1591218958351_0001
20/06/04 05:49:30 INFO mapreduce.Job: The url to track the job: http://hdp01:8088/proxy/application_1591218958351_0001/
20/06/04 05:49:30 INFO mapreduce.Job: Running job: job_1591218958351_0001
20/06/04 05:49:48 INFO mapreduce.Job: Job job_1591218958351_0001 running in uber mode : false
20/06/04 05:49:48 INFO mapreduce.Job:  map 0% reduce 0%
20/06/04 05:50:03 INFO mapreduce.Job:  map 100% reduce 0%
20/06/04 05:50:17 INFO mapreduce.Job:  map 100% reduce 100%
20/06/04 05:50:18 INFO mapreduce.Job: Job job_1591218958351_0001 completed successfully
20/06/04 05:50:19 INFO mapreduce.Job: Counters: 49
......下面的内容太多就不显示了

⑤查看统计结果
方法一:使用hdfs dfs -cat命令查看

[root@hdp01 ~]# hdfs dfs -cat /output/*
I       7
I'll    1
I'm     1
about   1
all     3
always  2
and     4
apart   2
are     1
bad     1
be      5
beause  1
belong  5
can     1
days    1
dream   1
each    1
ever    2
eyes    2
far     1
find    1
for     1
forever 1
glad    1
good    1
have    1
heart   3
here    1
how     1
in      2
looking 2
lose    1
love    4
matter  1
me      3
my      5
never   2
nights  1
no      1
notyhing        1
other   1
our     1
see     2
smile   1
so      1
stay    1
stop    1
think   1
through 1
times   1
to      8
toghether       1
toy     1
us      1
we      3
we're   1
will    8
with    2
you     10
youo    1
your    3

方法二:在webui的网站上找到这个结果文件并下载进行查看
需要注意的是,在主机上需要配置虚拟机主机名和ip的映射关系,否则无法从webui上下载文件
window操作系统中配置ip映射关系的文件路径 : C:\Windows\System32\Drivers\etc\hosts
在这里插入图片描述
-------->到这里,完全分布式集群的搭建就结束了.

做些笔记:
①hadoop支持不同的文件系统,不同的文件系统对象的复制因子是不同的,如果在core-site.xml中定义的fs.defaultFS属性中使用的是hdfs://… ,那么所使用的复制因子就是dfs.replication的值.

-----------------------------------------------------------------------------------------------
| Replication Factor Property| FileSystem       | URI Scheme | Java Implementation            |
|                            |                  |            | (org.apache.hadoop)            |
-----------------------------------------------------------------------------------------------
| dfs.replication            | HDFS             | hdfs       | hdfs.DistriburedFileSystem     |
-----------------------------------------------------------------------------------------------
| file.replication           | Local            | file       | fs.LocalFileSystem             | 
-----------------------------------------------------------------------------------------------
| ftp.replication            | FTP              | ftp        | fs.ftp.FTPFileSystem           |      
-----------------------------------------------------------------------------------------------
| s3.replication             | S3 (block based) | s3         | fs.s3.S3FileSystem             |
-----------------------------------------------------------------------------------------------
| s3native.replication       | S3 (native)      | s3n        | fs.s3native.NativeS3FileSystem |
-----------------------------------------------------------------------------------------------

②有完善再来记录
我竟然写了这么多,别说,我自己都不信,为了写这些还去查了Stack Overflow网站上寻找答案,但无奈技术有限,有一些问题仍然没有找到的.

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值