阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop分布式文件系统架构部署

182次阅读
没有评论

共计 12357 个字符,预计需要花费 31 分钟才能阅读完成。

Hadoop 是 Apache 开源组织的一个分布式计算开源框架,在很多大型网站上都已经得到了应用,如亚马逊、Facebook 和 Yahoo 等等。对于我来说,最近的一个使用点就是服务集成平台的日志分析。服务集成平台的日志量将会很大,而这也正好符合了分布式计算的适用场景(日志分析和索引建立就是两大应用场景)。

今天我们来实际搭建一下 Hadoop 2.2.0 版,实战环境为目前主流服务器操作系统 CentOS 5.8 系统。
一、实战环境
系统版本: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 下载地址
http://apache.claz.org/hadoop/common/hadoop-2.2.0/
Java 下载下载
http://www.Oracle.com/technetwork/java/javase/downloads/index.html

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 集群了。

相关阅读

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm

六、启动 Hadoop 并测试
在启动 hadoop 之前,我们需要做一步非常关键的步骤,需要在 namenode 上执行如下命令初始化 name 目录和数据目录。
1 cd  /data/hadoop/ ; ./bin/hadoop namenode -format

那如何算初始化成功呢,如下截图成功创建 name 目录即正常:

Hadoop 分布式文件系统架构部署

然后启动 hadoop 所有服务,如下命令:
[root@node1 hadoop]# ./sbin/start-all.sh

Hadoop 分布式文件系统架构部署
我们还可以查看相应的端口是否启动:netstat -ntpl

Hadoop 分布式文件系统架构部署

访问如下地址:http://192.168.149.128:50070/

Hadoop 分布式文件系统架构部署

访问地址:http://192.168.149.128:8088/

搭建完成后,我们简单的实际操作一下,如下图:

Hadoop 分布式文件系统架构部署
自此 hadoop 基本搭建完毕,接下来还有更深更多的东西需要去了解和学习,希望和大家一起学习,进步,分享、快乐。

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

Hadoop 是 Apache 开源组织的一个分布式计算开源框架,在很多大型网站上都已经得到了应用,如亚马逊、Facebook 和 Yahoo 等等。对于我来说,最近的一个使用点就是服务集成平台的日志分析。服务集成平台的日志量将会很大,而这也正好符合了分布式计算的适用场景(日志分析和索引建立就是两大应用场景)。

今天我们来实际搭建一下 Hadoop 2.2.0 版,实战环境为目前主流服务器操作系统 CentOS 5.8 系统。
一、实战环境
系统版本: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 下载地址
http://apache.claz.org/hadoop/common/hadoop-2.2.0/
Java 下载下载
http://www.Oracle.com/technetwork/java/javase/downloads/index.html

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 集群了。

相关阅读

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm

Nginx 对 Perl 的支持

一、Perl 的安装
1. 获取 wrapper 程序
网上很多文档、教程给的下载连接都已经失效,这里我上传一份最新的,也可留邮箱。“下载地址:http://down.51cto.com/data/1026473”,解压出来将其命名为 nginx-fcgi.pl 并放到 /usr/local/nginx 目录下。nginx-fcgi.pl 是一个用 Perl 脚本写的 wrapper 实例,所以,操作系统必须要安装 Perl 程序以及相关模块。

2. 安装相关的系统支持模块
(1) 安装 FCGI 模块
获取地址:http://search.cpan.org/CPAN/authors/id/F/FL/FLORA/FCGI-0.74.tar.gz
# tar zxvf FCGI-0.74.tar.gz
# cd FCGI-0.74
# perl Makefile.PL
# make
# make install

(2)安装 IO 模块
获取地址:http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/IO-1.25.tar.gz
# tar -xvzf IO-1.25.tar.gz
# cd IO-1.25
# perl Makefile.PL
# make
# make install

(3)安装 IO::ALL 模块
获取地址:http://www.cpan.org/authors/id/I/IN/INGY/IO-All-0.50.tar.gz
# tar -xvzf IO-All-0.50.tar.gz
# cd IO-All-0.50
# perl Makefile.PL
#make
#make install

3. 编写 nginx-fcgi 启动脚本
仅有 wrapper 文件是不够的,还需要一个脚本来创建 socket、启动 wrapper 以及将 wrapper 和 socket 绑定,下面通过一个 shell 脚本来完成这一系列工作。

