3. CDH平台部署

CDH平台部署

大数据发行版本主要有Apache官方社区版本,cloudera推出的CDH商业版本,还有Hortonworks推出的HDP商业免费版本,HDP版本已被cloudera收购。

Apache官方社区版本:

  • 完全开源,更新速度快
  • 大数据组件在部署过程中需要手动安装,配置,管理
  • 可以了解各种组件的依赖关系,以及组件的原理及配置参数
  • 适合学习研究,大规模生产环境不推荐使用,管理复杂,兼容性差

CDH (Cloudera Distribution Including Apache Hadoop)版本:

  • 为解决Apache原生版本部署难,配置复杂,兼容性差等问题,cloudera推出CDH版本
  • CDH版本是大数据相关项目中最完整、最稳定、经过测试与最流行的版本,安装过程自动化,配置简单,兼容性好
  • Cloudera Manager 是CDH版本的核心组件,它负责管理CDH集群的B/S(Browser/Server)应用程序,提供集群管理、监控、配置、升级等功能

Hortonworks版本 (Hortonworks Data Platform,简称HDP):

  • Cloudera 和 Hortonworks 于 2019 年 1 月 3 日宣布合并,成立新公司 Cloudera。从 2021 年 1 月 31 日开始不再免费提供给新用户。

其他发行版本:

  • Apache Ambari + Bigtop
    • 大数据平台集成运维管理工具,具备Hadoop组件的安装、管理、运维等基本功能,提供Web UI进行可视化的集群管理,简化了大数据平台的安装、使用难度。
    • 官网地址:https://ambari.apache.org
  • CRH
    • 基于分布式技术的新一代大数据架构。产品由 CRF 数据接入,CRH 数据存储,CRS 数据分析 三大部分构成。为企业提供开放统一的大数据存储和处理环境,产品兼容支持Hadoop生态圈中主要工具,提供PB级海量数据存储、查询、分析和挖掘能力。
    • 官网地址:https://www.redoop.com
  • CloudEon
    • CloudEon 是一款基于kubernetes的开源大数据平台,旨在为用户提供一种简单、高效、可扩展的大数据解决方案。
    • 官网地址:https://cloudeon.top
  • DataSophon
    • DataSophon 是一个国产开源的大数据管理平台,在兼顾传统 Hadoop 组件的同时又支持新一代大数据组件栈,并且支持云原生的能力,致力于快速实现大数据组件部署、监控以及自动化运维管理,旨在帮助用户快速构建稳定、高效、自愈、可弹性伸缩的大数据云原生平台。致力于自动化监控、运维、管理大数据基础组件和节点的,帮助您快速构建起稳定,高效的大数据集群服务。
    • 官网地址:https://datasophon.github.io/datasophon-website
  • HiDataPlus
    • HiDataPlus 一个可持续升级的免费Hadoop发行版;HidataPlus是由几个热爱开源软件的成员组成,因为Hortonworks和Cloudera合并等原因,原有的HDP版本不再更新,集成了新的版本。
    • 官网地址:http://www.hdp.link
  • LarkMidTable
    • LarkMidTable 是一站式开源的数据中台,实现元数据管理,数据仓库开发,数据质量管理,数据的可视化,实现高效赋能数据前台并提供数据服务的产品。
    • 官网地址:https://github.com/birdLark/LarkMidTable
  • PackOne
    • PackOne 致力于简化大数据软件在各类云上的弹性部署流程。通过对云API和Apache Ambari API的联合调用,完成Hadoop、Spark、NiFi、PiFlow、Kylin、MangoDB、Neo4J、Redis等流行的大数据管理/处理软件在云端的一键快速部署和一键伸缩。PackOne目前已支持OpenStack、H3CloudOS、EVCloud等私有云系统,以及公有云中国科技云(CSTCloud)。
    • 官网地址:https://gitee.com/opensci/packone
  • USDP
    • USDP (UCloud Smart Data Platform) 是 UCloud 推出的智能化、轻量级的大数据基础服务平台,能够帮您快速构建起大数据的分析处理能力。
    • 官网地址:https://www.ucloudstack.com/product-usdp-smart
  • 阿里 MaxCompute
    • MaxCompute是适用于数据分析场景的企业级SaaS(Software as a Service)模式云数据仓库,以Serverless架构提供快速、全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您可以经济并高效地分析处理海量数据。
    • 官网地址:https://www.alibabacloud.com/help/zh/maxcompute
  • 华为 MRS
  • 宇动源 BDP
    • BDP 大数据基础平台是对现有大数据底层技术的封装和提升。通过统一数据访问、统一资源服务、统一计算调度、融合计算、融合存储等技术手段,屏蔽了底层技术的复杂度。为上层应用提供一个使用更方便、维护更轻松、扩展更容易的基础平台。
    • 官网地址:https://www.cosmosource.com/bdp.html
  • 智领云 KDP
    • KDP (Kubernetes Data Platform) 是智领云自主研发的,市场上首个可完全在Kubernetes上部署的容器化云原生大数据平台,深度整合了云原生架构的优势,将大数据组件及数据应用纳入Kubernetes管理体系,标准化系统管理,提升系统运行效率,降低运维成本,消除应用孤岛及数据孤岛,解决传统Hadoop大数据平台在部署,运维,运行效率上由于架构限制带来的难点。
    • 官网地址:https://www.linktimecloud.com/kubernetes-data-platform
  • 时速云KubeData
    • 云原生数据平台 KubeData® 是基于云原生技术打造的一站式可视化数据建设和数据开发平台。集容器云、数据汇聚、数据规划、数据开发、数据智能、数据资产、数据服务功能于一体。
    • 官网地址:https://www.tenxcloud.com/kubedata
  • 网易数帆NDH
    • 有数大数据基础平台 NDH (NetEase Digital Sail Youshu DataHub) 是网易数帆最新推出的企业级大数据基础平台。产品基于最新开源技术打造,内置多种存储计算引擎,并在Hadoop、Spark、Impala等多个核心组件做了功能及性能增强,新增Easyeagle实现智能运维和任务治理,支持企业级安全管控。
    • 官网地址:https://sf.163.com
  • 星环 TDH
    • TDH (Transwarp Data Hub) 是国内外领先的高性能平台,比开源基于Hadoop MapReduce计算框架的版本快10x~100x倍。TDH 应用范围覆盖各种规模和不同数据量的企业,通过内存计算、高效索引、执行优化和高度容错的技术,使得一个平台能够处理GB级到PB级的数据,并且在每个数量级上,都能比现有技术提供更快的性能;企业客户不再需要混合架构,TDH可以伴随企业客户的数据增长,动态不停机扩容,避免MPP或混合架构数据迁移的棘手问题。
    • 官网地址:https://www.transwarp.cn/product/tdh

