Hadoop大数据框架学习(配置启动篇)

Hadoop大数据框架学习(配置启动篇)

大数据的特点:
  • Volume(大量):数据量到达PB,EB级别
  • Velocity(高速): 要求处理海量数据效率高速度快
  • Variety(多样):数据的样化。(结构化数据,非结构化数据和半结构化数据)
  • Value(低价值密度):价值密度低,难以提取出有价值的信息。
Hapood是什么

Hadoop是一个由Apache开发的分布式系统基础架构,主要解决,海量数据的存储和分析计算。Hadoop通常是说Hadoop生态圈。

Google的三论文

Google是Hadoop的思想之源,Hadoop的很多东西都是从Google泛生出来的,如:

  • GFS-------->HDFS(分布式文件系统)
  • Map-Reduce--------------->MR(分布式计算框架)
  • BigTable-------->HBase(数据库管理系统)
Hadoop的优势
  • 高可靠性:多个数据副本,计算或存储节点出故障也不会导致数据丢失。
  • 高扩展性:在集群中分配任务数据,方便扩展节点数(横向扩展)
  • 高效性:多个计算机节点并行工作,加快处理。
  • 高容错性:自动将失败的任务重新分配。
Hadoop的组成
  • Hadoop1.0版本的组成:Common(辅助工具),HDFS(数据存储),MapReduce(计算+资源调度)
  • Hadoop2.0版本的组成:Common(辅助工具),HDFS(数据存储),MapReduce(计算),Yarn(资源调度)

可以看出Hadoop2.0版本比1.0多出了一个Yarn组件来分担了MapReduce的资源调度工作。

1.HDFS架构概述

NameNode:存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DateNode等。

SecondaryNameNode:用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。

DateNode:在本地文件系统存储文件块数据,以及块数据的校验和。

2.YARN架构概述

client:客户端,发送作业请求。(这个可以说是不算)

  • Resource Manager:处理客户端请求,监控NodeManager,启动或监控ApplicationMaster,资源的分配与调度。

  • NodeManager:管理单个节点上的资源,处理ResourceManager的命令,处理ApplicationMaster的命令。

  • ApplicationMaster:负责数据的切分,为应用程序申请资源并分配给内部的任务,任务的监控和容错。

  • Container:YARN中的资源抽象,封装某个节点上的资源,如内存,cpu,磁盘,网络等等。(虚拟化容器)

    相关网络图片如下:

    在这里插入图片描述

3.MapReduce架构概述

MapReduce分成:map和reduce。

  • map:并行处理输入数据。
  • reduce:处理map结果并进行汇总。

4.搭建Hadoop运行环境

4.1安装JDK

本地上传JDK压缩包到虚拟机上,并解压。然后配置环境变量。

4.2安装hadoop-2.7.3

本地上传hadoop-2.7.3压缩包到虚拟机上,并解压。然后配置环境变量。

4.3了解目录结构

bin              ---存放操作命令,hdfs/hadoop 在这里
etc/hadoop       ---所有配置文件
include          ---.h或.hh的头文件
lib              ---本地库(native 库,一些.so)
libexec          ---各个服务对应的shell配置文件所在的目录。配置日志输出目录、启动参数等基本信息。
sbin             ---Hadoop管理脚本所在目录,主要包含HDFS和YARN中各类服务启动/关闭的脚本。
share            ---Hadoop各个模块编译后的Jar包所在目录,这个目录中也包含了Hadoop文档。
share/doc        ---文档
share/hadoop     ---所有依赖的jar架包

4.4.Hadoop的安装模式

Hadoop安装模式分三种:单机模式,伪分布式模式,完全分布式模式。

4.4.1单机模式的配置

Hadoop 单机模式没有 HDFS,只能测试 MapReduce 程序。MapReduce 处理的是本地 Linux 的文件数据。因为HDFS是分布式文件系统,单机模式自然没有。

以下内容来自官方文档:https://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/SingleCluster.html,为了方便阅读,本人做了核心内容的提取和翻译。

