Quantcast
Channel: CodeSection,代码区,数据库(综合) - CodeSec
Viewing all articles
Browse latest Browse all 6262

构建Hadoop+Hbase+ZooKeeper分布式存储

$
0
0

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

今天我们来实际搭建一下Hadoop 2.2.0版,实战环境为目前主流服务器操作系统CentOS 6.5系统。

一、实战环境

系统版本:CentOS 6.5 x86_64 JAVA版本:JDK-1.7.0_25 Hadoop版本:hadoop-2.2.0 192.168.172.59 namenode (充当namenode、secondary namenode和ResourceManager角色) 192.168.172.88 datanode1 (充当datanode、nodemanager角色) 192.168.172.89 datanode2 (充当datanode、nodemanager角色) 二、系统准备

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

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.1 localhost.localdomain localhost 192.168.172.59 node1 192.168.172.88 node2 192.168.172.89 node3(注* 我们需要在namenode、datanode三台服务器上都配置hosts解析)

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

在namenode 128上执行ssh-keygen,一路Enter回车即可。 然后把公钥/root/.ssh/id_rsa.pub拷贝到datanode服务器即可,拷贝方法如下: ssh-copy-id -i .ssh/id_rsa.pub root@192.168.172.88 ssh-copy-id -i .ssh/id_rsa.pub root@192.168.172.89 三、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版本,不用编译直接解压安装就可以使用了,如下:

1)解压:

tar -xzvf hadoop-2.2.0.tar.gz &&mv hadoop-2.2.0 /data/hadoop/ (注* 先在namenode服务器上都安装hadoop版本即可,datanode先不用安装,待会修改完配置后统一安装datanode)

2)配置变量:

在/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="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>fs.default.name</name> <value>hdfs://node1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/tmp/hadoop-${user.name}</value> <description>A base for other temporary directories.</description> </property> </configuration>

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

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapred.job.tracker</name> <value>node1: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="configuration.xsl"?> <configuration> <property> <name>dfs.name.dir</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 文件内容为如下:

node1

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

node2 node3

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

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

for i in `seq 88 89 ` ; do scp -r /data/hadoop/ root@192.168.172.$i:/data/ ; done

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

六、启动hadoop并测试

在启动hadoop之前,我们需要做一步非常关键的步骤,需要在namenode上执行如下命令初始化name目录和数据目录。

cd /data/hadoop/ ; ./bin/hadoop namenode -format

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


构建Hadoop+Hbase+ZooKeeper分布式存储

然后启动hadoop所有服务,如下命令:

[root@node1 hadoop]# ./sbin/start-all.sh
构建Hadoop+Hbase+ZooKeeper分布式存储

我们还可以查看相应的端口是否启动:netstat -ntpl


构建Hadoop+Hbase+ZooKeeper分布式存储

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


构建Hadoop+Hbase+ZooKeeper分布式存储

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


构建Hadoop+Hbase+ZooKeeper分布式存储

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


构建Hadoop+Hbase+ZooKeeper分布式存储

自此hadoop基本搭建完毕。

七、部署ZooKeeper服务

在node1上配置:

下载zookeeper3.4.6版本:

wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz tar -xzfzookeeper-3.4.6.tar.gz -C /export/servers/

#vim /export/servers/ zookeeper-3.4.6/conf/zoo.cfg 写入如下内容:

# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. dataDir=/export/zookeeper # the port at which the clients will connect clientPort=2181 initLimit=5 syncLimit=2 dataLogDir=/export/zookeeper/logs server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888

注意: zk 里面的 node 节点名称要一一对应哦,然后创建 zk 数据目录和日志路径:

mkdir -p /export/zookeeper/logs echo 1 >/export/zookeeper/myid

如上在node1上配置好zk后,把zk整个程序同步到另外两台node2、node3。

执行如下脚本:

for i in `seq 88 89` ; do rsync -aP--delete /export/servers/zookeeper-3.4.6/ root@192.168.172.$i:/export/servers/zookeeper-3.4.6/ ;rsync-av /export/zookeeper/ root@192.168.172.$i:/export/; done

Viewing all articles
Browse latest Browse all 6262

Trending Articles