大数据环境搭建

  • 本文初衷是为了学习归纳,若有错误,欢迎指出。

1.安装CentOS7虚拟机

​ 这里因为用CentOS 7 的版本,最好下载7版本的镜像,如果用8的,部分命令有所不同。

​ CentOS官方下载地址:

​ http://isoredirect.centos.org/centos/7/isos/x86_64/

​ 本机内存不够的,在虚拟机安装完系统后可以调小一点内存。

  • init 0 关闭VM机器。

2.VM虚拟机环境配置

  • 停止防火墙
#停止防火墙
[root@localhost ~]#systemctl stop firewalld 
#禁止防火墙随着系统启动而启动 
[root@localhost ~]#systemctl disable firewalld 
#查看防火墙状态 
[root@localhost ~]#systemctl status firewalld

在这里插入图片描述

  • 禁止Selinux
#将SELINUX的值设置为disabled 
[root@localhost ~]# vi/etc/selinux/config 
#查看是否设置完成 
[root@localhost ~]# cat /etc/selinux/config

在这里插入图片描述

3.配置虚拟机网络

这里我的物理机的IP地址:192.168.1.11 ;物理机网关192.168.1.1
VM8的IP地址:192.168.1.1;VM8的网关:192.168.0.0
虚拟机子网IP:192.168.1.0 ;子网掩码:255.255.255.0
虚拟机网关:192.168.1.2

​ 此后创建的3台节点机器的IP从192.168.1.2后顺延,这里我选择192.168.1.21、192.168.1.22、192.168.1.23。

注意虚拟机的网关要和VM8的ip处于同一网段,并且每台机器的网关需要和虚拟机网络设置的网关一致,否则等下联网会有问题。
在这里插入图片描述
在这里插入图片描述

  • 进入虚拟机,配置虚拟机IP
[root@node_1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static  #dhcp
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=381ab9e3-5657-4fa6-9eee-edc719370d40		#注释掉,不需要
#DEVICE=ens33									#注释掉,不需要
ONBOOT=yes


#在文件ifcfg-ens33的末尾新增,如下内容:
IPADDR=192.168.1.21
NETMASK=255.255.255.0
GATEWAY=192.168.1.2 #和在配置虚拟网路中的网关保持一致
DNS1=8.8.8.8
DNS2=144.144.144.144

#配置完成后保存文件 
#重新启动网卡 
#注意:如果是centOS8的系统,启动网卡是:nmcli c reload
[root@localhost ~]#systemctl restart network 
#ping 百度的官网保证虚拟机能够访问外网,方便后期在线安装一些依赖软件 
[root@localhost ~]#ping www.baidu.com

4.安装XShell工具

分别安装XShell和Xftp

注意这两个工具最好从官网下载,因为破解版的会缺少文件,导致安装失败。

https://blog.csdn.net/xc_123/article/details/92806570

没有安装xftp的情况下,可以先用sftp,拖拽文件到sftp的窗口进行发送。

5.上传JDK到linux机器

这里可以直接用上一步骤所说,将jdk文件(这里用的是“jdk-8u211-linux-x64”)直接拖拽到sftp的命令行中直接传。或者在XShell通过Xftp传文件到虚拟机。上传的文件暂时放在根目录。

在这里插入图片描述

6.安装JDK到Linux机器

[root@localhost ~]# rpm -ivh jdk-8u211-linux-x64.rpm
  • 配置java环境变量
#安装完后,可以先找下java的安装目录在哪里,用find命令查找。
[root@localhost ~]# find / -name java
/etc/pki/ca-trust/extracted/java
/etc/pki/java
/etc/alternatives/java
/var/lib/alternatives/java
/usr/bin/java
/usr/share/bash-completion/completions/java
/usr/java
#java的安装目录
/usr/java/jdk1.8.0_211-amd64/bin/java
/usr/java/jdk1.8.0_211-amd64/jre/bin/java

#修改配置文件(系统环境变量,这个文件夹每个用户都有。修改path路径,以便jvm编译时系统能找到对应的代码)
[root@localhost ~]# vi .bash_profile
#添加一下代码
# User specific environment and startup programs #java环境变量 
#java环境变量加入到path中 
JAVA_HOME=/usr/java/jdk1.8.0_211-amd64 
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin 

export JAVA_HOME 
export PATH

#source命令
[root@localhost ~]# source .bash_profile
[root@localhost ~]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

source命令:source filename 在当前bash环境下读取并执行FileName中的命令。

注:该命令通常用命令“.”来替代,比如 . filename#(中间有空格)

7.配置时间同步

大数据集群需要个个节点之间的时间保持一致,否则后面会出现问题,这里利用定时任务来刷新每台机器的时间,最好是在每台机器(集群节点)都定时刷新时间。

  • 安装时间同步软件
centOS8版本:yum install -y chrony
centOS7版本:yum install -y ntpdate
  • 配置定时时间同步
#使用crontab -e命令添加定时时间同步配置 
[root@localhost ~]# crontab -e  
\#以下配置的意思是每分钟同步一次时间 
*/1 * * * * /usr/sbin/ntpdate us.pool.ntp.org; 

#等待一分钟左右使用date命令查看系统时间是否同步 [root@localhost ~]# date 
Sun Jun 30 10:51:17 CST 2019 
[root@localhost ~]#

8.安装网络工具net-tools

net-tools是Linux系统下一个排查网络故障的工具,经常需要它查看集群网络运行情况。

yum install -y net_tools

yum命令的选项:-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)

