我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java大数据最全课程学习笔记(2)-

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java大数据最全课程学习笔记(2)-

java大数据最全课程学习笔记(2)-

目前CSDN,云海天,简书同步发表中,更多精彩欢迎访问我的gitee pages

目录

  • Hadoop完全分布式运行模式
    • 步骤分析:
    • 编写集群分发脚本xsync
    • 集群配置
      • 集群部署规划
      • 配置集群
    • 集群单点启动
    • SSH无密登陆配置
    • 登录状态的环境变量
    • 群起集群
    • 集群启动/停止方式总结
    • 集群时间同步
    • 其他注意事项

Hadoop完全分布式运行模式

步骤分析:

  1. 准备3台客户机(关闭防火墙、静态ip、主机名称)

    vim /etc/sysconfig/network

    三台机器各自的配置分别为HOSTNAME=hadoop101;HOSTNAME=hadoop102;HOSTNAME=hadoop103

    vim /etc/hosts

    三台机器都加入下面的映射关系

    192.168.1.101 hadoop101
    192.168.1.102 hadoop102
    192.168.1.103 hadoop103
    
  2. 安装JDK

  3. 配置环境变量

  4. 安装Hadoop

  5. 配置环境变量

  6. 配置集群

  7. 单点启动

  8. 配置ssh

  9. 群起并测试集群

由于在上一章节已经配置好环境并测试了hadoop伪分布式开发模式,所以在此不再赘述.

