Hadoop7.07

昨日内容回顾

  • Hadoop组件详细介绍

    多看几遍 争取能说出个大概即可
    
  • 虚拟机环境准备

    1.克隆多台虚拟机
    	链接克隆
        完整克隆
    2.依次修改克隆出来的机器ip地址和主机名
    	ip地址修改
        	vim /etc/sysconfig/network-scripts/ifcfg-eth0
            systemctl restart network
        host主机名
        	hostnamectl set-hostname hadoop01
            bash
    3.修改hosts文件添加映射关系
    	vim /etc/hosts
        	10.0.0.1  hadoop101
            ...
        C:\Windows\System32\drivers\etc\hosts
    4.关闭防火墙
    	systemctl disable firewalld
        systemctl status firewalld
        reboot
    
  • 所需软件准备

    hadoop的运行需要依赖于java的jdk软件
    	1.jdk压缩包
        2.hadoop压缩包(2.X  最新3.X)
    
    第三方软件一般都是存储在/opt目录下
    	该目录下可以创建不同的目录存储不同类型的文件
        	software
            	压缩包
            module
            	解压文件
    
  • linux系统与windows系统数据交互

    1.借助于linux的lrzsz工具
    	不单单可以使用命令下载完成后还可以直接在xshell拖拽
    2.借助于python的模块
    	paramiko模块
    # python可以实现很多功能
    
  • paramiko模块

    能够远程链接服务器并执行命令和上传下载文件
    
    支持两种链接服务器的方式
    	1.用户名密码
        2.公钥私钥
    '''该模块的代码你可以不做记忆 保存下来之后直接拷贝使用修改关键参数'''
    
  • 公钥私钥

    主要用于数据、账户等信息的安全考虑
    
    如何生成公钥私钥及发送给远程服务器
    	windows
        mac
    
  • 解压文件

    tar -zxvf 目标压缩文件地址 -C 目标解压文件地址
    

今日内容概要

主题:实操为主

  • 配置Hadoop环境

  • 参考官网学习Hadoop典型案例

  • 集群服务配置

    集群:多台机器协同工作
    

今日内容详细

Hadoop环境准备

# 1.解压文件
tar -zxvf hadoop...tar.gz -C /opt/module/

# 2.环境变量配置
vim /etc/profile
'''添加内容'''
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2 
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

# 3.使环境变量生效
source /etc/profile

# 4.查看是否有效
hadoop

Hadoop目录结构

bin
	主要服务
  	hadoop	管理整个hadoop集群
    hdfs		管理数据存储
    yarn		管理资源调度

etc
	hadoop配置文件
 
sbin
	hadoop启动停止、整个集群启动停止
  
share
	说明文档/手册,大量使用案例
    

官方案例之Grep过滤

# 1.创建input文件夹
[jason@hadoop101 hadoop-2.7.2]$ mkdir input