yum常用命令:

  • 1.列出所有可更新的软件清单命令:yum check-update
  • 2.更新所有软件命令:yum update
  • 3.仅安装指定的软件命令:yum install <package_name>
  • 4.仅更新指定的软件命令:yum update <package_name>
  • 5.列出所有可安裝的软件清单命令:yum list
  • 6.删除软件包命令:yum remove <package_name>
  • 7.查找软件包 命令:yum search

9.克隆虚拟机作集群节点

​ 这一步比较简单,通过VM虚拟机直接克隆三台机器,克隆前先关闭当前运行的虚拟机

​ vm点击虚拟机 - 右键 - 管理 - 克隆

10.分别配置三台虚拟机的IP和主机名

  • 三台都用root权限配置主机名
节点1的机器:hostnamectl set-hostname node1

节点2的机器:hostnamectl set-hostname node2

节点3的机器:hostnamectl set-hostname node3
  • 三台机器的IP地址规划如下:
节点名称IP地址
node1192.168.1.21
node2192.168.1.22
node3192.168.1.23

修改IP的命令

vi /etc/sysconfig/network-scripts/ifcfg-ens33

#修改完成后需要重启网卡,如果重启网卡发现IP还没有生效,那重启机器试试。
systemctl restart network

#以上确保node1,node2,node3的IP地址配置已完成。

11.root用户的免密登录配置(ssh)

​ 在XShell中开启三台节点机器,测试XShell能否连接成功

11.1 生成公钥和私钥

这里有个小窍门,xshell工具 - 查看 - 撰写 - 撰写栏 ,这里可以统一输入命令给所有机器使用。
20200319221545463

三台机器都要。

[root@node1 ~]# ssh-keygen -t rsa #<--回车 
Generating public/private rsa key pair. 
Enter file in which to save the key (/root/.ssh/id_rsa): #<--回车 
\#会在root用户的家目录下生成.ssh目录,此目录中会保存生成的公钥和私钥 
Created directory '/root/.ssh'. 
Enter passphrase (empty for no passphrase): #<--回车 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa. 
Your public key has been saved in /root/.ssh/id_rsa.pub. 	#公钥文件
The key fingerprint is: 
SHA256:gpDw08iG9Tq+sGZ48TXirWTY17ajXhIea3drjy+pU3g root@node1 
The key's randomart image is: 
+---[RSA 2048]----+ 
|. . | 
| * = | 
|. O o | 
| . + . |**3.3** **配置****hosts****文件**