Cloudera Manager

Cloudera Manager是Cloudera公司开发的一款大数据集群管理工具,它可以帮助用户快速部署、配置和管理Hadoop集群。Cloudera Manager提供了以下功能:

  1. 集群管理:Cloudera Manager可以管理Hadoop集群中的各个节点,包括HDFS、YARN、HBase等组件。
  2. 集群监控:Cloudera Manager可以实时监控集群的状态,包括CPU、内存、磁盘空间等资源的使用情况。
  3. 集群配置:Cloudera Manager可以方便地配置集群中的各个组件,包括HDFS、YARN、HBase等。
  4. 集群升级:Cloudera Manager可以方便地升级集群中的各个组件,包括Hadoop、HBase等。
  5. 集群备份和恢复:Cloudera Manager可以备份和恢复集群中的数据,确保数据的完整性和安全性。

Cloudera Manager的架构主要包括以下几个组件:

  1. Cloudera Manager Server:Cloudera Manager Server是Cloudera Manager的核心组件,它负责管理集群中的各个节点,包括HDFS、YARN、HBase等组件。
  2. Cloudera Manager Agent:Cloudera Manager Agent是安装在集群中的每个节点上的代理程序,它负责执行Cloudera Manager Server发送的命令,并收集节点的状态信息。
  3. Cloudera Manager Agent Web UI:Cloudera Manager Agent Web UI是Cloudera Manager Agent的Web界面,用户可以通过它查看节点的状态信息,并执行一些管理操作。
  4. Cloudera Manager Repository:Cloudera Manager Repository是Cloudera Manager的软件仓库,它包含了Cloudera Manager Server和Cloudera Manager Agent所需的软件包。
  5. Cloudera Manager Database:Cloudera Manager Database是Cloudera Manager的数据库,它存储了集群的配置信息、节点状态信息等数据。

CDH6.3.2部署

数据库准备

-- set global validate_password_policy=LOW; 
create database metastore default character set utf8;
create user 'hive'@'%' identified by 'hiveHomeDSJ123';
grant all privileges on metastore.* to 'hive'@'%';

create database cm default character set utf8;
create user 'cm'@'%' identified by 'cmHomeDSJ123';
grant all privileges on cm.* to 'cm'@'%';

create database am default character set utf8;
create user 'am'@'%' identified by 'amHomeDSJ123';
grant all privileges on am.* to 'am'@'%';

create database rm default character set utf8;
create user 'rm'@'%' identified by 'rmHomeDSJ123';
grant all privileges on rm.* to 'rm'@'%';

create database hue default character set utf8;
create user 'hue'@'%' identified by 'hueHomeDSJ123';
grant all privileges on hue.* to 'hue'@'%';

create database oozie default character set utf8;
create user 'oozie'@'%' identified by 'oozieHomeDSJ123';
grant all privileges on oozie.* to 'oozie'@'%';

create database sentry default character set utf8;
create user 'sentry'@'%' identified by 'sentryHomeDSJ123';
grant all privileges on sentry.* to 'sentry'@'%';

create database nas default character set utf8;
create user 'nas'@'%' identified by 'nasHomeDSJ123';
grant all privileges on nas.* to 'nas'@'%';