Supported Platforms(支持的平台)

支持GNU/Linux和Windows系统。

Required Software(需要安装的软件)

JDK必须安装,如果你需要使用管理远程Hadoop守护进程的Hadoop脚本,就需要安装ssh.

Installing Software(安装软件)

例子适合Ubuntu Linux系统

$ sudo apt-get install ssh
$ sudo apt-get install rsync
下载Hadoop并配置环境变量

这步是安装Hadoop并配置环境变量。(跟JDK安装步骤一样,我就不重复了)

准备开启Hadoop

开启Hadoop单机模式之前,先配置一下脚本中的JKD路径,告知Hadoop环境变量脚本JDK的路径。步骤是:编辑etc/hadoop/hadoop-env.sh路径下的脚本文件,找到

# set to the root of your Java installation
export JAVA_HOME=/usr/java/latest       #这里修改成自己的Java路径

编辑完成后,到Hadoop中的bin目录下启动Hadoop脚本(前面说过bin目录下是操作命令)

bin/hadoop           #在Hadoop的根目录下运行此命令
小实验

先在Hadoop的根目录下创建目录input,然后拷贝etc/hadoop下的.xml文件到input下,然后使用mapreduce的jar包去统计符合要求的字符串(统计那些.xml文件中的字符串)。

$ mkdir input   
$ cp etc/hadoop/*.xml input     
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
$ cat output/*

其中’dfs[a-z.]+'为正则表达式。这里我解析一下,这里的input目录为输入文件的根目录,这里是统计标准文件中符合正则表达式的字符串个数,前面说过share/hadoop里面存的是jar包,而mapreduce/hadoop-mapreduce-examples-2.7.3.jar是mapreduce用来试验的例子jar包,这jar包功能是统计输入文件的字符串个数,这个只是用来示范的官方案例。

自己写个例子去试验官方的提供wordcount jar包
#第一步在input文件夹中创建txt文件(然后随便写点单词进去)
vim myfile.txt
#然后运行jar包(在Hadoop根目录下运行)
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount  input/myfile.txt output/mywordcount01
#然后到output/mywordcount01目录下运行ls,会发现两个文件。
cd output/mywordcount01
#success文件是成功的标记(空文件),另一个文件是统计的数量的结果
cat *     #查看所有文件信息(查看统计结果)
4.4.2伪分布式模式的配置

伪分布式是安装在一台电脑上的,只是模仿集群的方式进行配置,不是真正意义上的分布式。本质上还是一台电脑,只不过是在一台电脑中模仿完全分布式进行配置。安装 Hadoop 伪分布式模式,总共有 5 个文件需配置,它们分别是 hadoop-env.sh、core-site.xml、 hdfs-site.xml、mapred-site.xml、yarn-site.xml。

配置文件hadoop-env.sh和mapred-env.sh

步骤跟单机模式一样

vim etc/hadoop/hadoop-env.sh
# set to the root of your Java installation
export JAVA_HOME=/usr/java/latest       #这里修改成自己的Java路径


#---------------------------------------------------
#同理改Javahome
vim etc/hadoop/mapred-env.sh
export JAVA_HOME=/usr/java/latest       #这里修改成自己的Java路径
配置core-site.xml

文件在etc/hadoop/core-site.xml

<configuration>
	<!--配置NameNode地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <!--Hadoop运行时产生文件的存储目录,根据实践情况,一般放在hadoop下-->
    <property> 
    	<name>hadoop.tmp.dir</name> 
    	<value>/home/hadoop/hadoop/tmp</value> 
    </property>
</configuration>
配置hdfs-site.xml

文件在etc/hadoop/hdfs-site.xml

<configuration>
	<!--配置副本数,默认3-->
    <property>
        <name>dfs.replication</name>
        <value>1</value>            
    </property>
</configuration>
配置mapred-site.xml

这个是mapreduce的部分的配置,文件还是在etc/hadoop下

#复制mapred-site.xml.template,生成 mapred-site.xml。
cp mapred-site.xml.template mapred-site.xml
#编辑mapred-site.xml,并添加以下内容
<!-- 指定mapreduce运行在yarn上,默认值local,运行在本地上 -->
<configuration> 
    <property> 
        <name>mapreduce.framework.name</name> 
        <value>yarn</value> 
    </property> 
</configuration>

如果要开启历史服务器格外添加如下配置信息:

<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop101:19888</value>
</property>
配置yarn-site.xml

文件一样在etc/hadoop下

<configuration> 
    <property> 
    	<!-- 指定YARN中的ResourceManager的地址 -->
        <name>yarn.resourcemanager.hostname</name> 
        <value>node1</value> 
    <!-- 以上主机名或IP 地址按实际情况修改 --> 
    </property> 
    <!-- reduce获取数据方式 -->
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property> 
</configuration>
格式化NameNode

配置完就可以格式化HDFS,格式一次就行了,格式化清除NameNode配置。

格式化NameNode会产生新的集群id,如果进行多次格式可能会导致NameNode和DataNode的集群ID不一致,导致datanode的消失。

如果需要多次格式化的话,请把Hadoop运行时产生文件的存储目录(保存了NameNode和DataNode的集群ID等信息)的文件夹和log日志删掉再格式化。这样能保证NameNode和DataNode获得新的一致的集群ID。Hadoop运行时产生文件的存储目录是在上面配置core-site.xml时的路径。如果没有配置默认是在系统跟根目录下的/tmp/hadoop文件夹下面

hdfs namenode -format
#多次格式化请删除Hadoop运行时产生文件夹和log文件,以防NameNode格式化后,导致NameNode和DataNode集群号不一致。
启动Hadoop
start-dfs.sh

也可以使用以下方法逐个启动,如果在配置Hadoop环境变量时有配置sbin的路径,就不用加sbin,这种方式是以守护进程的方式进行启动

sbin/hadoop-daemon.sh start modelname(要启动的模块)
验证启动

输入下面命令查看启动结果,如果没打印出已经启动的hadoop组件,应该到相应主机去找对应的 log 查看原因,log 存放在 ${HADOOP_HOME}/logs 目录下,或者刷新一下主机根目录下的/etc/profile文件。

jps
在web上访问HDFS
http://主机名:50070
http://主机IP:50070
网页访问HDFS的概述

Overview:概述集群的启动时间,版本号,集群ID等等信息,还有集群的容量和已经使用的容量。是集群的总体信息的概述。

Datanodes:节点上信息的概述。

Snapshot: 快照

Startup Progress:一些进程信息。

utilities:文件目录,在HDFS上创建的文件都会在这里显示。还能看到文件的块ID。

测试wordcount

跟单机那个测试架包一样,不过现在输入的路径不是本地路径了,是HDFS上的文件路径。

主要首先要在HDFS上上传文件input/myfile.txt,这里已经不是本地路径了,这里已变成了HDFS上的路径。

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input/myfile.txt output/mywordcount01

观看结果可以直接从web端查看,也可以使用命令进行查看

hadoop dfs -cat output/mywordcount01/*
在web上访问YARN
http://主机名:8088
http://主机IP:8088
4.4.3.完全分布式的配置
准备工作

准备3台虚拟机或者3台服务器,因为我们需要配置的是完全分布式。

如果使用本地虚拟机,所以通过克隆虚拟机来启动3台虚拟机。

我们还需要确定Hadoop组件的位置。

HDFS:NameNode,SecondaryNameNode,DateNode.

YARN:ResourceManager,NodeManager.

NameNode,SecondaryNameNode和ResourceManager尽量放在不同的主机上,这样虚拟机运行压力不会那么大,并且也可以防止一个虚拟机挂了这三个主节点同时收到影响。这些组件的位置我们是通过配置文件来确定定位的。前面伪分布也知道了那些文件是确定位置的。

这些搞定好了以后,我们还需要配置主机名,这里说一下,配置主机名的方法。

$ sudo vi /etc/hostname
Hadoop1      #在文本中添加自己的主机名(根据实际自己定)
//重启生效
$ sudo reboot         

其他几台机子也一样。还要修改一下/etc/hosts 文件。这样我们就可以通过主机名来代替IP地址了。

$ sudo vi /etc/hosts
#根据实际自己定,格式是  IP 主机名
192.168.30.131 Hadoop1 
192.168.30.132 Hadoop2 
192.168.30.133 Hadoop3

为了方便集群的分发,我们需要一个集群分发脚本。这里给个网上找的,基本集群分发脚本都一样。脚本内容如下:

#!/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

我们可以通过脚本xsync来实现文件的同步发放,发放个数在循环处修改,请根据自己实现修改。

这里再搞个免密登陆要不然整天输入密码有够你烦的。

$ ssh-keygen -t rsa         #生成密钥
$ ls ~/.ssh				#检查密钥
#复制公钥到相应主机
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop1 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop2 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop3
#验证一下(能登陆就行了,不必每个验证)
$ ssh hadoop1 
$ ssh hadoop2 
$ ssh hadoop3

准备工作准备完了就可以配置相应的文件了

配置hadoop-env.sh,YARN-env.sh,mapred-env.sh

跟前面的一样写上JAVM_HOME的地址,凡是xxx-env.sh,都配置JAVA_HOME,

配置core-site.xml

文件在etc/hadoop/core-site.xml,这个文件配置的是HDFS的NameNode地址

<configuration>
	<!--配置NameNode地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://Hadoop1:9000</value>
    </property>
    <!--Hadoop运行时产生文件的存储目录,根据实践情况,一般放在hadoop下-->
    <property> 
    	<name>hadoop.tmp.dir</name> 
    	<value>/home/hadoop/hadoop/tmp</value> 
    </property>
</configuration>
配置hdfs-site.xml

文件在etc/hadoop/hdfs-site.xml,这个配置副本数和SecondaryNameNode的位置

<configuration>
	<!--配置副本数,默认3-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>            
    </property>
    <property>
    	<name>dfs.namenode.secondary.http-address</name>
    	<value>hadoop2:50090</value> 
    </property>
</configuration>
配置mapred-site.xml

这个是mapreduce的部分的配置,文件还是在etc/hadoop下。

#复制mapred-site.xml.template,生成 mapred-site.xml。
cp mapred-site.xml.template mapred-site.xml
#编辑mapred-site.xml,并添加以下内容

然后进行编辑

<!-- 指定mapreduce运行在yarn上,默认值local,运行在本地上 -->
<configuration> 
    <property> 
        <name>mapreduce.framework.name</name> 
        <value>yarn</value> 
    </property> 
</configuration>
配置yarn-site.xml

文件一样在etc/hadoop下,这个文件配置的是YARN中的ResourceManager的地址和一些其他的配置

<configuration> 
    <property> 
    	<!-- 指定YARN中的ResourceManager的地址 -->
        <name>yarn.resourcemanager.hostname</name> 
        <value>Hadoop2</value> 
    <!-- 以上主机名或IP 地址按实际情况修改 --> 
    </property> 
    <!-- reduce获取数据方式 -->
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property> 
</configuration>
集群分发脚本

我们通过前面准备的脚本进行集群的分发,把配置文件同步到每个节点上。这样我们就可以避免,每个节点一个一个自己进行配置了。

$xsync +Hadoop文件夹的路径
格式化NameNode

格式化之前先把日志和数据清除完,清除NameNode主机的就行了。

hdfs namenode -format
启动集群

启动集群需要批量操作,这时我们需要配置slaves文件,来进行集群启动的配置。文件位置在etc/hadoop/下。并在文件中添加以下内容:

hadoop1
hadoop2
hadoop3

需要注意的是:只能是每行一个主机名(IP),并且不能有其他字符(包括空格,包括空行)。否则会报错。

配置好文件后,通过以下命令进行集群启动,并且在启动yarn时,必须在resourcemanager下启动。

$start-dfs.sh
$start-yarn.sh 

还有一个全部启动命令

$start-all.sh
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值