# 2.将Hadoop 的xml配置文件复制到input文件夹内
[jason@hadoop101 hadoop-2.7.2]$ cp etc/hadoop/*.xml input/

# 3.从多个文件内过滤出符合条件的文件内容
[jason@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input/ output 'dfs[a-z.]+'

# 4.查看输出结果
[jason@hadoop101 hadoop-2.7.2]$ cat output/*

官方案例之WordCount(重要)

# 1.创建wcinput文件夹
[jason@hadoop101 hadoop-2.7.2]$ mkdir wcinput

# 2.在wcinput 文件下创建一个wc.input 文件
[jason@hadoop101 hadoop-2.7.2]$ cd wcinput
[jason@hadoop101 wcinput]$ touch wc.input

# 3.编辑wc.input文件
[jason@hadoop101 wcinput]$ vim wc.input
'''文件内容'''
hadoop yarn
hadoop mapreduce
jason
jason

# 4.回到 Hadoop 目录/opt/module/hadoop-2.7.2执行程序
[jason@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar
wordcount wcinput/ wcoutput

# 5.查看结果
cat wcoutput/part-r-00000

伪分布式模式

# 1./etc/hadoop路径下
vim 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>
"""

# 2./etc/hadoop路径下
vim	hadoop-env.sh
"""
2.1 新建连接查看并拷贝
echo $JAVA_HOME
2.2 修改hadoop-env.sh文件中的JAVA_HOME
export JAVA_HOME = ...
"""

# 3./etc/hadoop路径下
vim	hdfs-site.xml
"""
<!-- 指定 HDFS 副本的数量 --> <property>
<name>dfs.replication</name>
   <value>1</value>
</property>
"""

# 4.退出到hadoop根目录下(hadoop-2.7.2)
# 4.1格式化 NameNode(第一次启动时格式化,以后就不要总格式化)
hdfs namenode - format
# 4.2启动 NameNode
sbin/hadoop-daemon.sh start namenode
# 4.3启动 DataNode
sbin/hadoop-daemon.sh start datanode

# 5.查看是否启动成功
# 5.1命令的形式
jps
'''注意:jps 是 JDK 中的命令,不是 Linux 命令。不安装 JDK 不能使用 jps'''
# 5.2浏览器可视化界面
虚拟机ip地址,端口号50070


# 6.浏览器界面Browse Directory
bin/hdfs dfs -mkdir -p /user/jason/input  
# 与linux操作基本一致
bin/hdfs dfs -ls /


# 7.将hadoop-2.7.2路径下的wcinput文件上传到hdfs路径下
bin/hdfs dfs -put wcinput/wc.input /user/jason/input

# 8.在hdfs上实现字符统计
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-example-2.7.2.jar wordcount /user/jason/input	/user/jason/output
# 浏览器可视化查看或者命令查看
bin/hdfs dfs -cat /user/jason/ouput/p*

"""
补充
针对已经格式化NameNode想再次格式化,
第一步先用jps查看进程是否已经关闭
第二步将hadoop-2.7.2目录下的data和logs删除
"""

日志信息查看

cd logs/
ll
cat ...namenode...
cat ...datanode...
# 只要日志是大片大片的,那基本就是没异常,如果出现一小块聚集的一般都是异常

思考题

# 为什么不能一直格式化 NameNode,格式化 NameNode,要注意什么?
# 1.在hadoop2.7.2目录下
cd data/tmp/dfs

# 2.查看文件
ll
	data  # 存储datanode数据
  name  # 存储namenode数据

# 3.获取namenode集群id号
cd data/tmp/dfs/name/current/
cat VERSION

# 4.获取datanode集群id号
cd data/tmp/dfs/data/current/
cat VERSION


"""
注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集 群 id 不一致,集群找不到已往数据。所以,格式 NameNode 时,一定要先删除 data 数据和 log 日志,然后再格式化 NameNode。
"""

启动 YARN 并运行 MapReduce 程序

# 1.在hadoop-2.7.2路径下
cd etc/hadoop
vim yarn-env.sh

# 2.修改配置
export JAVA_HOME=/opt/module/jdk1.8.0_144

# 3.编辑文件内容
vim 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>
"""

# 4.在hadoop路径下
vim	mapred-env.sh

# 5.修改配置
export JAVA_HOME=/opt/module/jdk1.8.0_144

# 6.修改文件名
mv mapred-site.xml.template mapred-site.xml

# 7.编辑文件内容
vim mapred-site.xml
"""
<!-- 指定 MR 运行在 YARN 上 --> 
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
"""

# 8.在hadoop-2.7.2路径下启动yarn
sbin/yarn-daemon.sh start resourcemanager

# 9.在hadoop-2.7.2路径下启动NodeManager
sbin/yarn-daemon.sh start nodemanager

# 10.查看服务是否正常启动
jps

# 11.查看mapreduce服务
IP:8088
  
'''跑服务查看平台变化'''
# 1.在hadoop-2.7.2路径下先删除之前的output文件
bin/hdfs dfs -rm -r /user/jason/output
# 2.再次运行wordcount案例
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-
2.7.2.jar wordcount /user/jason/input /user/jason/output

配置历史服务器

# 编辑文件内容
vim etc/hadoop/mapred-site.xml
"""
<!-- 历史服务器端地址 --> 
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value> 
</property>
<!-- 历史服务器 web 端地址 --> 
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value> 
</property>
"""

# 在hadoop-2.7.2路径下启动历史服务器
sbin/mr-jobhistory- daemon.sh start historyserver

# 刷新页面再点击图形化界面history标签

配置日志采集

# 1.在hadoop路径下编辑文件
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>
"""

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

# 2.关闭 NodeManager 、ResourceManager 和 HistoryManager
[jason@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop resourcemanager
[jason@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager
[jason@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory- daemon.sh stop historyserver

# 3.启动 NodeManager 、ResourceManager 和 HistoryManager
[jason@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
[jason@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
[jason@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory- daemon.sh start historyserver

# 4.删除 HDFS 上已经存在的输出文件
[jason@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -rm -r /user/jason/output

# 5.执行 WordCount 程序
[jason@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar
wordcount /user/jason/input /user/jason/output

# 6.可视化界面查看日志信息

配置文件说明

Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认 配置值时,才需要修改自定义配置文件,更改相应属性值
  
要获取的默认文件							文件存放在 Hadoop 的 jar 包中的位置
[core-default.xml] 			hadoop-common-2.7.2.jar/ core-default.xml
[hdfs-default.xml] 			hadoop-hdfs-2.7.2.jar/ hdfs-default.xml
[yarn-default.xml] 			hadoop-yarn-common-2.7.2.jar/ yarn-default.xml
[mapred-default.xml]		hadoop-mapreduce-client-core-2.7.2.jar/mapred-default.xml

自定义配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。

Hadoop目录结构

bin
	主要服务
  	hadoop	管理整个hadoop集群
    hdfs		管理数据存储
    yarn		管理资源调度

etc
	hadoop配置文件
  	'''配置文件的后缀名一般都有如下几种
  		.ini
  		.conf
  		.xml
  		......
  	'''
sbin(命令核心)
	hadoop启动停止、整个集群启动停止
  
share
	说明文档/手册,大量使用案例
  
README.txt
	类似于操作说明书 里面也可以有相应广告

分布式

分布式:将一个完整的功能、软件等拆分到不同的机器上运行
	 伪分布式:在一台机器(服务器 虚拟机)上模拟多台机器的效果
     完全分布式:真正在多台机器(服务器 虚拟机)上操作
'''linux一切皆文件 所有的操作说白了都仅仅是在操作文件从而产生功能效果'''
50070  # Hadoop HDFS
3306  # MySQL
27017  # MongoDB
6379  # Redis
8088  # Hadoop MapReduce

HDFS是专门用于存储数据的地方
	初始化HDFS里面上面数据都没有
    	

完全分布式

拷贝
	1.本地拷贝
    2.远程拷贝
    	全量拷贝(scp):每一次都是完完整整的将数据重新加载一份
        增量拷贝(rsync):检查是否有重复的项 只加载改动的数据
            
1)准备 3台客户机
2)安装 JDK
3)配置环境变量
4)安装 Hadoop
5)配置环境变量
6)配置集群
7)单点启动
8)配置 ssh
9)群起并测试集群

详细:
1)准备 3台客户机(关闭防火墙、静态 ip、主机名称) 
	克隆机器修改主机名和主机IP地址
2)安装 JDK
	利用scp命令拷贝数据文件至三个客户机
  	scp -r /opt/module root@hadoop102:/opt/module
    scp -r /opt/module root@hadoop103:/opt/module
    scp -r /opt/module root@hadoop104:/opt/module
    """
    也可以在A机器将B机器文件拷贝给C机器
    scp -r root@hadoop101:/opt/module root@hadoop103:/opt/module
    """
  # 扩展:拷贝文件的命令有scp(全量拷贝)、rsync(增量拷贝)
  """
  scp(全量拷贝)
  scp    -r       $pdir/$fname       $user@hadoop$host:$pdir/$fname
  命令		递归		要拷贝的文件路径/名称			目的用户@主机:目的路径/名称
  
  rsync(增量拷贝)
  rsync  -rvl     $pdir/$fname	     $user@hadoop$host:$pdir/$fname
  命令	 选项参数	 要拷贝的文件路径/名称		目的用户@主机:目的路径/名称
  参数详解
  	r	递归
  	v	显示复制过程
  	l	拷贝符号连接
  """   
3)配置环境变量
	1.利用scp命令拷贝环境变量文件至三个客户机
  	scp	/etc/profile root@hadoop102:/etc/profile
    scp	/etc/profile root@hadoop103:/etc/profile
    scp	/etc/profile root@hadoop104:/etc/profile
  
  2.source文件配置
  	source /etc/profile
  
  3.验证是否成功
  	java 
4)扩展:集群分发脚本
  复制文件到所有节点的相同目录下
  1./usr/local/bin下创建sync文件并填写以下内容
     [jason@hadoop102 ~]$ cd /usr/local/bin
     [jason@hadoop102 bin]$ touch xsync 
     [jason@hadoop102 bin]$ vi 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=103; host<105; host++)); do
      	echo ------------------- hadoop$host --------------
      	rsync -rvl $pdir/$fname $user@hadoop$host:$pdir 
      done
      """
  2.修改权限
  	chmod 777 xsync
  3.测试
  		在当前机器随便找一个其他机器没有的目录
      	xsync test/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值