11.2 配置hosts文件,用于告知当前机器如何远程链接其他机器的ip地址路径。

三台机器都要。

#hosts文件中配置三台机器ip和主机名的映射关系,其他两台机器按照相同的方式操作. 
[root@node1 ~]# vi /etc/hosts 
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 
192.168.1.21 node1  
192.168.1.22 node2  
192.168.1.23 node3
11.3 拷贝公钥到彼此之间的机器上
  1. 将node1的公钥拷贝到node2,node3上
  2. 将node2的公钥拷贝到node1,node3上
  3. 将node3的公钥拷贝到node1,node2上

三台机器都要。

#复制到node2上 
[root@node1 ~]# ssh-copy-id -i node2
Are you sure you want to continue connecting (yes/no)? yes #询问是否要连接输入yes回车
root@node2's password: #输入root用户的密码root后回车
#复制到node3上 
[root@node1 ~]# ssh-copy-id -i node3

#后面其他两台机器也按照这样操作。
11.4 验证免秘钥登录

在每台机器上测试彼此是否连通

ssh node1
logout #退出
ssh node2
logout #退出
ssh node3
logout #退出
11.5 添加本地认证公钥到认证文件中

这里的公钥和私钥是刚才执行 ssh-keygen -t rsa 生成的。前面是把自己的公钥考给另外两台机器,这里是给自己的认证文件做认证,否则后续格式化hadoop时会报错。

三台机器都要。

#进入到root用户的家目录下 
[root@node1 ~]# cd ~ 
[root@node1 ~]# cd .ssh/ 
#讲生成的公钥添加到认证文件中 
[root@node1 .ssh]# cat id_rsa.pub >> authorized_keys 
[root@node1 .ssh]# 

12.安装hadoop

12.1 创建hadoop用户和用户组

​ 该操作分别在三台机器执行。

#1.创建用户组hadoop 
[root@node1 ~]# groupadd hadoop 
#2.创建用户hadoop并添加到hadoop用户组中 
[root@node1 ~]# useradd -g hadoop hadoop 
#3.使用id命令查看hadoop用户组和hadoop用户创建是否成功 
[root@node1 ~]# id hadoop 
#用户uid 用户组id gid 用户组名 
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop) 
#设置hadoop用户密码为hadoop 
[root@node1 ~]# passwd hadoop
[root@node1 ~]# chown -R hadoop:hadoop /home/hadoop/ 
[root@node1 ~]# chmod -R 755 /home/hadoop/ 
#把root用户的环境变量文件复制并覆盖hadoop用户下的.bash_profile 
[root@node1 ~]# cp .bash_profile /home/hadoop/
[hadoop@node1 ~] su - hadoop 
[hadoop@node1 ~] source.bash_profile

对三台机器的hadoop用户同样做免秘钥登录操作(1.生成公钥私钥 2.拷贝公钥到对方机器上 3.添加本地认证公钥 4.验证免密登录)。

[hadoop@node1 ~]# ssh-keygen -t rsa #<--不停回车
#拷贝公钥到彼此之间的机器上
[hadoop@node1 ~]# ssh-copy-id -i node2
[hadoop@node1 ~]# ssh-copy-id -i node3
[hadoop@node1 ~]# ssh node2
[hadoop@node1 ~]# logout

[hadoop@node1 ~]# cd .ssh/ 
#讲生成的公钥添加到认证文件中 ,这一步最好先检查下这个authorized_keys是否已经有内容了。
[hadoop@node1 ~]# cat id_rsa.pub >> authorized_keys 

#修改.ssh目录权限 
[hadoop@node1 ~]$ chmod -R 755 .ssh/ 
[hadoop@node1 ~]$ cd .ssh/ 
[hadoop@node1 .ssh]$ chmod 644 * 
[hadoop@node1 .ssh]$ chmod 600 id_rsa 
[hadoop@node1 .ssh]$ chmod 600 id_rsa.pub
12.2 解压缩hadoop