create database nms default character set utf8;
create user 'nms'@'%' identified by 'nmsHomeDSJ123';
grant all privileges on nms.* to 'nms'@'%';

flush privileges;
-- exit;

-- 查看是否开启SSL
SHOW VARIABLES LIKE '%ssl%';

-- 修改配置文件my.cnf,加入以下内容:
[mysqld]
skip_ssl

-- 备份
mysqldump -h10.96.167.104 -uroot -p --all-databases --skip_add_locks --skip-lock-tables > mysql-cdh_`date +\%F`.sql    xxxxxxxxxxx
### hosts配置
172.16.100.40 kube-40    # CM server、CM agent、CM deamon、CDH
172.16.100.41 kube-41    # CM agent、CM deamon、CDH
172.16.100.42 kube-42    # CM agent、CM deamon、CDH

### 关掉防火墙
systemctl stop firewalld
systemctl disable firewalld

### 禁用SELINUX
setenforce 0   # 临时关闭
sed -i "s/.*SELINUX=.\*/SELINUX=disabled/g" /etc/selinux/config

### 时间同步
yum -y install chrony
systemctl start chronyd
chronyc sources -v  # 查看时间同步状态
# 同步硬件时钟到系统时钟
hwclock --systohc
# 检测时间
timedatectl

### 安装python  CDH 6中的Hue要求Python 2.7.5或更低,默认包含在RHEL 7兼容的操作系统(os)中。可跳过
yum install python275
ln -s /usr/bin/python2 /usr/bin/python
python --version

# 所有节点安装依赖
yum install gcc python-devel -y
yum install cyrus-sasl* -y

### jdk环境
yum install https://home.vimll.com:9999/download/jdk/jdk-8u361-linux-x64.rpm
cat >> /etc/profile <<EOF
export JAVA_HOME=/usr/java/jdk1.8.0_361-amd64
export JRE_HOME=\$JAVA_HOME/jre
export CLASSPATH=.:\$CLASSPATH:\$JAVA_HOME/lib:\$JRE_HOME/lib
export PATH=\$PATH:\$JAVA_HOME/bin:\$JRE_HOME/bin
EOF

### sshpass 节点之间免密
yum install -y sshpass
sshpass -p '123456' ssh-copy-id root@172.16.100.41
sshpass -p '123456' ssh-copy-id root@172.16.100.42

### 下载安装包
cd /usr/local/src
wget https://home.vimll.com:9999/download/hadoop/CDH6.3.2/cloudera-parcels.6.3.1.20230420.tar.gz
tar xf cloudera-parcels.6.3.1.20230420.tar.gz

### 安装 httpd
yum install -y httpd
# Listen 9080   # 修改端口监听
systemctl start httpd
systemctl enable httpd

mkdir -p /var/www/html/cm6.3.1
mkdir -p /var/www/html/cdh6.3.2
cd /usr/local/src/cloudera-parcels/cdh6/6.3.2/parcels
cp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel* manifest.json /var/www/html/cdh6.3.2/
cd /usr/local/src/cloudera-parcels/cm6/6.3.1
cp allkeys.asc cloudera-manager-*  /var/www/html/cm6.3.1/
cd /var/www/html/cm6.3.1/
wget https://home.vimll.com:9999/download/hadoop/enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm

### 访问
http://kube-40:9080/cdh6.3.2/
http://kube-40:9080/cm6.3.1/

### 创建repo的库
#在kube-40上安装createrepo工具
#createrepo 是一个对rpm 文件进行索引建立的工具。大体功能就是对指定目录下的rpm文件进行检索,
# 把每个rpm文件的信息存储到指定的索引文件中,这样方便远程yum命令在安装更新时进行检索。
yum install createrepo -y
cd /var/www/html/cm6.3.1
createrepo .

# 所有节点执行 baseurl改成我们上面配置的cm的http地址
cat > /etc/yum.repos.d/cloudera.repo <<EOF
[Cloudera_Manager]
name=Cloudera Manager 6.3.1
baseurl=http://kube-40:9080/cm6.3.1/
enabled=1
gpgcheck=0
EOF
yum repolist

# 所有节点 复制MySQL的JDBC包
mkdir /usr/share/java
cd /usr/share/java; wget https://home.vimll.com:9999/download/hadoop/CDH6.3.2/mysql-connector-java-5.1.48.jar
ln -s /usr/share/java/mysql-connector-java-5.1.48.jar /usr/share/java/mysql-connector-java.jar

### 安装CM
# 只在主节点执行
yum install cloudera-manager-server  cloudera-manager-agent -y

# 初始化CM元数据库
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h home.vimll.com -P 33306 --scm-host kube-40 cm cm cmHomeDSJ123

# 在从节点安装 cloudera-manager-agent
yum install  -y  cloudera-manager-agent

# 修改三台服务器cloudera-agent的config.ini文件,将server_host修改成 kube-40
vim /etc/cloudera-scm-agent/config.ini

