一、SQL on Hadoop
我们需要知道业界很多产品如hive、Presto、Drill、SparkSQL、Impala等均在发力sql on hadoop,如果谈及这个话题,需要很多的篇幅,
我们这里只需要知道hawq是开源的一款sql on hadop的产品,具体它的优势,请另行查询,熟悉greenplum的用户应该知道mpp数据库的强劲性能
而hawq2.0是将mpp和hadoop结合后的产品。
二、几个概念
1.hawq和hdb
hawq是pivotal公司将产品共性给apache基金会的开源名称
hdb是pivotal公司的sql on hadoop的产品名称,二者内核是一致的,只是一个开源一个商用,当然我个人认为商用版本更完善。
2.hdb和hdp
大家千万不要混淆这两个名称,hdp是HORTONW0RKS DATA PLATFORM的简称,是HORTONW0RKS公司的hadoop产品,与其同名的还有CDH,其是Cloudera公司的hadoop产品。
3.Ambari
Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的供应、管理和监控。Ambari目前已支持大多数Hadoop组件, 包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeper、Sqoop和Hcatalog等。
Ambari host对内存和硬盘有一定要求,50hosts以内,内存不小于2GB,硬盘不小于50GB.500hosts以内内存8GB,硬盘200GB,一般都能满足要求。
三、安装选择
1.hadoop版本选择
hawq安装需要hadoop2.5以上,如果低于版本要求,可以安装上,创建库和表都可以但是无法插入数据,我第一次尝试就是在hadoop2.2的开源
版本安装的,安装后能启动,能创建数据库、能建表,但是就是不能插入数据。后面的例子用的版本是hadoop2.6.5的开源版本安装的,具体
hadoop的安装过程,可参照之前的2.2版本安装或者自行查询教程。
2.ambari版本和jdk版本要求
这一点是很多安装教程中没有真正提及的,会误导很多用户,如果你的jdk版本不能修改,那你必须再次基础上进行选择,比如我测试环境的
jdk版本就是1.6.0.45那就不能使用ambari安装。
参看hdb的安装教程:http://hdb.docs.pivotal.io/220/hdb/releasenotes/HAWQ220ReleaseNotes.html
hdb2.2需要ambari2.4.2,但是ambari1.5.1就已经不支持java6了,因此采用jdk6就不能用ambari。
3.centos 6还是7决定你装hawq还是hdb
虽然centos6是可以安装hawq的,但是坑太多了,因为hawq2.0以后尤其2.2是根据最新的系统版本进行测试编译的,用老的6的版本进行编译,需要更新的组件太多,而且相互间的关联会让人混乱,我尝试了几次在centos6.6上的源码安装hawq2.2基本都快到最后几步了,但是还是没成功,推荐对linux组件很熟悉的朋友尝试,一般用户推荐使用商用版本的hdb,你不要觉得hdb安装简单,在安装过程中,自己的知识积累通过排错提升了很多,后面我会放上源码编译hawq的内容。
四、安装环境
采用之前的4台虚拟机安装(c9test91—94),系统版本Centos6.6 内存8GB ,hadoop版本为2.6.5官方release版本。
如果不单独说明,后续的操作均在所有机器上执行
1.hadoop环境介绍
主机 | 安装软件 | 进程 |
---|---|---|
c9test91 | jdk hadoop zk | NameNode、DFSZKFailoverController、JournalNode、QuorumPeerMain |
c9test92 | jdk hadoop zk | NameNode、DFSZKFailoverController、JournalNode、QuorumPeerMain |
c9test93 | jdk hadoop zk | DataNode、NodeManager、JournalNode、QuorumPeerMain 、ResourceManager |
c9test94 | jdk hadoop | DataNode、NodeManager |
2.文件描述符
#ulimit -Sn 和ulimit -Hn,如果小于10000,使用下面命令更新所有主机:
ulimit -n 10000
3.禁用防火墙:
etc/init.d/iptables stop
chkconfig iptables off
4.禁用selinux:
vi /etc/selinux/config
SELINUX=disabled
#输入 setenforce 0 让配置生效
5.主机名设置
vi /etc/hosts
192.168.209.91 c9test91
192.168.209.91 c9test92
192.168.209.91 c9test93
192.168.209.91 c9test94
#需要注意的是:hostname执行结果要和上面配置的主机名一致,否则修改/etc/sysconfig/network
6.NTP
确保各个主机时间一致,采用crontab更新,更新系统和硬件,注意这里采用的不是安装ntp server的方式而是定时同步
* */2 * * * /usr/sbin/ntpdate asia.pool.ntp.org && /sbin/hwclock --systohc
7.用户各主机的免密码登陆
在安装hadoop的时候,已经设置过了root和hadoop账户的免密码登陆,这里需要增加gpadmin用户
groupadd -g 3030 gpadmin
useradd -u 3030 -g gpadmin -m -s /bin/bash gpadmin
echo gpadmin | passwd gpadmin --stdin
su - gpadmin #后面操作在gpadmin用户下操作
#设置免密码登陆:
#(1)生成公钥和私钥,在所有机器执行
ssh-keygen -t rsa -P ''
#(2)以下操作在c9test91上操作
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh gpadmin@c9test92 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh gpadmin@c9test93 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh gpadmin@c9test94 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys gpadmin@c9test92:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys gpadmin@c9test93:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys gpadmin@c9test94:~/.ssh/authorized_keys
#(3)如果个别机器不能生效,可以采用
ssh-copy-id -i ~/.ssh/id_rsa.pub gpadmin@c9test92
#此种方法是设置操作机器可以访问对方主机,需要在不同的双向间执行
#(4)注意事项
#权限不对不生效chmod 600 ~/.ssh/authorized_keys所有机器执行
8.主机内存限制
(1)配置主机内存匹配OOM的时候进程被系统kill
vi /etc/sysctl.conf
kernel.threads-max=798720
vm.overcommit_memory=2 #通过此设置,OOM killer进程报告错误,而不是杀死正在运行的进程
sysctl -p
#附:检查配置命令:sysctl -a | grep overcommit_memory
(2)vm.overcommit_ratio设定:
2GB-8GB内存:
交换空间=物理RAM
vm.overcommit_ratio=50
8GB和64GB之间内存:
交换空间= 0.5 *物理RAM
vm.overcommit_ratio=50
大于64GB:
交换空间= 4GB
vm.overcommit_ratio=100
参数修改在/etc/sysctl.conf,修改后用sysctl -p生效
检查命令:
sysctl -a | grep overcommit_ratio
cat /proc/meminfo | grep Swap
用yarn做资源管理器vi yarn-site.xml
修改yarn.nodemanager.resource.memory-mb
例子1:大型主机
内存:256GB SWAP:4GB
NON_HAWQ_MEMORY设置:
2GB给操作系统;
2GB用于datanode
2GB用于NodeManager
1GB用于PXF
overcommit_ratio_percentage:为1(100)
则:TOTAL_MEMORY = 256GB * 1 + 4GB = 260GB
使用yarn进行资源管理,需要设置yarn.nodemanager.resource.memory-mb为
TOTAL_MEMORY - NON_HAWQ_MEMORY = 260GB - 7GB = 253
例子2:中型主机
内存:64GB SWAP:32GB
NON_HAWQ_MEMORY设置:
2GB给操作系统;
2GB用于datanode
2GB用于NodeManager
1GB用于PXF
overcommit_ratio_percentage:为0.5(50)
则:TOTAL_MEMORY = 64GB * 0.5 + 32GB = 64GB
使用yarn进行资源管理,需要设置yarn.nodemanager.resource.memory-mb为
TOTAL_MEMORY - NON_HAWQ_MEMORY = 64GB - 7GB = 57
例子3:小型主机,测试用
内存:8GB SWAP:8GB
NON_HAWQ_MEMORY设置:
2GB给操作系统;
2GB用于datanode
2GB用于NodeManager
1GB用于PXF
overcommit_ratio_percentage:为0.5(50)
则:TOTAL_MEMORY = 8GB * 0.5 + 8GB = 12GB
使用yarn进行资源管理,需要设置yarn.nodemanager.resource.memory-mb为
TOTAL_MEMORY - NON_HAWQ_MEMORY = 12GB - 7GB = 5
9.网络
生产推荐万兆,多网卡做网卡绑定
pxf插件需要使用tomcat,保留端口8005 8080 8009
10.hawq主机要求
hawq segment必须位于运行HDFS DataNode的主机上
master和standby位于不同主机
11.pxf主机要求
必须在HDFS NameNode 和所有HDFS DataNodes上安装PXF
如果已配置具有高可用性的Hadoop,则PXF也必须安装在所有HDFS节点上,包括所有NameNode服务
如果要使用带有HBase或Hive的PXF,必须先在要安装PXF的每台机器上安装HBase客户端(hbase-client)和/或Hive客户机(hive-client)
5432端口不能被占用
注意: Ambari服务器节点使用PostgreSQL作为默认元数据库。 Hive Metastore使用MySQL作为默认元数据库
12.依赖包
yum、rpm、scp、curl、unzip、tar、wget、OpenSSL (v1.01, build 16 or later)、Python 2.6.x、OpenJDK 7/8 64-bit
yum install httpd
httpd -v :2.2.15
#默认安装完web目录在/var/www/html
#配置文件在/etc/httpd/conf/httpd.conf