centos hadoop 集群搭建?centos哪个版本建站好

如何构建最优化的Hadoop集群

操作系统

我们选择Linux作为操作系统。Linux有许多不同的发行版,包括Ubuntu、RedHat和CentOS等,无论选择哪一个都可以。基于支持和许可费用的考虑,我们最终选择了CentOS 5.7。最好是定制一个CentOS的映像,把那些需要的软件都预装进去,这样所有的机器可以包含相同的软件和工具,这是一个很好的做法。

根据Cloudera的建议,OS层应该采用以下设置:

文件系统

Ext3文件系统

取消atime

不要使用逻辑卷管理

利用alternatives来管理链接

使用配置管理系统(Yum、Permission、sudoers等)

减少内核交换

撤销一般用户访问这些云计算机的权限

不要使用虚拟化

至少需要以下Linux命令:

/etc/alternatives

ln、chmod、chown、chgrp、mount、umount、kill、rm、yum、mkdir

硬件要求

由于Hadoop集群中只有两种节点(Namenode/Jobtracker和Datanode/Tasktracker),因此集群内的硬件配置不要超过两种或三种。

图2- Hadoop集群服务器角色

硬件建议:

Namenode/Jobtracker:1Gb/s以太网口x2、16GB内存、4个CPU、100GB磁盘

Datanode:1Gb/s以太网口x2、8GB内存、4个CPU、多个磁盘,总容量500GB以上

实际的硬件配置可以与我们建议的配置不同,这取决于你们需要存储和处理的数据量。但我们强烈建议不要在集群中混用不同的硬件配置,以免那些较弱的机器成为系统的瓶颈。

Hadoop的机架感知

Hadoop有一个“机架感知”特性。管理员可以手工定义每个slave数据节点的机架号。为什么要做这么麻烦的事情?有两个原因:防止数据丢失和提高网络性能。

图3- Hadoop集群的机架感知

为了防止数据丢失,Hadoop会将每个数据块复制到多个机器上。想象一下,如果某个数据块的所有拷贝都在同一个机架的不同机器上,而这个机架刚好发生故障了(交换机坏了,或者电源掉了),这得有多悲剧?为了防止出现这种情况,必须要有一个人来记住所有数据节点在网络中的位置,并且用这些知识来确定——把数据的所有拷贝们放在哪些节点上才是最明智的。这个“人”就是Name Node。

另外还有一个假设,即相比不同机架间的机器,同一个机架的机器之间有着更大的带宽和更小的延时。这是因为,机架交换机的上行带宽一般都小于下行带宽。而且,机架内的延时一般也小于跨机架的延时(但也不绝对)。

机架感知的缺点则是,我们需要手工为每个数据节点设置机架号,还要不断地更新这些信息,保证它们是正确的。要是机架交换机们能够自动向Namenode提供本机架的数据节点列表,那就太棒了。

Hadoop软件的安装和配置

Hadoop集群有多种构建方式:

手工下载tar文件并复制到集群中

利用Yum仓库

利用Puppet等自动化部署工具

我们不建议采用手工方式,那只适合很小的集群(4节点以下),而且会带来很多维护和排障上的问题,因为所有的变更都需要用scp或ssh的方式手工应用到所有的节点上去。

从以下方面来看,利用Puppet等部署工具是最佳的选择:

安装

配置

维护

扩展性

监控

排障

Puppet是Unix/Linux下的一个自动化管理引擎,它能基于一个集中式的配置执行增加用户、安装软件包、更新服务器配置等管理任务。我们将主要讲解如何利用Yum和Puppet来安装Hadoop。

利用Yum/Puppet搭建Hadoop集群

要利用Puppet搭建Hadoop集群,首先要符合以下前置条件:

包含所有必需Hadoop软件的中央仓库

用于Hadoop部署的Puppet装载单(manifest)

用于Hadoop配置管理的Puppet装载单

用于集群维护的框架(主要是sh或ksh脚本),以支持集群的start/stop/restart

利用puppet构建整个服务器(包括操作系统和其它软件)

注:如果要用Yum来安装Hadoop集群,则所有服务器应该预先构建完成,包括操作系统和其它软件都应安装完毕,yum仓库也应在所有节点上设置完毕。

构建Datanode/Tasktracker

