软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 云计算 -> 通过ClouderaManager安装CDH5.6 -> 正文阅读

[云计算]通过ClouderaManager安装CDH5.6


CDH的简单介绍


大家经常说CDH,其全称是:Cloudera’s Distribution Including Apache Hadoop,简单的说是Cloudera公司的Hadoop平台,是在Apache原生的Hadoop组件基础上进行了封装和加强。CDH里面有些什么东西呢?如下图:
[img]http://img.blog.csdn.net/20160328172701457
那么这个CDH软件如何安装呢?Cloudera公司提供了一套安装CDH,管理、维护CDH各组件的一个软件,叫做Cloudera Manager(以下简称为CM)。CM本身是一种主从结构,由CM Server和CM agent构成,所以,在后面可以看到,在安装CM时,是要先在一台主机上安装CM Server,然后在各个主机上安装CM agent。
我们接下来要讲的就是利用CM 5.6 来安装CDH 5.6。
在Cloudera的官网上CM安装CDH的文档中,介绍了几种安装方法:A、B、C。对于生产环境,可以选用B和C。B是先手工安装好CM,然后通过CM自动来安装其他组件。而C是CM和其他所有组件都是通过tarball的方式进行手工安装。我们采用的是CM用tarball来安装,其他组件都用CM来安装。
以下没有特殊说明,都采用root用户操作

环境准备

  • 关闭所有主机的防火墙,对于SuseLinux是:
SuSEfirewall2 stop
  • 修改所有主机的/etc/hosts文件,把所有主机的主机名和IP地址写入此文件
  • 将所有的主机都配置成SSH免密码登录,包括本机登录本机。
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

然后将每台机器中的~/.ssh/authorized_keys文件中的内容追加到其他机器~/.ssh/authorized_keys文件的末尾。
  • 安装oracle JDK 1.7,设置好环境变量JAVA_HOME、PATH。
    在.profile或者.bash_profile中设置
export JAVA_HOME=JAVA安装地址
export PATH=.:$JAVA_HOME/bin:$PATH

使其生效
source .bash_profile
  • 确保python已经安装,且版本是2.6或者2.7

Mysql安装

  • 下载一个mysql的rpm包,我们这里用的是:MySQL-server-5.5.28-1.linux2.6.x86_64.rpm,版本最好是5.5或者5.6
    如果系统已经存在低级别的版本,先执行下面的命令卸载:
rpm -e mysql --nodeps

然后再安装:
rpm -ivh MySQL-server-5.5.28-1.linux2.6.x86_64.rpm
  • 配置my.cnf
    如果/etc/my.cnf文件不存在,可以执行如下命令生成一个
touch /etc/my.cnf

里面的内容可以使用文档中推荐的配置值:
[mysqld]
transaction-isolation = READ-COMMITTED
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links = 0

key_buffer = 16M
key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 256K
thread_cache_size = 64
query_cache_limit = 8M
query_cache_size = 64M
query_cache_type = 1

max_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

# For MySQL version 5.1.8 or later. Comment out binlog_format for older versions.
binlog_format = mixed

read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M

# InnoDB settings
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit  = 2
innodb_log_buffer_size = 64M
innodb_buffer_pool_size = 4G
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

sql_mode=STRICT_ALL_TABLES
  • 设置mysql的自启动
chkconfig --add mysql
  • 启动mysql
service mysql start

如果启动失败了,参看后面“遇到的问题”一节
  • 安全配置
/usr/bin/mysql_secure_installation

$ sudo /usr/bin/mysql_secure_installation
[…]
Enter current password for root (enter for none):
OK, successfully used password, moving on…
[…]
Set root password? [Y/n] y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
[…]
Disallow root login remotely? [Y/n] N
[…]
Remove test database and access to it [Y/n] Y
[…]
Reload privilege tables now? [Y/n] Y
All done!
  • 安装JDBC驱动
    对于suselinux,下载mysql-connector-java-5.1.38.tar.gz,并安装:
tar zxvf mysql-connector-java-5.1.38.tar.gz
cp mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar /usr/share/java/mysql-connector-java.jar
  • 为其他组件创建数据库实例
    我们只要创建hive和activity
    以创建hive为例,用mysql root用户登录mysql后执行:
create database hive DEFAULT CHARACTER SET utf8;
grant all on hive.* TO 'root'@'%' IDENTIFIED BY 'root';
flush privileges;
use hive;
  • 如果你还需要其他组件,可以参考文档下面三小节:
    • Creating Databases for Activity Monitor, Reports Manager, Hive Metastore Server, Sentry Server, Cloudera Navigator Audit Server, and Cloudera Navigator Metadata Server
    • Configuring the Hue Server to Store Data in MySQL
    • Configuring MySQL for Oozie

Cloudera Manager的安装


