欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Apache Hadoop1.1.1+Apache Oozie3.3.2搭建安装过程详解(亲测)

程序员文章站 2022-03-14 09:36:48
...

写在前面: 1.Apache版本HADOOP云计算平台环境搭建 1.1 集群环境介绍 Hadoop集群环境包含1台机器,在每台机器上运行4台虚拟机,是一个典型的主从式(Master-Slaves)结构。集群包含一个主控节点(Master)和4个从属节点(Slave)。在主从式结构中,主节点一

写在前面:

1.Apache版本HADOOP云计算平台环境搭建

1.1 集群环境介绍

Hadoop集群环境包含1台机器,在每台机器上运行4台虚拟机,是一个典型的主从式(Master-Slaves)结构。集群包含一个主控节点(Master)和4个从属节点(Slave)。在主从式结构中,主节点一般负责集群管理、任务调度和负载平衡等,从节点则执行来自主节点的计算和存储任务。

该集群环境具体的软硬件和网络配置情况见表3.1。

表3.1 集群详细软硬件和网络配置

序号

主机名

网络地址

操作系统

1

Master

192.168.137.2

Centos6.4-x64

2

Slave1

192.168.137.3

Centos6.4-x64

3

Slave2

192.168.137.4

Centos6.4-x64

1.2 Hadoop环境搭建

1.2.1 Apache Hadoop简介

Hadoop是Apache开源组织的一个分布式计算框架,可以在大量廉价硬件设备组成的集群上运行应用程序,并为应用程序提供了一组稳定可靠的接口,旨在构建一个具有高可靠性和良好扩展性的分布式系统。随着云计算技术的逐渐流行与普及,该项目被越来越多的个人和企业所运用。Hadoop项目的核心是HDFS、MapReduce和HBase,它们分别是Google云计算核心技术GFS(Google File System)、MapReduce和Bigtable的开源实现。

1.2.2 Apache Hadoop安装准备

1、hosts的配置

这一步是必须的,因为这里需要对使用环境的user做具体的分配和指定。

2、更改hosts

首先需要设定IP地址:

#ifconfig //查询现在的ip地址

然后通过设置VPN,来设置各机器的IP地址,具体过程这里就不详述了。

现在需要配置每台电脑的hosts名称,使用下列指令:

#vim /etc/sysconfig/network

在其中添加这样的内容:

HOSTNAME=Master.Hadoop

(备注:Slave机器则改为相应的Slave1.Hadoop…….)

3、配置hosts文件

#vim /etc/hosts

在其中添加下面几行内容:

192.168.137.2 Master.Hadoop

192.168.137.3 Slave1.Hadoop

192.168.137.4 Slave2.Hadoop


4、验证设置是否启用

我们在Master.Hadoop对机器为"Slave1.Hadoop"的主机名进行ping通测试,看是否能测试成功。

Master.Hadoop$ping192.168.137.3

(备注:对于其他机器之间的测试同理)

5、添加一个用户

#adduser hadoop

#passwd hadoop //设置hadoop的密码

1.3.3 ssh无密码验证设置(以下设置全部在hadoop用户下进行)

Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。

1、安装和启动ssh

可以通过下面命令查看是否已经安装ssh和rsync,显示如下:

$rpm –qa | grep openssh

$rpm –qa | grep rsync

2、Master机器上生成密码对

在Master节点上执行以下命令:

$ssh-keygen –t rsa –P ''

(备注:这里的“’”是单引号,上面指令最后使用了两个单引号)

这条命令是生成其无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"~/.ssh"目录下。

查看"/usr/hadoop/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。使用下面的指令:

$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

在验证前,需要做两件事儿。第一件事儿是修改文件"authorized_keys"权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能),另一件事儿是用root用户设置"/etc/ssh/sshd_config"的内容。使其无密码登录有效。

3、修改文件"authorized_keys"的权限

使用下列指令:

$chmod 600~/.ssh/authorized_keys

4、设置SSH配置

用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容,去掉下面几句话前面的注释符“#”。

RSAAuthentication yes # 启用 RSA 认证

PubkeyAuthentication yes # 启用公钥私钥配对认证方式

AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径


设置完之后记得重启SSH服务,才能使刚才设置有效。

$service sshd restart

退出root登录,使用hadoop普通用户验证是否成功。

#ssh localhost

5、在Slave机器上生成密码对

在Slave1.Hadoop上执行下列指令:

$ssh-keygen –t –rsa –P ''