​ 切回root权限。

​ 这一步骤,调好一台机器后可以直接复制配置文件到其他两台机器上。这样保证所有的机器一致。

  • 事先用xshell传好hadoop的压缩文件(hadoop-2.7.3.tar)

    然后创建好存放的目录,进行解压

#1.创建hadoop安装目录 
[root@node1 ~]# mkdir -p /opt/bigdata 
#2.解压hadoop-2.7.3.tar.gz 
[root@node1 ~]# tar -xzvf hadoop-2.7.3.tar.gz -C /opt/bigdata/
12.3 配置hadoop环境变量

添加hadoop的安装路径。

[root@node1 ~]# vi .bash_profile 
\# .bash_profile 
\# Get the aliases and functions 
if [ -f ~/.bashrc ]; then 
. ~/.bashrc 
fi

\# User specific environment and startup programs 
JAVA_HOME=/usr/java/jdk1.8.0_211-amd64 
HADOOP_HOME=/opt/bigdata/hadoop-2.7.3
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 

export JAVA_HOME 
export HADOOP_HOME 
export PATH 

~

验证环境变量

#1.使环境变量生效 
[root@node1 ~]# source .bash_profile 
#2.显示hadoop的版本信息 
[root@node1 ~]# hadoop version 
#3.显示出hadoop版本信息表示安装和环境变量成功. 
Hadoop 2.7.3

hadoop用户下也需要按照root用户配置环境变量的方式操作一下

#把root用户的环境变量文件复制并覆盖hadoop用户下的.bash_profile 
[root@node1 ~]# cp .bash_profile /home/hadoop/
#切换到hadoop用户下验证
[hadoop@node1 ~]su - hadoop
[hadoop@node1 ~]# source .bash_profile 
[hadoop@node1 ~]# hadoop version 
12.4 配置hadoop-env.sh

​ 这个文件只需要配置JAVA_HOME的值即可,在文中可以vi打开后,以命令模式输入“/export”回车,找到export JAVA字眼,删除注释后添加一下内容:

export JAVA_HOME=/usr/java/jdk1.8.0_211-amd64
[root@node1 ~]# cd /opt/bigdata/hadoop-2.7.3/etc/hadoop/ 
[root@node1 hadoop]# vi hadoop-env.sh
12.5 配置Hadoop的四大核心配置文件
  • 配置core-site.xml

    切换到 cd /opt/bigdata/hadoop-2.7.3/etc/hadoop/ 目录下

<?xml version="1.0" encoding="utf-8"?>

<configuration> 
  <!-- 指定hdfs的namenode主机的hostname -->  
  <property> 
    <name>fs.defaultFS</name>  
    <value>hdfs://node1:9000</value> 
  </property>  
  <!-- io操作流的配置 -->  
  <property> 
    <name>io.file.buffer.size</name>  
    <value>131072</value> 
  </property>  
  <!--hadoop集群临时数据存储目录-->  
  <property> 
    <name>hadoop.tmp.dir</name>  
    <value>/opt/bigdata/hadoop-2.7.3/tmpdata</value> 
  </property> 
</configuration>

  • 配置hdfs-site.xml

    配置 /opt/bigdata/hadoop-3.1.2/etc/hadoop/ 目录下的hdfs-site.xml

<?xml version="1.0" encoding="utf-8"?>

<configuration> 
  <!--namenode元数据存储目录-->  
  <property> 
    <name>dfs.namenode.name.dir</name>  
    <value>/opt/bigdata/hadoop-2.7.3/hadoop/hdfs/name/</value> 
  </property>  
  <!--指定block块的的大小-->  
  <property> 
    <name>dfs.blocksize</name>
    <value>268435456</value> 
  </property>  
  <!-- -->  
  <property> 
    <name>dfs.namenode.handler.count</name>  
    <value>100</value> 
  </property>  
  <!--工作节点的数据块存储目录 -->  
  <property> 
    <name>dfs.datanode.data.dir</name>  
    <value>/opt/bigdata/hadoop-2.7.3/hadoop/hdfs/data/</value> 
  </property>  
  <!--block的副本数-->  
  <property> 
    <name>dfs.replication</name>  
    <value>3</value> 
  </property> 
