Hadoop体系结构

Hadoop体系结构

★ Hadoop版本

Apache官方版本

Cloudera

Yahoo内部版本

★ 两大核心

HDFS 和 MapReduce

HDFS是Hadoop File System   Hadoop文件系统   它是一个分布式的文件系统

MapReduce  并行的计算框架   数据来源于HDFS

★ HDFS的架构

它是一个主从结构的

主结点:NameNode,且只有一个

从结点:DataNode,可以有多个

 

▲ NameNode功能

接收用户的操作请求

维护文件系统的目录结构

维护文件与block之间的关系,HDFS中的文件是分割成block来保存的。

还要维护block与DataNode之间的关系

▲ DataNode功能

存储文件

存储的是block块,保存在DataNode的磁盘上

为保证数据安全,文件有多个副本,保存在不同的DataNode中

★ MapRreduce的架构

也是一个主从结构

主结点:JobTracker

从结点:TaskTracker

 

▲ JobTracker功能

接收客户提交的计算任务

把任务分配给TaskTracker执行

监控TaskTracker的执行情况

 

▲ TaskTracker功能

执行JobTracker分配给的任务

★ Hadoop的特点

扩容能力高:可以可靠地存储和处理千兆PB数据

成本低:可以通过普通机器组成的服务器集群来并行计算,从而达到目的

高效率:通过分发数据,可以在多个节点上并行parallel地处理数据

可靠性:依托的是Hadoop的并行机制,可以多个副本

 

★ Hadoop集群的物理分布

物理分布图如下所示,通过交换机连接

一个主节点,多个从节点。

 

★ 单节点的物理结构

NameNode DataNode  JobTracker  TaskTracker SecondaryNameNode这些进程是运行在虚拟机JVM上的。

★ Hadoop的部署方式

▲本地模式

略。

▲伪分布模式

Hadop的进程(NameNodeDataNode,JobTracker,TaskTracker,SecondNameNode)运行在一台物理机器上。

▲集群模式

不同的进程运行在不同的物理机器上。

 

★伪分布模式部署

▲ 软件准备

         1. 安装虚拟机,可以用vmware或virtualbox等虚拟机软件

         2.安装linux操作系统,及对系统的一些设置,如SSH  IP  等

         3.安装jdk

         4.安装Hadoop

PS:

※虚拟机的网络配置,配置Host-only连接方式,找一个网段,组建一个单独的网络。安装的虚拟机中的机器的IP设置成单独的网段的IP,即可。

※如果网络配置的是桥接,则虚拟机与物理机的IP地址要在同一个网段,否则不能正常访问。

▲ 关闭防火墙

关闭:service iptables stop

验证:service iptables status

 

关闭防火墙自动运行

关闭:chkconfig iptables off

验证:chkconfig --list | grep iptables

 

▲ 设置ip地址

修改配置文件: vi /etc/sysconfig/network-scripts/ifcfg-eth0

配置完执行命令:service network restart

验证:ifconfig   查看ip配置

 

▲ 修改主机名hostname

1.hostname hadooptest     #只对当前会话生效

2.vi /etc/sysconfig/network     #修改主机名  hostname后的名字为要设置的主机名

 

▲ ip地址与hostname的绑定

vi /etc/hosts    #修改映射文件

▲ SSH免密码登录

执行命令:ssh-keygen -t rsa

创建公钥id_rsa.pub和私钥id_rsa

 

添加公钥到authorized_keys文件中

cp ~/.ssh/id_rsa.pub  ~/.ssh/id_rsa/authorized_keys

 

ps:known_hosts文件中保存的是可以ssh免密码登录到的地址

当ssh localhost的时候,会给known_hosts文件中添加一条记录,该条记录,记录的就是可以免密码登录的hostname或ip地址。

 

▲ JDK安装

上传jdk-6u24-linux-i586.bin 如果是64位的linux系统,则选择对应的安装文件

chmod a+x jdk-6u24-linux-i586.bin    #设置该bin文件的执行权限

./ jdk-6u24-linux-i586.bin

设置环境变量JAVA_HOME    #在/etc/profile文件中配置环境变量

source /etc/profile

验证命令:java -version

▲ hadoop安装

上传haoop压缩包hadoop-1.1.2.tar.gz

在/etc/profile文件中配置HADOOP_HOME环境变量

 

source /etc/profile

 

配置$HADOOP_HOME/conf/目录下的四个配置文件,如下所示:

1. hadoop-env.sh

# The java implementation to use.  Required.

export JAVA_HOME=/usr/local/jdk1.6

2. core-site.xml

<configuration>

       <property>

               <name>fs.default.name</name>

               <value>hdfs://hadooptest:9000</value>

       </property>

       <property>

               <name>hadoop.tmp.dir</name>

               <value>/usr/local/hadoop1/tmp</value>

       </property>

</configuration>

3. hdfs-site.xml

