Hadoop伪分布安装

Hadoop伪分布安装


文章已移至: http://www.codeci.cn

hadoop框架

Hadoop Common:

公共模块

Hadoop Distributed File System (HDFS™):

分布式文件系统
主从架构
	主节点:NameNode
	    管理存储文件的元数据:
 	    文件的名称、文件存储路径、block、副本数
	从节点:DataNode
		真正的存储文件数据,blocks

Hadoop YARN:

一种分布式集群资源管理和任务调度资源管理框架
主节点:ResourceManager
    管理整个集群的资源(内存、CPUCore)接收Client提交的应用(比如提交运行的MapReduce程序),分配资源
从节点:NodeManagers
    管理每台机器的资源,接收RM发送的请求,运行Task

Hadoop MapReduce:

并行处理框架(分布式处理海量数据)

Hadoop伪分布安装_第1张图片

任务监控

提交任务后由JobTracker协调,先执行Map阶段(图中M1,M2和M3),然后执行Reduce阶段(图中R1和R2)。
Map阶段和Reduce阶段动作都受到TaskTracker监控,并运行在独立于TaskTracker的Java虚拟机中。

输入

输入通过InputFormat实现:
InputSplit:对数据进行划分(图中的splite1到splite5,就是划分以后的结果)
RecordReader:从输入中生成(key,value)对(map()方法处理的就是(key,value)对格式)

Map phase

  • Map():
自定义业务逻辑和输出(key,value)对的类型,map操作通过context.collect(最终通过OutputCollector.collect)将结果写到context中。
  • shuffer:
从map()函数输出处理结果数据开始, 一直到reduce()函数开始数据。
内存是一个 环形缓冲区,默认大小为100MB,当达到80%的时候,需要将数据spill到本地磁盘中。
(1)自定义(可优化部分:Combiner):
目的:
1.减少MapTask向本地磁盘写的数据量,同事也减少了ReduceTask拉取时读取数据的量
2.减少了ReduceTask拉取数据时,网络IO流。
流程:
在Mapper输出它的时,键值对不会被马上写到输出里,他们会被收集在list里(一个key值一个list),当写入一定数量的键值对时,这部分缓冲会被Combiner中进行合并,然后再输出到Partitioner中(图中M1的黄颜色部分对应着Combiner和Partitioner)。并不是所有的MapReduce都可以设置的,比如求平均值就不可以。
(2)分区(Partitioner):
在内存中进行分区, 每个分区的数据 给一个redeuceTask处理
(3)排序(sort):
在spill写入之前,会先进行二次排序:快速排序算法
1.数据所属的partition进行排序
2.每个partition中的数据再按key来排序。
partition的目的是将记录划分到不同的Reducer上去,以期望能够达到负载均衡,以后的Reducer就会根据partition来读取自己对应的数据。
(4)溢写(spill):
达到80%,内存数据溢写到磁盘上
(5)自定义(可优化部分:Compress):
目的:
1.减少本地磁盘IO读写
2.减少网络IO传输
对MapTask输出的结果数据进行压缩,消耗电脑CPU资源。
通常压缩算法:
1.google开源算法:snappy
2.lz4
(6)合并成文件:
反复操作,直到mapTask输出结束,此时本地会有多个spill文件,将所有的spil文件进行合并和排序:归并排序算法。最终合并完成以后,形成一个文件(分区的、排序的)

Reduce phase

  • shuffer:
(1)copy:
ReduceTask将会接收到AppMaster指令,到MapTask运行的主机的本地磁盘中拉取要处理的分区数据。Map端进行partition的时候,实际上就相当于指定了每个Reducer要处理的数据(partition就对应了Reducer)
每个Reducer会处理一个或者多个partition,拉取所有MapTask上属于自己要处理的数据
首先放在内存中,达到阀值,进行排序,spill(类似map端)
(2)sort:
当所有的拉取完成以后,合并所有的文件,并且文件进行排序:归并排序算法。
  • reduce():
Reduce阶段,上面通过处理后得到的(key,list(value1,value2...valuen))会送到Reducer.reduce方法中处理。

输出

输出的结果通过OutputFormat,输出到DFS中。


环境配置

创建普通用户和设置密码

新建用户:# useradd eclound
修改密码:# passwd eclound

创建普通用户的root权限