</configuration>

  • 配置mapred-site.xml

    配置 /opt/bigdata/hadoop-2.7.3/etc/hadoop/ 目录下的mapred-site.xml

<?xml version="1.0" encoding="utf-8"?>

<!--指定运行mapreduce的环境是yarn -->
<configuration> 
  <property> 
    <name>mapreduce.framework.name</name>  
    <value>yarn</value> 
  </property>  
  <property> 
    <name>yarn.app.mapreduce.am.env</name>  
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> 
  </property>  
  <property> 
    <name>mapreduce.map.env</name>  
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> 
  </property>  
  <property> 
    <name>mapreduce.reduce.env</name>  
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> 
  </property>  
  <property> 
    <name>mapreduce.application.classpath</name>  
    <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*, $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value> 
  </property> 
</configuration>

  • 配置yarn-site.xml

    配置 /opt/bigdata/hadoop-2.7.3/etc/hadoop/ 目录下的yarn-site.xml

<?xml version="1.0" encoding="utf-8"?>

<configuration> 
  <!--指定resourcemanager的位置-->  
  <property> 
    <name>yarn.resourcemanager.hostname</name>  
    <value>node1</value> 
  </property>  
  <property> 
    <name>yarn.nodemanager.aux-services</name>  
    <value>mapreduce_shuffle</value> 
  </property>  
  <property> 
    <name>yarn.resourcemanager.address</name>  
    <value>node1:18040</value> 
  </property>  
  <property> 
    <name>yarn.resourcemanager.scheduler.address</name>  
    <value>node1:18030</value> 
  </property>  
  <property> 
    <name>yarn.resourcemanager.resource-tracker.address</name>  
    <value>node1:18025</value> 
  </property>  
  <property> 
    <name>yarn.resourcemanager.admin.address</name>  
    <value>node1:18141</value> 
  </property>
  <property> 
    <name>yarn.resourcemanager.webapp.address</name>  
    <value>node1:18088</value> 
  </property> 
</configuration>

  • 然后编辑works文件

    此文件用于配置集群有多少个数据节点,我们把node2,node3作为数据节点,node1作为集群管理节点.

    配置/opt/bigdata/hadoop-2.7.3/etc/hadoop/目录下的works

[root@node1 hadoop]# vi workers 
#将localhost这一行删除掉 
node2 
node3
~
12.6 远程复制hadoop文件到集群机器
#1.进入到root用户家目录下 
[root@node1 hadoop]# cd ~ 
#2.使用scp远程拷贝命令将root用户的环境变量配置文件复制到node2 
[root@node1 ~]# scp .bash_profile root@node2:~ 
#3.使用scp远程拷贝命令将root用户的环境变量配置文件复制到node3 
[root@node1 ~]# scp .bash_profile root@node3:~

[hadoop@node1 ~]$ scp .bash_profile hadoop@node2:~
.bash_profile                                                              100%  361   313.6KB/s   00:00    
[hadoop@node1 ~]$ scp .bash_profile hadoop@node3:~
.bash_profile                                                              100%  361   323.1KB/s   00:00    

#4.进入到hadoop的share目录下 
[root@node1 ~]# cd /opt/bigdata/hadoop-3.1.2/share/
[root@node1 share]# ll 
total 0 
drwxr-xr-x 3 1001 1002 20 Jan 29 12:05 doc 
drwxr-xr-x 8 1001 1002 88 Jan 29 11:36 hadoop 
#5.删除doc目录,这个目录存放的是用户手册,比较大,等会儿下面进行远程复制的时候时间比较长,删除后节约复制时间
[root@node1 share]# rm -rf doc/ 
[root@node1 share]# cd ~
[root@node1 ~]# scp -r /opt root@node2:/ 
[root@node1 ~]# scp -r /opt root@node3:/
12.7 使集群所有机器环境变量都生效并且修改hadoop安装目录的权限

