hadoop 运行模式

  • 一、ssh
  • 二、Hadoop伪分布模式
  • <1>设置三种模式的切换( 配置文件 + 守护进程的启动 = hadoop集群 )
  • <2>web的端口
  • <3>Hadoop的启动脚本 ( hdfs + yarn )
  • 三、完全分布式搭建
  • <1> 概念
  • <2> 部署


一、ssh

SSH:安全的远程连接
    xshell/putty工具连接linux系统时,使用的方式就是ssh
    语法: ssh ip地址  
          密码

伪分布模式:主节点 master   管理   多个 从节点 slave


SSH的无秘登陆:

hadoop操作java hadoop操作模式_主机名


hadoop操作java hadoop操作模式_hadoop操作java_02


hadoop操作java hadoop操作模式_hadoop操作java_03

二、Hadoop伪分布模式

<1>设置三种模式的切换( 配置文件 + 守护进程的启动 = hadoop集群 )

hadoop/etc/hadoop  (hadoop  连接文件)
    hadoop/etc/full  完全分布式
    hadoop/etc/local 本地模式
    hadoop/etc/pesudo 伪分布模式
  1. 修改配置文件

hadoop-evn.sh

export JAVA_HOME=/opt/java/jdk

core-site.xml

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop0:9000</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop/tmp</value>
</property>  
</configuration>

hdfs-site.xml

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

mapred-site.xml

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

yarn-site.xml

<configuration>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
</configuration>
  1. 格式化文件系统
hadoop namenode -format
  1. 启动守护进程
先启动HDFS: sbin/start-dfs.sh
再启动Yarn: sbin/start-yarn.sh
  1. 可以通过修改hadoop连接文件的指向,实现不同模式的切换

<2>web的端口

50070 //namenode http port (通过浏览器访问的端口)
50075 //datanode http port (通过浏览器访问的端口)
50090 //2namenode http port (通过浏览器访问的端口)

8020 // namenode rpc port
50010 // datanode rpc port

<3>Hadoop的启动脚本 ( hdfs + yarn )

common
hdfs : namenode / datanode / secondarynamenode (分布式文件系统)
yarn : resourcemanager / nodemanager (资源调度和管理)
mapreduce

启动脚本:
start-all.sh (不推荐使用) (start-dfs.sh + start-yarn.sh)
stop -all.sh (不推荐使用)

start-dfs.sh    (推荐使用:启动名称节点,数据节点,辅助名称节点)
start-yarn.sh   (推荐使用:启动资源管理器,节点管理器)

stop-dfs.sh
stop-yarn.sh

hadoop操作java hadoop操作模式_xml_04

三、完全分布式搭建

<1> 概念

将Hadoop的守护进程运行在一个集群上
NameNode
DataNode
SecondaryNameNode

ResourceManager
NodeManager

完全分布式:至少5个节点(对数据进行备份)
名称节点:管理文件系统,管理节点 (一台机器)
数据节点:存储数据 (一台机器)
数据节点:存储数据(备份) (一台机器)
数据节点:存储数据(备份) (一台机器)
数据节点:存储数据(备份) (一台机器)

hadoop操作java hadoop操作模式_xml_05

<2> 部署

  1. 克隆3台
    右键centos虚拟机,选择管理,选择克隆,选择完整硬件克隆
  2. 启动四个节点
  3. 修改虚拟机的配置信息
    3.1修改主机名
    /etc/hostname
    /etc/sysconfig/network
    3.2修改主机名称和IP地址的映射
    /etc/hosts
    3.3修改IP地址
    /etc/sysconfig/network-scripts/ifcfg-ens33
  4. 免密登陆SSH
    从主节点无秘登陆到所有的从节点
    4.1 删除所有节点上的~/.ssh目录中的所有内容:
rm -rf ~/.ssh/*
 ssh  s201 rm -rf ~/.ssh/*           (xcall.sh)
 ssh  s202 rm -rf ~/.ssh/*           (xcall.sh)
 ssh  s203 rm -rf ~/.ssh/*           (xcall.sh)

4.2 在当前节点上生成密钥

ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

4.3 将当前生成 的公钥 移动到其他所有的子节点上

命令:scp 远程复制 ,将id_rsa_pub  分别复制到s200~s203上,并且将其追加到~/.ssh/authorized_keys
     scp ~/.ssh/id_rsa_pub zhangsan@master:/home/zhangsan/.ssh/authorized_keys
     scp ~/.ssh/id_rsa_pub zhangsan@s201:/home/zhangsan/.ssh/authorized_keys
     scp ~/.ssh/id_rsa_pub zhangsan@s202:/home/zhangsan/.ssh/authorized_keys
     scp ~/.ssh/id_rsa_pub zhangsan@s203:/home/zhangsan/.ssh/authorized_keys
  1. 配置完全分布式
1.etc配置文件使用完全分布式:
 删除旧的连接:
     ssh s201   rm -rf /opt/programfile/hadoop/etc/hadoop            (xcall.sh)
     ssh s202   rm -rf /opt/programfile/hadoop/etc/hadoop            (xcall.sh)
     ssh s203   rm -rf /opt/programfile/hadoop/etc/hadoop            (xcall.sh)
     ssh master rm -rf /opt/programfile/hadoop/etc/hadoop            (xcall.sh)

 创建新的连接
     ssh s201 ln -s /opt/programfile/hadoop/etc/full /opt/programfile/hadoop/etc/hadoop          (xcall.sh)   
     ssh s202 ln -s /opt/programfile/hadoop/etc/full /opt/programfile/hadoop/etc/hadoop          (xcall.sh)  
     ssh s203 ln -s /opt/programfile/hadoop/etc/full /opt/programfile/hadoop/etc/hadoop          (xcall.sh)  

 2.修改配置文件:full 中的配置文件
 core-site.xml
     fs.defaultFS   --->  hdfs://master:9000
 hdfs-site.xml
     dfs.replication   --->  3
 mapred-site.xml
     不变,和伪分布式一样  
 yarn-site.xml
     yarn.resourcemanager.hostname   --->  master
  1. 数据的同步(主节点和从节点的配置信息保持一致)
scp -r full zhangsan@s201:/opt/programfile/hadoop/etc/
 scp -r full zhangsan@s202:/opt/programfile/hadoop/etc/
 scp -r full zhangsan@s203:/opt/programfile/hadoop/etc/
  1. 格式化文件系统
清空伪分布模式下的数据:
     rm -rf /tmp/*
     ssh s201 rm -rf /tmp/*          (xcall.sh)
     ssh s201 rm -rf /tmp/*          (xcall.sh)
     ssh s201 rm -rf /tmp/*          (xcall.sh)

 清空日志文件:
     rm -rf /opt/programfile/hadoop/logs/*                   (xcall.sh)
     ssh s201 rm -rf /opt/programfile/hadoop/logs/*          (xcall.sh)
     ssh s201 rm -rf /opt/programfile/hadoop/logs/*          (xcall.sh)
     ssh s201 rm -rf /opt/programfile/hadoop/logs/*          (xcall.sh)

 格式化:
     hadoop namenode -format
  1. 启动hadoop进程
    主节点:
    NameNode
    Secondary NameNode
    ResourceManager
    从节点:
    DataNode
    NodeManager
  2. 通过web 页面进行查看
    http://master:55070 <3> 部署脚本的编写
    master 主节点 操作子节点
    常规操作:jsp / rm / ln-s … …
    拷贝同步操作:

脚本1:常规操作

需求:在所有的节点上创建文件test.sh

    ssh 节点1主机名称  命令
    ssh 节点2主机名称  命令
    ssh 节点3主机名称  命令
    ssh 节点4主机名称  命令
    ssh 节点5主机名称  命令
    ssh 节点6主机名称  命令
    ssh 节点7主机名称  命令
    .... ....

编写脚本1:xcall.sh
执行脚本:xcall.sh  touch ~/test.sh(参数1 参数2)
         xcall.sh  rm -rf  path路径(参数1 参数2 参数2)

    params=$@

    for(( i=201;i<=203;i=$i+1  ));
    do
        ssh  s$i  "$params"
    done

    -----------------------------------------
    #!/bin/bash
    # 编写脚本,在分布式集群上操作各个节点
    #1.接受用户需要执行的命令
    params=$@

    #2.循环执行命令
    i=201
    for(( ; i <= 203 ; i=$i+1     ));
    do
        echo "-------------s$i [--->] $params"
        ssh s$i "$params"
        echo "-------------------------------"
        echo
    done

编写脚本2:xsync.sh
执行脚本:xsync.sh /home/zhangsan/myfile.txt

正常的同步命令:scp /home/zhangsan/myfile.txt 用户名称@主机名称:/home/zhangsan/
               scp  myfile.txt 用户名称@主机名称:/home/zhangsan/


命令1:dirname  path:
        上一级
        当前路径.

    例如:dirname /home/zhangsan/myfile.txt
            /home/zhangsan

        dirname  myfile.txt
            .   表示/home/zhangsan/.

命令2:pwd 上面命令的结果

-----------------------------------------

    执行命令:xsync.sh  [/home/zhangsan/] myfile.txt

    #!/bin/bash
    # 编写脚本,在分布式集群上数据的同步
    #1.接受用户需要执行的命令
    param=$1

    # 获取当前文件的路径
    #dirname 命令:获取当前文件的绝对路径
    dir=`dirname $param`
    #basename 命令:获取当前文件的名称
    fileName=`basename $param`  

    #2.循环执行命令
    i=201
    for(( ; i <= 203 ; i=$i+1     ));
    do
        echo "-------------s$i [--->] $params"
        echo $dir
        echo $fileName              


    done