分布式文件系统Hadoop(二)部署

本文详述了Hadoop在Linux环境下的部署,包括本地模式、伪分布式和完全分布式安装步骤。介绍了HDFS、YARN和MapReduce的功能,以及历史服务和日志聚集的概念。在完全分布式中,探讨了单点故障问题并强调了其在生产环境中的局限性。
摘要由CSDN通过智能技术生成

分布式文件系统Hadoop(二)部署

Linux环境安装
Hadoop是运行在Linux,虽然借助工具也可以运行在Windows上,但是建议还是运行在Linux系统上,第一部分介绍Linux环境的安装、配置、Java JDK安装等。

Hadoop本地模式安装
Hadoop 本地模式只是用于本地开发调试,或者快速安装体验 Hadoop,这部分做简单的介绍。
直接解压,无需任何配置。主要用于测试代码。没有分布式文件系统。

Hadoop伪分布式模式安装
学习 Hadoop 一般是在伪分布式模式下进行。这种模式是在一台机器上各个进程上运行 Hadoop 的各个模块,伪分布式的意思是虽然各个模块是在各个进程上分开运行的,但是只是运行在一个操作系统上的,并不是真正的分布式。

完全分布式安装
包含主节点和从节点,主节点namenode只有一个(一般来说,真实生产环境中namenode只会单独作为一个节点)namenode主要负责存储元数据,即datanode存储数据的描述,如数据存储在datanode的哪一个节点上,数据是谁上传的。datanode负责真正干活的,负责数据存储的。完全分布式中,如果namenode宕机了会造成整个集群无法使用,这也是完全分布式的一大缺点,存在单点故障问题。所以在一般生产环境中不太使用这种模式。

Hadoop各个功能模块的理解

1、 HDFS模块

HDFS负责大数据的存储,通过将大文件分块后进行分布式存储方式,突破了服务器硬盘大小的限制,解决了单台机器无法存储大文件的问题,HDFS是个相对独立的模块,可以为YARN提供服务,也可以为HBase等其他模块提供服务。

2、 YARN模块

YARN是一个通用的资源协同和任务调度框架,是为了解决Hadoop1.x中MapReduce里NameNode负载太大和其他问题而创建的一个框架。

YARN是个通用框架,不止可以运行MapReduce,还可以运行Spark、Storm等其他计算框架。

3、 MapReduce模块

MapReduce是一个计算框架,它给出了一种数据处理的方式,即通过Map阶段、Reduce阶段来分布式地流式处理数据。它只适用于大数据的离线处理,对实时性要求很高的应用不适用。

Linux环境安装

防火墙、selinux关闭状态,机器连网
tar -zxvf jdk-7u67-linux-x64.tar.gz -C /opt/modules
vim /etc/profile
export JAVA_HOME="/opt/modules/jdk1.7.0_67"
export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile
java –version


Hadoop本地模式安装

本地模式是最简单的模式,所有模块都运行与一个JVM进程中,使用的本地文件系统,而不是HDFS,本地模式主要是用于本地开发过程中的运行调试用。下载 hadoop 安装包后不用任何设置,默认的就是本地模式。
解压hadoop后就是直接可以使用

mkdir /opt/modules/hadoopstandalone
解压所下载的Hadoop发行版到/opt/modules/hadoopstandalone
编辑 conf/hadoop-env.sh文件,至少需要将JAVA_HOME设置为Java安装根路径

bin/hadoop
将会显示hadoop 脚本的使用文档

