Hadoop运行模式

重要:信息用原生JDK坑太多了,所以卸掉,安装自己的JDK

参考博客:https://www.cnblogs.com/jpfss/p/9677827.html

官方:https://hadoop.apache.org/

文档:http://hadoop.apache.org/docs/r2.7.7/

一、本地模式(在hadoop目录下进行)

注意:output不能提前存在

1、官方Grep案例

mkdir input
cp etc/hadoop/*.xml input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep input output 'dfs[a-z.]+'
cat output/*

在自己的虚拟机上运行有点慢

2、官方WordCount案例

# 创建文件夹
mkdir wcinput
# 向文件写入内容
cd wcinput
touch wc.input
vim wc.input
    hadoop yarn
    hadoop mapreduce
    tom
    tom
    tom
# 运行
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount wcinput wcoutput

主要作用:查找wc.input 文件中 相同单词 出现的次数(wordcount)

二、伪分布式模式

A、启动HDFS并运行MapReduce程序

1、配置集群

a、配置:hadoop-nev.sh

# 获取JAVA_HOME的路径
echo $JAVA_HOME
# 修改文件
vim etc/hadoop/hadoop-env.sh

# The java implementation to use.
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre

b、配置:core-site.xml文件

vim etc/hadoop/core-site.xml

<!-- 指定HDFS的NameNode -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>

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

c、配置:hdfs-site.xml文件(配不配置都行)

vim etc/hadoop/hdfs-site.xml

<!--指定HDFS的副本数量-->
<property>
      <name>dfs.replication</name>
      <value>1</value>
 </property>    

注意:默认副本数是3

2、启动集群

a、格式化NameNode(第一次启动时格式化,以后就不要总格式化)

bin/hdfs namenode -format

b、启动NameNode

sbin/hadoop-daemon.sh start namenode

c、启动DataNode

sbin/hadoop-daemon.sh start datanode

d、查看进程

jps

3、运行MapReduce程序

a、访问:http://linuxip:50070

b、Browse Directory

1)、创建目录

 bin/hdfs dfs -mkdir -p /usr/tom/input

dfs后执行类linux命令

2)、执行WordCount

# push liunx的文件到HDFS
bin/hdfs dfs -put wcinput/wc.input /usr/tom/input
# 执行
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /usr/tom/input /usr/tom/output
# 查看结果
bin/hdfs dfs -cat /usr/tom/output/*

问题:

1、bash: jps: command not found...

解决方案:

# 切换到 root 用户,创建软链接
su root
ln -s /opt/module/jdk1.8.0_144/bin/jps /usr/local/bin/jps

2、访问网页50070端口失败

http://192.168.8.128:50070/

解决方案:https://www.cnblogs.com/wt7018/p/13550118.html

3、格式化NameNode

# 1、查看进程
jps
# 2、杀死 namenode 和 datanode
# 3、删除tmp文件,路径为自己修改的路径

 B、启动YARN并运行MapReduce程序

1、配置集群

a、配置 yarn-env.sh

vim etc/hadoop/yarn-env.sh

# 获取路径
echo $JAVA_HOME

# 取消注释,修改 路径
export JAVA_HOME=/opt/module/jdk1.8.0_261

b、配置 yarn-site.xml

vim etc/hadoop/yarn-site.xml

<!-- Reducer 获取数据的存储方式--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManage 的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>wt.com</value> </property>

 c、配置 mapred-env.sh

# 1.获取路径
echo $JAVA_HOME
# 2.修改配置文件
vim etc/hadoop/mapred-env.sh
# 3.取消注释和修改路径
export JAVA_HOME=/opt/module/jdk1.8.0_261

d、配置 mapred-site.xml

# 0.切换目录
cd /opt/module/hadoop-2.7.7/etc/hadoop
# 1.修改名称名称
mv mapred-site.xml.template mapred-site.xml
# 2.修改配置文件
vim mapred-site.xml
<!--指定MapReduce运行在YARN上-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

2、启动集群

前提条件 NameNode和DataNode已经启动

a、开启ResourceManage

sbin/yarn-daemon.sh start resourcemanager

b、开启nodemanage

sbin/yarn-daemon.sh start nodemanager

c、查看

jps

3、运行MapReduence

a、打开http://192.168.8.128:8088,报错,解决打开8088 port

b、运行

# 1. 创建文件夹
bin/hdfs dfs -mkdir -p /usr/tom/input
# 2. 推文件到上面
bin/hdfs dfs -put wcinput/wc.input /usr/tom/input
# 3. 运行
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /usr/tom/input /usr/tom/output

注意:运行的时候,刷新 http://192.168.8.128:8088/cluster 网页 查看变化

 3、配置历史服务器

a、配置 mapred-site.xml

<!--历史服务器端地址-->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>wt.com:10020</value>
</property>
<!--历史服务器web端地址-->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>wt.com:19888</value>
</property>

2、启动历史服务器

sbin/mr-jobhistory-daemon.sh start historyserver

3、开启端口 19888

4、查看jobhistory

http://wt.com:19888/jobhistory

C、配置日志的聚集

注意:开启日志聚集功能,需要重新启动 HistoryManager、ResourceManager、NodeManager

1、配置 yarn-site.xml

vim yarn-site.xml
<!-- 日志聚集功能使用 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 日志保留时间设置为 7 天-->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

2、关闭 NodeManager、ResourceManager、HistoryManager

sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/yarn-daemon.sh stop historyserver

3、启动 NodeManager、ResourceManager、HistoryServer

sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/yarn-daemon.sh start historyserver

4、删除 HDFS 上已经存在的输出文件

bin/hdfs dfs -rm -r /usr/tom/output

5、执行 WordCount 程序

6、查看日志

三、完全分布式模式

注意:

1、HDFS NmaeNode 只要有 1 个 即可, SecondaryNameNode和 NameNode 不能存储到 1 个节点

2、HDFS DataNode存储在所有节点上

3、NmaeNode 和 ResourceManager 不能存放到 1 个 节点

4、Nodemanager 存储到所有节点

A、分析

1、虚拟机准备

2、安装JDK并配置环境变量

3、安装Hadoop并配置环境变量

4、配置集群

5、单点启动

6、配置 ssh

7、群起并测试集群

B、编写集群分发脚本 xsync  看 xsync即可

1、scp(secure copy) 安全copy

a、scp定义:

scp实现服务器与服务器之间的数据拷贝

b、基本语法:

scp    -r        $pdir/$fname               $user@hadoop$host:$pdor/$fname
命令   递归      要拷贝的文件路径/名称        目的用户@主机:目的路径/名称

c、案例实操(安装JDK并配置、安装Hadoop并配置)

0)、推  从wt.com -> wt1.com

scp -r /opt/module root@wt1.com:/opt/module

0)、拉  wt2.com <- wt.com

sudo scp  -r  tom@wt.com:/opt/module  ./

0)、第三方(wt2.com) 操作 wt1.com -> wt3.com

scp  -r  tom@wt.com:/opt/module  root@wt3.com:/opt/module

1)、修改 文件 所有者 所有组

sudo chown tom:tom module/  -R

2)、推送 profile

scp /etc/profile root@wt1.com:/etc/profile

3)、重新加载 profile

source /etc/profile

2、rsync 远程同步工具

rsync主要用于备份和镜像。且速度快、避免复制相同内容和支持符号链接的优点

a、基本语法

rsync    -rvl         $pid/$fname              $user@hadoop$host:$pid/$fname
命令     选项参数     要拷贝的文件路径/名称      目的用户@主机:目的路径/名称


-r    递归
-v    显示过程
-l    拷贝软连接

b、案例实操

rsync  -rvl  /opt/test.txt       root@wt1.com:/opt

 区别:rsync 速度比 scp快,rsync 后面不用加 路径/文件;scp 后面加 路径/文件

3、xsync 集群分发脚本

a、/home/tom 目录下创建bin目录,并在bin目录下创建xsync文件

cd /home/tom
mkdir bin
vim xsync

b、xsync代码

#!/bin/bash
# 1.获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
# 2. 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
# 3. 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
# 4. 获取当前用户名称
user=`whoami`
# 5. 循环
for((host=1; host<3; host++)); do
    echo ------------- hadoop$host -----------------
    rsync -rvl $pdir/$fname $user@wt$host.com:$pdir
done

注意:wt是linux的主机名称

c、修改权限

chmod +777 xsync

d、运行

xsync /home/tom/bin
xsync 指定目录

 注意:把xsync放到 /home/tom/bin 目录不被识别,放到 /usr/local/bin 目录下

            wt.com         wt1.com            wt2.com                   
======================================================================
HDFS        NameNode                          SecondaryNameNode                       
            DataNode       DataNode           DataNode                                            
======================================================================
                           ResourceManager                                   
YARN                       NodeManager                                   
            NodeManager                       NodeManager            
======================================================================
注意:NameNode 和 ResourceManager 消耗内存较大,因此,不能在同一个节点上

4、集群配置

a、核心配置文件

vim core-site.xml
<!-- 指定HDFS的NameNode -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://wt.com:9000</value>
</property>

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

b、HDFS 配置文件

1)、配置hadoop-env.sh

vim hadoop-env.sh
export JAVA_HOME=java安装路径

2)、配置hdfs-site.xml

vim hdfs-site.xml
<!-- 指定 Hadoop 辅助名称节点主机配置 -->
<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hadoop104:50090</value>
</property>

 c、YARN 配置文件

1)、配置 yarn-env.sh

vim yarn-env.sh
export JAVA_HOME=java路径

2)、配置 yarn-site.xml

vim etc/hadoop/yarn-site.xml
<!-- Reducer 获取数据的存储方式-->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManage 的地址-->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>wt1.com</value>
</property>

d、MapReduce 配置文件

1)、配置 mapred-env.sh

vim mapred-env.sh
export JAVA_HONE=java安装路径

2)、配置 mapred-site.xml

mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

e、在集群上发布配置好的 Hadoop 配置文件

xsync /opt/module/hadoop-2.7.7

f、查看文件分发情况

另外两台节点的 core-site.xml

5、SSH无密登录

# wt.com (NameNode)
cd ~
ls -al
cd .ssh/
ssh-keygen -t rsa (三次回车)
ssh-copy-id wt1.com
ssh-copy-id wt2.com
ssh-copy-id wt.com
# 配置root
su root
cd ~
cd .ssh/
ssh-keygen -t rsa (三次回车)
ssh-copy-id wt1.com
ssh-copy-id wt2.com
ssh-copy-id wt.com
 
# wt1.com (ResourceManager)
cd ~
ls -al
cd .ssh/
ssh-keygen -t rsa (三次回车)
ssh-copy-id wt2.com
ssh-copy-id wt.com
ssh-copy-id wt1.com

6、集群单节点启动

1、删除所有节点的 data logs
rm -rf data/ logs/
2、格式化NameNode
bin/hdfs namenode -format
3、启动
sbin/start-dfs.sh 

7、群起集群

# a、配置slaves
# 打开slaves文件
vim etc/hadoop/slaves
# 增加相应的节点, 不允许有空格,不允许有空行
wt.com
wt1.com
wt2.com
# b、同步更新
xsync slaves
# c、群起,启动dfs 在NmaeNode的节点; 启动Yarn 在ResourceManager的节点
sbin/start-dfs.sh
sbin/start-yarn.sh

 8、集群基本测试

# 集群文件存储路径
1、上传小文件
bin/hdfs dfs -put wcinput.wc,input /
2、上传大文件
bin/hdfs dfs -put /opt/software/hadoop-2.7.7.tar.gz /

9、集群启动/停止方式总结

# 单点启动
# 1、启动/停止 HDFS
hadoop-daemon.sh start/stop namenode/datanode/secondarynode
# 2、启动/停止 YARN
yarn-daemon.sh start/stop resourcemanager/nodemanager

# 群启
# 1、 启动/停止 HDFS 
start-dfs.sh/stop-dfs.sh
# 2、 启动/停止 YARN
start-yarn.sh/stop-yarn.sh



原文地址:https://www.cnblogs.com/wt7018/p/13547247.html