15_Java枚举
549 2023-04-03 04:23:41
在众多 Hadoop 版本中, CDH(Cloudera Hadoop) 是 Hadoop 众多分支中比较出色的版本, 它由Cloudera 发行和维护。CDH 基于 Apache 的 Hadoop 进行重新构建,提供了基于 Web 页面的群集部署和管理操作。Hadoop发行版除了社区的
Apache hadoop
外,Cloudera Hadoop(CDH)
、Hortonworks、MapR、EMC、IBM、INTEL、华为等都提供自己的商业版本。
从2021年2月1日起,所有CDH和Cloudera Manager的下载都需要用户名和密码,说白了就是需要money,用户只能通过购买正式许可证才能够在线下载CM和CDH安装包,但是有免费版,只不过不让在线安装了,所以这里使用本地离线安装方式。
官方文档:https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/introduction.html
维护人员比较多,更新频率比较快,稳定性相对比较差。
Cloudera公司的发行版本,基于Apache Hadoop的二次开发,优化了组件兼容和交互接口、简化安装配置、增加Cloudera兼容特。
Hive数据仓库软件支持对分布式存储中的大型数据集进行读写和管理。HiveQL (Hive query language)是一种与SQL非常相似的查询语言,通过MapReduce或Apache Spark将查询转换成一系列的任务,在Hadoop集群上执行。关于Hive,也可以参考我之前的文章:大数据Hadoop之——数据仓库Hive
用户可以使用Hive运行批处理工作负载,同时也可以使用Apache Impala或Apache spark等工具分析交互SQL或机器学习工作负载的相同数据——所有这些都在一个平台中。
作为CDH的一部分,Hive还依赖于:
Impala解决方案由以下组件组成:
【温馨提示】
HUE=Hadoop User Experience
( Hadoop用户体验),直白来说就一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,最后Cloudera公 司将其贡献给Apache基金会的Hadoop社区,它是基于Python Web框架Django实现的。通过使用HUE我们可以在浏览器端的We联制台上与Hadoop 集群进行交互来分析处理数据。
Apache Kudu是一个为Hadoop平台开发的柱状存储管理器。Kudu拥有Hadoop生态系统应用程序的共同技术属性:它运行在商用硬件上,具有水平可伸缩性,并支持高可用性操作。
Apache Kudu与Apache Impala紧密集成,允许您使用Impala的SQL语法从Kudu平板电脑插入、查询、更新和删除数据,这是使用Kudu api构建自定义Kudu应用程序的另一种选择。此外,您可以使用JDBC或ODBC将现有的或用任何语言、框架或商业智能工具编写的新应用程序连接到您的Kudu数据,使用Impala作为代理。
CREATE/ALTER/DROP TABLE
—Impala支持使用Kudu作为持久化层创建、修改和删除表。这些表遵循与Impala中其他表相同的内部/外部方法,允许灵活地接收和查询数据。INSERT
—使用与HDFS或HBase持久化表相同的机制,Impala可以将数据插入到Kudu表中。UPDATE/DELETE
—Impala支持UPDATE和DELETE SQL命令,可以逐行或批量修改Kudu表中的现有数据。SQL命令的语法被设计成尽可能与现有解决方案兼容。除了简单的DELETE或UPDATE命令外,您还可以在查询的FROM子句中指定复杂的连接,使用与常规SELECT语句相同的语法。Apache Sentry
是Hadoop的一个基于角色的细粒度授权模块。Sentry提供了在Hadoop集群上为经过身份验证的用户和应用程序控制和强制数据上的精确权限级别的能力。目前,Sentry在Apache Hive、Hive Metastore/HCatalog、Apache Solr、Impala和HDFS(仅限于Hive表数据)上都是开箱可用的。
Sentry被设计成一个可插拔的Hadoop组件授权引擎。它允许您定义授权规则来验证用户或应用程序对Hadoop资源的访问请求。Sentry是高度模块化的,可以支持Hadoop中各种数据模型的授权。
可以参考我之前Spark的几篇文章:
Cloudera Manager是一个端到端用于管理CDH集群的应用程序。Cloudera Manager通过提供对CDH集群每个部分的细粒度可见性和控制,为运营商提高性能、提高服务质量、提高合规和降低管理成本设定了企业部署的标准。使用Cloudera Manager,您可以轻松地部署和集中操作完整的CDH堆栈和其他托管服务。该应用程序自动化安装过程,将部署时间从几周减少到几分钟;提供集群范围内主机和服务运行的实时视图;提供单一的中央控制台来执行跨集群的配置更改;并整合了一系列的报告和诊断工具,以帮助您优化性能和利用率。本入门介绍了Cloudera Manager的基本概念、结构和功能。
为了有效地使用Cloudera Manager,您应该首先理解它的术语。这些术语之间的关系如下所示,它们的定义如下:
Cloudera Manager和它管理的所有集群的配置。
在Cloudera Manager中,一个命名的资源配置和一个用于在YARN应用程序或池中运行的Impala查询之间调度资源的策略。
在Cloudera Manager中,运行角色实例的物理或虚拟机。一个主机只能属于一个集群。
在Cloudera Manager中,包含一组物理主机的物理实体,通常由同一台交换机提供服务。
service
service instance
在Cloudera Manager中,集群中运行的服务实例。例如:“HDFS-1”、“yarn”。一个服务实例跨越多个角色实例。
在Cloudera Manager中,服务中的一个功能类别。例如,HDFS服务的角色有:NameNode、SecondaryNameNode、DataNode、Balancer。有时称为角色类型。
在Cloudera Manager中,运行在主机上的角色实例。它通常映射到Unix进程。例如:“NameNode-h1”、“DataNode-h1”。
在Cloudera Manager中,一组角色实例的一组配置属性。
Cloudera Manager中的一组角色组。将模板应用到主机时,每个角色组中会创建一个角色实例,并分配给该主机。
gateway
parcel
一种二进制发布格式,包含已编译代码和元信息,如包描述、版本和依赖关系。
在Cloudera Manager中,对一组服务的总集群资源(cpu、内存和I/O权重)进行静态分区。
如下图所示,Cloudera Manager的核心是Cloudera Manager Server。服务器承载管理控制台Web Server和应用程序逻辑,并负责安装软件、配置、启动和停止服务,以及管理服务运行的集群。
Cloudera Manager服务器与其他几个组件一起工作:
15秒
向Cloudera Manager服务器发送一次心跳。然而,为了减少用户延迟,当状态发生变化时,频率会增加。Cloudera Manager Server维护集群的状态。这种状态可以分为两类:“模型”和“运行时”,两者都存储在Cloudera Manager Server数据库中。
Cloudera Manager定义了几个级别的配置:
在典型的环境中,主机集具有相同的硬件和运行在其上的相同的服务集。主机模板在集群中定义了一组角色组(每种类型最多一个),主要有两个好处:
/etc/hadoop/conf
,然后重启HDFS没有效果。这是因为由Cloudera Manager启动的服务实例不会从默认位置读取配置。以HDFS为例,当不被Cloudera Manager管理时,每台主机通常会有一个HDFS配置,位于/etc/hadoop/conf/hdfs-site.xml
。在同一主机上运行的服务器端守护进程和客户端都将使用相同的配置。/etc/hadoop/conf/hdfs-site.xml
”文件中只包含与HDFS客户端相关的配置。也就是说,默认情况下,如果您运行一个需要与Hadoop通信的程序,它将从该目录获取NameNode和JobTracker的地址,以及其他重要配置。/etc/hbase/conf和/etc/hive/conf采用了类似的方法。$ tree -a /var/run/cloudera-scm-Agent/process/879-hdfs-NAMENODE/ /var/run/cloudera-scm-Agent/process/879-hdfs-NAMENODE/ ├── cloudera_manager_Agent_fencer.py ├── cloudera_manager_Agent_fencer_secret_key.txt ├── cloudera-monitor.properties ├── core-site.xml ├── dfs_hosts_allow.txt ├── dfs_hosts_exclude.txt ├── event-filter-rules.json ├── hadoop-metrics2.properties ├── hdfs.keytab ├── hdfs-site.xml ├── log4j.properties ├── logs │ ├── stderr.log │ └── stdout.log ├── topology.map └── topology.py
区分服务器和客户端配置提供了几个优点:
在一个非cloudera Manager管理的集群中,你很可能使用init脚本启动一个角色实例进程,例如service hadoop-hdfs-datanode start。Cloudera Manager不为它管理的守护进程使用init脚本;在由Cloudera Manager管理的集群中,使用init脚本启动和停止服务是无效的。
在由Cloudera Manager管理的集群中,只能通过Cloudera Manager启动或停止角色实例进程。Cloudera Manager使用一个名为supervisor的开源进程管理工具,该工具启动进程,负责重定向日志文件、通知进程失败、将调用进程的有效用户ID设置为正确的用户,等等。Cloudera Manager支持自动重启崩溃的进程。如果一个角色实例的进程在启动后多次崩溃,它还会用一个糟糕的健康状况标志来标记它。
停止Cloudera Manager服务器和Cloudera Manager代理不会导致服务停止;任何正在运行的角色实例都将继续运行。
Agent以init方式启动。d在启动。然后,它又与Cloudera Manager Server联系,确定应该运行哪些进程。Agent作为Cloudera Manager主机监控的一部分被监控。如果Agent停止心跳,主机将被标记为健康状态不良。
Agent的主要职责之一是启动和停止流程。当Agent从Server heartbeat中检测到一个新进程时,Agent会在/var/run/cloudera-scm-agent中为它创建一个目录,并解包配置。然后它联系监督者,监督者开始这个过程。
这些行动强化了一个重要的观点:Cloudera Manager流程从不单独运行。换句话说,进程不仅仅是exec()的参数,它还包括配置文件、需要创建的目录和其他信息。
Cloudera Manager的一个主要功能是安装和升级CDH和其他托管服务。Cloudera Manager支持两种软件分发格式:
packages and parcels
。
包是一种二进制分发格式,包含程序文件,以及Cloudera Manager使用的额外元数据。包裹和包裹之间的重要区别是:
/opt/cloudera/ packages
目录下。相反,包安装在/usr/lib目录下。资源管理通过定义不同服务对集群资源的影响,帮助确保可预测的行为。使用资源管理:
使用cgroups静态分配资源可以通过单个静态服务池向导进行配置。您按总资源的百分比分配服务,向导配置cgroup。
以下图为例,HBase、HDFS、Impala、YARN服务的静态池分别分配20%、30%、20%、30%的集群资源为例。
通过使用动态资源池,可以动态分配静态分配给YARN和Impala的资源。
根据你使用的CDH版本,clouddera Manager中的动态资源池支持以下场景:
Cloudera Manager提供了几种用户身份验证机制。您可以配置Cloudera Manager,根据Cloudera Manager数据库或外部身份验证服务对用户进行身份验证。外部认证服务可以是LDAP服务器(Active Directory或OpenLDAP兼容目录),也可以指定其他外部服务。Cloudera Manager还支持使用安全断言标记语言(SAML)来支持单点登录。
Cloudera Manager致力于整合多个项目的安全配置。身份验证是一个过程,在尝试访问系统资源时,用户和服务需要证明他们的身份。组织通常通过各种经过时间考验的技术来管理用户身份和身份验证,包括用于身份、目录和其他服务(如组管理)的轻量级目录访问协议(Lightweight Directory Access Protocol, LDAP)和用于身份验证的Kerberos。
Cloudera管理服务以一组角色的形式实现各种管理特性:
【温馨提示】centos8会存在不兼容问题
$ hostnamectl set-hostname hadoop-cdhmaster-168-182-161$ hostnamectl set-hostname hadoop-cdhslave01-168-182-162$ hostnamectl set-hostname hadoop-cdhslave02-168-182-163
$ cat >> /etc/hosts << EOF192.168.182.161 hadoop-cdhmaster-168-182-161192.168.182.162 hadoop-cdhslave01-168-182-162192.168.182.163 hadoop-cdhslave02-168-182-163EOF
$ systemctl stop firewalld$ systemctl disable firewalld
$ sed -i "s/.*SELINUX=.\*/SELINUX=disabled/g" /etc/selinux/config
$ yum -y install chrony$ systemctl start chronyd$ chronyc sources -v# 同步硬件时钟到系统时钟$ hwclock --systohc# 检测时间$ timedatectl
CDH 6中的Hue要求Python 2.7.5或更低,默认包含在RHEL 7兼容的操作系统(os)中。Centos7一般自带了Python 2.7.5了,可以跳过,如果没有,则按下面命令安装。
$ yum install python275$ ln -s /usr/bin/python2 /usr/bin/python$ python --version
下图概述了Cloudera Manager、Cloudera Navigator和Cloudera Management Service角色使用的一些端口。
Cloudera Manager和Cloudera Navigator使用的端口
点对点包裹分发中使用的端口
更多使用的端口信息,可以参考官方文档:https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/cm_ig_ports_cm.html
$ ssh-keygen$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop-cdhmaster-168-182-161$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop-cdhslave01-168-182-162$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop-cdhslave02-168-182-163
官方文档
$ yum install java-1.8.0-openjdk-devel -y
【温馨提示】最好按照官方的方式安装jdk,要不然可能会出现服务起不来。
所有集群节点都要执行,禁用交换分区和透明大页,否则会在安装配置 CDH 群集环境检测中报错。
$ sysctl -w vm.swappiness=0$ echo "vm.swappiness=0" >> /etc/sysctl.conf$ echo never > /sys/kernel/mm/transparent_hugepage/defrag$ echo never >/sys/kernel/mm/transparent_hugepage/enabled$ echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.d/rc.local$ echo "echo never > /sys/kernel/mm/transparent_hughugepage/enabled" >> /etc/rc.d/rc.local
https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_cdh_63_packaging.html#cdh_630_packaging
$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm$ rpm -ivh mysql-community-release-el7-5.noarch.rpm$ yum update -y# 安装$ yum install mysql-server -y
配置/etc/my.cnf
$ cat >> /etc/my.cnf << EOF[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socktransaction-isolation = READ-COMMITTED# Disabling symbolic-links is recommended to prevent assorted security risks;# to do so, uncomment this line:symbolic-links = 0key_buffer_size = 32Mmax_allowed_packet = 16Mthread_stack = 256Kthread_cache_size = 64query_cache_limit = 8Mquery_cache_size = 64Mquery_cache_type = 1max_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#In later versions of MySQL, if you enable the binary log and do not set#a server_id, MySQL will not start. The server_id must be unique within#the replicating group.server_id=1binlog_format = mixedread_buffer_size = 2Mread_rnd_buffer_size = 16Msort_buffer_size = 8Mjoin_buffer_size = 8M# InnoDB settingsinnodb_file_per_table = 1innodb_flush_log_at_trx_commit = 2innodb_log_buffer_size = 64Minnodb_buffer_pool_size = 4Ginnodb_thread_concurrency = 8innodb_flush_method = O_DIRECTinnodb_log_file_size = 512M[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pidsql_mode=STRICT_ALL_TABLESEOF
启动服务
# 启动$ systemctl start mysqld$ systemctl status mysqld# 开机自启动$ systemctl enable mysqld# 登录,默认没有密码$ mysql
设置root密码
$ /usr/bin/mysql_secure_installation
连接验证
$ mysql -uroot -p -h密码:123456### scmCREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY '123456';### amonCREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY '123456';### rmanCREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY '123456';### hueCREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY '123456';### hiveCREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY '123456';### sentryCREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY '123456';### navCREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY '123456';### navmsCREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY '123456';### oozieCREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY '123456';# 最后刷新一下flush privileges;### 检查show databases;
用于各节点连接数据库,JDBC的版本跟mysql版本对应。
$ mkdir /opt/software/CDH /opt/server/CDH -p$ cd /opt/software/CDH$ wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz$ tar -xf mysql-connector-java-5.1.46.tar.gz# 必须放在/usr/share/java/这个目录下,没有就创建,而且名字得改成mysql-connector-java.jar $ mkdir -p /usr/share/java/$ cp mysql-connector-java-5.1.46/mysql-connector-java-5.1.46.jar /usr/share/java/mysql-connector-java.jar
【温馨提示】cloudera-manager-daemons是守护进程,所有节点都得安装。
CDH官方的网站已经无法直接下载安装包了(需要账号密码),也就是说需要钱了,不是免费的了,这里提供百度云下载地址。
链接:https://pan.baidu.com/s/16raZeCbAxoqx6A54Fo3-Nw
提取码:6666
把下载好的压缩包解压,并用python 启动一个本地服务作为本地仓库
$ cd /opt/software/CDH/$ unzip CDH6.3.2.zip$ cd CDH6.3.2$ tar -xf cm6.3.1-redhat7.tar.gz$ python -m SimpleHTTPServer 8080
配置本地yum源(所有节点)
$ cat > /etc/yum.repos.d/cloudera-manager.repo << EOF[cloudera-manager]name=Cloudera-Managerbaseurl=http://hadoop-cdhmaster-168-182-161:8080/cm6.3.1/gpgcheck=0enabled=1EOF# 清除缓存并生成新的缓存$ yum clean all$ yum makecache
$ yum install -y cloudera-manager-agent cloudera-manager-daemons cloudera-manager-server
$ yum install -y cloudera-manager-agent cloudera-manager-daemons
# /opt/cloudera/cm/schema/scm_prepare_database.sh <databaseType> <databaseName> <databaseUser> <password>$ /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm root 123456
会去修改CM server的db配置文件/etc/cloudera-scm-server/db.properties
# 修改server_host,跟CM心态检测,根据自己的主机名来修改$ sed -i '/server_host=/cserver_host=hadoop-cdhmaster-168-182-161' /etc/cloudera-scm-agent/config.ini
$ systemctl start cloudera-scm-server$ systemctl status cloudera-scm-server$ jps# 会启动端口7180的服务,服务启动有点慢,需要等待一段时间netstat -tnlp|grep 7180# 日志目录:/var/log/cloudera-scm-server/
$ systemctl start cloudera-scm-agent$ systemctl status cloudera-scm-agent# 日志目录:/var/log/cloudera-scm-agent/
web UI访问(账号/密码):http://hadoop-cdhmaster-168-182-161:7180/
因为CDH本身就是商业版,所以需要高级功能还是需要收费的,这里选择免费版
下面这个页面需要点时间,耐心等待一下
【温馨提示】需要安装CM agent才会显示,如果看不到,请检查CM agent服务是否正常。
$ cd /opt/server/CDH$ mkdir cloudera/parcels -p$ mkdir cloudera/parcel-repo -p
把上面的离线包里的这些文件提前放在/opt/server/CDH/cloudera/parcel-repo
目录下
$ cp /opt/software/CDH/CDH6.3.2/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel* /opt/server/CDH/cloudera/parcel-repo/$ cp /opt/software/CDH/CDH6.3.2/manifest.json /opt/server/CDH/cloudera/parcel-repo/$ ll /opt/server/CDH/cloudera/parcel-repo/# 目录需要写入权限$ chmod 777 /opt/server/CDH/cloudera/parcel-repo
这里也加一个本地仓库地址,怎么启动本地仓库服务,上面有讲,这里就不再重复了。哪个快会自动选择哪个。也可以不加,看自己选择
这里需要比较长的时间,请耐心等待,自动完成后会自动跳转到下一步。
没问题的话,就直接下一步了。
到这里安装包已经完成下载、分配、解压、激活的操作了,接下来才是正真安装CDH组件相关的服务
选择组件组合,也可以自定义,这里我选择自定义
有些是自动分配的,有些没分配的就得手动配置机器,hive 选择的机器需要选择mysql的机器,要不然检测到机器上没有mysql,就会有问题。
默认就行,直接下一步
组件安装并自动启动,时间有点久,等待即可
到此CDH 6.3.2环境部署就完成了,后面会有更多关于其它组件集成到CDH的文章,请小伙伴耐心等待,有什么问题或者意见欢迎给我留言~