编写集群分发脚本xsync

  1. scp(secure copy) 安全拷贝(全量复制)

    1. scp定义

      scp可以实现服务器与服务器之间的数据拷贝.(from server1 to server2)

    2. 基本语法

      scp -r 源文件用户名A@主机名1:path1 目标文件用户名B@主机名2:path2

    3. 其他

      1. 如果从本机执行读取或写入,用户名B@主机名2:可以省略!
      2. 在主机1上,使用A用户读取path1的文件,再使用用户B登录到主机2,在主机2的path2路径执行写入!
      3. 要求:
        1. 用户名A@主机名1 对path1有读权限
        2. 用户名B@主机名2 对path2有写权限
  2. rsync 远程同步工具

    rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
    rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

    rsync -rvlt path1 目标文件用户名B@主机名2:path2

    选项 功能
    -r 递归
    -v 显示复制过程
    -l 拷贝符号连接
    -t 基于文件的修改时间进行对比,只同步修改时间不同的文件

    只能将本机的文件同步到其他机器!

    注意:path1是个目录,目录以/结尾,只会同步目录中的内容,不会同步目录本身!目录不以/结尾,同步目录中的内容,也会同步目录本身!

  3. 编写xsync集群分发脚本

    1. 需求:循环复制文件到所有节点的相同目录下,即将当前机器的文件,同步到集群所有机器的相同路径下!例如:hadoop102:/A/a , 执行脚本后,将此文件同步到集群中所有机器的 /A/a

    2. 需求分析:

      1. 用户在使用xsync时,只需要传入要同步的文件即可
        xysnc a
        不管a是一个相对路径还是绝对路径,都需要将a转换为绝对路径!
      2. 文件的绝对路径:
        父路径: dirpath=$(cd dirname /home/atguigu/hi; pwd -P)
        文件名: filename=basename hi
        pwd -P为了避免软链接无法获取到真实的父路径
      3. 核心命令:
        for(())
        do
        rsync -rvlt path1
        done
      4. 说明:在/home/atguigu/bin这个目录下存放的脚本,atguigu用户可以在系统任何地方直接执行。
    3. 脚本实现:

      [atguigu@hadoop102 ~]$ mkdir bin
      [atguigu@hadoop102 ~]$ cd bin/
      [atguigu@hadoop102 bin]$ touch xsync
      [atguigu@hadoop102 bin]$ vi xsync
      
      • 在该文件中编写如下代码

        #!/bin/bash
        #校验参数是否合法
        if(($#==0))
        then
        		echo 请输入要分发的文件!
        		exit;
        fi
        #拼接要分发文件的绝对路径
        dirpath=$(cd `dirname $1`; pwd -P)
        filename=`basename $1`
        
        echo 要分发的文件的路径是:$dirpath/$filename
        
        #循环执行rsync分发文件到集群的每台机器
        for((i=101;i<=103;i++))
        do
        		echo --------------hadoop$i-------------------
        		rsync -rvlt $dirpath/$filename atguigu@hadoop$i:$dirpath
        done
        
      • 修改脚本 xsync 具有执行权限

        [atguigu@hadoop102 bin]$ chmod 777 xsync
        

        或者

        [atguigu@hadoop102 bin]$ chmod u+x xsync
        
      • 调用脚本形式:xsync 文件名称

    4. 编写批量执行同一命令的脚本

      #!/bin/bash
      #在集群的所有机器上批量执行同一条命令
      if(($#==0))
      then
      		echo 请输入您要操作的命令!
      		exit;
      fi
      
      echo 要执行的命令是$*
      
      #循环执行此命令
      for((i=101;i<=103;i++))
      do
      		echo --------------hadoop$i-------------------
      		ssh hadoop$i $*
      done
      

集群配置

集群部署规划

hadoop101 hadoop102 hadoop103
HDFS NameNode DataNode DataNode SecondaryNameNode DataNode
YARN NodeManager ResourceManager NodeManager NodeManager

配置集群

  1. 核心配置文件

    • 配置core-site.xml

    [atguigu@hadoop102 hadoop]$ vi core-site.xml

    • 在该文件中编写如下配置
    
    
    	fs.defaultFS
         hdfs://hadoop101:9000
    
    
    
    	hadoop.tmp.dir
    	/opt/module/hadoop-2.7.2/data/tmp
    
    
  2. HDFS配置文件

    • 配置hadoop-env.sh

      [atguigu@hadoop102 hadoop]$ vi hadoop-env.sh

      export JAVA_HOME=/opt/module/jdk1.8.0_144

    • 配置hdfs-site.xml

      [atguigu@hadoop102 hadoop]$ vi hdfs-site.xml

    • 在该文件中编写如下配置

      
      	  dfs.replication
      	  3
      
      
      
           dfs.namenode.secondary.http-address
           hadoop103:50090
      
      
  3. YARN配置文件

    • 配置yarn-env.sh

      [atguigu@hadoop102 hadoop]$ vi yarn-env.sh

      export JAVA_HOME=/opt/module/jdk1.8.0_144

    • 配置yarn-site.xml

      [atguigu@hadoop102 hadoop]$ vi yarn-site.xml

    • 在该文件中增加如下配置

      
      
      	  yarn.nodemanager.aux-services
      	  mapreduce_shuffle
      
      
      
      	  yarn.resourcemanager.hostname
      	  hadoop101
      
      
  4. MapReduce配置文件

    • 配置mapred-env.sh

      [atguigu@hadoop102 hadoop]$ vi mapred-env.sh

      export JAVA_HOME=/opt/module/jdk1.8.0_144

    • 配置mapred-site.xml

      [atguigu@hadoop102 hadoop]$ vi mapred-site.xml

    • 在该文件中增加如下配置

      
      
      	  mapreduce.framework.name
      	  yarn
      
      
  5. 在集群上分发配置好的Hadoop配置文件

    [atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/

  6. 查看文件分发情况

    xcall cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml

集群单点启动

  1. 如果集群是第一次启动,需要格式化NameNode

    [atguigu@hadoop102 hadoop-2.7.2]$ hadoop namenode -format

  2. 在hadoop102上启动NameNode

    [atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
    [atguigu@hadoop102 hadoop-2.7.2]$ jps
    8118 NameNode
    
  3. 启动hadoop101,hadoop102,hadoop103上的DataNode

    [atguigu@hadoop102 hadoop-2.7.2]$ xcall hadoop-daemon.sh start datanode
    [atguigu@hadoop101 hadoop]$ xcall jps
    要执行的命令是jps
    --------------hadoop101-------------------
    8118 NameNode
    13768 Jps
    8238 DataNode
    --------------hadoop102-------------------
    8072 DataNode
    12959 Jps
    --------------hadoop103-------------------
    7347 DataNode
    13950 Jps
    

SSH无密登陆配置

  1. 免密登录原理

  2. 生成公钥和私钥

    [atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa

    然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

  3. 将公钥拷贝到要免密登录的目标机器上的/home/atguigu/.ssh目录下的authorized_keys中

    以下命令可以直接完成上述操作

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop101
    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102
    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103
    
  4. .ssh文件夹下(~/.ssh)的文件功能解释

    known_hosts 记录ssh访问过计算机的公钥(public key)
    id_rsa 生成的私钥
    id_rsa.pub 生成的公钥
    authorized_keys 存放授权过得无密登录服务器公钥

登录状态的环境变量

  • Login Shell

    是指登录时,需要提供用户名密码的shell,如:su – user1 , 图形登录, ctrl+alt+F2-6进入的登录界面。

    • 这种Login shell 执行脚本的顺序:
      1. /etc/profile 【全局profile文件;它定义了LoginUser的 PATH, USER, LOGNAME(登录使用者帐号)】
      2. /etc/profile.d/目录下的脚本
      3. ~/.bash_profile 【搜索命令的路径 ——————- 登录级别 环境变量配置文件 】
      4. ~/.bashrc 【存储用户设定的别名和函数 ———- shell级别 环境变量配置文件】
      5. /etc/bashrc 【全局bashrc文件; 它主要定义一些 Function 和 Alias;更改/etc/bashrc会影响到所有用户,由root用户管理。】
  • Non-Login shell

    • 登录终端后,使用ssh 登录 其他机器!
    • 非登录shell指的是,不需要输入用户名密码的shell,如图形下 右键terminal,或ctrl+shift+T打开的shell
    • 这种Non-Login shell 执行登录脚本的顺序:
      1. ~/.bashrc
      2. /etc/bashrc
      3. /etc/profile.d/目录下的脚本
  • ssh 目标机器
    登录之后,执行某个命令!
    属于Login-shell,会自动读取 /etc/profile文件中定义的所有的变量!

  • ssh 目标机器 命令
    属于Non-Login-shell
    不会读取/etc/profile
    如果在使用命令时,我们需要使用/etc/profile定义的一些变量,需要在目标机器的对应的用户的家目录/.bashrc中添加以下代码

    source /etc/profile

    如果不添加以上代码,在执行start-all.sh | stop-all.sh一定会报错!

群起集群

群起脚本的原理是获取集群中所有的节点的主机名
默认读取当前机器 HADOOP_HOME/etc/hadoop/slaves,获取集群中所有的节点的主机名

循环执行 ssh 主机名 hadoop-daemon.sh start xxx
保证当前机器到其他节点,已经配置了ssh免密登录
保证集群中所有当前用户的家目录/.bashrc中,已经配置source /etc/profile

  1. 配置slaves

    /opt/module/hadoop-2.7.2/etc/hadoop/slaves
    [atguigu@hadoop102 hadoop]$ vi slaves
    

    在文件中增加如下内容:

    hadoop101
    hadoop102
    hadoop103
    

    注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

  2. 启动集群

    1. 如果集群是第一次启动,需要格式化NameNode

      [atguigu@hadoop102 hadoop-2.7.2]$ hdfs namenode -format

    2. 启动HDFS

      [atguigu@hadoop101 hadoop]$ start-dfs.sh
      [atguigu@hadoop101 hadoop]$ xcall jps
      要执行的命令是jps
      --------------hadoop101-------------------
      8118 NameNode
      13768 Jps
      8238 DataNode
      --------------hadoop102-------------------
      8072 DataNode
      12959 Jps
      --------------hadoop103-------------------
      7473 SecondaryNameNode
      7347 DataNode
      13950 Jps
      
    3. 启动YARN

      [atguigu@hadoop103 hadoop-2.7.2]$ start-yarn.sh

    4. web端查看SecondaryNameNode

      1. 浏览器中输入:http://hadoop103:50090/status.html
      2. 查看SecondaryNameNode信息

  3. 集群基本测试

    1. hadoop fs -mkdir /wcinput

    2. hadoop fs -put hi /wcinput/

    3. hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /wcinput/ /wcoutput

集群启动/停止方式总结

  1. 各个服务组件逐一启动/停止

    1. 分别启动/停止HDFS组件

      hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode

    2. 启动/停止YARN

      yarn-daemon.sh start / stop resourcemanager / nodemanager

  2. 各个模块分开启动/停止(配置ssh是前提)

    1. 整体启动/停止HDFS

      start-dfs.sh / stop-dfs.sh

    2. 整体启动/停止YARN

      start-yarn.sh / stop-yarn.sh

  3. 启动历史服务器

    mr-jobhistory-daemon.sh start historyserver

集群时间同步

每台虚拟机作如下设置即可保证时间同步

也可设置定时同步时间的任务

crontab -e

* */1 * * * ntpdate -u ntp7.aliyun.com

其他注意事项

  1. start-all.sh其实是分别调用了start-dfs.sh和start-yarn.sh,现已过时不建议使用.
  2. stop-all.sh同理.
  3. start-dfs.sh可以在集群的任意一台机器使用!可以启动HDFS中的所有进程!
  4. start-yarn.sh在集群的非RM所在的机器使用,不会启动resourcemanager!

建议:

只需要配置RM所在机器到其他机器的SSH免密登录!
都在RM所在的机器执行群起和群停脚本!
xsync和xcall只放在RM所在的机器即可!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java大数据最全课程学习笔记(2)-

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java大数据最全课程学习笔记(2)-

目前CSDN,云海天,简书同步发表中,更多精彩欢迎访问我的gitee pages目录Hadoop完全分布式运行模式步骤分析:编写集群分发脚本xsync集群配置集群部署规划配置集群集群单点启动SSH无密登陆配置登录状态的环境变量群起集群集群启动/停止方式总结集群
java大数据最全课程学习笔记(2)-
2021-07-11

java大数据最全课程学习笔记(5)-

目前CSDN,云海天,简书同步发表中,更多精彩欢迎访问我的gitee pages目录MapReduce精通(一)MapReduce入门MapReduce定义MapReduce优缺点优点缺点MapReduce核心思想MapReduce进程MapReduce编程规
java大数据最全课程学习笔记(5)-
2019-07-21

java大数据最全课程学习笔记(4)-

目前CSDN,云海天,简书同步发表中,更多精彩欢迎访问我的gitee pages目录HDFS NN,2NN,DN及HDFS2.x新特性NameNode和SecondaryNameNode(重点)NN和2NN工作机制NN和2NN工作机制详解Fsimage和Edi
java大数据最全课程学习笔记(4)-
2021-10-12

java大数据最全课程学习笔记(3)-

目前CSDN,云海天,简书同步发表中,更多精彩欢迎访问我的gitee pages目录HDFS 简介及操作HDFS概述HDFS产出背景及定义HDFS优缺点HDFS组成架构HDFS文件块大小(重点)HDFS的Shell操作(开发重点)基本语法命令大全常用命令实操H
java大数据最全课程学习笔记(3)-
2014-05-10

Java编程思想(2nd)学习笔记(8)-2 (转)

Java编程思想(2nd)学习笔记(8)-2 (转)[@more@]二. Inner classes(内隐类)1. 内隐类的基本用法1) 如果要在外围class的non-static函数之外产生一个inner class对象,得以Ou
2023-06-03

Python学习笔记(2)操作符和数据类

2019-02-25一:(1)常用操作符:  ① 算数操作符:=、-、*、/、%(求余)、**(幂运算)、//(地板除法:计算结果取比商小的最大整型)  注意:幂运算操作符比其左侧的一元运算符的优先级高,比其右边的一元运算符优先级低。  测
2023-01-30

PHP学习笔记:云计算与大数据

云计算和大数据是当前科技领域最热门的话题之一。作为一名PHP开发者,在学习云计算和大数据的过程中,亲身动手编写代码是非常重要的。本文将介绍云计算与大数据的基本概念,并提供一些具体的PHP代码示例,帮助读者更好地理解和应用这些概念。一、云计算
2023-10-21

Java编程思想学习笔记2 - 字节流和字符流

《Thinking in Java》第18章的内容是相当丰富精彩的,也在网络学习参考了很多前辈们的笔记,个人由于能力有限(毕竟和大神Bruce Eckel的能力相差甚远),将这一章的内容分三个部分来写,希望能够慢慢品味和领悟Java IO的
2023-06-02

SQL与数据库编程学习笔记-day2

SQL与数据库编程学习笔记-day2修改数据库密码;首先打开在数据库bin目录下,打开cmd窗口;登入root用户。(用户名root,密码root); 登出数据库(修改数据库密码必须在数据库外执行命令);             Ps:登出命令:quit 利用
SQL与数据库编程学习笔记-day2
2017-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录