如果用Yum安装Datanode/Tasktracker,需在所有数据节点上执行以下命令:

yum install hadoop-0.20-datanode–y

yum install hadoop-0.20-tasktracker–y

换成Puppet的话,则是:

class setup_datanode{

if($is_datanode== true){

make_dfs_data_dir{$hadoop_disks:}

make_mapred_local_dir{$hadoop_disks:}

fix_hadoop_parent_dir_perm{$hadoop_disks:}

}

# fix hadoop parent dir permissions

define fix_hadoop_parent_dir_perm(){

}

# make dfs data dir

define make_dfs_data_dir(){

}

# make mapred local and system dir

define make_mapred_local_dir(){

}

}# setup_datanode

构建Namenode(及辅助Namenode)

如果用Yum安装Namenode,需在所有数据节点上执行以下命令:

yum install hadoop-0.20-namenode–y

yum install hadoop-0.20-secondarynamenode–y

换成Puppet的话,则是:

class setup_namenode{

if($is_namenode== true or$is_standby_namenode== true){

...

}

exec{"namenode-dfs-perm":

...

}

exec{"make${nfs_namenode_dir}/dfs/name":

...

}

exec{"chgrp${nfs_namenode_dir}/dfs/name":

...

}

if($standby_namenode_host!=""){

...

}

exec{"own$nfs_standby_namenode_dir":

...

}

}

#/standby_namenode_hadoop

if($standby_namenode_host!=""){

...

}

exec{"own$standby_namenode_hadoop_dir":

...

}

}

}

}

class setup_secondary_namenode{

if($is_secondarynamenode== true){

...

}

....

}

exec{"namenode-dfs-perm":

...

}

}

}

构建JobTracker

如果用Yum安装Jobtracker,需在所有数据节点上执行以下命令:

yum install hadoop-0.20-jobtracker–y

换成Puppet的话,则是使用与构建Namenode相同的装载单,唯一的区别在于,在Jobtracker机器上,会启动Jobtracker——即将该机器上的is_jobtracker设置为true。

如何部署完全分布式hadoop

安装流程

我们先来回顾上一篇我们完成的单节点的Hadoop环境配置,已经配置了一个CentOS 6.8并且完成了java运行环境的搭建,Hosts文件的配置、计算机名等诸多细节。

其实完成这一步之后我们就已经完成了Hadoop集群的搭建的一半的工作了,因为我们知道通过虚拟机搭建所搭建的好处就是直接拷贝机器。多台同步进行操作,减少分别配置的时间消耗浪费。这也是虚拟化技术所带来的优势。

下面,咱们进去分布式系统的详细操作过程。

1、首先需要在VMWare中将之前创建的单实例的计算机进行拷贝。

这里根据之前第一篇文章的规划,我们至少需要再克隆出三台计算机,作为DataNode数据节点的数据存储。之前的上一台机器作为Master主节点进行管理。

这里先来梳理一下整个Hadoop集群的物理架构图,大家有一个直接的观念和认识,上表中已经和明确了,总共需要5台服务器来使用,四台用来搭建Hadoop集群使用,另外一台(可选)作为MySQL等外围管理Hadoop集群来使用。

如何部署hadoop分布式文件系统

一、实战环境

系统版本:CentOS 5.8x86_64

JAVA版本:JDK-1.7.0_25

Hadoop版本:hadoop-2.2.0

192.168.149.128namenode(充当namenode、secondary namenode和ResourceManager角色)

192.168.149.129datanode1(充当datanode、nodemanager角色)

192.168.149.130datanode2(充当datanode、nodemanager角色)

二、系统准备

1、Hadoop可以从Apache官方网站直接下载最新版本Hadoop2.2。官方目前是提供了linux32位系统可执行文件,所以如果需要在64位系统上部署则需要单独下载src源码自行编译。(如果是真实线上环境,请下载64位hadoop版本,这样可以避免很多问题,这里我实验采用的是32位版本)

1234 Hadoop

Java

2、我们这里采用三台CnetOS服务器来搭建Hadoop集群,分别的角色如上已经注明。

第一步:我们需要在三台服务器的/etc/hosts里面设置对应的主机名如下(真实环境可以使用内网DNS解析)

[root@node1 hadoop]# cat/etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1localhost.localdomain localhost

192.168.149.128node1

192.168.149.129node2