在Slave1.Hadoop机器中生成~/.ssh文件。然后在把本机生成的密码对加载到本机上的authorized_keys

$cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys

然后更改authorized_keys文件的权限。

$chmod 600~/.ssh/authorized_keys

(备注:如果有多个Slave,对多个Slave进行相同的操作即可,Slave2.Hadoop,Slave2.Hadoop……)

6、在Master和Slave之间追加授权密码

Master.Hadoop$cd ~/.ssh

Master.Hadoop$scp./id_rsa.pub hadoop@192.168.137.3:~/

Slave1.Hadoop$cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

Slave1.Hadoop$scp ~/.ssh/id_rsa.pub hadoop@192.168.137.4:~/

Master.Hadoop$cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

(备注:如果有多个Slave,对多个Slave和Master之间进行相同的操作即可)

用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容,去掉下面几句话前面的注释符“#”。

RSAAuthentication yes # 启用 RSA 认证

PubkeyAuthentication yes # 启用公钥私钥配对认证方式

AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)


  设置完之后记得重启SSH服务,才能使刚才设置有效。

$service sshd restart

 退出root登录,使用hadoop普通用户验证是否成功。

#ssh localhost

7、验证ssh无密码登陆设置成功

Master.Hadoop$ssh Slave1.Hadoop

这时候如果不需要输入Slave1.Hadoop主机的登陆密码,就说明设置成功了,否则,说明前面的设置出错了,请细心检查下。

同理,再输入下列指令,检验Slave对Master的设置是否成功:

Slave1.Hadoop$sshMaster.Hadoop

1.3.4 JAVA环境安装(所有主机均要安装,并且以下操作在root用户下执行)

1、下载jdk

从oracle官网下载jdk1.7.0_21,放到根目录下/。

2、安装jdk

执行下列指令:

#cd /usr

#mkdir java

#cp / jdk-7u21-linux-x64.rpm/usr/java/

#cd /usr/java

#rpm –ivh jdk-7u21-linux-x64.rpm

然后会进行rpm安装的过程。

3、设置java环境变量

编辑"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容。

首先,编辑"/etc/profile"文件

#vim /etc/profile

其次,添加Java环境变量

在"/etc/profile"文件的尾部添加以下内容:

# set java environment

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

export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin


保存并退出,执行下面命令使其配置立即生效。

#source /etc/profile

4、验证安装和配置是否成功

输入下列指令:

#java -version

然后写一个小的JAVA程序,编译执行下是否正确执行,如果可以,则配置成功,否则,JAVA的配置过程可能有问题,需要检查。

1.3.5 Hadoop集群安装

  所有的机器上都要安装hadoop,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装和配置hadoop需要以"root"的身份进行。

用root用户登录"Master.Hadoop"机器,查看我们用SSH上传至"/"目录下的"hadoop-1.1.1.tar.gz",把该文件复制到“/usr/”目录下。

1、进入"/usr/"目录下,用下面命令把"hadoop-1.1.1.tar.gz "进行解压,并将其命名为"hadoop",把该文件夹的读权限分配给普通用户hadoop,然后删除" hadoop-1.1.1.tar.gz"安装包。

#cd /usr

#tar -zxvf hadoop-1.1.1.tar.gz

#mv hadoop-1.1.1 hadoop

#chown -R hadoop:hadoop hadoop

#rm -r hadoop-1.1.1.tar.gz

2、把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件(配置java环境变量的文件),将以下语句添加到末尾,并使其有效:

3、在"/usr/hadoop"创建"tmp"文件夹

#mkdir /usr/hadoop/tmp

4、配置"/etc/profile"

#vim /etc/profile

# set hadoop path

export HADOOP_HOME=/usr/hadoop

export PATH=$PATH:$HADOOP_HOME/bin


重启"/etc/profile"

#source /etc/profile

5、配置hadoop

需要配置hadoop的文件,首先,配置hadoop-env.sh

  该"hadoop-env.sh"文件位于"/usr/hadoop/conf"目录下。

在文件的末尾添加下面内容。

# set java environment

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


Hadoop配置文件在conf目录下,之前的版本的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。由于Hadoop发展迅速,代码量急剧增加,代码开发分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个core-site.xml、hdfs-site.xml、mapred-site.xml。core-site.xml和hdfs-site.xml是站在HDFS角度上配置文件;core-site.xml和mapred-site.xml是站在MapReduce角度上配置文件。

其次是配置core-site.xml文件,修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号。

hadoop.tmp.dir

/usr/hadoop/tmp

(备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹)