# 在主节点启动cm服务
systemctl start cloudera-scm-server
systemctl status cloudera-scm-server
systemctl enable cloudera-scm-server
# 检查端口状态
netstat -lntup | grep 7180

# ### SSL 相关
# vim /etc/cloudera-scm-server/db.properties
# com.cloudera.cmf.db.useSSL=true
# com.cloudera.cmf.db.verifyServerCertificate=true
# com.cloudera.cmf.db.trustCertificateKeyStoreUrl=file:/usr/java/jdk1.8.0_121-cloudera/jre/lib/security/jssecacerts
# com.cloudera.cmf.db.trustCertificateKeyStoreType=JKS
# com.cloudera.cmf.db.trustCertificateKeyStorePassword=changeit

# # ssl 关闭
# com.cloudera.cmf.db.useSSL=false
# com.cloudera.cmf.db.verifyServerCertificate=false

# 查看日志
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log 

# 在主节点启动rpcbind
systemctl start rpcbind
systemctl enable rpcbind

# 在三台节点启动supervisord
systemctl start supervisord
systemctl enable supervisord

# 在三台节点启动cloudera-scm-agent
systemctl start cloudera-scm-agent
systemctl enable cloudera-scm-agent

配置cdh集群

# 在cm web页面中配置cdh集群。
# 登录cloudera manager管理页面,默认的账号、密码为:admin/admin  AdminJT@123

http://kube-40:7180

# "同意协议" -> "选择Cloudera Express" -> "选择节点" -> 要配置的所有节点的hostname
# 集群安装时库选择,这里使用的就是我们前面配置的httpd服务,使用本地下载,避免在线安装的各种问题。
远程 Parcel 存储库 URL:  http://kube-40:9080/cdh6.3.2/

# 已启用透明大页面压缩,可能会导致重大性能问题。执行以下命令以禁用此设置:并添加到 /etc/rc.local 
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 数据目录规则
mkdir -p /ssd2/cdh/{nn,dn,snn,nm}
mkdir -p /ssd1/cdh/dn   # dn 设置两个磁盘目录

添加新节点

# 添加DataNode节点
echo "172.16.100.39 kube-39" >> /etc/hosts   # 所有节点添加hosts

# ssh免密
sshpass -p '123456' ssh-copy-id root@172.16.100.39

# 新节点初始环境配置
yum install https://home.vimll.com:9999/download/jdk/jdk-8u361-linux-x64.rpm
cat >> /etc/profile <<EOF
export JAVA_HOME=/usr/java/jdk1.8.0_361-amd64
EOF

# yum源配置
cat > /etc/yum.repos.d/cloudera.repo <<EOF
[Cloudera_Manager]
name=Cloudera Manager 6.3.1
baseurl=http://kube-40:9080/cm6.3.1/
enabled=1
gpgcheck=0
EOF
yum repolist

# jdbc驱动
mkdir /usr/share/java
cd /usr/share/java; wget https://home.vimll.com:9999/download/hadoop/CDH6.3.2/mysql-connector-java-5.1.48.jar
ln -s /usr/share/java/mysql-connector-java-5.1.48.jar /usr/share/java/mysql-connector-java.jar

# 已启用透明大页面压缩,可能会导致重大性能问题。执行以下命令以禁用此设置:并添加到 /etc/rc.local 
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 在从节点安装 cloudera-manager-agent
yum install  -y  cloudera-manager-agent

# 修改新服务器cloudera-agent的config.ini文件,将server_host修改成 kube-40
vim /etc/cloudera-scm-agent/config.ini

# 在新节点启动supervisord
systemctl start supervisord
systemctl enable supervisord

# 在新节点启动cloudera-scm-agent
systemctl start cloudera-scm-agent
systemctl enable cloudera-scm-agent

# 创建目录
mkdir -p /ssd2/cdh/{nn,dn,snn,nm}
mkdir -p /ssd1/cdh/dn   # dn 设置两个磁盘目录

开启HA

集群->HDFS->操作->启用HA

配置NameService别名,这里我们使用ns1和ns2,选择kube-42为ns2,新增HA节点目录 /ssd2/cdh/nn 必须清空或者删除

JournalNode配置,选择奇数三台节点 kube-40,kube-41, kube-42

JournalNode节点创建数据目录:
mkdir /ssd2/cdh/jn

YARN 资源配置

Map 任务内存
mapreduce.map.memory.mb    4GB

Reduce 任务内存
mapreduce.reduce.memory.mb    4GB

容器内存
yarn.nodemanager.resource.memory-mb   32GB

容器虚拟 CPU 内核
yarn.nodemanager.resource.cpu-vcores   32

Map 任务 CPU 虚拟内核
mapreduce.map.cpu.vcores   4

Reduce 任务 CPU 虚拟内核
mapreduce.reduce.cpu.vcores   4

最小容器内存
yarn.scheduler.minimum-allocation-mb   2GB

最大容器内存
yarn.scheduler.maximum-allocation-mb   32GB

