离线数据的存储与查询主要是以hadoop为中心的技术栈,包括hive,hbase,hue,kylin等。部署hadoop的方式比较流行的主要有三种:
1. 直接部署Apache Hadoop,即手工部署,需要自己配置,协调版本兼容等,好处是能够加深理解,但是过程较繁琐。
2. Ambari :Hortonworks的产品,用于创建,管理,监视hadoop集群,完全开源,由社区维护,同样是Apache Software Foundation顶级项目之一。支持集成ElasticSearch,redis,kylin等。
3. Cloudera Manager:Cloudera公司把Apache hadoop开源项目商业化,开发出了Cloudera Manager及CDH等一套相关的hadoop生态系统,分为免费版和商业版,商业版收费。
目前国内Apache Hadoop和Cloudera Manager使用的较多,本系统使用Cloudera Manager按照hadoop的生态系统。
1. Java版本
要求按照Oracle JDK,CM/CDH 5.0及以上版本支持JDK 7,如下表1.2所示:
表1.2 JDK版本支持
JDK 7 | Supported in all C5.x |
---|---|
1.7u80 | Recommended / Latest version tested |
1.7u75 | Recommended |
1.7u67 | Recommended |
1.7u55 | Minimum required |
在CM/CDH 5.3及更高版本时,开始支持JDK 8,但是,CDH 5.13时开始支持的Kafka 3.0要求JDK 8,不支持JDK 7。由于存在安全风险,JDK 8u40,8u45和8u60不在支持范围之内。支持JDK 8u75,但有一个已知问题:当Oozie服务器在JDK 8u75或更高版本上运行时,Oozie Web Console返回500错误。如下表1.3所示:
表1.3 JDK 8版本支持
JDK 8 | Supported in C5.3 and Higher |
---|---|
1.8u131 | Recommended / Latest version tested |
1.8u121 | Recommended |
1.8u111 | Recommended |
1.8u102 | Recommended |
1.8u91 | Recommended |
1.8u74 | Recommended |
1.8u31 | Minimum required |
2. 将其中一台主机指定为Cloudera Manager Server主机。提供使用root帐户或具有无密码sudo权限的帐户登录到该主机的功能。
3. 允许Cloudera Manager Server主机在所有主机的同一端口上进行统一的SSH访问。
4. 所有群集主机必须有权访问标准软件包存储库以及archive.cloudera.com或具有所需安装文件的本地存储库。
本系统服务器版本为Centos7,所有安装均以此为准,其他系统版本的安装,请参考官网。
安装方式主要分为三种:
1. Path A:由Cloudera Manager自动安装,使用嵌入式数据库,适合测试环境,不建议生产环境使用,随着集群的增长,有可能需要数据库的迁移。
2. Path B:使用Cloudera Manager的Parcels or Packages安装(比如yum命令安装)。
3. Path C:手动安装,使用tar压缩包。
方法3在CM5.9.0已经过期了,从CM6.0.0开始,将会被移除,所以,这里选择方法2进行安装。官方建议使用包管理工具来安装产品,例如RHEL兼容系统的Yum。
使用Yum时,如果能够联网,需要将cloudera-manager.repo仓库信息放到/etc/yum.repos.d中,如果服务器无法联网,可以创建本地仓库,将cloudera-manager.repo中的地址指向本地,或者直接将rpm包下载下来,本地安装,yum centos7对应的资源地址如下所示:
1. Location:https://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5.12.0/
2. Repo File:https://archive.cloudera.com/cm5/redhat/7/x86_64/cm/cloudera-manager.repo
3. Tarball File:https://archive.cloudera.com/cm5/cm/5/cloudera-manager-centos7-cm5.12.0_x86_64.tar.gz
如果选择Yum联网安装,则下载Repo File,拷贝到/etc/yum.repos.d/中。或者进入Location指向的地址,可以看到如下图1.7所示的内容:
将其中的rpm包全部下载,上传到服务器。
首先在Cloudera Manager服务器上安装Oracle JDK(所有服务器都需要安装同一版本的Oracle JDK),从仓库中安装命令如下:
sudo yum install oracle-j2sdk1.7
也可以直接使用rpm包安装,命令如下:
sudo yum localinstall –nogpgcheck jdk-6u31-linux-amd64.rpm
sudo yum localinstall –nogpgcheck oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
生成环境需要单独安装外部数据库,可选的数据库有MariaDB(Mysql),Oracle Server或者PostgreSQL Server,本系统选择用MariaDB。安装命令如下:
yum install mariadb-server
安装完成之后,如果MariaDB启动了,先关闭:
sudo service mariadb stop
接下来,开始配置mariaDB:
1. 备份旧的InnoDB日志文件/var/lib/mysql/ib_logfile0和/var/lib/mysql/ib_logfile1到新位置,移出/var/lib/mysql目录。
2. 确定配置文件my.cnf的位置,一般在如下位置之一:
· /etc/my.cnf
· /etc/mysql/my.cnf
· my.cnf in the DEFAULT_SYSCONFDIR specified during the compilation
· my.cnf in the path, specified in the environment variable MYSQL_HOME (if any)
· the file specified in --defaults-extra-file (if any)
· user-home-dir/.my.cnf
修改配置文件让其慢如以下几个条件:
1. 为了防止死锁,将隔离级别设置为read committed。
· 大多数发行版中的MariaDB安装中的默认设置使用保守的缓冲区大小和内存使用情况。 Cloudera管理服务角色需要高写入吞吐量,因为他们可能会在数据库中插入许多记录。 Cloudera建议您将innodb_flush_method属性设置为O_DIRECT。
2. 小集群(小于50台服务器),可以在同一台主机上存储多个数据库,把每个数据库放在自己的存储卷上。为每个数据库允许最多100个连接,然后额外添加50个连接。例如,对于两个数据库,将最大连接设置为250。如果一台主机存储5个数据库(Cloudera Manager Server,活动监视器,报告管理器,Cloudera导航器和Hive metastore的数据库),则设置为550。
3. 大型集群(超过50个主机) - 不要在同一个主机上存储多个数据库。为每个数据库/主机对使用一个单独的主机。主机不需要为数据库专门保留,但每个数据库应该位于不同的主机上。
4. 开启binlog,能够保证数据库错误恢复。Cloudera Manager本身不要求。
如下为推荐的配置示例:
[mysqld]
transaction-isolation = READ-COMMITTED
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links = 0
key_buffer = 16M
key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 256K
thread_cache_size = 64
query_cache_limit = 8M
query_cache_size = 64M
query_cache_type = 1
max_connections = 550
#expire_logs_days = 10
#max_binlog_size = 100M
#log_bin should be on a disk with enough free space. Replace '/var/lib/mysql/mysql_binary_log' with an appropriate path for your system
#and chown the specified folder to the mysql user.
log_bin=/var/lib/mysql/mysql_binary_log
binlog_format = mixed
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M
# InnoDB settings
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 64M
innodb_buffer_pool_size = 4G
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
完成如上配置之后,则需要将数据库设置为开机启动,命令如下所示:
sudo systemctl enable mariadb
sudo service mariadb start
设置MariaDB的root密码,当前密码为空,如下所示:
$ sudo /usr/bin/mysql_secure_installation
[...]
Enter current password for root (enter for none):
OK, successfully used password, moving on...
[...]
Set root password? [Y/n] y
New password:
Re-enter new password:
[...]
Remove anonymous users? [Y/n] y
[...]
Disallow root login remotely? [Y/n] n
[...]
Remove test database and access to it [Y/n] y
[...]
Reload privilege tables now? [Y/n] y
... Success!
以上就完成了MariaDB的安装和配置,如果没有使用 Cloudera Manager Installer安装Cloudera Manager Server,则需要手动创建数据库和用户账号:
1. Cloudera Manager服务包含的角色有:
1) Activity Monitor(如果使用MapReduce 服务)
2) Reports Manager - 跟踪磁盘利用率和处理活动的时间。Medium-sized.。
2. Each Hive Metastore - 包含Hive元数据。比较小。
3. Sentry Server - 包含授权元数据。比较小。
4. Cloudera Navigator Audit Server - 包含审计信息。在大型集群中,这个数据库可能会变大。
5. Cloudera Navigation Metadata Server - 包含授权,策略和审计报告元数据。比较小。
创建这些数据库时,必须设置为UTF-8编码。首先使用root进入MariaDB:
$ mysql -u root -p
Enter password:
为Activity Monitor, Reports Manager, Hive Metastore Server, Hue Server, Sentry Server, Cloudera Navigator Audit Server, and Cloudera Navigator Metadata Server创建数据库,数据库名,用户名和密码可以是任何值,如下表1.4提供了Cloudera Manager默认的配置名:
表1.4 Cloudera Manager默认数据库名配置
Role | Database | User | Password |
---|---|---|---|
Activity Monitor | amon | amon | amon_password |
Reports Manager | rman | rman | rman_password |
Hive Metastore Server | metastore | hive | hive_password |
Sentry Server | sentry | sentry | sentry_password |
Cloudera Navigator Audit Server | nav | nav | nav_password |
Cloudera Navigator Metadata Server | navms | navms | navms_password |
创建数据库,执行命令如下:
mysql> create database database DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on database.* TO 'user'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
重要说明:重新启动进程时,将使用保存在Cloudera Manager数据库中的信息重新部署每个服务的配置。如果此信息不可用,则说明群集无法正常启动或运行。必须安排和维护Cloudera Manager数据库的定期备份才能在发生此数据库丢失的情况下恢复群集。
如果配置了仓库,则安装命令如下:
sudo yum install cloudera-manager-daemons cloudera-manager-server
也可以直接使用rpm包安装,命令如下:
sudo yum --nogpgcheck localinstall cloudera-manager-daemons-*.rpm
sudo yum --nogpgcheck localinstall cloudera-manager-server-*.rpm
安装完Cloudera Manager Server之后,为其配置外部数据库,如下图1.8所示,创建Cloudera Manager Server所需的数据库:
创建数据库之后,运行scm_prepare_database.sh脚本(安装Cloudera Manager Server的服务器上),如下所示:
/usr/share/cmf/schema/scm_prepare_database.sh database-type [options] database-name username password
如下表1.5所示,为脚本的参数说明:
表1.5 scm_prepare_database.sh脚本参数说明
Parameter | Description |
---|---|
database-type | One of the supported database types: 1. MariaDB – mysql 2. MySQL – mysql 3. Oracle – oracle 4. PostgreSQL - postgresql |
database-name | The name of the Cloudera Manager Server database to create or use. |
username | The username for the Cloudera Manager Server database to create or use. |
password | The password for the Cloudera Manager Server database to create or use. If you do not specify the password on the command line, the script prompts you to enter it. |
无法找到mysql驱动程序,如上图6.9红色部分所示,脚本会到/usr/share/java下找Mysql的驱动程序,所以,可以下载mysql-connector-java.jar放到对应目录,下载地址:
http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.21
此时,再次执行如上scm_prepare_database.sh脚本,结果如下图1.11所示:
如果嵌入式PostgreSQL的配置文件存在的话,使用如下命令删除:
rm /etc/cloudera-scm-server/db.mgmt.properties
以上,已经完成了Cloudera Manger Server的安装,接下来,你可以选择手动安装 Oracle JDK, Cloudera Manager Agent 和 CDH以及 Managed Service Packages。或者由Cloudera Manager自动安装它们,但是必须能够联网。
Oracle JDK已经安装完成,注意,每台服务器上都要安装JDK。所以,接下来先安装 Cloudera Manager Agent。
Cloudera Manager Agent负责启动和停止进程,触发安装以及监控集群中的所有主机。你可以手动在所有服务器上安装Cloudera Manager Agent,或者稍后由Cloudera Manager自动安装。注意,手动安装时,每台服务器上都要进行如下的步骤(包括运行Cloudera Manager Service Roles的服务器:Service Monitor, Activity Monitor, Event Server, Alert Publisher, or Reports Manager):
如果配置了yum repo,则可以使用如下命令安装:
sudo yum install cloudera-manager-agent cloudera-manager-daemons
否则,直接使用下载的rpm包进行安装,命令如下:
sudo yum --nogpgcheck localinstall cloudera-manager-daemons-*.rpm
sudo yum --nogpgcheck localinstall cloudera-manager-agent-*.x86_64.rpm
当安装完成之后,在每一台主机上,配置Cloudera Manager Agent指向Cloudera Manager Server,配置文件为/etc/cloudera-scm-agent/config.ini,配置如下:
1. server_host:运行Cloudera Manager Server的主机的名称(ip地址)。
2. server_port:运行Cloudera Manager Server的主机上的端口。默认7182。
Cloudera Manager和Cloudera Navigator使用的默认端口详情请参考Ports Used by Cloudera Manager and Cloudera Navigator。配置实例如下图1.12所示:
当启动Agent的时候,它将会和Cloudera Manager Server通信。如果通信失败,请参考Troubleshooting Installation and Upgrade Problems。
CDH和Managed Service Packages同样能够由Cloudera Manager自动安装或者手动安装,即使用Parcels安装或者Packages安装。之前,使用的都是yum install Packages安装的,Parcels是专用于Cloudera Manager安装的格式,使用Parcels安装,Cloudera Manager自动下载,分发和激活程序。为了区别,Parcels默认安装在/opt/cloudera/parcels,Packages默认安装在/usr/lib。使用Packages安装的话,就无法再使用Parcels安装了,在同一个集群中,你无法即使用Packages又使用Packages安装软件,只能二者选一,所以,这里选择使用Parcels安装。
1. 启动Cloudera Manager
sudo service cloudera-scm-agent start # 所有服务器
sudo service cloudera-scm-server start # Cloudera Manager Server服务器
稍后几分钟,等待Cloudera Manager Server启动成功。在Cloudera Manager Server服务器上。可以查看/var/log/cloudera-scm-server/cloudera-scm-server.log日志,观察启动的过程。如果出错,请参考Troubleshooting Installation and Upgrade Problems。
当Cloudera Manager启动成功之后,访问地址http://Server host:port, 端口默认7180,进入Web界面,首先出现的登录界面,默认的用户名:admin,密码:admin。接下来是最终用户协议和条件,点击YES之后,进入Welcome to Cloudera Manager界面。如下图1.13所示:
在这里选择免费版本,提供的功能相较于企业版少一些,通常情况下,已经够用了。
点击继续以进入安装界面,如下图1.14所示:
这一步,有两个选项卡,如果没有提前手动安装和启动Cloudera Manager Agent,则选择“新主机”,填入主机名,Cloudera Manager Server自动搜索能够免密登录的主机,然后在其上自动安装Cloudera Manager Agent。由于已经安装和启动了Cloudera Manager Agent,并且成功启动,这里选择“当前管理的主机”,就能够直接看到启动了Cloudera Manager Agent的主机,勾选上即可。如果“当前管理的主机”显示的不完全,同样可以使用新主机进行搜索。如下图1.15所示:
勾选上“当前受管”为否的主机,此时主机“dyl02”因为“当前受管”状态为是,所以无法勾选,这一步先忽略该主机,下一步,显示如下图1.17所示:
注:事后检测原因,由于直接克隆的虚拟机,导致/var/lib/cloudera-scm-agent/uuid内容相同,即agent的uuid相同,所以,只能显示出一个agent,无法两个agent同时存在,将集群中主机删除,修改其中一个uuid内容,然后在Cloudera Manager界面重新添加主机,之后重新进入集群安装,与下列步骤相同。
这一步,需要选择安装CDH的方式,有两种方式,使用数据包和使用Parcel,如果服务器已经使用数据包安装了CDH,则这里不能再选择使用Parcel,两者无法同时使用,建议选择Parcel。
使用Parcel安装,可以选择离线安装和在线安装,在线安装时,Cloudera Manager自动下载所需包,默认存放到/ opt/cloudera/parcel-repo,如果服务器无法联网,或者网速较慢,可以提前下载下来,将所需文件放入该目录,下载地址为:
https://archive.cloudera.com/cdh5/parcels/5.12.0/
下载内容:
CDH-5.12.0-1.cdh5.12.0.p0.29-el7.parcel
CDH-5.12.0-1.cdh5.12.0.p0.29-el7.parcel.sha1
manifest.json
将CDH-5.12.0-1.cdh5.12.0.p0.29-el7.parcel.sha1重命名CDH-5.12.0-1.cdh5.12.0.p0.29-el7.parcel.sha,同时编辑内容,将hashcode后面的url去掉。
如图1.17所示,勾选“使用Parcel安装”,选择CDH版本为CDH-5.12.0-1.cdh5.12.0.p0.29,点击“继续”,进入下一步,选择是否安装Oracle Java SE开发工具,由于已经安装完成,这一步直接“继续”,进入“启用单用户模式”,不启动单用户模式,直接“继续”,接下来,提供SSH登录凭据,如下图1.18所示:
同时安装的数量设置为适当的数值,这里因为是虚拟机,所以设置为1。点击“继续”,第五步时,将进行Cloudera Manager集群的安装,一段时间之后,集群安装成功,如下图1.19所示:
下一步,将会安装CDH集群,这一步,如果没有预先下载CDH包,则首先会下载CDH,这里已经提前下载,所以将会直接安装。等待一段时间,CDH安装完成,如下图1.20所示:
继续之后,将检查主机正确性,等待约一分钟,检测结果如下图1.21所示:
如上图1.21所示,建议vm.swappiness设置为10等建议,根据其提示进行相关操作,如下图1.22所示:
浏览器输入网址:http://192.168.42.131:7180,进入Cloudera Manager管理界面之后,首先需要先添加Cloudera Manager Service,在右上角,如下图1.21所示,点击“添加Cloudera Manager Service”:
弹出界面如下图1.22所示,选择性填入有效信息之后,完成添加:
在没有添加Cloudera Manager Service时,首页可能会报错,比如无法连接Host Monitor等,启动该服务成功,等待一段时间,所有服务准备就绪,首页正常,如下图1.23所示:
如下图1.24是Cloudera Manager Service提供的服务,包括了Host Monitor:
如上,已经完成Cloudera Manager的基本部署,需要的功能,只需要在Cloudera Manager的Web上添加服务,并且完成对应的配置,即可完成部署和启动。
Cloudera Manager的服务之间,很多是有依赖关系的,例如,如果需要Hive服务,则需要先安装HDFS和YARN服务,所以,接下来,先添加HDFS服务,如下图1.25所示:
首先,如上图1.25所示,单击“添加服务”,将进入下图1.26所示界面,选择HDFS服务,
如上图1.26所示,点击继续,进入HDFS服务配置界面,如下图1.27所示:
选择主机的角色,分配不同的功能,如上图6.27所示,“dyl02”主机作为NameNode,“dyl”主机作为DataNode,单击“继续”,进入更改HDFS大小,数据目录等配置,根据需要修改,单击“继续”,进入部署界面,开始运行命令,配置并启动HDFS,等待完成,点击“继续”,进入成功界面,点击“完成”,成功添加HDFS服务。
YARN服务依赖HDFS服务,如上已经完成HDFS服务的安装与启动,则可以继续添加YARN服务。同样,如图1.25所示,点击“添加服务”按钮,选择YARN,分配主机角色,如下图1.28所示:
根据主机配置,分配不同功能,这里由于“dyl”主机内存不足,分配到“dyl02”主机上。点击“继续”,将会配置NodeManager本地目录,配置后继续,将开始部署和启动YARN服务,启动完成之后,点击“继续”,等待YARN服务添加到集群中,直接点击“完成”
如上图1.25所示,点击“添加服务”,选择Hive,进入Hive配置界面,首先选择主机,如下图1.29所示:
根据主机配置,选择Hive安装到哪台主机上,点击“继续”,将配置hive metadata数据库,如下图1.30所示:
在前面章节安装外部服务器mariaDB时,已经创建了hive的元数据库metastore,按照提示填入对应信息即可。
如上图1.30所示,无法找到jdbc驱动程序,操作和6.4.2.3中相同,“dyl02”服务器上传mysql-connector-java.jar到/usr/share/java中,Cloudera Manager Agent默认加载该目录下jar包。再次点击“测试连接”,显示成功,点击“继续”,显示配置hive目录和端口的界面,点击“继续”,开始部署并启动hive,如下图1.31所示:
从图1.31可以看出,自动创建了Hive Metastore的数据库表,如上,已经添加了HDFS,YRAN和Hive服务,离线数据库Hive的部署完成,表明已经可以通过Flume,向Hive写入数据了。
其他服务,例如hue,HBase等的添加过程类似,在这里不一一赘述。注意,安装HBase之前,需要首先安装Zookeeper服务。