192.168.149.130node3

(注*我们需要在namenode、datanode三台服务器上都配置hosts解析)

第二步:从namenode上无密码登陆各台datanode服务器,需要做如下配置:

在namenode 128上执行ssh-keygen,一路Enter回车即可。

然后把公钥/root/.ssh/id_rsa.pub拷贝到datanode服务器即可,拷贝方法如下:

ssh-copy-id-i.ssh/id_rsa.pub root@192.168.149.129

ssh-copy-id-i.ssh/id_rsa.pub root@192.168.149.130

三、Java安装配置

tar-xvzf jdk-7u25-linux-x64.tar.gz&&mkdir-p/usr/java/; mv/jdk1.7.0_25/usr/java/即可。

安装完毕并配置java环境变量,在/etc/profile末尾添加如下代码:

export JAVA_HOME=/usr/java/jdk1.7.0_25/

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=$JAVE_HOME/lib/dt.jar:$JAVE_HOME/lib/tools.jar:./

保存退出即可,然后执行source/etc/profile生效。在命令行执行java-version如下代表JAVA安装成功。

[root@node1~]# java-version

java version"1.7.0_25"

Java(TM) SE Runtime Environment(build 1.7.0_25-b15)

Java HotSpot(TM) 64-Bit Server VM(build 23.25-b01, mixed mode)

(注*我们需要在namenode、datanode三台服务器上都安装Java JDK版本)

四、Hadoop版本安装

官方下载的hadoop2.2.0版本,不用编译直接解压安装就可以使用了,如下:

第一步解压:

tar-xzvf hadoop-2.2.0.tar.gz&&mv hadoop-2.2.0/data/hadoop/

(注*先在namenode服务器上都安装hadoop版本即可,datanode先不用安装,待会修改完配置后统一安装datanode)

第二步配置变量:

在/etc/profile末尾继续添加如下代码,并执行source/etc/profile生效。

export HADOOP_HOME=/data/hadoop/

export PATH=$PATH:$HADOOP_HOME/bin/

export JAVA_LIBRARY_PATH=/data/hadoop/lib/native/

(注*我们需要在namenode、datanode三台服务器上都配置Hadoop相关变量)

五、配置Hadoop

在namenode上配置,我们需要修改如下几个地方:

1、修改vi/data/hadoop/etc/hadoop/core-site.xml内容为如下:

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl"href=\'#\'" Put site-specific property overrides inthisfile.-->

<configuration>

<property>

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

<value>hdfs://192.168.149.128:9000</value>

</property>

<property>

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

<value>/tmp/hadoop-${user.name}</value>

<description>A base forother temporary directories.</description>

</property>

</configuration>

2、修改vi/data/hadoop/etc/hadoop/mapred-site.xml内容为如下:

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl"href=\'#\'" Put site-specific property overrides inthisfile.-->

<configuration>

<property>

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

<value>192.168.149.128:9001</value>

</property>

</configuration>

3、修改vi/data/hadoop/etc/hadoop/hdfs-site.xml内容为如下:

<?xml version="1.0"encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl"href=\'#\'"/name>

<value>/data/hadoop/data_name1,/data/hadoop/data_name2</value>

</property>

<property>

<name>dfs.data.dir</name>

<value>/data/hadoop/data_1,/data/hadoop/data_2</value>

</property>

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

</configuration>

4、在/data/hadoop/etc/hadoop/hadoop-env.sh文件末尾追加JAV_HOME变量:

echo"export JAVA_HOME=/usr/java/jdk1.7.0_25/">>/data/hadoop/etc/hadoop/hadoop-env.sh

5、修改 vi/data/hadoop/etc/hadoop/masters文件内容为如下:

192.168.149.128

6、修改vi/data/hadoop/etc/hadoop/slaves文件内容为如下:

192.168.149.129

192.168.149.130

如上配置完毕,以上的配置具体含义在这里就不做过多的解释了,搭建的时候不明白,可以查看一下相关的官方文档。

如上namenode就基本搭建完毕,接下来我们需要部署datanode,部署datanode相对简单,执行如下操作即可。

1 fori in`seq 129130`; doscp-r/data/hadoop/ root@192.168.149.$i:/data/; done

自此整个集群基本搭建完毕,接下来就是启动hadoop集群了。

阅读剩余
THE END