CDH的简介

大家常常说CDH。其全称是:Cloudera’s Distribution Including Apache Hadoop。简单的说是Cloudera公司的Hadoop平台,是在Apache原生的Hadoop组件基础上进行了封装和加强。

CDH里面有些什么东西呢?例如以下图:



那么这个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!

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,能够參考文档

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,默认登录username。密码是admin,admin
  • 假设是第一次安装,会选择CM的版本号。我们选择Cloudera Express就能够了。

  • 选择增加集群的主机

    这里会自己主动显示出启动了CM Agent进程的服务器,假设没有显示,请检查/opt/cm-5.6.0/etc/cloudera-scm-agent/config.ini文件里server_host是否配置为CM Server的地址

  • 选择须要安装的parcel版本号

    假设这里没有正确显示你下载的parcel版本号,那么请检查”parcel安装包的准备”小节。

  • 选择JAVA安装

    这一步因为之前我们已经手动安装过了JAVA SDK,所以这一步不要选择复选框。直接继续

  • 输入主机root的登陆password

  • 实施安装

  • 主机检測



    随后会对各主机的环境进行检查,通常会报下面几个错误:

    • 时间不同步

      參见“遇到的问题”小节会有解决的方法。这里能够先无论。但不妨将每台机器的时间设置一致,能够不用安装NTP服务。
    • swappiness的问题

      依照提示运行例如以下命令:



      sysctl vm.swappiness=0

    • 主机缺少用户错误

      參见“遇到的问题”小节的解决的方法。

解决这些问题后。能够选择又一次运行再做检查。

  • 选择安装的组件

    这里我们选择全部服务

  • 自己定义角色分配

    这里主要是选择怎样在各主机之间分布各个组件

  • 为各个组件设置数据库

    这里涉及到的是Hive和Oozie,

  • 设置hadoop的文件夹

  • 运行安装

    这里或许会遇到一些问题。须要随机应变解决咯…

遇到的问题

  • mysql的启动问题

    Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist

    运行例如以下命令解决:
mysql_install_db --user=mysql 
  • 各主机时间不同步的问题

    在主机->配置页面,搜索栏中输入时钟,将警告和严重都设置为“从不”。例如以下图所看到的:

  • 主机缺少用户错误

    查看agent的日志。发现agent创建用户的时候失败了,通过搜索代码。发现例如以下文件里在创建用户:

    /opt/cm-5.6.0/lib64/cmf/agent/src/cmf/parcel.py

    它里面有这样一个代码,发如今使用useradd命令时。它使用了一个-U选项,这个选项在SuseLinux操作系统的useradd命令中是没有的。不知道其它OS的useradd是否支持此选项。

    解决的方法非常easy,我们把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