A base for other temporary directories.

fs.default.name

hdfs://192.168.137.2:9000


(备注:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。)

然后是配置hdfs-site.xml文件,修改Hadoop中HDFS的配置,配置的备份方式默认为1。

dfs.replication

1

(备注:replication 是数据副本数量,默认为3salve少于3台就会报错)


最后,配置mapred-site.xml文件,修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。

mapred.job.tracker

http://192.168.137.2:9001


下面需要配置masters文件和slaves文件,对于masters文件,去掉"localhost",改成本集群中主节点的IP地址:192.168.137.2;对于slaves文件(Master主机特有),去掉"localhost",加入集群中所有Slave机器的IP,也是每行一个。

192.168.137.3

192.168.137.4


现在在Master机器上的Hadoop配置就结束了,剩下的就是配置Slave机器上的Hadoop。将 Master上配置好的hadoop所在文件夹"/usr/hadoop"复制到所有的Slave的"/usr"目录下(实际上Slave机器上的slavers文件是不必要的, 复制了也没问题)。用下面命令格式进行。(备注:此时用户可以为hadoop也可以为root)

#scp -r /usr/hadoop root@192.168.137.3:/usr/

#scp -r /usr/hadoop root@192.168.137.4:/usr/

当然不管是用户root还是hadoop,虽然Master机器上的"/usr/hadoop"文件夹用户hadoop有权限,但是Slave1上的hadoop用户却没有"/usr"权限,所以没有创建文件夹的权限。所以无论是哪个用户进行拷贝,右面都是"root@机器IP"格式。因为我们只是建立起了hadoop用户的SSH无密码连接,所以用root进行"scp"时,扔提示让你输入"Slave1.Hadoop"服务器用户root的密码。

hadoop文件夹确实已经复制了,但是我们发现hadoop权限是root,所以我们现在要给"Slave1.Hadoop"服务器上的用户hadoop添加对"/usr/hadoop"读权限。以root用户登录"Slave1.Hadoop",执行下面命令。

#chown -R hadoop:hadoop hadoop

接着在"Slave1 .Hadoop"上修改"/etc/profile"文件(配置 java 环境变量的文件),将以下语句添加到末尾,并使其有效(source /etc/profile):

# set hadoop environment

export HADOOP_HOME=/usr/hadoop

export PATH=$PATH :$HADOOP_HOME/bin


1.3.6 启动及验证

1、格式化HDFS文件系统

  在"Master.Hadoop"上使用普通用户hadoop进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)

$hadoop namenode –format

2、启动hadoop

  在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。

$service iptables stop

  使用下面命令启动。

$start-all.sh

启动 hadoop成功后,在 Master 中的 tmp 文件夹中生成了 dfs 文件夹,在Slave 中的 tmp 文件夹中均生成了 dfs 文件夹和 mapred 文件夹。

到此为止,hadoop云计算平台配置完毕。


2.OOZIE的安装配置

2.1 OOZIE简介

oozie是一种Java Web应用程序,它运行在Javaservlet容器——即Tomcat中,并使用数据库来存储以下内容:

? 工作流定义

? 当前运行的工作流实例,包括实例的状态和变量

