本文主要介绍的是我自己在6台centos6.4系统的服务器上搭建hadoop2.2完全分布式集群的过程。
安装方法参考文档来源http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.9.1/bk_using_Ambari_book/content/ambari-include-setup.html
0.Hadoop2.2集群安装准备。
0.1.决定部署类型。
虽然可以将Hadoop的所有组件部署到同一台主机上,但本实验为了更加接近真实线上环境,使用两台物理机下的6台虚拟机搭建了完全分布式hadoop2.2环境,主机名分别是:
192.168.200.61 long-1.yc.com
192.168.200.62 long-2.yc.com
192.168.200.63 hda1.yc.com
192.168.200.64 hda2.yc.com
192.168.200.65 hda3.yc.com
192.168.200.66 hdb1.yc.com
192.168.200.67 hdb2.yc.com
192.168.200.68 hdb3.yc.com
其中long-1.yc.com 和long-2.yc.com是这两台物理机的主机名,为了传输文件方便,我也在后面都加入了hosts文件中,并设置了ssh信任。
初步规划是2台namenode 做HA高可用,另外4台为datanode。
0.2.收集信息。
部署Hadoop的安装,需要收集以下信息:
·你想设置的系统中每台主机域名(FQDN)完全合格,。Ambari安装导向不支持使用IP地址。如果你不知道自己的fqdn名,使用hostname -F来检查FQDN名称。
·你使用的库目录作为挂载点存储:
oNameNode 数据
oDataNodes 数据
oMapReduce 数据
oZooKeeper 数据, 如果你安装了ZooKeeper
o各种日志,PID,和数据库文件,这取决于你的安装类型
0.3.准备环境。
集群内服务器需要首先进行如下配置准备:(删除冲突软件、ssh信任、ntp时间同步、主机名设置、jdk版本统一)。
0.3.1.检查已安装的软件,卸载可能导致问题的相应版本软件包。
Ambari 自动安装需要适合的版本,适合的版本对于Ambari和Hadoop的运行至关重要。不适合版本在运行安装程序的时候可能引起问题,因此,移除下面列表中不匹配安装程序。
本文只涉及到RHEL和Centos v6版本的服务器系统。请在相应角色的服务器上移除以下版本的软件。
i.Ambari Server 主机
·postgresql 8.4.13-1.el6_3
·postgresql-libs 8.4.13-1.el6_3
·postgresql-server 8.4.13-1.el6_3
ii.Ambari Agent (安装到集群的每一个节点. 与Ambari 交互执行命令)
无
iii.Nagios Server (运行 Nagios server的节点)
·nagios 3.2.3-2.el6
·nagios-plugins1.4.9-1
iv.Ganglia Collector (运行Ganglia Collector server的节点)
·ganglia-gmetad 3.2.0-99
·rrdtool 1.4.5-1.el6
v.Ganglia Monitor (安装到集群的每一个节点. 发送metrics数据到 Ganglia Collector.)
ganglia-gmond 3.2.0-99
0.3.2.配置ssh信任。
为了让Ambari Server 在集群的主机中自动的安装Ambari Agent,必须在集群中设置Ambari Server主机与其他主机无密码SSH连接。Ambari Server主机作为一个客户端,使用SSH登录到其他主机,在其他主机上安装Ambari Agent。
以下是常规的配置ssh信任的方法,我自己觉得比较繁琐,后面会有我自己的批量ssh信任的方法。
i.在AmbariServer 主机上生成公有和私有的秘钥
[root@long-1 ~]# ssh-keygen
然后弹出提示的时候一直按回车。该命令会在用户home目录下生成一个隐藏的.ssh目录。目录里面有两个文件:
id_dsa、id_dsa.pub
[root@hda1 ~]# ll ~/.ssh/
总用量 8
-rw------- 1 root root 1675 12月 27 16:27 id_rsa
-rw-r--r-- 1 root root 400 12月 27 16:27id_rsa.pub
ii.复制SSH公有秘钥(id_rsa.pub)到目标主机(其他节点服务器)的root账户。
[root@hda1~]# scp ~/.ssh/id_rsa.pub root@192.168.200.62:/root/
iii.依赖于你的SSH版本,你可能需要把.ssh 文件夹的权限设置为700,在目标服务器的账号home目录的.ssh目录下建立文件:authorized_keys 注意:权限 644或600。
iv.[root@long-2 ~]# touch ~/.ssh/authorized_keys
[root@long-2 ~]# chmod -R 644.ssh/
v.把SSH公钥添加到 authorized_keys中。
在目标服务器上将从主节点传过来的id_dsa.pub文件内容复制到该主机的authorized_keys。
[root@long-2~]# cat id_rsa.pub > ~/.ssh/authorized_keys
用户目录权限为 755 或者 700就是不能为77x
.ssh目录权限必须为755
rsa_id.pub 及authorized_keys权限必须为644
rsa_id权限必须为600
[root@hda1 ~]# chmod700 ~/.ssh/
[root@hda1 ~]# chmod 644 ~/.ssh/id_rsa.pub
[root@hda1 ~]# chmod 600 ~/.ssh/id_rsa
以上三步很重要,若权限设置不正确,信任关系就有问题。
vi.在AmbariServer主机中,确保可以用SSH登录到其他主机。可能会出现一些警告信息,因为是第一次连接就会出现,这种情况是正常的。
[root@long-1 ~]# ssh root@192.168.200.62
Last login: Fri Dec 27 18:05:01 2013 from cw-zhanglong
[root@long-2 ~]#
vii.当运行Web页面的Ambari安装向导的时候保留一份SSH私有秘钥的拷贝.
我觉得上面这些比较繁琐,但我希望用最少的操作命令,用最简单的方法来做好ssh信任,还不出问题,所以我在集群里所有主机上同时先后运行了下面两个命令。然后输入了8次密码。就把整个集群里8台服务器互相做了ssh信任。(至于如何把这个命令同时发送到8个服务器上,这里就不做解释了。)
a)ssh-keygen 同上面一样,一直回车到结束。
b)for a in `awk '/yc.com/ {print$2}' /etc/hosts|sort|uniq` ;do ssh-copy-id -i /root/.ssh/id_rsa.pub root@$a:/root/.ssh/
当然后面这条命令只适合我的集群里的主机之间做信任。
0.3.3.同步时钟设置。
集群里的所有节点和访问AmbariWeb的浏览器主机必须能够相互同步时钟。这里我在每台服务器上添加时钟同步的计划任务。
[root@long-2~]# crontab -e
1012 * * * /usr/sbin/ntpdate pool.ntp.org ; /sbin/hwclock –w
我的主机加的是外网的时钟同步服务器,如果机器不能上外网,请设置内网里的时间服务器。
0.3.4.主机名和dns设置
系统中所有主机必须要配置DNS和反向DNS。如果你不能配置DNS和反向DNS, 您必须编辑集群中的每台服务器的hosts文件,添加上每一台主机的地址,设置每一台主机的FQDN。
i.编辑/etc/hosts文件。
127.0.0.1 localhost localhost.localdomain localhost4localhost4.localdomain4
::1 localhost localhost.localdomainlocalhost6 localhost6.localdomain6
192.168.200.61 long-1.yc.com
192.168.200.62 long-2.yc.com
192.168.200.63 hda1.yc.com
192.168.200.64 hda2.yc.com
192.168.200.65 hda3.yc.com
192.168.200.66 hdb1.yc.com
192.168.200.67 hdb2.yc.com
192.168.200.68 hdb3.yc.com
ii.编辑/etc/sysconfig/network文件。
[root@long-1 ~]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=long-1.yc.com
GATEWAY=192.168.200.254
iii.在集群中的每一个主机使用"hostname"命令来设置主机名称。
(当然,服务器重启以后会自动引用刚才配置的文件,自动生效。如果不想重启就用此方法使主机名设置生效。)
[root@long-1 ~]#hostname long-1.yc.com
[root@long-1 ~]#hostname -f
long-1.yc.com
在集群里其他服务器上也按以上方法填写每个服务器是FQDN主机名。保证能互相通过主机名ping通。
0.3.5.统一集群里主机的jdk环境。
这里我为了多台主机不必重复的连接外网下载jdk包,所以选用了提前在所有主机上部署jdk环境。
从java官网上下载最新的jdk安装包,我的机器是64位的,所以我下载了jdk-7u45-linux-x64.tar.gz 解压后就是jdk1.7.0_45目录。使用如下脚本在集群里的所有机器上批量安装。
#!/bin/sh
echo ======INSTALL JAVA ... =======
mkdir /usr/java
tar zxvfjdk-7u45-linux-x64.tar.gz -C /usr/java/
exportJAVA_HOME=/usr/java/jdk1.7.0_45
exportJRE_HOME=/usr/java/jdk1.7.0_45/jre
exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
exportLD_LIBRARY_PATH=./:/usr/lib:$LD_LIBRARY_PATH
echo "exportJAVA_HOME=/usr/java/jdk1.7.0_45
exportJRE_HOME=/usr/java/jdk1.7.0_45/jre
exportCLASSPATH=.:\$JAVA_HOME/lib:\$JRE_HOME/lib:\$CLASSPATH
exportPATH=\$JAVA_HOME/bin:\$JRE_HOME/bin:\$PATH
exportLD_LIBRARY_PATH=./:/usr/lib:\$LD_LIBRARY_PATH" >> /etc/profile
source/etc/profile
java -version
安装完后在所有主机上检测java版本。
[root@hda1 ~]#java -version
java version"1.7.0_45"
Java(TM) SERuntime Environment (build 1.7.0_45-b18)
Java HotSpot(TM)64-Bit Server VM (build 24.45-b08, mixed mode)
0.3.6.安全相关,关闭iptables和selinux。
Ambari正常的工作,须要将SELinux关闭。通过在集群中的每台主机上运行以下命令可以将SELinux暂时关闭:
[root@long-1 ~]# setenforce 0
强烈的推荐将SELinux 永久性的关闭,这样系统重启以后可以保持SELinux不会重新启动。要达到这个目标,编辑SELinux 配置文件,并将SELINUX 设置成disabled。在每台主机上设置。
[root@long-1 ~]# sed -i '/^SELINUX=/c\SELINUX=disabled'/etc/sysconfig/selinux
关闭防火墙。在集群搭建好之后再考虑添加相应防火墙规则。
[root@long-1 ~]# service iptables stop
[root@long-1 ~]# chkconfig iptables off
0.3.7.检查umask值。
确保 umask 值是 022.
0.3.8.PackageKit失败的问题解决。
在 RHEL/CentOS安装主机上, 用文本编辑器打开/etc/yum/pluginconf.d/refresh-packagekit.conf: 做如下的修改,将enabled=1改成0.
[main]
enabled=0
1.运行安装。
该节描述安装ApacheAmbari和部署Hadoop的过程。
1.1.设置yum仓库和获取安装包。
·以root用户登陆即将作为Ambari Server 的机器,若果需要使用其他用户登陆,那么需要使用sudo获得root权限。这台机器就是安装的主要主机。
·下载Ambari RPM包或者仓库文件。
表 2.1. 下载repo
平台 | RPM 包 | Repository File |
RHEL and CentOS 5 | rpm -Uvh http://public-repo-1.hortonworks.com/ambari/centos5/1.x/GA/ambari-1.x-1.el5.noarch.rpm | wget http://public-repo-1.hortonworks.com/ambari/centos5/1.x/updates/1.2.4.9/ambari.repo cp ambari.repo /etc/yum.repos.d |
RHEL and CentOS 6 | rpm -Uvh http://public-repo-1.hortonworks.com/ambari/centos6/1.x/GA/ambari-1.x-1.el6.noarch.rpm | wget http://public-repo-1.hortonworks.com/ambari/centos6/1.x/updates/1.4.2.104/ambari.repo cp ambari.repo /etc/yum.repos.d |
[root@long-1 ~]# wget
http://public-repo-1.hortonworks.com/ambari/centos6/1.x/updates/1.4.4.23/ambari.repo
[root@long-1 ~]# cp ambari.repo /etc/yum.repos.d/
如果你的机器不能够访问网络,或者你将要配置一个很大的集群,并且你又想节省带宽。你就需要提供另一种方式来获得需要的包。更多信息,请查看可选:配置本地仓库节。如果你需要tarball来创建你的本地仓库,你可以在这里找到:http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.9.1/bk_using_Ambari_book/content/ambari-chap1-6.html
·安装EPEL仓库:
[root@hda1~]# yum install epel-release -y
·通过检查仓库列表配置确定仓库:
[root@hda1 ~]# yum repolist
你应该看到Ambari,HDP 作用,并在EPEL仓库列表中。
1.2.规划数据库。
(hive、oozie、ambari数据库这里都用mysql 5.x)。
(1)安装mysql数据库:(这里把mysql安装在hive节点上hdb3.yc.com)
[root@hdb3 ~]# yum install mysql-server -y
安装mysql连接驱动:(为了防止后面安装hadoop组件的时候更改了服务器角色出现安装失败的情况,建议所有节点都安装上mysql连接驱动。)
[root@hdb3 ~]# yum install mysql-connector-java-5.0.8-1 -y
[root@hdb3 ~]# ll /usr/share/java/mysql-connector-java*
-rw-r--r-- 1 root root 819803 Jun 22 2012 /usr/share/java/mysql-connector-java-5.1.17.jar
lrwxrwxrwx 1 root root 31 Feb 1400:00 /usr/share/java/mysql-connector-java.jar ->mysql-connector-java-5.1.17.jar
确保/mysql-connector-java-5.1.17.jar的权限是644.
(2)启动数据库并创建相应帐号:
[root@hdb3 ~]# service mysqld start
[root@hdb3 ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commandsend with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
创建Hive帐号并授权:
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY 'hivepasswd';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE USER 'hive'@'hdb3.yc.com' IDENTIFIEDBY 'hivepasswd';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'hdb3.yc.com';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY'hivepasswd';
mysql> GRANT ALL PRIVILEGES ON *.* TO'hive'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
创建Oozie帐号并授权:
mysql> CREATE USER 'oozie'@'%' IDENTIFIED BY 'ooziepasswd';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'oozie'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE DATABASE oozie;
Query OK, 1 row affected (0.00 sec)
创建Ambari用户,并授权:这里ambari服务器指定为hda1.yc.com .
mysql> CREATE USER 'ambari'@'%' IDENTIFIED BY 'ambaripasswd';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE USER 'ambari'@'localhost' IDENTIFIEDBY 'ambaripasswd';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO'ambari'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE USER'ambari'@'hda1.yc.com' IDENTIFIEDBY 'ambaripasswd';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO'ambari'@'hda1.yc.com';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
1.3.设置Ambari服务器
Ambari 服务器管理安装过程。
登录要安装ambari服务的节点机器:
[root@hda1 ~]# yum install ambari-server -y
Installed:
ambari-server.noarch 0:1.4.4.23-1
[root@hda1 ~]# yum install mysql-connector-java-5.0.8-1-y
[root@hda1 ~]# cp /usr/share/java/mysql-connector-java.jar/var/lib/ambari-server/resources/
将ambari服务器上的创建数据库的脚本传到数据库服务器上,导入到数据库中:
[root@hda1 ~]# scp /var/lib/ambari-server/resources/Ambari-DDL-MySQL-* hdb3.yc.com:/root/
Ambari-DDL-MySQL-CREATE.sql 100% 12KB 11.8KB/s 00:00
Ambari-DDL-MySQL-DROP.sql 100% 1148 1.1KB/s 00:00
[root@hda1 ~]#
登录数据库服务器hdb3.yc.com,用ambari用户连接到mysql控制台:创建ambari数据库并用sql脚本导入数据和创建表格。
[root@hdb3 ~]# mysql -uambari -p
Enter password:
mysql> CREATE DATABASE ambari;
Query OK, 1 row affected (0.00 sec)
mysql> use ambari
Database changed
mysql> SOURCE /root/Ambari-DDL-MySQL-CREATE.sql;
Query OK, 0 rows affected (0.04 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.03 sec)
Query OK, 0 rows affected (0.02 sec)
.
..
导入完成。
回到ambari服务器hda1.yc.com上进行ambari初始化设置。
由于之前已经统一了各个服务器的jdk版本为jdk1.7.0_45,这里初始化的时候就不需要再重新安装java了,所以初始化的时候跟上参数-j 后面跟javahome的路径。我的javahome路径是/usr/java/jdk1.7.0_45/。
[root@hda1 ~]# ambari-server setup -j /usr/java/jdk1.7.0_45/
Using python /usr/bin/python2.6
Setup ambari-server
Checking SELinux...
SELinux status is 'disabled'
Customize user account for ambari-server daemon [y/n] (n)? y
Enter user account for ambari-server daemon (root): \\系统给出默认值,不想更改就直接回车就可以。
Adjusting ambari-server permissions and ownership...
Checking iptables...
Checking JDK...
WARNING: JAVA_HOME /usr/java/jdk1.7.0_45/ must be valid on ALL hosts
WARNING: JCE Policy files are required for configuring Kerberos security. Ifyou plan to use Kerberos,please make sure JCE Unlimited Strength JurisdictionPolicy Files are valid on all hosts.
Completing setup...
Configuring database...
Enter advanced database configuration [y/n] (n)? y \\这里要自定义数据库。
==============================================================================
Choose one of the following options:
[1] - PostgreSQL (Embedded)
[2] - Oracle
[3] - MySQL
==============================================================================
Enter choice (1): 3 \\这里选3,使用mysql数据库。
Hostname (localhost): hdb3.yc.com \\mysql数据库主机名。
Port (3306): 3306 \\使用默认端口。
Database Name (ambari): ambari \\数据库名
Username (ambari): ambari \\该数据库的用户名
Enter Database Password (bigdata): \\输入两次用户密码。
Re-enter password:
Invalid characters in password. Use only alphanumeric or _ or - characters
Re-enter password:
Copying JDBC drivers to server resources...
Configuring remote database connection properties...
Copying JDBC drivers to server resources...
Ambari Server 'setup' completed successfully.
初始化成功。
启动ambari服务:
[root@hda1 ~]# ambari-server start
Using python /usr/bin/python2.6
Starting ambari-server
Ambari Server running with 'root' privileges.
Server PID at: /var/run/ambari-server/ambari-server.pid
Server out at: /var/log/ambari-server/ambari-server.out
Server log at: /var/log/ambari-server/ambari-server.log
Ambari Server 'start' completed successfully.
[root@hda1 ~]# ps aux |grep ambari
root 8370 164 6.4 4961908 254600 pts/0 Sl 04:12 0:19 /usr/java/jdk1.7.0_45//bin/java -server -XX:NewRatio=3-XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -XX:CMSInitiatingOccupancyFraction=60-Xms512m -Xmx2048m-Djava.security.auth.login.config=/etc/ambari-server/conf/krb5JAASLogin.conf-Djava.security.krb5.conf=/etc/krb5.conf-Djavax.security.auth.useSubjectCredsOnly=false -cp/etc/ambari-server/conf:/usr/lib/ambari-server/*:/usr/java/jdk1.7.0_45//bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/lib/ambari-server/*:/usr/share/java/mysql-connector-java-5.1.17.jar:/usr/share/java/mysql-connector-java.jarorg.apache.ambari.server.controller.AmbariServer
root 8414 0.0 0.0 103244 832 pts/0 S+ 04:12 0:00 grep --color=autoambari
[root@hda1 ~]#
1.4.安装配置hadoop组件。
浏览器中打开http://hda1.yc.com:8080 ambari服务器的地址加8080端口。默认用户名密码为admin。
1.4.1.设置集群名称。
1.4.2.选择hdp版本。
如下图所示,选选择了HDP 2.0.6 。并选定自己要使用的相应系统版本的yum源。点下一页继续。
1.4.3.添加集群成员主机名并注册。
在目标主机栏中添加要加入集群的所有主机的主机名,每行一个。并选择ambari-server服务器上的做了ssh信任的用户家目录里的.ssh目录下的私钥文件。点击注册和确认。
等待注册成功,注意查看这里给出的警告信息。
提示ntpd服务没有开启。于是在所有节点上开启ntpd服务。如下:
[root@hda1 ~]# service ntpd restart
Shutting down ntpd: [FAILED]
Starting ntpd: [ OK ]
[root@hda1 ~]# chkconfig ntpd on
1.4.4.选择要在本集群里安装的hadoop生态圈里的组件。
1.4.5.分配各个主机的角色。
1.4.6.分配从节点及客户端组件。
1.4.7.定***务,hadoop的各个组件参数配置。
这里主要是数据库设置。其中hive、oozie、nagios需要用到数据库,所以必须填入数据库主机名,相应的数据库名称,用户和密码。
1.4.8.配置报告回顾和确认。
回顾
安装前,请检查配置
打印
管理员名称:管理员
群集名称:ychdp
总主持人:6(6新)
库:
RHEL 6/CentOS 6/Oracle版Linux6 :http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1/
服务
HDFS
NameNode : hda1.yc.com
SecondaryNameNode : hdb1.yc.com
DataNodes : 4台主机
YARN+ MapReduce2
节点管理器: 2台主机
ResourceManager : hdb1.yc.com
历史服务器: hda1.yc.com
Nagios
服务器: hda2.yc.com
管理员: nagiosadmin /(1048807845@qq.com)
Ganglia
服务器: hda2.yc.com
Hive+ HCatalog
蜂巢Metastore : hdb3.yc.com
数据库: MySQL的(现有的MySQL数据库)
HBase
法师: hda3.yc.com
RegionServers : 2台主机
Oozie
服务器: hdb2.yc.com
数据库: MySQL的(现有的MySQL数据库)
Zookeeper
服务器: 3台主机
1.4.9.安装、启动服务。
1.4.10.安装总结报告。
转载于:https://blog.51cto.com/51longge/1369794