切换用户
切换到普通用户:
# su
切换到root用户:
$ su eclound
给/etc/sudoers赋予写的权限:
# chmod u+w /etc/sudoers
编辑/etc/sudoers文件
# vim /etc/sudoers
在文件的首行加入:
eclound ALL=(root)NOPASSWD:ALL
收回/etc/sudoers写的权限:
# chmod u-w /etc/sudoers
查看防火墙状态:
$ sudo service iptables status

###更改ip地址:
即时生效:# ifconfig eth0 192.168.133.130 netmask 255.255.255.0
启动生效:# sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0

更改主机名:

即时生效:# hostname bigdata-hadoop.eclound.com
启动生效:# vim /etc/sysconfig/network

更改映射

主机名 -> /etc/hosts文件(域名解析) -> 找到ip地址

  • Linux系统(虚拟机):

#vim /etc/hosts
192.168.133.130 bigdata-hadoop.eclound.com bigdata-eclound
第一部份:IP地址
第二部份:主机名或域名
第三部份:主机名别名;

  • Windows系统(本机):

编辑hosts文件
C:\Windows\System32\drivers\etc\hosts
192.168.133.130 bigdata-hadoop.eclound.com

关闭防火墙和禁用SELINUX

永久性服务开启和关闭管理命令:# chkconfig 服务名称 on|off
范例:
永久性关闭防火墙:
$ sudo chkconfig iptables off
查看服务是否随着系统的启动而开启或者关闭:
$ sudo chkconfig --list|grep iptables

禁用SELINUX

$ sudo vim /etc/sysconfig/selinux
更改selinux的状态:

SELINUX=disabled

卸载自带JDK

  • 查看自带java版本:

$ java -version

  • 查看具体信息:

$ sudo rpm -qa|grep java

  • 卸载(可以卸载多个):

$ sudo rpm -e --nodeps ... ... ...
$ sudo rpm -e --nodeps java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64

新建安装目录