<configuration>

       <property>

               <name>dfs.replication</name>

                <value>2</value>

       </property>

       <property>

               <name>dfs.permissions</name>

               <value>false</value>

       </property>

</configuration>

4. mapred-site.xml

<configuration>

       <property>

               <name>mapred.job.tracker</name>

               <value>hadooptest:9001</value>

       </property>

</configuration>

 

配置完成后格式化文件系统,执行如下命令

hadoop namenode -format

执行完成后的结果:

         [root@hadooptesthadoop1]# cd tmp

         [root@hadooptesttmp]# pwd

         /usr/local/hadoop1/tmp

         [root@hadooptesttmp]# ll

         total8

         drwxr-xr-x.5 root root 4096 Jul 15 18:32 dfs

         drwxr-xr-x.3 root root 4096 Jul 15 18:32 mapred

在上述配置文件core-site.xml文件中的配置文件中hadoop.tmp.dir指定的目录下多出了两个文件夹,分别是dfs和mapred,用来保存Hadoop运行时的一些临时文件。

 

启动Hadoop

执行命令:start-all.sh

 

验证启动是否成功:

执行命令:jps

如果出现如下五个进程,则表示hadoop启动成功。

[root@hadooptest logs]# jps

4798 TaskTracker

5100 Jps

4597 SecondaryNameNode

4362 NameNode

4680 JobTracker

4472 DataNode

 

如果启动失败,可以参考下面的日志文件中的报错信息。

 

▲ 日志文件

保存路径:/usr/local/hadoop1/logs

         hadoop-root-datanode-hadooptest.log

         hadoop-root-jobtracker-hadooptest.log

         hadoop-root-namenode-hadooptest.log

         hadoop-root-secondarynamenode-hadooptest.log

         hadoop-root-tasktracker-hadooptest.log

以上五个日志文件是运行时的日志文件,分类保存日志信息。

 

▲ Hadoop常用端口

50030  可以查看正在运行的job等  jobtracker.jsp

Hadoop Map/Reduce Administration

50070  查看HDFS文件系统的健康状况   dfshealth.jsp

以上两个是常用的端口,其它略。

 

 

 

★ Hadoop的配置文件

Hadoop的核心配置包括如下:core-site.xml    hadoop-env.xml   hdfs-site.xml  mapred-site.xml  master  slave 

▲ core-site.xml

core-site.xml为Hadoop的核心属性文件,参数为Hadoop的核心功能,独立于HDFS和MapReduce。

 

 

 

 

 

 

 

 

 

 

 

 

 


 

参数

含义

fs.default.name

设置Hadoop  namenode的hostname及port,

预设是Standalone mode

hadoop.tmp.dir

默认值/tmp/hadoop-${user.name}

在tmp下根据username生成不同的目录

fs.checkpoint.dir

默认值${hadoop.tmp.dir}/dfs/namesecondary

Sencondary NameNode 镜像存储目录

fs.checkpoint.period

默认值: 3600(秒)

控制 secondary namenode 的 checkpoint 时间间隔。如果距离上次 checkpoint 的时间大于这个参数的设定,就会触发 checkpoint。secondary namenode 會把 namenode 的 fsimage 和 editlog 做 snapshot。如果存取 Hadoop 的次数频繁或为了減少重起 namenode 的 downtime,可以把這个值设小一点。

fs.checkpoint.size

默认值67108864(byte)

如果 Hadoop 非常的忙碌,editlog 可能会在短时间內变的很大,fs.checkpoint.period 的设定不见得可以完全预测这个状况,所以保险的做法会多设定这个值,以保证当数据大到超过 fs.checkpoint.size 的值也会触发 checkpoint。

io.file.buffer.size

默认值 4096

這是读写 sequence file 的 buffer size, 可减少 I/O 次数。在大型的 Hadoop cluster,建议可设定为 65536 到 131072。

ipc.client.connection.maxidletime

默认值 10000(毫秒)

设定 Hadoop client 连接時最大的闲置,默认是是 10 秒。如果 Hadoop cluster 的网络联系不稳,可以把这个值设到 60000(60秒)

ipc.server.tcpnodelay

默认值 false

在 Hadoop server 是否启动 Nagle’s 算法。设 true 会 disable 这个演算法,关掉会减少延迟,但是会增加小数据包的传输。server site 不太需要这定这个值。

hadoop.security.authorization

默认值 false

是不是要开启 账号验证机制,开启之后 Hadoop 在执行任何动作之前都会先确认是否有权限。详細的权限设定会放在 hadoop-policy.xml 裡。例如要让 fenriswolf 这个 account 及 mapreduce group 可以 submit M/R jobs,要设定security.job.submission.protocol.acl

hadoop.security.authentication

默认值 simple

simple 表示沒有 authentication,Hadoop 會用 system account 及 group 來控管q权限。

fs.trash.interval

默认值 0(分)    清掉垃圾筒的时间。预设是不清, 所以在刪除文件时要自己执行

