java大数据最全课程学习笔记(2)--Hadoop完全分布式运行模式
目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages
Hadoop完全分布式运行模式
步骤分析:
准备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
安装JDK
配置环境变量
安装Hadoop
配置环境变量
配置集群
单点启动
配置ssh
群起并测试集群
由于在上一章节已经配置好环境并测试了hadoop伪分布式开发模式,所以在此不再赘述.
编写集群分发脚本xsync
scp(secure copy) 安全拷贝(全量复制)
scp定义
scp可以实现服务器与服务器之间的数据拷贝.(from server1 to server2)
基本语法
scp -r 源文件用户名A@主机名1:path1 目标文件用户名B@主机名2:path2
其他
- 如果从本机执行读取或写入,用户名B@主机名2:可以省略!
- 在主机1上,使用A用户读取path1的文件,再使用用户B登录到主机2,在主机2的path2路径执行写入!
- 要求:
- 用户名A@主机名1 对path1有读权限
- 用户名B@主机名2 对path2有写权限
rsync 远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。rsync -rvlt path1 目标文件用户名B@主机名2:path2
选项 功能 -r 递归 -v 显示复制过程 -l 拷贝符号连接 -t 基于文件的修改时间进行对比,只同步修改时间不同的文件 只能将本机的文件同步到其他机器!
注意:path1是个目录,目录以/结尾,只会同步目录中的内容,不会同步目录本身!目录不以/结尾,同步目录中的内容,也会同步目录本身!
编写xsync集群分发脚本
需求:循环复制文件到所有节点的相同目录下,即将当前机器的文件,同步到集群所有机器的相同路径下!例如:hadoop102:/A/a , 执行脚本后,将此文件同步到集群中所有机器的 /A/a
需求分析:
- 用户在使用xsync时,只需要传入要同步的文件即可
xysnc a
不管a是一个相对路径还是绝对路径,都需要将a转换为绝对路径! - 文件的绝对路径:
父路径: dirpath=$(cddirname /home/atguigu/hi
; pwd -P)
文件名: filename=basename hi
pwd -P为了避免软链接无法获取到真实的父路径 - 核心命令:
for(())
do
rsync -rvlt path1
done - 说明:在/home/atguigu/bin这个目录下存放的脚本,atguigu用户可以在系统任何地方直接执行。
- 用户在使用xsync时,只需要传入要同步的文件即可
脚本实现:
[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 文件名称
编写批量执行同一命令的脚本
#!/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 |
配置集群
核心配置文件
- 配置core-site.xml
[atguigu@hadoop102 hadoop]$ vi core-site.xml
- 在该文件中编写如下配置
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
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
在该文件中编写如下配置
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
</property>
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
在该文件中增加如下配置
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
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
在该文件中增加如下配置
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
在集群上分发配置好的Hadoop配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
查看文件分发情况
xcall cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
集群单点启动
如果集群是第一次启动,需要格式化NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
在hadoop102上启动NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
[atguigu@hadoop102 hadoop-2.7.2]$ jps
8118 NameNode
启动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无密登陆配置
免密登录原理
生成公钥和私钥
[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上的/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
.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 执行脚本的顺序:
- /etc/profile 【全局profile文件;它定义了LoginUser的 PATH, USER, LOGNAME(登录使用者帐号)】
- /etc/profile.d/目录下的脚本
- ~/.bash_profile 【搜索命令的路径 ——————- 登录级别 环境变量配置文件 】
- ~/.bashrc 【存储用户设定的别名和函数 ———- shell级别 环境变量配置文件】
- /etc/bashrc 【全局bashrc文件; 它主要定义一些 Function 和 Alias;更改/etc/bashrc会影响到所有用户,由root用户管理。】
- 这种Login shell 执行脚本的顺序:
Non-Login shell
- 登录终端后,使用ssh 登录 其他机器!
- 非登录shell指的是,不需要输入用户名密码的shell,如图形下 右键terminal,或ctrl+shift+T打开的shell
- 这种Non-Login shell 执行登录脚本的顺序:
- ~/.bashrc
- /etc/bashrc
- /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
配置slaves
/opt/module/hadoop-2.7.2/etc/hadoop/slaves
[atguigu@hadoop102 hadoop]$ vi slaves
在文件中增加如下内容:
hadoop101
hadoop102
hadoop103
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
启动集群
如果集群是第一次启动,需要格式化NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hdfs namenode -format
启动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
启动YARN
[atguigu@hadoop103 hadoop-2.7.2]$ start-yarn.sh
web端查看SecondaryNameNode
- 浏览器中输入:http://hadoop103:50090/status.html
- 查看SecondaryNameNode信息
集群基本测试
hadoop fs -mkdir /wcinput
hadoop fs -put hi /wcinput/
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /wcinput/ /wcoutput
集群启动/停止方式总结
各个服务组件逐一启动/停止
分别启动/停止HDFS组件
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
启动/停止YARN
yarn-daemon.sh start / stop resourcemanager / nodemanager
各个模块分开启动/停止(配置ssh是前提)
整体启动/停止HDFS
start-dfs.sh / stop-dfs.sh
整体启动/停止YARN
start-yarn.sh / stop-yarn.sh
启动历史服务器
mr-jobhistory-daemon.sh start historyserver
集群时间同步
每台虚拟机作如下设置即可保证时间同步
也可设置定时同步时间的任务
crontab -e
* */1 * * * ntpdate -u ntp7.aliyun.com
其他注意事项
- start-all.sh其实是分别调用了start-dfs.sh和start-yarn.sh,现已过时不建议使用.
- stop-all.sh同理.
- start-dfs.sh可以在集群的任意一台机器使用!可以启动HDFS中的所有进程!
- start-yarn.sh在集群的非RM所在的机器使用,不会启动resourcemanager!
建议:
只需要配置RM所在机器到其他机器的SSH免密登录!
都在RM所在的机器执行群起和群停脚本!
xsync和xcall只放在RM所在的机器即可!
java大数据最全课程学习笔记(2)--Hadoop完全分布式运行模式的更多相关文章
- java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式
Hadoop简介和安装及伪分布式 大数据概念 大数据概论 大数据(Big Data): 指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强的决策力,洞察发 ...
- java大数据最全课程学习笔记(6)--MapReduce精通(二)--MapReduce框架原理
目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages 目录 MapReduce精通(二) MapReduce框架原理 MapReduce工作流程 InputFormat数据 ...
- java大数据最全课程学习笔记(5)--MapReduce精通(一)
目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages 目录 MapReduce精通(一) MapReduce入门 MapReduce定义 MapReduce优缺点 优点 缺 ...
- java大数据最全课程学习笔记(3)--HDFS 简介及操作
目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages 目录 HDFS 简介及操作 HDFS概述 HDFS产出背景及定义 HDFS优缺点 HDFS组成架构 HDFS文件块大小 ...
- 《Hadoop》大数据技术开发实战学习笔记(二)
搭建Hadoop 2.x分布式集群 1.Hadoop集群角色分配 2.上传Hadoop并解压 在centos01中,将安装文件上传到/opt/softwares/目录,然后解压安装文件到/opt/mo ...
- 42步进阶学习—让你成为优秀的Java大数据科学家!
作者 灯塔大数据 本文转自公众号灯塔大数据(DTbigdata),转载需授权 如果你对各种数据类的科学课题感兴趣,你就来对地方了.本文将给大家介绍让你成为优秀数据科学家的42个步骤.深入掌握数据准备, ...
- 大数据学习笔记之Hadoop(一):Hadoop入门
文章目录 大数据概论 一.大数据概念 二.大数据的特点 三.大数据能干啥? 四.大数据发展前景 五.企业数据部的业务流程分析 六.企业数据部的一般组织结构 Hadoop(入门) 一 从Hadoop框架 ...
- Java大数据应用领域及就业方向
最难毕业季,2017高校毕业生达到795万,许多学生面临着毕业即失业的尴尬.面对着与日俱增的竞争形势和就业压力,很多毕业生选择去知了堂学习社区镀金,以提高自己的就业竞争力,其中Java大数据是学生选择 ...
- 为什么Java大数据是最火爆的编程语言?
未来10年将是大数据,人工智能爆发的时代,到时将会有大量的企业需要借助大数据,而Java最大的优势就是它在大数据领域的地位,目前很多的大数据架构都是通过Java来完成的. 在这个Android.iOS ...
随机推荐
- Arduino+sim800C家居安防火灾报警 拨打电话 发送短信例程程序
家居安防报警器,参考程序. 火灾报警 涉及用sim800c发短信,拨打电话通知. 接线: Sim800c 3.3V -> Arduino 3.3V Sim800c GND -> Ardui ...
- Linux 虚拟机详细安装MySQL
准备工作 下载MySQL 去官网下载MySQL:点我直达 百度云盘地址:链接: https://pan.baidu.com/s/1qBN4r6t8gvq-I4CFfQQ-EA 密码: hei3 检查L ...
- 关于安装Django包的问题
在Windows的环境下,有些包确实不好安装的,比如reportlab-3.2.0-cp27-none-win32.whl,根据xadmin安装的经验,从这个.whl里把文件夹reportlab解压出 ...
- 题解 - 【NOI2015】维修数列
题面大意: 使用平衡树维护一个数列,支持插入,修改,删除,翻转,求和,求最大和这 \(6\) 个操作. 题意分析: Splay 裸题,几乎各种操作都有了,这个代码就发给大家当个模板吧. 最后求最大和的 ...
- Docker 基础知识 - Docker 概述
Docker 是一个开发.发布和运行应用程序的开放平台.Docker使您能够将应用程序与基础架构分离,以便快速交付软件.有了 Docker,你可以像管理应用程序一样管理你的基础设施.通过利用 Dock ...
- 4. union-find算法
算法的主题思想: 1.优秀的算法因为能够解决实际问题而变得更为重要: 2.高效算法的代码也可以很简单: 3.理解某个实现的性能特点是一个挑战: 4.在解决同一个问题的多种算法之间进行选择时,科学方法是 ...
- CentOS 7 安装VNC
VNC需要系统安装的有桌面,可以进行下面操作安装GNOME 桌面. #列出的组列表里有GNOME Desktopyum grouplist | grep GNOME 安装 yum groupinsta ...
- VMware 15安装Ubuntu 16.04并配置环境
VMware(虚拟机)是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统,它能在Windows系统上虚拟出多个计算机,每个虚拟计算机可以独立运行,可安装各种软件与应用等 ...
- 入门大数据---Hbase是什么?
一.Hbase是什么? Hbase属于NoSql的一种. NoSql数据库分为如下几类: Key-Value类型数据库 这类数据库主要会使用到一个哈希表,这个表有一个特定的键和一个指针指向特定的数据. ...
- python文件处理-将图像根据坐标画矩形标记
内容涉及:文件遍历,选取csv后缀文件,用cv操作图片 import csv import os import sys import numpy as np import copy import sh ...