写在前面: 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 [email protected]:~/
Slave1.Hadoop$cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
Slave1.Hadoop$scp ~/.ssh/id_rsa.pub [email protected]:~/
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参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。)
然后是配置hdfs-site.xml文件,修改Hadoop中HDFS的配置,配置的备份方式默认为1。
下面需要配置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 [email protected]:/usr/
#scp -r /usr/hadoop [email protected]:/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文件中加入下列内容:
修改完成后,新建一个文件夹/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,找到下面这部分内容:
将其中的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所示:
图2.1 Oozie管理界面