检查在node1,node2,node3的 root 用户家目录下环境变量生效。

检查在node1,node2,node3的 hadoop 用户家目录下环境变量生效。

[root@node2 hadoop-2.7.3]# cd ~ 
[root@node2 ~]# source .bash_profile 
[root@node2 ~]# hadoop version

[root@node2 ~]# su - hadoop 
[root@node2 ~]# source .bash_profile 
[root@node2 ~]# hadoop version

node1,node2,node3都需要进行如下操作

#1.修改目录所属用户和组为hadoop:hadoop 
[root@node1 ~]# chown -R hadoop:hadoop /opt/  
#2.修改目录所属用户和组的权限值为755 
[root@node1 ~]# chmod -R 777 /opt/
#3.最好检查下logs文件的权限是否是777
12.8 格式化hadoop

​ 这一步很重要,如果失败就要返回前面的集群机器是否都有权限了,以及hadoop用户下和root用户下的ssh免秘钥登录是否都正确(认证文件是否都有这三个机器的公钥文件等。)

​ 另外也有可能是四大配置文件出错,xml文本格式是否正确等。

#切换 [root@node1 ~]# su - hadoop 
[hadoop@node1 hadoop]$ hdfs namenode -format 
2019-06-30 16:11:35,914 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ 
STARTUP_MSG: Starting NameNode 
STARTUP_MSG: host = node1/192.168.1.21 
STARTUP_MSG: args = [-format] 
STARTUP_MSG: version = 2.7.3 
#此处省略部分日志 2019-06-30 16:11:36,636 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ 
SHUTDOWN_MSG: Shutting down NameNode at node1/192.168.200.11 ************************************************************/
12.9 启动集群
[hadoop@node_1 ~]$ start-all.sh
WARNING: Attempting to start all Apache Hadoop daemons as hadoop in 10 seconds.
WARNING: This is not a recommended production deployment configuration.
WARNING: Use CTRL-C to abort.
Starting namenodes on [node1]
Starting datanodes
Starting secondary namenodes [node_1]
Starting resourcemanager
Starting nodemanagers
[hadoop@node_1 ~]$ 

#可以用jps查看java进程,启动集群后,由于hadoop本身就是java程序,所以后台会有进程挂在那里。
#注意NameNode
[hadoop@node_1 ~]$ jps
17556 Jps
17226 ResourceManager
16652 NameNode
16879 SecondaryNameNode


#查看nameNode打开的端口	9870
[hadoop@node_1 ~]$ netstat -anpl | grep 16652
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 192.168.1.21:9000     0.0.0.0:*               LISTEN      16652/java          
tcp        0      0 0.0.0.0:9870            0.0.0.0:*               LISTEN      16652/java          
tcp        0      0 192.168.1.21:9000     192.168.200.13:43486    ESTABLISHED 16652/java          
tcp        0      0 192.168.1.21:9000     192.168.200.12:34494    ESTABLISHED 16652/java          
unix  2      [ ]         STREAM     CONNECTED     203671   16652/java           
unix  2      [ ]         STREAM     CONNECTED     203685   16652/java           
[hadoop@node_1 ~]$ 

​ 或者在浏览器地址栏中输入:http://192.168.1.21:9870查看namenode的web界面,但是这一步失败了,不知道是否Windows机映射文件有问题。

12.10 运行MapReduce程序

​ 以下操作看到的显示都是可以在浏览器上的地址看到的。

