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 三大发行版本:Apache,Cloudera,Hortonworks。

  • Apache:基础版(可以这么说)
  • Cloudera:商业版,在Hadoop生态系统中,规模最大、知名度最高的公司则是Cloudera。
  • Hortonworks:另一个商业发行版(听说现在和Cloudera合并了)
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,磁盘,网络等等。(虚拟化容器)

    相关网络图片如下:

    669905-20170420115227884-1056505556

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系统。

  • GNU/Linux is supported as a development and production platform. Hadoop has been demonstrated on GNU/Linux clusters with 2000 nodes.
  • Windows is also a supported platform but the followings steps are for Linux only. To set up Hadoop on Windows, see wiki page
Required Software(需要安装的软件)

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

Required software for Linux include:

  1. Java™ must be installed. Recommended Java versions are described at HadoopJavaVersions.
  2. ssh must be installed and sshd must be running to use the Hadoop scripts that manage remote Hadoop daemons.
Installing Software(安装软件)

例子适合Ubuntu Linux系统

If your cluster doesn’t have the requisite software you will need to install it.

For example on Ubuntu Linux:

  $ sudo apt-get install ssh
  $ sudo apt-get install rsync
Download(下载)

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

Prepare to Start the Hadoop Cluster

这里是设置脚本中的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的根目录下运行此命令

Unpack the downloaded Hadoop distribution. In the distribution, edit the file etc/hadoop/hadoop-env.sh to define some parameters as follows:

  # set to the root of your Java installation
  export JAVA_HOME=/usr/java/latest

Try the following command:

$ bin/hadoop
Standalone Operation(操作)

我就不继续复制官方文档了,免得文章又长又烂。

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

 $ 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用来试验的例子架包,这架包功能是统计输入文件的字符串个数,这个只是用来示范的官方案例。

自己写个例子实验官方的提供wordcount
#第一步在input文件夹中创建txt文件
mkdir 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,会发现两个文件。
#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 要启动的模块
验证启动

如果没打印出模块,应该到相应主机去找对应的 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上的文件路径。

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

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

观看结果可以直接从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>

这个其实可以不用配置,因为默认就是3个副本数。

配置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

下一章:源码编译篇.

猜你喜欢

转载自blog.csdn.net/qq_43203949/article/details/106679054
今日推荐