Oozie工作流是放置在控制依赖DAG(有向无环图 DirectAcyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。我们会使用hPDL(一种XML流程定义语言)来描述这个图。

hPDL是一种很简洁的语言,只会使用少数流程控制和动作节点。控制节点会定义执行的流程,并包含工作流的起点和终点(start、end和fail节点)以及控制工作流执行路径的机制(decision、fork和join节点)。动作节点是一些机制,通过它们工作流会触发执行计算或者处理任务。Oozie为以下类型的动作提供支持:Hadoop map-reduce、Hadoop文件系统、Pig、Java和Oozie的子工作流(SSH动作已经从Oozie schema 0.2之后的版本中移除了)。

所有由动作节点触发的计算和处理任务都不在Oozie之中——它们是由Hadoop的Map/Reduce框架执行的。这种方法让Oozie可以支持现存的Hadoop用于负载平衡、灾难恢复的机制。这些任务主要是异步执行的(只有文件系统动作例外,它是同步处理的)。这意味着对于大多数工作流动作触发的计算或处理任务的类型来说,在工作流操作转换到工作流的下一个节点之前都需要等待,直到计算或处理任务结束了之后才能够继续。Oozie可以通过两种不同的方式来检测计算或处理任务是否完成,也就是回调和轮询。当Oozie启动了计算或处理任务的时候,它会为任务提供唯一的回调URL,然后任务会在完成的时候发送通知给特定的URL。在任务无法触发回调URL的情况下(可能是因为任何原因,比方说网络闪断),或者当任务的类型无法在完成时触发回调URL的时候,Oozie有一种机制,可以对计算或处理任务进行轮询,从而保证能够完成任务。

Oozie工作流可以参数化(在工作流定义中使用像${inputDir}之类的变量)。在提交工作流操作的时候,我们必须提供参数值。如果经过合适地参数化(比方说,使用不同的输出目录),那么多个同样的工作流操作可以并发。

一些工作流是根据需要触发的,但是大多数情况下,我们有必要基于一定的时间段和(或)数据可用性和(或)外部事件来运行它们。Oozie协调系统(Coordinatorsystem)让用户可以基于这些参数来定义工作流执行计划。Oozie协调程序让我们可以以谓词的方式对工作流执行触发器进行建模,那可以指向数据、事件和(或)外部事件。工作流作业会在谓词得到满足的时候启动。

经常我们还需要连接定时运行、但时间间隔不同的工作流操作。多个随后运行的工作流的输出会成为下一个工作流的输入。把这些工作流连接在一起,会让系统把它作为数据应用的管道来引用。Oozie协调程序支持创建这样的数据应用管道。

2.2 OOZIE安装具体过程

1、先下载Oozie,下载后解压oozie-3.3.2.tar.gz到根目录下:

获取文件“oozie-3.3.2”,放到目录“/”下。并重命名为oozie。

这个时候执行命令:

#./bin/mkdistro.sh–DskipTests

2、下载ext-2.2.zip,下载文件“ext-2.2”,放到目录“/”下。

3、设置HADOOP的配置文件

在/usr/hadoop/conf/core-site.xml文件中加入下列内容:

hadoop.proxyuser.hadoop.hosts

192.168.137.2

hadoop.proxyuser.hadoop.groups

hadoop


修改完成后,新建一个文件夹/usr/oozie/libext/将ext-2.2.zip放到该目录下。

4、将oozie文件夹复制到/usr/目录下面。

5、拷贝HADOOP的JAR包到oozie。

将./hadooplibs/hadoop-1/文件夹下的所有JAR包复制到刚才新建的libext文件夹下。

6、拷贝ext-2.2.zip文件到./webapp/下并且解压到该目录下。

7、创建文件oozie.war。运行命令:

/usr/oozie/bin/oozie-setup.sh-extjs /oozie/webapp/src/main/webapp/ext-2.2.zip

显示:Specified Oozie WAR '/usr/oozie/oozie.war'already contains ExtJS library files,即可继续。

8、设置OOZIE的配置文件。

修改文件/usr/oozie/conf/oozie-site.xml,找到下面这部分内容:

oozie.service.JPAService.create.db.schema

false

Creates Oozie DB.

If set to true, it creates the DB schema if it does not exist. If the DB schema exists is a NOP.

If set to false, it does not create the DB schema. If the DB schema does not exist it fails start up.


将其中的false改成true。

9、加载数据库。

使用命令:

#/usr/oozie/bin/ooziedb.sh create -sqlfile oozie.sql –run

之后出现:

setting CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m"

Validate DB Connection

DONE

Check DB schema does not exist

DONE

Check OOZIE_SYS table does not exist

DONE

Create SQL schema

DONE

Create OOZIE_SYS table

DONE

Oozie DB has been created for Oozie version '3.3.2'

The SQL commands have been written to: oozie.sql


即表示创建成功。这时候可以看到一个oozie.sql文件。

10、加入原Hadoop的包,这里需要拷贝hadoop-core-1.1.1.jar和commons-configuration-1.6.jar这两个JAR包到目录:./oozie-server/webapps/oozie/WEB-INF/lib/下。

11、拷贝oozie.war文件到./oozie-server/webapps/下。

12、更改权限,此时需要更改oozie文件夹及其全部子文件的权限:

#chown -R hadoop:hadoop oozie

13、开启Oozie,使用命令:

$./bin/oozied.sh run

14、查看web控制台

输入命令:

$oozie admin -oozie http://192.168.137.2:11000/oozie -status

当看到结果:

System mode: NORMAL

则表示已经成功,通过浏览器输入http://192.168.137.2:11000/oozie就能看到Oozie的管理界面。如下图2.1所示:

Apache Hadoop1.1.1+Apache Oozie3.3.2搭建安装过程详解(亲测)

图2.1 Oozie管理界面