通过Cloudera Manager安装CDH 5.6的更多相关文章

  1. Cloudera Manager安装_搭建CDH集群

    2017年2月22日, 星期三 Cloudera Manager安装_搭建CDH集群 cpu   内存16G 内存12G 内存8G 默认单核单线 CDH1_node9 Server  || Agent ...

  2. Cloudera Manager及CDH最新版本安装全程记录

    大家都知道,Apache Hadoop的配置很繁琐,而且很零散,为此Cloudera公司提供了Clouder Manager工具,而且还封装了Apache Hadoop,flume,spark,hiv ...

  3. 2、CDH 搭建Hadoop在安装(安装Cloudera Manager,CDH和托管服务)

    安装Cloudera Manager,CDH和托管服务 建议使用此过程为生产环境安装Cloudera Manager和CDH.对于非生产“易于安装”,请参阅安装概念证明群集. 在开始安装之前,请确保已 ...

  4. Cloudera Manager 和 CDH 4 终极安装

    转载请注明出处:http://www.cnblogs.com/thinkCoding/p/3567408.html 系统环境 操作系统:CentOS 6.5 Cloudera Manager 版本:4 ...

  5. Cloudera Manager、CDH零基础入门、线路指导 http://www.aboutyun.com/thread-9219-1-1.html (出处: about云开发)

    Cloudera Manager.CDH零基础入门.线路指导http://www.aboutyun.com/thread-9219-1-1.html(出处: about云开发) 问题导读:1.什么是c ...

  6. Cloudera Manager安装之利用parcels方式安装3或4节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(五)

    参考博客 Cloudera Manager安装之利用parcels方式安装单节点集群  Cloudera Manager安装之Cloudera Manager 5.3.X安装(三)(tar方式.rpm ...

  7. Cloudera Manager安装之利用parcels方式安装单节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(四)

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  8. Cloudera Manager安装之Cloudera Manager 5.3.X安装(三)(tar方式、rpm方式和yum方式)

    不多说,直接上干货! 福利每天都有  =>  =>=>=>=> 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师  ...

  9. Cloudera Manager安装之Cloudera Manager安装前准备(CentOS6.5)(一)

    Cloudera Manager安装前准备 (一)机器准备 192.168.80.148   clouderamanager01 (部署ClouderaManager-server和Mirror se ...

随机推荐

  1. 如何将离线的PIP安装包快速安装好

    先将已安装的组件通过pip freeze require.txt导出. 将require里需要的安装包放到一个独立目录下. 然后运行命令: pip install --no-index --find- ...

  2. linux 系统的负载与CPU、内存、硬盘、用户数监控脚本[marked]

    转载文章 原始出处  在没有nagios监控的情况下,只要服务器能上互联网,就可通过发邮件的方式来提醒管理员系统资源的使用情况. 一.编写linux系统告警邮件脚本 # vim /scripts/sy ...

  3. HDU 6305.RMQ Similar Sequence-笛卡尔树+数学期望 (2018 Multi-University Training Contest 1 1008)

    6305.RMQ Similar Sequence 这个题的意思就是对于A,B两个序列,任意的l,r,如果RMQ(A,l,r)=RMQ(B,l,r),B序列里的数为[0,1]的实数,B的重量为B的所有 ...

  4. (1)C# 创建ef sqlserver

    连接sql 如果报错不能连接的错误 把这三个IP地址的端口号设置上,并启用.第一个18.6是本机ip,之后就可以测试了 最后重启服务器

  5. Codeforces Round #306 (Div. 2) A. Two Substrings【字符串/判断所给的字符串中是否包含不重叠的“BA” “AB”两个字符串】

    A. Two Substrings time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  6. Python的程序结构[3] -> 变量/Variable[1] -> LEGB 法则

    LEGB法则 / LEGB Rule LEGB 变量搜索顺序 ---- 来源于<Python学习手册>/ Learning Python Page 419 ---- Python 的变量名 ...

  7. Linux/Unix面试题

    shell中如何改变文件中的某个关键字 unix命令 unix shell中在特定文件夹内查找包含指定字符串的文件用哪个命令 如何用要shell找到指定目录下的最近一天更新的文件,要包含子目录 Lin ...

  8. Android-onInterceptTouchEvent()和onTouchEvent()

    老实说,这两个小东东实在是太麻烦了,很不好懂,我自己那api文档都头晕,在网上找到很多资料,才知道是怎么回事,这里总结一下,记住这个原则就会很清楚了: 1.onInterceptTouchEvent( ...

  9. 细说JavaScript对象(4): for in 循环

    如同 in 运算符一样,使用 for in 循环遍历对象属性时,也将往上遍历整个原型链. // Poisoning Object.prototype Object.prototype.bar = 1; ...

  10. tiny4412 串口驱动分析八 --- log打印的几个阶段之内核启动阶段(printk tiny4412串口驱动的注册)

    作者:彭东林 邮箱:pengdonglin137@163.com 开发板:tiny4412ADK+S700 4GB Flash 主机:Wind7 64位 虚拟机:Vmware+Ubuntu12_04 ...