最小容器虚拟 CPU 内核数量
yarn.scheduler.minimum-allocation-vcores  4

最大容器虚拟 CPU 内核数量
yarn.scheduler.maximum-allocation-vcores  32

Default Launcher Virtual CPU Cores
oozie.launcher.default.vcores   4

增加mapreduce.job.reduce.slowstart.completedmaps参数,默认为0.05,即map完成0.05后reduce就开始copy,如果集群资源不够,有可能导致reduce把资源全抢光,可以把这个参数调整到0.8,map完成80%后才开始reduce copy。
mapreduce.job.reduce.slowstart.completedmaps 0.8

Hive

# hive交互命令
hive
hive> show databases;
OK
default

# beeline命令
beeline
!connect jdbc:hive2://kube-40:10000

beeline  -u jdbc:hive2://kube-40:10000 -n hdfs    # hdfs用户有写入权限

0: jdbc:hive2://kube-40:10000> show databases;

hive资源配置

配置项: HiveServer2 的 Java 堆栈大小(字节)
4G

动态生成分区的线程数
配置: hive.load.dynamic.partitions.thread
说明: 在执行动态分区的时候, 最多允许多少个线程来运行动态分区操作, 线程越多 , 执行效率越高, 但是占用资源越大  默认值: 15

监听输入文件的线程数量
配置项: hive.exec.input.listing.max.threads
说明: 在运行SQL的时候, 可以使用多少个线程读取HDFS上数据, 线程越多, 读取效率越高, 占用资源越大  默认值: 15

hive压缩的配置
map中间结果压缩配置:
    建议: 在hive的会话窗口配置
    hive.exec.compress.intermediate: 是否hive对中间结果压缩

    以下两个建议直接在cm上yarn的配置目录下直接配置
    mapreduce.map.output.compress : 是否开启map阶段的压缩
    mapreduce.map.output.compress.codec : 选择什么压缩方案
        推荐配置:
            org.apache.hadoop.io.compress.SnappyCodec

reduce最终结果压缩配置:
    建议: 在hive的会话窗口配置
    hive.exec.compress.output: 是否开启对hive最终结果压缩配置

    以下两个建议直接在cm上yarn的配置目录下直接配置
    mapreduce.output.fileoutputformat.compress: 是否开启reduce端压缩配置
    mapreduce.output.fileoutputformat.compress.codec: 选择什么压缩方案
        推荐配置:
            org.apache.hadoop.io.compress.SnappyCodec
    mapreduce.output.fileoutputformat.compress.type : 压缩方案
        推荐配置:
            BLOCK
说明:  如果hive上没有开启压缩, 即使配置MR的压缩, 那么也不会生效

hive的执行引擎切换
配置项: hive.execution.engine

cloudera-manager 更换数据库

#  停止所有节点agent
systemctl stop cloudera-scm-agent
# 停止服务
systemctl stop cloudera-scm-server

# 创建新库
helm install mysql-cdh -f mysql-cdh/values.yaml mysql-cdh/  -n operation

# 初始化新库
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h 10.96.167.104 -P 3306 --scm-host kube-40 cm cm cmHomeDSJ123

# 同步数据库数据
# 导出原库cm数据
mysqldump -h home.vimll.com -P 33306 -u cm -p --databases cm > /tmp/cm.sql
# 导入新库cm数据
mysql -h 10.96.167.104 -P 3306 -u cm -p cm < /tmp/cm.sql

# 启动 cm-server
systemctl start cloudera-scm-server

# 启动所有节点 agent
systemctl start cloudera-scm-agent
-- 测试
-- 修改数据库字符集
show variables like 'character_set%';
vim /etc/my.cnf
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

Hive 中文乱码处理

-- Hive 中文乱码处理
-- 修改Hive Metadata数据库中相关字段字符集为utf8
-- 修改表字段注解和表注解
alter table metastore.COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table metastore.TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
-- 修改分区字段注解
alter table metastore.PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;
alter table metastore.PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
-- 修改索引注解
alter table metastore.INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

测试

beeline -u jdbc:hive2://kube-40:10000 -n hdfs

--创建数据库
create database db_msg ;
--切换数据库
use db_msg ;
--列举数据库
show databases ;

--如果表已存在就删除
drop table if exists db_msg.tb_msg_source ;
--建表
create table db_msg.tb_msg_source(
msg_time string comment "消息发送时间",
sender_name string comment "发送人昵称",
sender_account string comment "发送人账号",
sender_sex string comment "发送人性别",
sender_ip string comment "发送人ip地址",
sender_os string comment "发送人操作系统",
sender_phonetype string comment "发送人手机型号",
sender_network string comment "发送人网络类型",
sender_gps string comment "发送人的GPS定位",
receiver_name string comment "接收人昵称",
receiver_ip string comment "接收人IP",
receiver_account string comment "接收人账号",
receiver_os string comment "接收人操作系统",
receiver_phonetype string comment "接收人手机型号",
receiver_network string comment "接收人网络类型",
receiver_gps string comment "接收人的GPS定位",
receiver_sex string comment "接收人性别",
msg_type string comment "消息类型",
distance string comment "双方距离",
message string comment "消息内容"
)
TBLPROPERTIES ('charset'='utf8');  --指定字符集为utf8;

desc tb_msg_source;

-- 加载数据
-- 上传文件到Linux系统
-- load数据到表
-- chown hive.hive chat_data-30W.csv   # 修改权限,hive用户具有访问权限
load data local inpath '/tmp/chat_data-30W.csv' overwrite into table tb_msg_source;

-- 验证数据
SELECT * FROM tb_msg_source limit 10;
SELECT * FROM tb_msg_source TABLESAMPLE(100 ROWS);

-- 创建保存清洗后数据的表
create table db_msg.tb_msg_etl(
msg_time string comment "消息发送时间",
sender_name string comment "发送人昵称",
sender_account string comment "发送人账号",
sender_sex string comment "发送人性别",
sender_ip string comment "发送人ip地址",
sender_os string comment "发送人操作系统",
sender_phonetype string comment "发送人手机型号",
sender_network string comment "发送人网络类型",
sender_gps string comment "发送人的GPS定位",
receiver_name string comment "接收人昵称",
receiver_ip string comment "接收人IP",
receiver_account string comment "接收人账号",
receiver_os string comment "接收人操作系统",
receiver_phonetype string comment "接收人手机型号",
receiver_network string comment "接收人网络类型",
receiver_gps string comment "接收人的GPS定位",
receiver_sex string comment "接收人性别",
msg_type string comment "消息类型",
distance string comment "双方距离",
message string comment "消息内容",
msg_day string comment "消息日",
msg_hour string comment "消息小时",
sender_lng double comment "经度",
sender_lat double comment "纬度"
);

-- 保存清洗后的数据
INSERT OVERWRITE TABLE db_msg.tb_msg_etl
SELECT 
    *, 
    day(msg_time) as msg_day, 
    HOUR(msg_time) as msg_hour, 
    split(sender_gps, ',')[0] AS sender_lng,
    split(sender_gps, ',')[1] AS sender_lat
FROM tb_msg_source WHERE LENGTH(sender_gps) > 0;

-- 查看数据
select
    msg_time, msg_day, msg_hour, sender_gps, sender_lng, sender_lat
from db_msg.tb_msg_etl
limit 10;

hbase

HBase作为面向列的数据库运行在HDFS之上,HDFS缺乏随机读写操作,HBase正是为此而出现。HBase参考 Google 的 Bigtable 实现,以键值对的形式存储。项目的目标就是快速在主机内数十亿行数据中定位所需的数据并访问它。

  • 建立在HDFS之上的分布式面向列的数据库
  • KV结构数据库,原生不支持标准SQL,属于NOSQL数据库
  • 支持快速随机读写海量数据
  • 具备HDFS的高容错能力
  • 不属于关系型数据库,适合存储非结构化数据

安装 Hbase

1.Cloudera Manager 主页 添加服务
2.选择hbase服务类型
3.选择相应的组件安装到哪台节点,多Master,多RegionServer
4.设置hbase在hdfs数据存放的目录
5.等待安装成功并启动hbase

# 启动hbase 并测试
hbase shell

HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.1.0-cdh6.3.2, rUnknown, Fri Nov  8 05:44:07 PST 2019
Took 0.0006 seconds
hbase(main):001:0> list namespace
NAMESPACE
default
hbase
2 row(s)
Took 0.4955 seconds

hbase(main):002:0> create_namespace 'test'
Took 0.3010 seconds                                                                                                                                                 
hbase(main):003:0> create 'test:demo','cf1','cf2'
Created table test:demo
Took 1.3701 seconds
=> Hbase::Table - test:demo

hbase(main):008:0> list
TABLE
test:demo
1 row(s)
Took 0.0319 seconds
=> ["test:demo"]

hbase(main):009:0> put 'test:demo','x0001','cf1:name','zhangsan'
Took 0.1918 seconds

hbase(main):014:0> scan 'test:demo'
ROW                                  COLUMN+CELL
 x0001                               column=cf1:name, timestamp=1727589276723, value=zhangsan
1 row(s)
Took 0.0114 seconds

hbase(main):015:0> put 'test:demo','x0001','cf1:age','20'
Took 0.1054 seconds

hbase(main):017:0> put 'test:demo','x0001','cf2:sex','boy'
Took 0.0134 seconds

hbase(main):018:0> scan 'test:demo'
ROW                                  COLUMN+CELL
 x0001                               column=cf1:age, timestamp=1727589347846, value=20
 x0001                               column=cf1:name, timestamp=1727589276723, value=zhangsan
 x0001                               column=cf2:sex, timestamp=1727589416345, value=boy
1 row(s)
Took 0.0106 seconds

impala

 Cloudera Impala是一款开源的MPP架构的SQL查询引擎,它提供在hadoop环境上的低延迟、高并发的BI/数据分析,是一款开源、与Hadoop高度集成,灵活可扩展的查询分析引擎,目标是基于SQL提供高并发的即席查询。

 与其他的查询引擎系统(如presto、spark sql、hive sql)不同,Impala基于C++和Java编写,支持Hadoop生态下的多种组件集成(如HDFS、HBase、Metastore、YARN、Sentry等),支持多种文件格式的读写(如Parqeut、Avro、RCFile等)。
### 安装 impala
1.Cloudera Manager 主页 添加服务
2.选择impala服务类型
3.配置依赖hive
4.选择相应的组件安装到哪台节点
5.设置数据存放的目录
6.等待安装成功并启动impala

# impala 对比hive 优点: impala 是内存计算,hive 是磁盘计算,HIVE需要启动mr程序,效率低

## 启动并测试
# 启动impala
impala-shell -i kube-40
# 语法和hive类似
SELECT * FROM tb_msg_etl TABLESAMPLE(100 ROWS);

# 如果impala查询数据一直卡着不动。
# 可以添加一下配置信息,重启impala即可正常使用
# Impala 命令行参数高级配置代码段(安全阀)添加
--rpc_encryption=disabled
--rpc_authentication=disabled 
--trusted_subnets=0.0.0.0/0

# impala 同步hive元数据,如果hive那表有变化,impala上没有变化,可以执行以下命令
INVALIDATE METADATA db_name.table_name;

oozie与hue

Oozie 是一个工作流调度系统用来管理 Hadoop 任务,将多个任务定义成工作流,定义好的工作流以DAG的方式按照指定的顺序运行我们的job任务

Oozie本质是将工作流翻译成一系列的MapReduce程序任务来运行,通过Oozie的协调器来调度这些任务,从而实现工作流调度

安装hue需要提前安装ooize

Hue是一个能够与Apache Hadoop交互的Web应用程序。一个开源的Apache Hadoop UI

简单理解:hue提供了一个可视图的webui界面,通过sql编辑器可以对数据进行增删改查。

SQL编辑器:支持Hive, Impala, MySQL, Oracle, PostgreSQL, SparkSQL, Solr SQL, Phoenix…

### 安装 oozie
1.Cloudera Manager 主页 添加服务
2.选择oozie服务类型
3.配置依赖hive那一行
4.选择oozie数据库: 10.96.167.104:3306 oozie oozieHomeDSJ123
5.设置数据存放的目录
6.等待安装成功并启动oozie

### 安装 hue
1.安装之前必须先安装好oozie
2.Cloudera Manager 主页 添加服务
3.选择hue服务类型
4.选择依赖  HBase   HDFS    Hive    Impala  Oozie
5.数据库配置:10.96.167.104:3306  hue  hueHomeDSJ123
6.等待安装成功并启动点击 hue主页 -> web UI -> Hue Web Ui -> 登录

# Hue: Thrift Server role must be configured in HBase service to use the Hue HBase Browser application. 解决
# 必须在 HBase 服务中配置 Thrift Server 角色以使用 Hue HBase Browser 应用程序
HBase -> 添加角色实例 -> Thrift Server -> kube-39 -> 重启Hue
# 警告 在Hue配页面搜索如下配置 HBase Thrift Server
Hue(服务范围) -> HBase Thrift Server (kube-39) -> 重启hue

# 启动并测试
# 启动hue
http://kube-39:8888
# 登录
admin/admin   AdminJT@123
# 进入hue
# 编辑器可选hive/impala

## hue 访问hdfs 报错 Cannot access: /. Note: you are a Hue admin but not a HDFS superuser, "hdfs" or part of HDFS supergroup, "supergroup".
hdfs haadmin -getAllServiceState
hue配置  webhdfs_url  选择active的namenode

## hue访问Hbase报错 Api 错误:TSocket read 0 bytes
启用安全
这里指启用TLS/SSL安全,thrift服务无法连接kerberos安全的hbase。
修改HBase配置如下:
hbase.regionserver.thrift.http  true
hbase.thrift.support.proxyuser  true

未启用安全
修改HBase配置如下:
hbase.regionserver.thrift.http  true
hbase.thrift.support.proxyuser  false

# oozie   java.io.IOException: output.properties data exceeds its limit [2048]  hue的调度问题
oozie-site.xml 的 Oozie Server 高级配置代码段(安全阀)
oozie.action.max.output.data   204800   # 默认2048

kudu

kudu 是Cloudera 开源给 Apache的,针对 Hadoop 平台而开发的列式存储管理器,kudu是介于hive与hbase中间的一个组件,解决了hive的随机读写问题,同时提高了hbase的吞吐量与组合查询效率。
## cdh 集成kudu
1.Cloudera Manager 主页 添加服务
2.选择kudu服务类型
3.选择节点安装,master kube-39,kube-41  tablet kube-39,kube-41,kube-42
4.配置目录
5.等待安装成功并启动kudu。配置Impala开启 Kudu 服务 -> Impala(服务范围) Kudu

# Kudu在安装时需要填写以下几项内容:可由agent自动创建
# kube-39:  
Kudu Master WAL Directory:  /data/kudu_master/fs_wal_dir
Kudu Master Data Directories:  /data/kudu_master/fs_data_dirs
# mkdir -p /data/kudu_master/fs_wal_dir /data/kudu_master/fs_data_dirs

# kube-41:
Kudu Tablet Server WAL Directory:  /data/kudu_tablet/fs_wal_dir
Kudu Tablet Server Data Directories:  /data/kudu_tablet/fs_data_dirs
# mkdir -p /data/kudu_tablet/fs_wal_dir /data/kudu_tablet/fs_data_dirs

# 重启impala,并测试
# 启动impala
impala-shell -i kube-40
# Kudu的使用需要配合impala来使用
# 创建表 默认三副本,需要三个tablet server
CREATE TABLE kudu_hash_t1
(
  id BIGINT,
  name STRING,
  PRIMARY KEY(id)
)
PARTITION BY HASH(id) PARTITIONS 5
STORED AS KUDU
TBLPROPERTIES ('kudu.master_addresses'='kube-39:7051,kube-41:7051');

# 也可以hue中创建

# 如果在建表时卡着不动,需要增加额外的配置
--rpc_encryption=disabled
--rpc_authentication=disabled 
--trusted_subnets=0.0.0.0/0

### kubu 添加角色实例同步错误,清理master与tablet server数据目录

kafka

Kafka是由LinkedIn开发的一个分布式的消息系统。它是一款开源的、轻量级的、分布式、可分区和具有复制备份的(Replicated)、基于ZooKeeper的协调管理的分布式流平台的功能强大的消息系统。与传统的消息系统相比,KafKa能够很好的处理活跃的流数据,使得数据在各个子系统中高性能、低延迟地不停流转。

Kafka使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark都支持与Kafka集成。

## cdh集成kafka
1.Cloudera Manager 主页 添加服务
2.选择kafka服务类型
3.选择节点安装,Kafka Broker: 所有主机
4.等待安装成功并启动

# 测试:
# 创建一个demo的topic
kafka-topics  --zookeeper kube-40:2181 --create --topic demo --replication-factor 1 --partitions 1 
# 查询所有topic
kafka-topics  --list --zookeeper kube-40:2181  
# 启动消费者消费指定topic中的数据
kafka-console-consumer  --bootstrap-server kube-40:9092 --topic demo
# 启动生产者向指定topic生产数据
kafka-console-producer --broker-list  kube-40:9092 --topic demo

flume

​flume是分布式的日志收集系统,它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到HDFS、Hbase,简单来说flume就是收集日志的。 flume 作为 cloudera(CDH版本的hadoop) 开发的实时日志收集系统,受到了业界的认可与广泛应用。
## cdh 集成flume
1.Cloudera Manager 主页 添加服务
2.选择flume服务类型
3.选择节点安装,agent: kube-41
4.完成,后期使用命令启动agent

sqoop

Sqoop是Apache旗下的一款“hadoop和关系型数据库服务器之间传送数据”的工具。
  - 导入数据:MySQL、Oracle导入数据到hadoop的hdfs、hive、hbase等数据存储系统。
  - 导出数据:从hadoop的文件系统中导出数据到关系型数据库中。
## cdh 集成Sqoop
1.Cloudera Manager 主页 添加服务
2.选择Sqoop 1 Client服务类型
3.选择节点安装,Gateway: kube-42
4.等待安装成功并启动

CDH平台Hue、Oozie、Impala时区问题

Hue
Hue的默认时区是America/Los_Angeles,修改为Asia/Shanghai
HUE -> 配置 -> 搜索 zone -> 修改为 Asia/Shanghai

Oozie
Oozie默认为UTC时区,修改为UTC+0800
Oozie -> 配置 -> 搜索 oozie-site -> 以XML格式查看 -> 添加
<property>
    <name>oozie.processing.timezone</name>
    <value>GMT+0800</value>
</property>
或
oozie-site.xml 的 Oozie Server 高级配置代码段(安全阀) -> 添加
name: oozie.processing.timezone
Value: GMT+0800
Description: oozie时区设置为东八区区时

Impala
impala -> 配置 -> 搜索 Impala Daemon 命令行参数高级配置代码段(安全阀)-> 添加 
-use_local_tz_for_unix_timestamp_conversions=true
-convert_legacy_hive_parquet_utc_timestamps=true

各组件数据库备份

# kube-39
yum install nfs-utils
mkdir /mnt/bak
mount -t nfs 168.12.1.100:/volume1/重要备份-忽动/bak  /mnt/bak

mysqldump -h10.96.167.104 -uroot -p --all-databases --skip_add_locks --skip-lock-tables |gzip > mysql-cdh_`date +\%F`.sql.gz
xxxxxxxxxxxxx