$ mkdir input
$ cp conf/*.xml input
$ bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
$ cat output/*
本地模式下,mapreduce的输出是输出到本地。
输出目录中有_SUCCESS文件说明JOB运行成功,part-r-00000是输出结果文件。

Hadoop伪分布式模式安装

#ssh免密
ssh localhost
如果不输入口令就无法用ssh登陆localhost,执行下面的命令:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys


1、 创建一个名字为hadoop的普通用户
# useradd hadoop
# passwd hadoop
2、 给hadoop用户sudo权限
# vim /etc/sudoers
#设置权限,学习环境可以将hadoop用户的权限设置的大一些,但是生产环境一定要注意普通用户的权限限制。
root    ALL=(ALL)       ALL
hadoop ALL=(root) NOPASSWD:ALL

3、 切换到hadoop用户
# su - hadoop
4、 创建存放hadoop文件的目录
$ sudo mkdir /opt/modules
5、 将hadoop文件夹的所有者指定为hadoop用户
#如果存放hadoop的目录的所有者不是hadoop,之后hadoop运行中可能会有权限问题,那么就讲所有者改为hadoop。
# sudo chown -R hadoop:hadoop /opt/modules

cd /opt/modules
# tar -zxvf hadoop-2.5.0.tar.gz
vim /etc/profile
export HADOOP_HOME="/opt/modules/hadoop-2.5.0"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

source /etc/profile
vim  ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
修改JAVA_HOME参数为:
export JAVA_HOME="/opt/modules/jdk1.7.0_67"


创建临时目录:
mkdir -p /opt/data/tmp
sudo chown –R hadoop:hadoop /opt/data/tmp


配置{HADOOP_HOME}/etc/hadoop/core-site.xml
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:8020</value>
  </property>
  <property>
    <name>hadoop.tmp.dirr</name>
    <value>/opt/data/tmp</value>
  </property>
</configuration>
#fs.defaultFS参数配置的是HDFS的地址。
#hadoop.tmp.dir配置的是Hadoop临时目录,比如HDFS的
#NameNode数据默认都存放这个目录下,查看*-default.xml
#等默认配置文件,就可以看到很多依赖${hadoop.tmp.dir}的配置。
#默认的hadoop.tmp.dir是/tmp/hadoop-${user.name},
#此时有个问题就是NameNode会将HDFS的元数据存储在这个/tmp目录下,
#如果操作系统重启了,系统会清空/tmp目录下的东西,导致NameNode
#元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。

#配置、格式化、启动HDFS
vim ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
 <property>
       <name>dfs.replication</name>
       <value>1</value>
 </property>

#dfs.replication配置的是HDFS存储时的备份数量,因为这里是伪分布式环境只有一个节点,所以这里设置为1。

hdfs namenode –format
#格式化是对HDFS这个分布式文件系统中的DataNode进行分块,
#统计所有分块后的初始元数据的存储在NameNode中。
#格式化后,查看core-site.xml里hadoop.tmp.dir(本例是/opt/data目录)
#指定的目录下是否有了dfs目录,如果有,说明格式化成功。

ll /opt/data/tmp/dfs/name/current
fsimage是NameNode元数据在内存满了后,持久化保存到的文件。
fsimage*.md5 是校验文件,用于校验fsimage的完整性。
seen_txid 是hadoop的版本
vession文件里保存:
namespaceID:NameNode的唯一ID。
clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群。

启动NameNode
${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode
启动DataNode
${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode
启动SecondaryNameNode
${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode

bin/start-all.sh

JPS命令查看是否已经启动成功,有结果就是启动成功了

HDFS上创建目录
${HADOOP_HOME}/bin/hdfs dfs -mkdir /demo1
上传本地文件到HDFS上
${HADOOP_HOME}/bin/hdfs dfs -put  ${HADOOP_HOME}/etc/hadoop/core-site.xml /demo1
读取HDFS上的文件内容
${HADOOP_HOME}/bin/hdfs dfs -cat /demo1/core-site.xml
从HDFS上下载文件到本地
bin/hdfs dfs -get /demo1/core-site.xml

文件被下载到hadoop/


#配置、启动YARN
1、 配置mapred-site.xml
默认没有mapred-site.xml文件,但是有个mapred-site.xml.template
配置模板文件。复制模板生成mapred-site.xml。

cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
添加配置如下:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
#指定mapreduce运行在yarn框架上。
2、 配置yarn-site.xml
添加配置如下:
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>bigdata-senior01.chybinmy.com</value>
 </property>

#yarn.nodemanager.aux-services配置了yarn的默认混洗方式,选择为mapreduce的默认混洗算法。
#yarn.resourcemanager.hostname指定了Resourcemanager运行在哪个节点上。


启动Resourcemanager
${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager
启动nodemanager
${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager
jps

YARN的Web客户端端口号是8088,通过http://本机ip:8088/可以查看。

#运行MapReduce Job
在Hadoop的share目录里,自带了一些jar包,里面带有一些
mapreduce实例小例子,位置在
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar,
可以运行这些例子体验刚搭建好的Hadoop平台,
我们这里来运行最经典的WordCount实例。

bin/hdfs dfs -mkdir -p /wordcountdemo/input
在本地/opt/data目录创建一个文件wc.input,内容如下。
hadoop mapreduce hive

bin/hdfs dfs -put /opt/data/wc.input /wordcountdemo/input


#运行WordCount MapReduce Job
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-
2.5.0.jar wordcount /wordcountdemo/input /wordcountdemo/output


bin/hdfs dfs -ls /wordcountdemo/output
bin/hadoop fs -cat output/*
bin/hdfs dfs -cat /wordcountdemo/output/part-r-00000
结果是按照键值排好序的。

停止Hadoop
bin/stop-all.sh

一些服务

历史服务介绍
Hadoop开启历史服务可以在web页面上查看Yarn上执行job情况的详细信息。
可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。
sbin/mr-jobhistory-daemon.sh start historyserver
开启后,可以通过Web页面查看历史服务器:

Web查看job执行历史

运行一个mapreduce任务
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar 
wordcount /wordcountdemo/input /wordcountdemo/output1

job执行中
查看job历史

历史服务器的Web端口默认是19888,可以查看Web界面。
但是在上面所显示的某一个Job任务页面的最下面,Map和Reduce个数
的链接上,点击进入Map的详细信息页面,再查看某一个Map或者Reduce
的详细日志是看不到的,是因为没有开启日志聚集服务。

日志聚集介绍
MapReduce是在各个机器上运行的,在运行过程中产生的日志存在于各个机器上,为了能够统一查看各个机器的运行日志,将日志集中存放在HDFS上,这个过程就是日志聚集。

开启日志聚集

配置日志聚集功能
Hadoop默认是不启用日志聚集的。在yarn-site.xml文件里配置启用日志聚集。
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
 </property>
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>106800</value>
 </property>
#yarn.log-aggregation-enable:是否启用日志聚集功能。
#yarn.log-aggregation.retain-seconds:设置日志保留时间,单位是秒。

将配置文件分发到其他节点
scp /opt/modules/hadoop-2.5.0/etc/hadoop/yarn-site.xml bigdata-senior02.chybinmy.com:/opt/modules/hadoop-2.5.0/etc/hadoop/
scp /opt/modules/hadoop-2.5.0/etc/hadoop/yarn-site.xml bigdata-senior03.chybinmy.com:/opt/modules/hadoop-2.5.0/etc/hadoop/

重启Yarn进程:
sbin/stop-yarn.sh
sbin/start-yarn.sh
重启HistoryServer进程:
sbin/mr-jobhistory-daemon.sh stop historyserver
sbin/mr-jobhistory-daemon.sh start historyserver

测试日志聚集
运行一个 demo MapReduce,使之产生日志:
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /input /output1

查看日志:
运行Job后,就可以在历史服务器Web页面查看各个Map和Reduce的日志了。 



完全分布式安装

完全分部式是真正利用多台Linux主机来进行部署Hadoop,对Linux机器集群进行规划,使得Hadoop各个模块分别部署在不同的多台机器上。

node1node2node3
NameNodeResourceManage
DataNodeDataNodeDataNode
NodeManagerNodeManagerNodeManager
HistoryServerSecondaryNameNode
准备工作
1.配置Hostname、 配置hosts,三台节点ssh免密
2.需要配置的文件
一共需要配置主要的6个文件:
  hadoop-x.x.x/etc/hadoop/hadoop-env.sh
  hadoop-x.x.x/etc/hadoop/yarn-env.sh
  hadoop-x.x.x/etc/hadoop/core-site.xml
  hadoop-x.x.x/etc/hadoop/yarn-site.xml         相关的job处理
  hadoop-x.x.x/etc/hadoop/hdfs-site.xml         可以确定文件的备份个数及数据文件夹的路径
  hadoop-x.x.x/etc/hadoop/mapred-site.xml 
node1

tar -zxf /opt/sofeware/hadoop-2.5.0.tar.gz -C /opt/modules/app/
 配置Hadoop JDK路径修改hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中的JDK路径
export JAVA_HOME="/opt/modules/jdk1.7.0_67"

vim etc/hadoop/core-site.xml
<configuration>
 <property>
   <name>fs.defaultFS</name>
   <value>hdfs://bigdata-senior01.chybinmy.com:8020</value>
 </property>
 <property>
   <name>hadoop.tmp.dir</name>
   <value>/opt/modules/app/hadoop-2.5.0/data/tmp</value>
 </property>
</configuration>
#fs.defaultFS为NameNode的地址。
#hadoop.tmp.dir为hadoop临时目录的地址,默认情况下,
#NameNode和DataNode的数据文件都会存在这个目录下的对应子目录下。
#应该保证此目录是存在的,如果不存在,先创建。

vim etc/hadoop/hdfs-site.xml
<configuration>
 <property>
   <name>dfs.namenode.secondary.http-address</name>
   <value>bigdata-senior03.chybinmy.com:50090</value>
 </property>
</configuration>
#dfs.namenode.secondary.http-address是指定secondaryNameNode的
#http访问地址和端口号,因为在规划中,我们将
#BigData03规划为SecondaryNameNode服务器。
#所以这里设置为:bigdata-senior03.chybinmy.com:50090

配置slaves
vim etc/hadoop/slaves
    bigdata-senior01.chybinmy.com
    bigdata-senior02.chybinmy.com
    bigdata-senior03.chybinmy.com
#slaves文件是指定HDFS上有哪些DataNode节点。

vim etc/hadoop/yarn-site.xml
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>bigdata-senior02.chybinmy.com</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>106800</value>
    </property>
#根据规划yarn.resourcemanager.hostname这个指定resourcemanager服务器指向bigdata-senior02.chybinmy.com。
#yarn.log-aggregation-enable是配置是否启用日志聚集功能。
#yarn.log-aggregation.retain-seconds是配置聚集的日志在HDFS上最多保存多长时间。

配置mapred-site.xml
从mapred-site.xml.template复制一个mapred-site.xml文件。
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>bigdata-senior01.chybinmy.com:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>bigdata-senior01.chybinmy.com:19888</value>
    </property>
</configuration>
#mapreduce.framework.name设置mapreduce任务运行在yarn上。
#mapreduce.jobhistory.address是设置mapreduce的历史服务器安装在BigData01机器上。
#mapreduce.jobhistory.webapp.address是设置历史服务器的web页面地址和端口号。

##至此配置工作完成
分发node1的Hadoop文件
1、 首先在其他两台机器上创建存放Hadoop的目录
mkdir /opt/modules/app

#Hadoop根目录下的share/doc目录是存放的hadoop的文档,文件相当大,
#建议在分发之前将这个目录删除掉,可以节省硬盘空间并能提高分发的速度。
#doc目录大小有1.6G。
scp -r /opt/modules/app/hadoop-2.5.0/ bigdata-senior02.chybinmy.com:/opt/modules/app
scp -r /opt/modules/app/hadoop-2.5.0/ bigdata-senior03.chybinmy.com:/opt/modules/app

格式NameNode
在NameNode机器上执行格式化:
/opt/modules/app/hadoop-2.5.0/bin/hdfs namenode –format
#注意:
#如果需要重新格式化NameNode,需要先将原来NameNode和DataNode下的文件全部删除,
#不然会报错,NameNode和DataNode所在目录是在core-site.xml中hadoop.tmp.dir、
#dfs.namenode.name.dir、dfs.datanode.data.dir属性配置的。
    <property>
         <name>hadoop.tmp.dir</name>
         <value>/opt/data/tmp</value>
      </property>
    <property>
         <name>dfs.namenode.name.dir</name>
         <value>file://${hadoop.tmp.dir}/dfs/name</value>
      </property>
    <property>
         <name>dfs.datanode.data.dir</name>
         <value>file://${hadoop.tmp.dir}/dfs/data</value>
      </property>
#因为每次格式化,默认是创建一个集群ID,并写入NameNode和DataNode的VERSION文件中
#(VERSION文件所在目录为dfs/name/current 和 dfs/data/current),重新格式化时,
#默认会生成一个新的集群ID,如果不删除原来的目录,会导致namenode中的VERSION文件中是新的集群ID,
#而DataNode中是旧的集群ID,不一致时会报错。
#另一种方法是格式化时指定集群ID参数,指定为旧的集群ID。

启动集群
 启动HDFS
/opt/modules/app/hadoop-2.5.0/sbin/start-dfs.sh
 启动YARN
/opt/modules/app/hadoop-2.5.0/sbin/start-yarn.sh
 在node2上启动ResourceManager
sbin/yarn-daemon.sh start resourcemanager
 启动日志服务器
 在node3服务器上运行MapReduce日志服务
/opt/modules/app/hadoop-2.5.0/sbin/mr-jobhistory-daemon.sh start historyserver

jps查看节点服务
测试Job
node1
我们这里用hadoop自带的wordcount例子来在本地模式下测试跑mapreduce。
1、 准备mapreduce输入文件wc.input
cat /opt/data/wc.input
    hadoop mapreduce hive
    hbase spark storm
    sqoop hadoop hive
    spark hadoop
2、 在HDFS创建输入目录input
bin/hdfs dfs -mkdir /input
3、 将wc.input上传到HDFS
bin/hdfs dfs -put /opt/data/wc.input /input/wc.input
4、 运行hadoop自带的mapreduce Demo
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /input/wc.input /output
5、 查看输出文件
bin/hdfs dfs -ls /output

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值