hadoop运行模式

hadoop运行模式

grep案例
  • 1.在hadoop-3.1.3下创建一个input文件夹
[dev1@hadoop101 hadoop-3.1.3]$ mkdir input
  • 2.在input文件夹下编辑一个word.txt文件
[dev1@hadoop101 hadoop-3.1.3]$ vim ./input/word.txt

内容如下

dev1
root
hadoop
spark           
  • 查找运行所需要的jar包
[dev1@hadoop101 hadoop-3.1.3]$ find ./ -name *examples-3.1.3.jar
./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar
  • 执行share目录下的MapReduce程序

hadoop jar xxxxx.jar 程序名 参数1(目录) 参数2(目录)

[dev1@hadoop101 hadoop-3.1.3]$ hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep ./input/word.txt ./output 'd[a-z.]+'
  • 查看运行结果是否成功
[dev1@hadoop101 hadoop-3.1.3]$ cat ./output/*
1       doop
1       dev
统计-wordcount
  • 创建input文件夹,在文件夹中创建words.txt
[dev1@hadoop101 hadoop-3.1.3]$ mkdir wcinput
[dev1@hadoop101 hadoop-3.1.3]$ vim ./wcinput/words.txt

内容如下:

hadoop java
hadoop c
dev1 root
  • 查询所需要的jar包
[dev1@hadoop101 hadoop-3.1.3]$ find ./ -name *examples-3.1.3.jar
./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar

  • 执行MapReduce程序

hadoop jar xxxxx.jar 程序名 参数1(目录) 参数2(目录)

[dev1@hadoop101 hadoop-3.1.3]$ hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount ./wcinput/ ./wcoutput

  • 查看运行的结果
[dev1@hadoop101 hadoop-3.1.3]$ cat ./wcoutput/*
c       1
dev1    1
hadoop  2
java    1
root    1
伪分布式配置
  • 集群配置
1. 配置hadoop-env.sh
[dev1@hadoop101 hadoop-3.1.3]$ vim ./etc/hadoop/hadoop-env.sh
#配置jdk的环境变量
export JAVA_HOME=/opt/module/jdk1.8.0_2123
2. 配置core-site.xml

配置主节点和主节点的存储目录,目录在namenode格式化时会自动进行创建

[dev1@hadoop101 hadoop-3.1.3]$ vim ./etc/hadoop/core-site.xml
<configuration>

<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9820</value>
 </property>

 <!-- 指定Hadoop运行时产生文件的存储目录 -->
 <property>
 <name>hadoop.tmp.dir</name>
 <value>/opt/module/hadoop-3.1.3/data/tmp</value>
 </property>

</configuration>
3. 配置hdfs-site.xml

配置副本数量

[dev1@hadoop101 hadoop-3.1.3]$ vim ./etc/hadoop/hdfs-site.xml
<configuration>

<property>
<name>dfs.replication</name>
<value>1</value>
</property>

</configuration>
4.启动集群
  • 格式化namenode(第二次格式化时先删除data目录)
[dev1@hadoop101 hadoop-3.1.3]$ hdfs namenode -format
  • 启动namenode
[dev1@hadoop101 hadoop-3.1.3]$ hdfs --daemon start namenode
  • 启动datanode
[dev1@hadoop101 hadoop-3.1.3]$ hdfs --daemon start datanode
  • 测试是否启动成功
[dev1@hadoop101 hadoop-3.1.3]$ jps
127411 Jps
107031 NameNode
109788 DataNode
  • 本地访问

http://hadoop101:9870/

在这里插入图片描述

5.操作集群
  • 在集群中创建一个input文件夹
[dev1@hadoop101 hadoop-3.1.3]$ hdfs dfs -mkdir -p /user/dev1/input

在这里插入图片描述

  • 将本地的word.txt文件上传到集群中
[dev1@hadoop101 hadoop-3.1.3]$ hdfs dfs -put ./input/word.txt /user/dev1/input
  • 在集群查看文件
[dev1@hadoop101 hadoop-3.1.3]$ hdfs dfs -cat /user/dev1/input/word.txt
2021-07-12 10:24:22,460 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
dev1
root
hadoop
spark
  • 在集群中进行wordcount
[dev1@hadoop101 hadoop-3.1.3]$ hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/dev1/input/word.txt /user/dev1/output

  • 查看输出
[dev1@hadoop101 hadoop-3.1.3]$ hdfs dfs -cat /user/dev1/output/*
2021-07-12 10:14:06,312 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
dev1    1
hadoop  1
root    1
spark   1

  • 从集群中下载文件
[dev1@hadoop101 hadoop-3.1.3]$ hdfs dfs -get /user/dev1/output/part-r-000000 ./
  • 删除集群文件
[dev1@hadoop101 hadoop-3.1.3]$ hdfs dfs -rm -r /user/dev1/output
Deleted /user/dev1/output
6.安装yarn
修改配置文件
  • 修改yarn-site.xml
[dev1@hadoop101 hadoop-3.1.3]$ vim ./etc/hadoop/yarn-site.xml

内容如下:

<configuration>

<!-- Site specific YARN configuration properties -->

<!-- Reducer获取数据的方式 -->
 <property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
 </property>
 <!-- 指定YARN的ResourceManager的地址 -->
 <property>
 <name>yarn.resourcemanager.hostname</name>
 <value>hadoop101</value>
 <value>mapreduce_shuffle</value>
 </property>
 <!-- 指定YARN的ResourceManager的地址 -->
 <property>
 <name>yarn.resourcemanager.hostname</name>
 <value>hadoop101</value>
 </property>
 <property>
 <name>yarn.nodemanager.env-whitelist</name>

<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLA
SSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>


</configuration>
~                      
  • 修改mapred-site.xml
[dev1@hadoop101 hadoop-3.1.3]$ vim ./etc/hadoop/mapred-site.xml

内容如下

<configuration>

 <!-- 指定MR运行在YARN上 -->
 <property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
 </property>

</configuration>
启动yarn
  • 启动resourcemanager
[dev1@hadoop101 hadoop-3.1.3]$ yarn --daemon start resourcemanager


  • 启动nodemanager
[dev1@hadoop101 hadoop-3.1.3]$ yarn --daemon start nodemanager

  • 查看resourcemanager和nodemanager是否启动
[dev1@hadoop101 hadoop-3.1.3]$ jps
69717 Jps
107031 NameNode
68874 NodeManager
109788 DataNode
68191 ResourceManager

  • 查看yarn的客户端

http://hadoop101:8088/

在这里插入图片描述

执行MapReduce程序
[dev1@hadoop101 hadoop-3.1.3]$ hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/dev1/input/word.txt /user/dev1/output
  • 运行结果
[dev1@hadoop101 hadoop-3.1.3]$ hdfs dfs -cat /user/dev1/output/*
2021-07-12 11:25:26,207 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
dev1    1
hadoop  1
root    1
spark   1
分布式
SSH无密登录配置
1.生成密钥
[dev1@hadoop102 ~]$ ssh-keygen -t rsa
[dev1@hadoop103 ~]$ ssh-keygen -t rsa
[dev1@hadoop104 ~]$ ssh-keygen -t rsa

2.每台主机互相拷贝密钥
 ==================== hadoop102  ====================
[dev1@hadoop102 ~]$ ssh-copy-id hadoop102
[dev1@hadoop102 ~]$ ssh-copy-id hadoop103
[dev1@hadoop102 ~]$ ssh-copy-id hadoop104
 ==================== hadoop103  ====================
[dev1@hadoop103 ~]$ ssh-copy-id hadoop102
[dev1@hadoop103 ~]$ ssh-copy-id hadoop103
[dev1@hadoop103 ~]$ ssh-copy-id hadoop104
 ==================== hadoop104  ====================
[dev1@hadoop104 ~]$ ssh-copy-id hadoop102
[dev1@hadoop104 ~]$ ssh-copy-id hadoop103
[dev1@hadoop104 ~]$ ssh-copy-id hadoop104
3.scp群发

将所有文件进行群发,速度可能较慢

主要用法(完成主机名和ip映射后可以用主机名,若没有则用ip)

scp -r 文件路径名 用户@主机名 存放路径

[dev1@hadoop102 ~]$ scp -r /opt/module/hadoop-3.1.3/  dev1@hadoop103:/opt/module/

4.rsync群发

与scp不同,只对差异文件进行更新,且文件目录必须先建好

主要用法

-a 归档拷贝

-v 显示拷贝过程

rsync -av 文件路径 主机名:目标路径

[dev1@hadoop102 bin]$ rsync -av /opt/module/ hadoop103:/opt/module/
5.xsync集群分发脚本

循环复制文件到所有节点的相同目录下

现在/home/dev1文件夹下创建bin目录,在编辑xsync脚本

[dev1@hadoop102 ~]$   mkdir /home/dev1/bin
[dev1@hadoop102 ~]$   vim ./bin/xsync.sh

内容如下

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
  echo ====================  $host  ====================
  #3. 遍历所有目录,挨个发送
  for file in $@
  do
    #4 判断文件是否存在
    if [ -e $file ]
    then
      #5. 获取父目录
      pdir=$(cd -P $(dirname $file); pwd)
      #6. 获取当前文件的名称
      fname=$(basename $file)
      ssh $host "mkdir -p $pdir"
      rsync -av $pdir/$fname $host:$pdir
    else
      echo $file does not exists!
    fi
  done
done
6.执行脚本

将脚本文件群发

[dev1@hadoop102 bin]$ sh xsync.sh xsync.sh 
分布式部署
一、编辑配置文件

编辑core-site.xml文件

[dev1@hadoop102 hadoop-3.1.3]$ vim ./etc/hadoop/core-site.xml

内容如下:

<property>
 <name>fs.defaultFS</name>
 <value>hdfs://hadoop102:8020</value>
 </property>
 <property>
 <name>hadoop.data.dir</name>
 <value>/opt/module/hadoop-3.1.3/data</value>
 </property>
 <property>
 <name>hadoop.proxyuser.dev1.hosts</name>
 <value>*</value>
 </property>
 <property>
 <name>hadoop.proxyuser.dev1.groups</name>
 <value>*</value>
 </property>

编辑hdfs-site.xml文件

[dev1@hadoop102 hadoop-3.1.3]$ vim ./etc/hadoop/hdfs-site.xml

内容如下

<property>
 <name>dfs.namenode.name.dir</name>
 <value>file://${hadoop.data.dir}/name</value>
 </property>
 <property>
 <name>dfs.datanode.data.dir</name>
 <value>file://${hadoop.data.dir}/data</value>
 </property>
 <property>
 <name>dfs.namenode.checkpoint.dir</name>
 <value>file://${hadoop.data.dir}/namesecondary</value>
 </property>
 <property>
 <name>dfs.client.datanode-restart.timeout</name>
 <value>30</value>
 </property>
 <property>
 <name>dfs.namenode.secondary.http-address</name>
 <value>hadoop104:9868</value>
 </property>

编辑yarn-site.xml文件

[dev1@hadoop102 hadoop-3.1.3]$ vim ./etc/hadoop/yarn-site.xml

内容如下


<property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
 </property>
 <property>
 <name>yarn.resourcemanager.hostname</name>
 <value>hadoop103</value>
 </property>
 <property>
 <name>yarn.nodemanager.env-whitelist</name>
 <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,
 </property>

编辑mapred-site.xml文件

[dev1@hadoop102 hadoop-3.1.3]$ vim ./etc/hadoop/mapred-site.xml

 <property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
 </property>


执行群发指令,将文件同步到各个节点

[dev1@hadoop102 hadoop-3.1.3]$ sh /home/dev1/bin/xsync.sh /opt/module/hadoop-3.1.3/
二、单点启动集群

在主节点(hadoop102)启动namenode

[dev1@hadoop102 ~]$ hdfs --daemon start namenode
[dev1@hadoop102 ~]$ jps
22569 NameNode
22729 Jps

在所有节点启动datanode

[dev1@hadoop102 ~]$ hdfs --daemon start datanode
[dev1@hadoop103 ~]$ hdfs --daemon start datanode
[dev1@hadoop104 ~]$ hdfs --daemon start datanode

客户端查看状态

在这里插入图片描述

三、群起集群
1.编辑workers文件
[dev1@hadoop102 hadoop-3.1.3]$ vim ./etc/hadoop/workers 
2.群发workers文件到节点
[dev1@hadoop102 hadoop-3.1.3]$ sh /home/dev1/bin/xsync.sh /opt/module/hadoop-3.1.3/etc/hadoop/workers 
3.由于是第二次格式化,因此在格式化namenode前删除data文件夹
[dev1@hadoop102 hadoop-3.1.3]$ rm -rf data/
[dev1@hadoop103 hadoop-3.1.3]$ rm -rf data/
[dev1@hadoop104 hadoop-3.1.3]$ rm -rf data/
4.格式化
[dev1@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
5.启动集群
[dev1@hadoop102 hadoop-3.1.3]$ start-dfs.sh
Starting namenodes on [hadoop102]
Starting datanodes
Starting secondary namenodes [hadoop104]

6.使用jps查看进程
 ====================  hadoop102  ====================
[dev1@hadoop102 hadoop-3.1.3]$ jps
42577 Jps
41829 NameNode
42007 DataNode
 ====================  hadoop103  ====================
[dev1@hadoop103 hadoop-3.1.3]$ jps
40867 DataNode
41301 Jps
 ==================== hadoop104  ====================
[dev1@hadoop104 ~]$ jps
42439 DataNode
42622 Jps
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值