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

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, 选择依赖关系多的选项。

发布了219 篇原创文章 · 获赞 603 · 访问量 129万+

猜你喜欢

转载自blog.csdn.net/gongxifacai_believe/article/details/96713333