我以前用centos7搭建过十几遍cdh(生产,测试,客户,云上,poc,教学,虚拟机)

今天试试ubantu搭建。

cdh配置繁琐,但是组件安装超级方便,只需要配置一次,可使用绝大部分大数据组件,并且自带监控功能,组件配置都是一键自动依赖启动,在管理界面,配置所有组件,这就是他的方便。

测试后,按照文档搭建出来的时间大概是3小时左右。


经过了3年,来了新公司,发现他们是用Ubuntu-cdh,所以笔者身为架构师,用5台测试机,重新搭建了一次,并且整理为笔记,供程序员们少走坑。

先来一张成功的截图。

负载图片,我是标准的5台机器,所以说建议你的内存是32G以上。如果你的内存过于小,那么你就后面配置的时候,选个hdfs和zookeeper就可以了。

16G以下内存的,可以不用看了

这里虚拟机搭建,请看我另一篇

ubuntu去下载一个18.0.4然后网络配置什么的注意一点就可以了。安装都是无脑安装,记得设置个密码。

虚拟机VMWARE的ubuntu18.04网络配置-CSDN博客

资源准备

运维给了我5台机器。账户名叫liusheng2密码你猜

xx.9.41 HZSDLTCDH01V
xx.9.42 HZSDLTCDH02V
xx.9.43 HZSDLTCDH03V
xx.9.44 HZSDLTCDH04V
xx.9.45 HZSDLTCDH05V

1.cm6.3.2ubantu18.04)

ubuntu的cdh必须是bionic格式的

CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel

常见问题解决

使用xshell输入tab不能自动补全,乱码或缩进

现象:进去后发现是$,输入tab会出现乱码或者缩进

  1. 乱码解决

右键xshell的机器,选择属性,选择终端的键盘,改成下面的2种方式

  1. 自动补全

sudo vi /etc/passwd

将你的登录用户默认的/bin/sh改成/bin/bash

然后点击xshell重新打开会话seesion,发现是bash的命令行啦

免密登录

每台机器都是如下操作,总操作数5+5^2次方

ssh-keygen -t rsa

然后copy到其他节点上,所有的节点都要copy一份

ssh-copy-id xx.9.41
ssh-copy-id xx.9.42
ssh-copy-id xx.9.43
ssh-copy-id xx.9.44
ssh-copy-id xx.9.45

为什么要免密登录?1.在传输的时候不需要输入密码,方便集群的搭建。2.他们之间的心跳感知是通过ssh的,如果不能免密登录,部署的时候,就会隔几秒要求你输入一次密码。

关闭防火墙

每台机器都要进行操作

sudo systemctl stop ufw
sudo systemctl disable ufw
sudo systemctl status ufw

避免出现端口,不能访问的问题

上传资源

将资源上传到其中一台机器上。我的是xx.9.41

在xx.9.41机器上执行命令,分到其他机器。

scp -r resource/ liusheng2@xx.9.42:~
scp -r resource/ liusheng2@xx.9.43:~
scp -r resource/ liusheng2@xx.9.44:~
scp -r resource/ liusheng2@xx.9.45:~

上传到一台机器上后,使用scp分发到其他机器上比较快,因为是内网传输

配置apt源

所有机器执行如下操作(推荐配置一台然后scp分发):

编写源

sudo vi /etc/apt/sources.list

删除掉里面的内容,加入下面内容

deb https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

sudo apt update

需要能够访问阿里镜像源,或者这里改成他们本地的源。如果特殊情况没有源,需要离线下载,得准备一台机器部署离线源服务。【源】ubuntu搭建离线本地源_ubuntu 离线源-CSDN博客

JDK安装

每台机器都要执行如下操作:

安装rpm

sudo apt install rpm

去刚上传好的资源目录下

cd ~/resource
sudo rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm

配置环境变量

sudo vi /etc/profile

在最后面加上

export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera/

export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/

export PATH=$PATH:$JAVA_HOME/bin

更新

source /etc/profile
java -version

修改hosts

每台机器,运行

sudo vi /etc/hosts

加入下面的这行

xx.9.41 HZSDLTCDH01V 

xx.9.42 HZSDLTCDH02V

xx.9.43 HZSDLTCDH03V

xx.9.44 HZSDLTCDH04V

xx.9.45 HZSDLTCDH05V

注释掉#127.0.1.1 开头的这一行,避免cm识别的时候出问题

设置时区

5台机器

sudo timedatectl set-timezone Asia/Shanghai

配置NTP

安装ntp(主节点)

sudo apt update
sudo apt install ntp

选择一台机器(HZSDLTCDH03V),作为时钟同步的主节点

sudo vi /etc/ntp.conf

restrict HZSDLTCDH03V mask 255.255.255.0 nomodify

server 127.127.1.0

fudge 127.127.1.0 stratum 10

service ntp restart
ntpq -p

其他节点安装ntp

sudo apt-get install ntp
sudo vi /etc/ntp.conf

最后一行加入

server HZSDLTCDH03V prefer

sudo service ntp restart
ntpq -p

防止误报,如果某台机器死机,再连上的话,时间没同步,那cdh监控会出现数据丢失或心跳超时等问题,所以要做Ntp。虚拟机测试的话,挂起会出现时间不一致。正式暂时没有发现这个问题。

ntp和ntpdate还有timedatectl都能同步时间,其中ntp是最灵敏的。

Mysql安装

注意版本:使用5.7

服务端

sudo apt install mysql-server
输入y
sudo systemctl start mysql
sudo systemctl status mysql

客户端

sudo apt-get install mysql-client

改密码

sudo cat /etc/mysql/debian.cnf

得到密码

mysql -udebian-sys-maint -p
粘贴密码,回车
update mysql.user set authentication_string=PASSWORD("123456")  where User="root";
update mysql.user set plugin="mysql_native_password";
#设置任何host都能用这个用户
update mysql.user set host = '%' where user = 'root';
flush privileges;
#退出客户端
exit;

重新登录,查看是否修改成功。

设置外部访问

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

sudo systemctl restart mysql

用db工具连接,看是否能连接上

hive的元数据,一般是放在外部存储,所以需要mysql,同样ClouderManager的监控也需要依赖mysql。

Httpd安装

选择一台机器,在10.253.9.45机器上

sudo apt-get install apache2
sudo systemctl start apache2
sudo systemctl enable apache2

访问成功

他默认的目录是在/var/www/html下

cdh默认是从官方下载,但是官网下载不下来。所以就把parcel包等东西,放在httpd上,变成内网下载。

在httpd的默认路径,配置cm

cd /var/www
sudo chmod -R 777 html/
sudo mkdir -p /var/www/html/cloudera-repos/cm6
sudo tar zxvf ~/resource/cm6.3.1-ubuntu1804.tar.gz -C /var/www/html/cloudera-repos/cm6 --strip-components=1

移动allkeys.asc、manifest.json到cm

sudo cp ~/resource/manifest.json /var/www/html/cloudera-repos/cm6/
sudo cp ~/resource/allkeys.asc /var/www/html/cloudera-repos/cm6/

chmod加权限是因为,我等会儿用cdh搭的时候用的非root用户,避免出现访问权限问题。

--strip-components=1 我已经创建过目录了,就不再次创建

manifest.json是对应各个版本的组件定义(如hive、spark这些)

cdh目录配置

sudo mkdir -p /var/www/html/cloudera-repos/cdh6

移动allkeys.asc、manifest.json到cdh

sudo cp ~/resource/manifest.json /var/www/html/cloudera-repos/cdh6
sudo cp ~/resource/allkeys.asc /var/www/html/cloudera-repos/cdh6

移动parcel包

sudo cp ~/resource/CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel /var/www/html/cloudera-repos/cdh6
sudo cp ~/resource/CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha1 /var/www/html/cloudera-repos/cdh6
sudo cp ~/resource/CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha256 /var/www/html/cloudera-repos/cdh6

httpd去掉默认页面

cd /var/www/html
mv  index.html bak_index.html

通过页面再次访问httpd

利用httpd配置本地cdh源

在xx.9.45机器上(部署httpd的机器)

cd /var/www/html/cloudera-repos/cdh6
sudo mv CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha1 CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha

sudo chmod -R ugo+rX /var/www/html/cloudera-repos/cdh6
sudo chmod -R ugo+rX /var/www/html/cloudera-repos/cm6

所有机器执行如下操作:

sudo vi /etc/apt/sources.list.d/cloudera-repo.list

内容如下:

#Cloudera Manager 6.3.1

deb [arch=amd64] http://xx.9.45/cloudera-repos/cm6/ bionic-cm6.3.1 contrib

导入GPG签名

wget http://xx.9.45/cloudera-repos/cm6/archive.key
sudo apt-key add archive.key
sudo apt-get update

CM安装

选择一台机器当cm-server节点(xx.9.43)

在xx.9.43上安装server、agent

sudo apt-get install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server

其他所有节点安装agent

sudo apt-get install cloudera-manager-daemons cloudera-manager-agent

mysql中建立cm对应的组件库

# 创建Cloudera组件所需的数据库
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; 
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;

导入mysql连接包(所有节点)

sudo cp ~/resource/mysql-connector-java-5.1.46.jar /usr/share/java/
sudo mv /usr/share/java/mysql-connector-java-5.1.46.jar /usr/share/java/mysql-connector-java.jar

初始化scm数据库中的数据

sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm root -h xx.9.45

所有节点执行操作:

sudo mkdir -p /opt/cloudera/parcel-repo
sudo cp ~/resource/CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel /opt/cloudera/parcel-repo /opt/cloudera/parcel-repo/
sudo cp ~/resource/CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha1 /opt/cloudera/parcel-repo
sudo cp ~/resource/CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha256 /opt/cloudera/parcel-repo
sudo cp ~/resource/manifest.json /opt/cloudera/parcel-repo
sudo cp ~/resource/allkeys.asc /opt/cloudera/parcel-repo
sudo mv /opt/cloudera/parcel-repo/CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha1 /opt/cloudera/parcel-repo/CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha

启动服务

去主节点下启动server

sudo systemctl start cloudera-scm-server
sudo systemctl status cloudera-scm-server
sudo systemctl enable cloudera-scm-server

所有节点启动agent

sudo systemctl start cloudera-scm-agent
sudo systemctl status cloudera-scm-agent
sudo systemctl enable cloudera-scm-agent

sudo tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log

cdh大数据平台配置

浏览器访问xx.9.43:7180

账号密码admin

选60天试用

搜索主机名

发现有一个受管了。

关闭受管

点主机,然后所有,然后选中它,点击操作,选从群集中选Cloudera Manager移除。再从主机中选Cloudera Manager移除

少了张群集的,移除图

  1. 选择自定义存储库,改成自己对应的cm位置

在parcel选择更多选项

  1. 其他都都删了,把cdh6的httpd地址写进去

  1. 不安装jdk,因为我们已经安了

  1. 选择其他用户,下面输入对应的这个账号的密码

安装(和这个图差不多,之前没有主动解除受管,所以页面有差异,文档是先解除受管,我实际做的时候忘记了,做的是后解除受管,先后解除都一样)

安装没问题,进入下一个页面,点击inspect network和inspect hosts

  1. 发现有个小黄点

所有机器执行(临时的)

sudo sysctl vm.swappiness=10

然后永久修改(所有机器)

sudo -i
echo 'vm.swappiness=10'>> /etc/sysctl.conf
  1. 修复后点击重新运行

然后点继续

角色分配

hive元数据配置

选是,用jdbc链接

填写mysql数据库对应机器的hostname

jdbc:mysql://HZSDLTCDH05V:3306/metastore?useSSL=false&useUnicode=true&&characterEncoding=utf-8

  1. 主机填写数据库的主机,其他填写mysql的账号密码,数据库对应之前创建的数据库

  1. 点击下测试连接,没问题的话就继续

  1. 看下配置,没问题点击,继续

解决问题

主机 dns解析不一致

内网直接关掉,就行,也不需要DNS解析

纠删码

9 DataNodes are required for the erasure coding policies: RS-6-3-1024k. The number of DataNodes is only 4.

他说如果用这个算法检查,至少是9台datanode,这个算法太屌了,我们没有那么多机器。直接屏蔽,不需要这个。然后重启过时服务。

重启过时服务

负载情况

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