$ sudo mkdir /opt/modules
$ sudo mkdir /opt/softwares
为了方便起见,目录新建在root根目录下,需要更改权限

  • 查看权限:

    $ ll /opt/modules
    $ ll /opt/softwares

  • 更改权限:

    $ sudo chown -R ecloud:ecloud /opt/*

文件传输

  • windows传输到虚拟机上:

    windows下载XManager(xshell,xftp),通过xshell传输文件

  • lrzsz传输文件

    Linux下载lrzsz-0.12.20-27.1.el6.x86_64.rpm,安装后
    $ rz

软件的安装rpm、tar

  • rpm包的安装

    $ rpm -ivh lrzsz-0.12.20-27.1.el6.x86_64.rpm.rpm
    (安装过程中显示正在安装的文件信息及安装进度)
    zip包的解压
    范例:
    $ unzip xx.zip -d ...
    (-d 目标地址)

  • jar包的解压

    $ tar -zxvf jdk-7u67-linux-x64.tar.gz -C /opt/modules/
    $ tar -zxvf hadoop-2.6.0-cdh5.7.6.tar.gz -C /opt/modules/
    (-C 目标地址)

  • 设置系统全局环境变量
    $ sudo vim /etc/profile
    export JAVA_HOME=/opt/modules/jdk-7u67-linux-x64/
    export PATH=${PATH}{JAVA_HOME}/bin
    export HADOOP_HOME=/opt/modules/hadoop-2.6.0-cdh-5.7.6


安装部署

修改配置文件

$ cd ${HADOOP_HOME}/etc/hadoop

  • a. Hadoop Common

     hadoop-env.sh  
     core-site.xml
    
  • b. HDFS

     hdfs-site.xml
     salves
    
  • c. YARN

     yarn-env.sh
     yarn-site.xml
    
  • d. MapReduce

     mapred-env.sh
     mapred-site.xml	 
     拷贝 mapred-site.xml.template
    

注意:
HADOOP框架JAR包存放在${HADOOP_HOME}/share/hadoop


配置Hadoop Common

  • 配置hadoop-env.sh文件
    $ vim hadoop-env.sh
    $ vim yarn-env.sh
    $ vim mapred-env.sh
    export JAVA_HOME=/opt/modules/jdk1.7.0_67

  • 配置core-site.xml文件
    $ vim core-site.xml
    指定文件系统为HDFS及NameNode主节点所运行的机器和端口号

<property>
	<name>
		fs.defaultFS
	name>
	<value>
		hdfs://bigdata-hadoop.eclound.com:8020
	value>
property>

指定HDFS文件系统的本地的临时目录,默认值为当前系统的/tmp

<property>
    <name>
	    hadoop.tmp.dir
    name>
    <value>
		/opt/modules/hadoop-2.7.3/data/tmpData
	value>
property>

创建对应的目录
$ cd ${HADOOP_HOME}/
$ mkdir -p data/tmpData


配置HDFS

  • 配置hdfs-site.xml文件
    $ vim hdfs-site.xml
    HDFS文件系统存储文件,将文件划分为一块一块的方式进行存储,称为block,每个block的大小为128MB(此版本的默认大小),并且每个block有三个副本,存储在不同的dataNode上,此处是伪分布式一台机器,设置副本为1即可。 (实际情况根据需求设置block副本数)
<property>
    <name>dfs.replicationname>
	<value>1property>
  • 配置slaves文件
    指明DataNodes节点运行的机器
    $ vim slaves
bigdata-hadoop.eclound.com
  • 启动HDFS服务
    a. 格式文件系统(第一次启动需要格式化)
    $ bin/hdfs namenode -format
    b. 启动服务
    NameNode:
    $ sbin/hadoop-daemon.sh start namenode
    DataNode:
    $ sbin/hadoop-daemon.sh start datanode
    c. 验证
    方式一:
    $ jps
    2916 DataNode
    2866 NameNode
    方式二:
    WEB UI监控页面:
    http://namenode-address:50070

  • 测试HDFS
    创建目录
    $ bin/hdfs dfs -mkdir -p /conf/tmp
    例举目录下文件
    $ bin/hdfs dfs -ls -R /
    上传文件
    $ bin/hdfs dfs -put etc/hadoop/core-site.xml /conf/tmp
    读取HDFS上小文件内容
    $ bin/hdfs dfs -text /conf/tmp/core-site.xml
    下载HDFS上文件
    $ bin/hdfs dfs -get /conf/tmp/core-site.xml get-site.xml
    删除文件
    $ bin/hdfs dfs -rm /conf/tmp/core-site.xml


配置YARN

  • 配置yarn-site.xml文件
    $ vim yarn-site.xml

指定ResourceManager运行的主机

<property>
	<name>
	       yarn.resourcemanager.hostname
	name>
	<value>
		bigdata-hadoop.eclound.com
	value>
property>

配置nodemanager所属的shuffle服务,运行MapReduce需要

<property>
	<name>
		yarn.nodemanager.aux-services
	name>
	<value>
		mapreduce_shuffle
	value>
property>
  • 启动YARN的服务
    主节点:
    $ sbin/yarn-daemon.sh start resourcemanager
    从节点:
    $ sbin/yarn-daemon.sh start nodemanager

  • 验证
    WEB UI 界面:
    http://resourcemanager-address:8088/


配置MRJobHistory[ 历史服务器 ]

  • 配置mapred-site.xml文件
<property>
	<name>mapreduce.framework.name name>
	<value>yarnvalue>
property>
<property>
	<name>
		mapreduce.jobhistory.address
	name>
	<value>
		bigdata-hadoop.eclound.com:10020
	value>
property>
<property>
	<name>
		mapreduce.jobhistory.webapp.address
	name>
	<value>
		bigdata-hadoop.eclound.com:19888
	value>
property>
  • 启动服务
    $ sbin/mr-jobhistory-daemon.sh start historyserver
  • 验证:
    WEB UI 界面:
    http://mr-job-history-address:19888/

配置日志聚集功能

当我们去查看已经运行完成的MapReduce任务的监控信息的时候,出现如下错误:Aggregation is not enabled
默认情况下,我们运行MR任务完成以后,它的AppMaster和所有的Task日志实际所运行的NodeManager节点目录
Aggregation:
表示的是将日志信息放到HDFS文件系统上。

  • 配置yarn-site.xml文件
<property>
        <name>yarn.log-aggregation-enablename>
        <value>truevalue>
property>
<property>
        <name>
			yarn.log-aggregation.retain-seconds
		name>
        <value>
	        604800
		value>
property>
<property>
		<name>
			yarn.log-aggregation.retain-check-interval-seconds
	    name>
        <value>
	        86400
		value>
property>
  • 重启服务
    YARN 服务全部重启
    MRJobHistoryServer 服务也要重启

测试运行MapReduce

$ bin/yarn xxx.jar xx.class input output

你可能感兴趣的:(bigdata)