#!/bin/bash
nginxroot=/usr/local/nginx
start ()
{
chownnobody.root $nginxroot/logs
echo”$nginxroot/nginx-fcgi.pl -l $nginxroot/logs/nginx-fcgi.log -pid$nginxroot/logs/nginx-fcgi.pid -S $nginxroot/logs/nginx-fcgi.sock”>>$nginxroot/nginx_fcgi.sh
chownnobody.nobody$nginxroot/nginx_fcgi.sh
chmod755$nginxroot/nginx_fcgi.sh
sudo-u nobody$nginxroot/nginx_fcgi.sh
echo”start nginx-fcgi done”
}
stop ()
{
kill$(cat$nginxroot/logs/nginx-fcgi.pid)
rm$nginxroot/logs/nginx-fcgi.pid 2>/dev/null
rm$nginxroot/logs/nginx-fcgi.sock 2>/dev/null
rm$nginxroot/nginx_fcgi.sh 2>/dev/null
echo”stopnginx-fcgi done”
}
case$1 in
stop)
stop
;;
start)
start
;;
restart)
stop
start
;;
*)
echo$”Usage: perl-cgi {start|stop|restart}”
exit1
esac

在 nginx-fcgi 中,变量 nginxroot 指定 Nginx 的安装目录,nginx-fcgi.sock 是生成的文件 sock,nobody 为运行 nginx_fcgi 进程的用户,这个用户要和运行 Nginx 的用户一致。
配置完脚本后,将此文件放到 /usr/local/nginx 目录下,接着通过如下方式管理 nginx-fcgi 进程。
#chmod 755 /usr/local/nginx/nginx-fcgi.pl
#chmod 755 /usr/local/nginx/nginx-fcgi
#/usr/local/nginx/nginx-fcgi start|stop|restart

二、为 Nginx 添加 FCGI 支持
修改 Nginx 配置文件,在 server 虚拟主机中添加如下配置:
location ~ \.cgi${
root html;
fastcgi_pass unix:/usr/local/nginx/logs/nginx-fcgi.sock;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

 

在这个 location 配置中,Nginx 与 FastCGI 的通信方式为 Unix Socket。根据经验,IP Socket 在高并发访问下比 Unix Socket 稳定,但 Unix Socket 速度要比 IP Socket 快。“$document_root”是虚拟主机的根目录,在这里是 /usr/local/nginx/html 目录。

三、测试 Nginx +Perl(FastCGI)

以上配置工作完成后,即可启动服务了。首选启动 nginx-fcgi 进程:
/usr/local/nginx/nginx-fcgistart

再启动 nginx:
/usr/local/nginx/sbin/nginx

在 /usr/local/nginx/html 目录下创建一个 123.cgi 的文件。
# disable filename globbing
set-f
echo”Content-type: text/plain;charset=iso-8859-1″
echo
echoCGI/1.0 testscript report:
echo
echoargc is $#. argv is “$*”.
echo
echoSERVER_SOFTWARE = $SERVER_SOFTWARE
echoSERVER_NAME = $SERVER_NAME
echoGATEWAY_INTERFACE = $GATEWAY_INTERFACE
echoSERVER_PROTOCOL = $SERVER_PROTOCOL
echoSERVER_PORT = $SERVER_PORT
echoREQUEST_METHOD = $REQUEST_METHOD
echoREMOTE_ADDR = $REMOTE_ADDR

接着通过浏览器访问“http://10.150.1.111/123.cgi”,如果显示与下面类似的信息,表明 Nginx+Perl 环境搭建成功:

Hadoop 分布式文件系统架构部署
问题:
1、编译 FCGI 的时候报错.
Can’t locateExtUtils/MakeMaker.pm in @INC
……
BEGIN failed–compilation aborted at Makefile.PL line 3.
解决办法:
yum install perl-ExtUtils-CBuilderperl-ExtUtils-MakeMaker

2、编译 IO-All 的时候报错:
make: Warning: File`Makefile.PL’ has modification time 3.9e+06 s in the future
安装 IO-All 的时候 make 报以上错,说明是系统时间的问题,
解决办法:/usr/sbin/ntpdatentp.api.bz

3、启动 nginx-fcgi 的时候报 PID 文件问题
ERROR PID file /usr/local/nginx/logs/nginx-fcgi.pid already exists
是权限不够
解决办法:chown nobody.root /usr/local/nginx –R

总结:各个语言各有利弊,也都有所需要的市场,现实环境会有更多的支持扩展和变换性,上面是轻量级的一个架构,还可以利用 Nginx 做负载,然后做单独的 Java 和 Perl 环境服务器,利用 Nginx 实现将不同语言的处理请求直接交给后端的环境服务器。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计12357字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中