由于采用tarball安装CM,可以参考文档
  • 解压安装文件
    将下载到的CM文件放到CM Server的/opt目录,下载页面是(http://www.cloudera.com/documentation/enterprise/latest/topics/cm_vd.html#concept_mb3_sfz_3q_unique_1)如果是SuseLinux,下载zypper/YaST SLES。
tar -xzf cloudera-manager*.tar.gz
  • 在CM Server上创建用户
useradd --system --home=/opt/cm-5.6.0/run/cloudera-scm-server --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
  • 创建CM Server的本地存储目录
mkdir /var/lib/cloudera-scm-server
mkdir /var/log/cloudera-scm-server
chown cloudera-scm:cloudera-scm /var/log/cloudera-scm-server

  • 配置CM agent
    在CM Server上修改/opt/cm-5.6.0/etc/cloudera-scm-agent/config.ini文件,只需要将server_host修改为CM Server的主机名

  • 将解压后的整个文件夹scp到其他各个主机
scp -r /opt/cm-5.6.0 各主机的/opt目录
  • 创建parcel目录
    什么是parcel?可以理解为就是一个CDH的安装文件,由CM在安装CDH的时候读取。
    • 先在CM Server主机上执行:

      mkdir -p /opt/cloudera/parcel-repo
      chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
    • 然后在各CM Agent主机上执行:

      mkdir -p /opt/cloudera/parcels
      chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
  • 创建CM Server的数据库
    执行如下命令,命令的具体含义可以参考安装文档
/opt/cm-5.6.0/share/cmf/schema/scm_prepare_database.sh mysql scm  -hlocalhost -uroot -proot  --scm-host localhost scm scm scm
  • 启动CM Server,并设置自启动
/opt/cm-5.6.0/etc/init.d/cloudera-scm-server start 
cp /opt/cm-5.6.0/etc/init.d/cloudera-scm-server /etc/init.d/cloudera-scm-server 
chkconfig cloudera-scm-server  on

修改/etc/init.d/cloudera-scm-server文件的内容,将CMF_DEFAULTS 的值由 ${CMF_DEFAULTS:-/etc/default} 改为/opt/cm-5.6.0/etc/default
  • 启动CM Agent,并设置自启动
/opt/cm-5.6.0/etc/init.d/cloudera-scm-agent start
cp /opt/cm-5.6.0/etc/init.d/cloudera-scm-agent /etc/init.d/cloudera-scm-agent 
chkconfig cloudera-scm-agent on

修改/etc/init.d/cloudera-scm-agent文件的内容,将CMF_DEFAULTS 的值由 ${CMF_DEFAULTS:-/etc/default} 改为/opt/cm-5.6.0/etc/default
注意:如果CM Server主机上也要启动CM Agent,则也要执行上述命令

CDH的安装


如果CM Server和CM Agent都成功启动后,我们就可以安装CDH了。
  • parcel安装包的准备
    到这里下载parcel包,一共包括三个文件(对于SuseLinux来说):
    CDH-5.6.0-1.cdh5.6.0.p0.45-sles11.parcel
    CDH-5.6.0-1.cdh5.6.0.p0.45-sles11.parcel.sha1
    manifest.json
    下载完后,将三个文件放到CM Server主机的/opt/cloudera/parcel-repo目录下,并且执行如下命令:
mv CDH-5.6.0-1.cdh5.6.0.p0.45-sles11.parcel.sha1  CDH-5.6.0-1.cdh5.6.0.p0.45-sles11.parcel.sha
  • 首先利用浏览器登录CM Server的主机: http://CM-Server-host:7180,默认登录用户名,密码是admin,admin
  • 如果是第一次安装,会选择CM的版本,我们选择Cloudera Express就可以了。
    [img]http://img.blog.csdn.net/20160330105316622
  • 选择加入集群的主机
    这里会自动显示出启动了CM Agent进程的服务器,如果没有显示,请检查/opt/cm-5.6.0/etc/cloudera-scm-agent/config.ini文件中server_host是否配置为CM Server的地址
    [img]http://img.blog.csdn.net/20160330160653622
  • 选择需要安装的parcel版本
    如果这里没有正确显示你下载的parcel版本,那么请检查”parcel安装包的准备”小节。
    [img]http://img.blog.csdn.net/20160330110033032
  • 选择JAVA安装
    这一步由于之前我们已经手动安装过了JAVA SDK,所以这一步不要选择复选框,直接继续
    [img]http://img.blog.csdn.net/20160330110654937
  • 输入主机root的登录密码
    [img]http://img.blog.csdn.net/20160330110844486
  • 实施安装
    [img]http://img.blog.csdn.net/20160330113002342
  • 主机检测
    [img]http://img.blog.csdn.net/20160330162445847
    随后会对各主机的环境进行检查,一般会报以下几个错误:
    • 时间不同步
      参见“遇到的问题”小节会有解决办法,这里可以先不管。但最好还是将每台机器的时间设置一致,可以不用安装NTP服务。
    • swappiness的问题
      按照提示执行如下命令:

      sysctl vm.swappiness=0
    • 主机缺少用户错误
      参见“遇到的问题”小节的解决办法。

解决这些问题后,可以选择重新运行再做检查。
  • 选择安装的组件
    这里我们选择所有服务
    [img]http://img.blog.csdn.net/20160330162828885
  • 自定义角色分配
    这里主要是选择如何在各主机之间分布各个组件
    [img]http://img.blog.csdn.net/20160330163029841
  • 为各个组件设置数据库
    这里涉及到的是Hive和Oozie,
    [img]http://img.blog.csdn.net/20160330164658528
  • 设置hadoop的目录
    [img]http://img.blog.csdn.net/20160330164810692
  • 执行安装
    这里也许会遇到一些问题。需要随机应变解决咯…
    [img]http://img.blog.csdn.net/20160330164928607

遇到的问题

  • mysql的启动问题
    Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist
    执行如下命令解决:
mysql_install_db --user=mysql 

  • 各主机时间不同步的问题
    在主机->配置页面,搜索栏中输入时钟,将警告和严重都设置为“从不”。如下图所示:
    [img]http://img.blog.csdn.net/20160330162132735

  • 主机缺少用户错误
    查看agent的日志,发现agent创建用户的时候失败了,通过搜索代码,发现如下文件中在创建用户:
    /opt/cm-5.6.0/lib64/cmf/agent/src/cmf/parcel.py
    它里面有这样一个代码,发现在使用useradd命令时,它使用了一个-U选项,这个选项在SuseLinux操作系统的useradd命令中是没有的,不知道其他OS的useradd是否支持此选项。
    解决办法很简单,我们把499行这一段代码注释掉就可以了:
    
    #umask_arg, umask_param,
    
487     for user, data in users.items():
488       try:
489         if self.is_suse:
490           umask_arg = '-U'
491           umask_param = '022'
492         else:
493           umask_arg = '-K'
494           umask_param = 'UMASK=022'
495 
496         useradd_args = [ "/usr/sbin/useradd",
497                          "-r", "-m",
498                          "-g", user,
499                          umask_arg, umask_param,
500                          "--home", data['home'],
501                          "--comment", data['longname'],
502                          "--shell", data['shell'] ]
  • Yarn启动失败的错误
    错误信息类似于:

Traceback (most recent call last):
File “/opt/cm-5.6.0/lib64/cmf/agent/src/cmf/util.py”, line 370, in source
return dict((line.split(“=”, 1) for line in data.splitlines()))
ValueError: dictionary update sequence element #103 has length 1; 2 is required

网上有人贴出了如下解决方法:

这个错误是CM的一个bug,解决方法为修改/opt/cm-5.3.0/lib64/cmf/agent/src/cmf/util.py文件。将其中的代码:
pipe = subprocess.Popen([‘/bin/bash’, ‘-c’, “. %s; %s; env” % (path, command)],
stdout=subprocess.PIPE, env=caller_env)
修改为:
pipe = subprocess.Popen([‘/bin/bash’, ‘-c’, “. %s; %s; env | grep -v { | grep -v }” % (path, command)],
stdout=subprocess.PIPE, env=caller_env)

这个方法是过滤掉env的输出,但是对于我的环境是没有用的,其实代码就是把env的输出保存到一个字典中,每一行是一个key=value的形式,但是如果env的输出中存在只有key,没有=等号的情况,那么插入字典时就会失败。我在agnet的日志中看到了打印的env的输出,果然有一行是这样的:

CLASSPATH=/usr/java/java^M/lib

这个^M是一个特殊的字符,应该是\r\n这类的,是一个换行,从而导致/lib后面没有等号,所以解决办法应该是:
修改格式不对的环境变量的值

CM重要文件的位置

  • CM Agent的功能文件位置:/opt/cm-5.6.0/lib64/cmf/agent/src/cmf/agent.py
  • CM Server和CM Agent的日志位置: /opt/cm-5.6.0/log/
  • CM Agent启动各组件的脚本位置:/opt/cm-5.6.0/lib64/cmf/service/
  • 安装完后各组件的安装位置:/opt/cloudera/parcels/CDH-5.6.0-1.cdh5.6.0.p0.45/lib/xxx,其中xxx为组件的名字,例如spark的位置就是/opt/cloudera/parcels/CDH-5.6.0-1.cdh5.6.0.p0.45/lib/spark目录
  • 安装完后各组件的配置文件的位置:/etc/xxx/conf,其中xxx为组件的名字,例如spark的配置文件就是/etc/spark/conf,conf是一个软链接,实际指向到/etc/alternatives/spark-conf
  • 各组件的运行时日志的位置:/var/log/xxx,其中xxx为组件的名字,例如oozie的日志就在/var/log/oozie目录里面

参考文档

  1. Cloudera Manager 和 CDH 4 终极安装
  2. CDH使用之CDH 5.3.x安装
  3. Cloudera Installation and Upgrade

......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-01 16:58:16  
云计算 最新文章
CentOS7上安装Zabbix(快速安装监控工具Zab
十分钟搭建NeuralStyle服务
solr入门之拼写纠错深入研究及代码Demo
3个netty5的例子,简单介绍netty的用法
RedhatOpenshift云平台注册使用
Akka框架——第一节:并发编程简介
Hadoop实战:Linux报tmp磁盘存储不足
linux安装thrift
感觉快更快规划计划高考韩国
solr相似匹配
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-20 7:27:39
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --