【CM】Cloudera Manager 平台搭建及大数据服务部署

版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

1、搭建准备

(1)配置ip、hostname、主机映射、用户权限管理 (2)禁用ipv6、selinux 和关闭防火墙 (3)在所有机器上卸载OpenJDK,安装Oracle JDK (4)配置SSH免密码登录 (5)集群系统的时间同步 (6)在所有服务器上设置用户能打开的文件最大数量、进程最大数据、能使用的内存量 (7)安装mysql数据库

2、CM 平台搭建

(1)在所有服务器上安装第三方依赖

yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse portmap fuse-libs redhat-lsb

(2)下载安装包 Cloudera Manager下载地址:http://archive.cloudera.com/cm5/cm/5/ 下载好压缩包cloudera-manager-el6-cm5.10.2_x86_64.tar.gz,上传到/opt/softwares文件夹下。 (3)解压安装包 在server主节点上创建一个CM的解压目录:# mkdir -p /opt/cloudera-manager 解压安装包:

# tar -zxf /opt/softwares/cloudera-manager-el6-cm5.10.2_x86_64.tar.gz -C /opt/cloudera-manager

在解压路径下出现两个子目录cloudera和cm-5.10.2,其中/opt/cloudera-manager/cm-5.10.2存放CM框架本身的配置、依赖库、启动脚本等文件。 (4)在server主节点上修改agent配置 # vi /opt/cloudera-manager/cm-5.10.2/etc/cloudera-scm-agent/config.ini

# Hostname of the CM server.
server_host=beifeng01.com  //指定server主节点

# Port that the CM server is listening on.
server_port=7182  //指定通信端口

(5)拷贝CM文件夹给其他服务器

# scp -r /opt/cloudera-manager/ beifeng02.com:/opt/
# scp -r /opt/cloudera-manager/ beifeng03.com:/opt/

(6)在agnet所有服务器节点创建cloudera Manager用户 cloudera-scm

# useradd --system --home=/opt/cloudera-manager/cm-5.10.2/run/cloudera-scm-server --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm 

详解:	useradd 
--system  表示创建的是系统用户
--home=/opt/cloudera-manager/cm-5.10.2/run/cloudera-scm-server  指定用户主目录路径
--no-create-home   不创建用户主目录
--shell=/bin/false  不作为一个登陆用户
--comment "Cloudera SCM User"   
cloudera-scm  用户名

验证:# cat /etc/passwd | grep cloudera-scm (7)配置CM数据库的权限 登陆主节点msyql:# mysql -uroot -p123456 在主节点,也即mysql安装的机器添加一个temp用户并赋予相关权限

mysql> grant all privileges on *.*  to 'temp'@'%' identified by 'temp' with grant option ;
mysql> grant all privileges on *.* to 'temp'@'beifeng01.com' identified by 'temp' with grant option;
mysql> flush privileges ;

验证:

mysql> use  mysql ;
mysql> select host ,user from user ;

在主节点上:

# cd /opt/cloudera-manager/cm-5.10.2/share/cmf/schema

在schema目录下执行脚本文件scm_prepare_database.sh

# ./scm_prepare_database.sh mysql -h beifeng01.com -utemp -ptemp --scm-host beifeng01.com scm scm scm

出现异常:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

解决办法:在/usr/share/java目录放入 mysql的驱动jar包,并且要求将jar包名称改为“mysql-connector-java.jar”

cp /opt/softwares/mysql-connector-java.jar /usr/share/java

下面两个可以不执行了:

# cp mysql-connector-java-5.1.26-bin.jar /usr/share/java
# mv mysql-connector-java-5.1.26-bin.jar mysql-connector-java.jar

SCM数据库配置成功显示:

All done, your SCM database is configured correctly!	

(8)将CDH源放到Cloudera Manager 主节点服务器上 CDH源:hadoop集群(hadoop、flume、hbase等等)的安装文件. 在server主节点上创建CDH源存放目录,注意:目录名称不能变:

# mkdir -p /opt/cloudera/parcel-repo   

在agent主机节点上创建目录:

# mkdir -p /opt/cloudera/parcels 

移动CDH源到parcel-repo目录下:

# mv CDH-5.10.2-1.cdh5.10.2.p0.5-el6.parcel* /opt/cloudera/parcel-repo/  

移动CDH源,去掉校验码文件结尾的1:

# mv CDH-5.10.2-1.cdh5.10.2.p0.5-el6.parcel.sha1 CDH-5.10.2-1.cdh5.10.2.p0.5-el6.parcel.sha 

更改parcel目录的所有人: server节点:

# chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo/

agent节点(所有agent节点):

# chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcels 

(9)启动CM进程 server进程: 进入CM的进程启动脚本目录:

# cd /opt/cloudera-manager/cm-5.10.2/etc/init.d

启动命令,注意:至少需要8G内存:

# ./cloudera-scm-server  start 

进入server主进程的log日志目录:

# cd /opt/cloudera-manager/cm-5.10.2/log/cloudera-scm-server

查看server主进程的log日志:

# tail -f cloudera-scm-server.log

启动agent从节点进程(在所有agent节点中启动):

# cd /opt/cloudera-manager/cm-5.10.2/etc/init.d/
# ./cloudera-scm-agent start

jps命令看不到agent进程,因为是agent进程是Python语言维护。

[root@bigdata02 ~]# jps
[root@bigdata02 ~]# ps -ef | grep agent
gdm       2013  1961  0 Feb24 ?        00:00:00 /usr/libexec/polkit-gnome-authentication-agent-1
root     19512     1  3 10:26 ?        00:00:05 /opt/cloudera-manager/cm-5.10.2/lib64/cmf/agent/build/env/bin/python /opt/cloudera-manager/cm-5.10.2/lib64/cmf/agent/src/cmf/agent.py --package_dir /opt/cloudera-manager/cm-5.10.2/lib64/cmf/service --agent_dir /opt/cloudera-manager/cm-5.10.2/run/cloudera-scm-agent --lib_dir /opt/cloudera-manager/cm-5.10.2/lib/cloudera-scm-agent --logfile /opt/cloudera-manager/cm-5.10.2/log/cloudera-scm-agent/cloudera-scm-agent.log

CM的jetty服务器操作界面的访问端口为7180,操作界面地址:http://beifeng01.com:7180,登陆用户名:admin,密码:admin。 查看端口占用情况:# netstat -tlnup 查看Windows系统配置:

C:\Windows\System32\drivers\etc
192.168.84.131  beifeng01.com 
192.168.84.132  beifeng02.com 
192.168.84.133  beifeng03.com 				

启动好后 ,netstat -tlnup | grep 7180命令查看是否正常开启了7180页面访问端口。 通过浏览器访问:http://beifeng01.com:7180, 或者:http://beifeng01.com:7180/cmf/express-wizard/resume 登录用户名:admin,登录密码:admin。 报错:

useradd: cannot lock /etc/group; try again later.
useradd: cannot lock /etc/gshadow ; try again later.

解决方法:删除group.lock,删除gshadow.lock。 (10)检查主机的正确性 【报错异常】 Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10。当前设置为 60。 【解决方法】 当前设置查看:# more /proc/sys/vm/swappiness 三台agent主机都执行(不使用磁盘作为内存交换区):# echo 10 > /proc/sys/vm/swappiness 【报错异常】 已启用透明大页面压缩,可能会导致重大性能问题。请运行echo never > /sys/kernel/mm/transparent_hugepage/defragecho never > /sys/kernel/mm/transparent_hugepage/enabled以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始化脚本中,以便在系统重启时予以设置。以下主机将受到影响:… 【解决方法】 所有机器执行:

# echo never > /sys/kernel/mm/transparent_hugepage/defrag
# echo never > /sys/kernel/mm/transparent_hugepage/enabled

编辑/etc/rc.local文件:

# vi /etc/rc.local

添加上面的echo命令。

3、在CM上搭建服务规划

机器

NameNode

DataNode

ResourceManager

NodeManager

JobHistoryServer

NameNode HA热备

ResourceManager HA热备

JournalNode

Zookeeper

HiveServer2

Master

RegionServer

Sqoop

Flume

Oozie

Hue

MySQL

beifeng01.com

ok

ok

ok

ok

ok

ok

ok

ok

ok

ok

ok

beifeng02.com

ok

ok

ok

ok

ok

ok

ok

ok

ok

ok

ok

beifeng03.com

ok

ok

ok

ok

ok

ok

ok

4、在CM上部署服务

(1)HDFS NameNode所在机器:beifeng01.com DataNode所在机器:beifeng[01-03].com 数据库所在机器:beifeng01.com 数据库名称:scm 登录用户:temp 登录密码:temp 群集设置:采取默认,有个默认节点目录 每次修改配置后,会出现过期配置,重启就好了 内存调度阀值:默认是0.8,可以修改为1 Java 堆栈大小:修改为默认值1 (2)YARN (MR2 Included) ResourceManager所在机器:beifeng01.com NodeManager所在机器:beifeng[01-03].com JobHistoryServer所在机器:beifeng02.com 测试: 1)创建目录:hdfs dfs -mkdir /input

mkdir: Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

解决办法:

  1. 修改配置:在hdfs的配置里有个权限检查的配置 hdfs -> 配置 -> 检查hdfs权限 -> 把√去掉 -> 重启服务
  2. 声明HADOOP_USER_NAME为hdfs
export HADOOP_USER_NAME=hdfs

2)写一个文件:vi input.txt 上传到/input

hdfs dfs -put input.txt /input

3)跑个wordcount程序:

yarn jar /opt/cloudera/parcels/CDH-5.10.2-1.cdh5.10.2.p0.5/jars/hadoop-mapreduce-examples-2.6.0-cdh5.10.2.jar wordcount /input /output

4)修改reduce的个数 在yarn的配置里面:搜索mapreduce.job.reduces,默认为40,重置为1 重新部署客户端配置:重启 (3)ZooKeeper ZooKeeper所在机器:三台机器都搭建ZooKeeper服务 警告:Cloudera Management Service: Service Monitor 的最大非Java 内存 修改为默认值,然后重启服务 (4)NameNode和ResourceManager的HA配置 HA的集群名称:nameservice1 在hdfs右边有个操作 -> 启用HA -> nameservice1 NameNode HA热备所在机器:beifeng02.com JournalNode所在机器:beifeng[01-03].com 给出JournalNode的存储路径:/dfs/jn 对当前 NameNode 的名称目录进行格式化。如果名称目录不为空,此操作将失败 测试:kill掉活动的NameNode 在yarn右边有个操作 -> 启用HA -> ResourceManager HA热备所在机器:beifeng02.com (5)Hive HiveServer2所在机器:beifeng01.com 创建create database hive; 用户名:root 密码:root 链接数据库:数据库hive 测试:show databases; 显示列名和库名:hive -> 配置 -> hive-site.xml 的 Hive 客户端高级配置代码段(安全阀)-> 加入下面的配置:

<property>
		<name>hive.cli.print.header</name>
		<value>true</value>
</property>
<property>
		<name>hive.cli.print.current.db</name>
		<value>true</value>
</property>
$ bin/hive --service hiveserver2 &
$ bin/beeline
		beeline> help
		beeline> !connect jdbc:hive2://beifeng01.com:10000 root 123456  --Linux用户名、密码
		> show databases;
		> use mydb;
		> show tables;
		> select * from emp;
		> !quit

(6)HBase Master所在机器:beifeng01.com RegionServer所在机器:beifeng[01-03].com 重启集群,启动HBase。 (7)Sqoop Sqoop所在机器:beifeng02.com 测试:root或者temp登录

#sqoop list-databases --connect jdbc:mysql://beifeng01.com:3306 --username root --password 123456

报错:

java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver
	         Access denied for user 'root'@'beifeng02.com' (using password: YES)

解决方法:

scp -r mysql-connector-java.jar beifeng02.com:/usr/share/java/
scp -r mysql-connector-java.jar beifeng03.com:/usr/share/java/

如果没有java目录,就创建该java目录。 在beifeng01.com上进行mysql授权:

grant all privileges on *.* to 'root'@'beifeng02.com' identified by 'root' with grant option;
grant all privileges on *.* to 'root'@'beifeng03.com' identified by 'root' with grant option;

(8)Flume Flume所在机器:beifeng[01-03].com,选择依赖关系多的选项。 1)Flume Agent包括三个组件source、channel、sink,一般Flume在正式使用时需要自己编写好flume.conf文件。通常使用的组件搭配有:exec source、memory channel、hdfs sink 2)Flume配置安装 角色分配给三台机器beifeng[01-03].com,也即三台机器公用一个agent 3)flume.conf详细配置 在flume“配置”中的“Agent Default Group”,设置代理名称为 “a1”,配置文件用如下配置替换:

a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /opt/cloudera-manager/cm-5.3.6/log/cloudera-scm-agent/supervisord.log
a1.sources.r1.channels = c1

# Describe the sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://nameservice1/cmagent/logs/%Y-%m-%d
# default:FlumeData
a1.sinks.k1.hdfs.filePrefix = cmagent-
# useLocalTimeStamp set true
a1.sinks.k1.hdfs.useLocalTimeStamp = true
a1.sinks.k1.hdfs.rollInterval = 0
a1.sinks.k1.hdfs.rollCount = 0
# block 128 120 125
a1.sinks.k1.hdfs.rollSize = 10240
a1.sinks.k1.hdfs.fileType = DataStream
#a1.sinks.k1.hdfs.round = true
#a1.sinks.k1.hdfs.roundValue = 10
#a1.sinks.k1.hdfs.roundUnit = minute

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1	

4)启动flume,查看其中一台的日志信息 5)flume 会以flume用户访问hdfs,报错如下:

org.apache.hadoop.security.AccessControlException: Permission denied: user=flume, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x	

解决办法: 在hdfs上手动将cmagent/logs创建出来,更改该目录的所属者为flume:

~]# hdfs dfs -mkdir /cmagent
~]# export HADOOP_USER_NAME=hdfs
~]# hdfs dfs -chown -R flume /cmagent

6)一个集群中可以添加配置多个flume服务,收集不同数据源 (9)Oozie Oozie所在机器:beifeng03.com,选择依赖关系多的选项 1)在Oozie Server进程所在的服务器上:

# scp ext-2.2.zip beifeng03.com:/var/lib/oozie
# cd /var/lib/oozie

解压zip包到Oozie Server进程所在的服务器上的/var/lib/oozie:

# unzip ext-2.2.zip

如果解压失败没有unzip,则yum源安装unzip:yum -y install unzip 修改oozie-site.xml的配置文件,设置时区:

#  cd /opt/cloudera/parcels/CDH-5.3.6-1.cdh5.3.6.p0.11/etc/oozie/conf.dist

把下面配置加入oozie-site.xml或者在CM中找到Oozie的配置高级,将下面配置贴进去:

<property>
		<name>oozie.processing.timezone</name>
		<value>GMT+0800</value>
</property>

cd /opt/cloudera/parcels/CDH/lib/oozie/webapps/oozie,修改Oozie的Web端代码:

vi oozie-console.js
177行:
function getTimeZone() {
		Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
		return Ext.state.Manager.get("TimezoneId","GMT+0800");
}
2635行:var currentTimezone = Ext.state.Manager.get("TimezoneId","GMT+0800");

(10)Hue Hue所在机器:beifeng02.com, 选择依赖关系多的选项。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券