#1.使用hdfs dfs -ls / 命令浏览hdfs文件系统,集群刚开始搭建好,由于没有任何目录所以什么都不显示.
[hadoop@node1 ~]$ hdfs dfs -ls /
#2.创建测试目录 
[hadoop@node1 ~]$ hdfs dfs -mkdir /test
#3.在此使用hdfs dfs -ls 发现我们刚才创建的test目录 
[hadoop@node1 ~]$ hdfs dfs -ls /
#4.使用touch命令在linux本地目录创建一个words文件 
[hadoop@node1 ~]$ touch words
#5.文件中输入内容 
[hadoop@node1 ~]$ vi words
#6.将创建的本地words文件上传到hdfs的test目录下 
[hadoop@node1 ~]$ hdfs dfs -put words /test 
#7.查看上传的文件是否成功 
[hadoop@node1 ~]$ hdfs dfs -ls -r /test
Found 1 items 
-rw-r--r-- 3 hadoop supergroup 23 2019-06-30 17:28 /test/words

#/test/words 是hdfs上的文件存储路径 /test/output是mapreduce程序的输出路径,这个输出路径是不能已经存在的路径,mapreduce程序 运行的过程中会自动创建输出路径,数据路径存在的话会报错,这里需要注意下. 
[hadoop@node1 ~]$ hadoop jar /opt/bigdata/hadoop-3.1.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /test/words /test/output

#验证程序输出
[hadoop@node1 ~]$ hdfs dfs -ls -r /test/output

看到以下结果说明MapReduce程序执行成功了,视情况而定,有的可能跑比较慢

20200320211806487

[hadoop@node_1 mapreduce]$  hdfs dfs -text /test/output/part-r-00000
Bingbing	1
i	1
love	1
yes~	1
[hadoop@node_1 mapreduce]$ 
13.总结
13.1 代码归纳
#linux关机
init 0
#停止防火墙
systemctl stop firewalld
#禁止防火墙随着系统启动而启动
systemctl disable firewalld
#查看防火墙状态
systemctl status firewalld

#将SELINUX的值设置为disabled
vi/etc/selinux/config
#查看是否设置完成
cat /etc/selinux/config

#配置虚拟机IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#重启网卡
systemctl restart network

#安装JDK
rpm -ivh jdk-8u211-linux-x64.rpm
#find命令查找java的安装目录
find / -name java
#source命令使环境配置生效
source ./bash_profile
#查看是否按照java成功
java -version

#在线安装ntpdate
yum install -y ntpdate
#添加定时任务
crontab -e
#查看系统时间
date

#生成公钥和私钥
ssh-keygen -t rsa
#配置映射文件
vi /etc/hosts
#拷贝公钥文件到另一台机器(已做映射)
ssh-copy-id -i node2
#ssh登录远程机器
ssh node2
#退出登录
logout
#将生成的公钥添加到认证文件中
cat id_rsa.pub >> authorized_keys

#使用id命令查看hadoop用户组和hadoop用户创建是否成功
id hadoop

#解压hadoop-3.1.2.tar.gz到/opt/bigdata/
tar -xzvf hadoop-2.7.3.tar.gz -C /opt/bigdata/
 
#检查hadoop的版本,是否安装成功
hadoop version

#远程拷贝到其他机器,root变更即可拷到其他用户目录下
scp .bash_profile root@node2:~
#连带目录下文件一起远程拷贝
scp -r /opt root@node2:/

#格式化hadoop
hdfs namenode -format
#启动集群
start-all.sh
#使用jps显示java进程(查看是否启动成功)jps = java progress
jps

#hdfs的命令类似于linux
#hdfs dfs + linux命令
#显示hdfs根目录
hdfs dfs -ls /
#创建hdfs目录
hdfs dfs -mkdir /test
#将创建的本地words文件上传到hdfs的test目录下
hdfs dfs -put words /test
#执行MapReduce程序,这里的/test/ourput必须是hdfs原先没有的,否则会报错。
hadoop jar /opt/bigdata/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/words /test/output
#查看hdfs文件
hdfs dfs -text /test/output/part-r-00000

修改记录

时间内容
2020年4月10日第一次发布
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值