hadoop.native.lib

默认 Hadoop 会去找所有可用的 native libraries 并自动 load 进來使用

▲ hdfs-site.xml

 

参数列表

•dfs.block.size

•默认值67108864(字节)

•默认每個 block 是 64MB。如果確定存取的文件块都很大可以改為 134217728(128MB)。Client 也可自行决定要使用的 block size 而不需要更改整個 cluster 的设定。

•dfs.safemode.threshold.pct

•默认值  0.999f

•  Hadoop 启动时会进入 safemode,也就是安全模式,這时是不能写入数据的。只有当99.9% 的 blocks 达到最小的 dfs.replication.min 数量(默认是3)才会离开safe mode。在 dfs.replication.min 设的比较大或 data nodes 数量比较多时会等比较久。

 

•dfs.namenode.handler.count

•默认值 10

•设定 namenode server threads 的数量,这些 threads 會用 RPC 跟其他的 datanodes沟通。当 datanodes 数量太多时会发現很容易出現 RPC timeout,解決方法是提升网络速度或提高这个值,但要注意的是 thread 数量多也表示 namenode 消耗的内存也随着增加

•dfs.datanode.handler.count

•默认值  3

•  指定 data node 上用的 thread 数量。

 

•dfs.datanode.max.xcievers

•默认值 256

•这个值是指定 datanode 可同時处理的最大文件数量、

•dfs.datanode.du.reserved

•默认值 0

•默认值表示 data nodes 会使用整个磁盘,写满之后会导致无法再写入 M/R jobs。如果还有其他程式共用这些目录也会受到影响。建议保留至少 1073741824(1G) 的空间。

 

▲ mapred-site.xml

 

参数列表

 

•io.sort.mb

•默认值100

•缓存map中间结果的buffer大小(in MB)

•io.sort.record.percent

•默认值 0.05

•io.sort.mb中用来保存map output记录边界的百分比,其他缓存用来保存数据

•io.sort.spill.percent

•默认值0.80

•map开始做spill操作的阈值

•io.sort.factor

•默认值 10

•做merge操作时同时操作的stream数上限。

 

•min.num.spill.for.combine

•默认值3

•combiner函数运行的最小spill数

•mapred.compress.map.output

•默认值 false

•map中间结果是否采用压缩

•mapred.map.output.compression.codec

•org.apache.hadoop.io.compress.DefaultCodec

•min.num.spill.for.combine

•默认值3

•combiner函数运行的最小spill数

•mapred.compress.map.output

•默认值 false

•map中间结果是否采用压缩

•mapred.map.output.compression.codec

•org.apache.hadoop.io.compress.DefaultCodec

•mapred.reduce.parallel.copies

•默认值5

•每个reduce并行下载map结果的最大线程数

•mapred.reduce.copy.backoff

•默认值 300

•reduce下载线程最大等待时间(in sec)

•io.sort.factor

•默认值10

•org.apache.hadoop.io.compress.DefaultCodec

•mapred.job.shuffle.input.buffer.percent

•默认值0.7

•用来缓存shuffle数据的reduce task heap百分比

•mapred.job.shuffle.merge.percent

•默认值 0.66

•缓存的内存中多少百分比后开始做merge操作

•mapred.job.reduce.input.buffer.percent

•默认值0.0

•sort完成后reduce计算阶段用来缓存数据的百分比

 

 

 

★ Hadoop HA

Hadoop1.0架构的问题

单点故障

•如果NameNode或者JobTraker关掉,那么整个集群瘫痪。

•对于7×24生产环境,是具有极大的风险。

 

第二部分:常见的HA方案

•第一种是可以设置一个NFS的目录,存储fsimage和editlog,存储的是实时数据,这样当namenode挂掉后能够通过fsimage和editlog进行完全恢复。

•第二种是设置Secondary Namenode。

•问题:不能迅速的切换,需要花费一定时间恢复。

 

 

FaceBook的方案

•不改变namenode和datanode整体逻辑的基础上,在其上层开发出AvaterNode,AvatarNode的意思就是支持互相切换。

•提供一个Primary Avatar和一个Standby Avatar,通过virual IP来设置IP地址。

•Primary Avatar对外提供服务,设置了NFS目录,将FSImage和EditLog远程存储。Standby Avatar将NFS目录中的FSImage和EditLog读取过来进行同步,并且设置Standby Avatar一直处于safemode状态,不影响正常操作。这样Standby Avatar相当于一个热拷贝,获得了所有的实时数据。

 

 

 

Hadoop0.23 是如何解决的HA

 

提供2台机器做双机热备

一台为Active 节点,一台为StandBy节点

同时只有Active节点对外提供服务

源数据存储在共享存储

StandBy会时刻到共享存储拿Meta信息,以保证切换时不会丢掉数据

DataNode会向2台机器汇报自己的信息

仍需要配置Sencondary NameNode接解决Edits log变大问题

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值