离线安装CDH5.12.1

来源:互联网 发布:网络全职 编辑:程序博客网 时间:2024/05/29 08:09

1.准备工作

  • 准备三台虚拟机,内存和硬盘空间尽量给足,配置host映射。(我的是三台节点配置相同:6G内存,50G硬盘,名称分别是cdh1、cdh2、cdh3)
  • 下载安装包
    Cloudera Manager:下载地址 http://archive.cloudera.com/cm5/cm/5/ 选择 cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz (708M )
    Cloudera’s Distribution Hadoop :下载地址 http://archive.cloudera.com/cdh5/parcels/5.12.1/选择 CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel 、CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1,manifest.json 和cdh在同一个页面 ,下载地址 http://archive.cloudera.com/cdh5/parcels/5.12.1/manifest.json
    MySQL驱动:https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.44.tar.gz
  • 安装JDK、配置JAVA_HOME环境变量(使用Oracle JDK,CDH不支持OpenJDK)
  • 关闭防火墙
  • 配置NTP服务,集群中的各节点时间要保持同步,否则会出现各种问题(比如HBase的版本顺序和预期的不一样)
    安装NTP
    yum install ntp
    在一个节点上启动NTP
    service ntpd start
    同步其他节点的时间
    ntpdate cdh1
  • 各节点之间配置SSH免密登录
ssh-keygenssh-copy-id -i ~/.ssh/id_rsa.pub cdh2

2.开始安装

  • 创建cloudera-scm用户(每个节点都要创建)
    useradd --system --home-dir /opt/cm-5.12.1/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
  • 安装Cloudera Manager Server
    首先需要安装Python,CentOS7默认安装了Python2.7
    主节点解压安装cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz到/opt文件夹
    tar -xvf cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz -C /opt
    将MySQL驱动复制到/opt/cm-5.12.1/share/cmf/lib中
    配置MySQL的远程访问权限
grant all privileges on *.* to 'root'@'%' identified by 'root';flush privileges;

初始化CM的元数据库
/opt/cm-5.12.1/share/cmf/schema/scm_prepare_database.sh mysql cm -uroot -proot -h127.0.0.1(或者远程数据库的地址) --scm-host cdh1 scm scm scm
mysql指定数据库类型,cm为元数据库名,-u为数据库用户名,-p为数据库密码,-h为数据库地址,–scm-host 为cm主节点地址,最后三个scm不用理会,是从官网直接上copy过来的
执行完毕后如果报Access denied,检查一下是否启用了global id,如果启用了,禁用即可。原因在于上述脚本执行语句时在建表过程中会执行select命令,而启用了global id的情况下不允许这种操作。
建库成功后会发现MySQL的用户表里多出一个名为scm的用户,host为CM主节点的host,执行

use mysql;update user set host='%' where User='scm';grant all privileges on *.* to 'scm'@'%';flush privileges;
  • 安装Cloudera Manager Agent
    修改/opt/cm-5.12.1/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名。
    将主节点的/opt/cm-5.12.1同步到其它节点
    scp /opt/cm-5.12.1 root@cdh2:/opt
    将Parcel包放到主节点的/opt/cloudera/parcel-repo/目录中(如没有parcel-repo,需要手动创建)
cp CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel /opt/cloudera/parcel-repo/cp CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1 /opt/cloudera/parcel-repo/CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.shacp manifest.json /opt/cloudera/parcel-repo/
  • 启动Cloudera Manager Server
    创建以下三个文件夹
mkdir -p /var/lib/cloudera-scm-servermkdir -p /var/lib/cloudera-scm-agentmkdir -p /var/lib/cloudera-scm-server-db/data/opt/cm-5.12.1/etc/init.d/cloudera-scm-server start #启动成功后等5分钟左右查看进程会出现7180端口
  • 启动Cloudera Manager Agent
    所有节点通过/opt/cm-5.12.1/etc/init.d/cloudera-scm-agent start启动Agent服务。 (所有节点都要启动Agent服务,包括主节点)
    查看进程出现9000等端口代表启动成功

3.启动CM

在浏览器访问192.168.1.211:7180输入账号密码(初始均为admin)出现如下界面:
这里写图片描述
点继续,然后根据自己的需要来配置相关项,启动成功后的界面:
这里写图片描述

4.遇到的问题

  • 使用HBase Client API在自己的机器上来编写代码访问HBase操作表时长时间没反应
    这是因为CDH集群中hbase-site.xml文件中配置的zookeeper-quorum属性为:
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>cdh1,cdh2,cdh3</value>
    </property>
    <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
    </property>

    导致HBase集群在Zookeeper中注册的节点名称为cdh*,所以在通信时HBase Client API得到的地址也是cdh开头的,但是本机上并没有进行host映射,所以会出现连接不上的情况。至于为什么能够创建HBase的Connection,是因为创建连接的过程只是和Zookeeper进行通信,并不涉及到HBase,而一旦对表进行操作,API会到Zookeeper中查询-root-表所在的region地址,此时返回的是cdh开头的host

    [zk: localhost:2181(CONNECTED) 13] get /hbase/meta-region-server�regionserver:60020�9UFcdh1��Љ���+cZxid = 0x400000035ctime = Tue Oct 24 20:53:46 PDT 2017mZxid = 0x400000035mtime = Tue Oct 24 20:53:46 PDT 2017pZxid = 0x400000035cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 58numChildren = 0

    可以看到ZNode中存储的值为cdh1,在本机hosts文件中配置host映射即可解决这个问题

  • 启动Spark时报Permission denied错误
    是因为HDFS默认开启了权限检查,只有hdfs用户名能进行操作,测试时可以选择关闭检查HDFS权限,方法如下:
    在CM的首页左侧选择HDFS集群,然后点击配置选项卡
    这里写图片描述
    取消检查HDFS权限选项的勾选即可

  • 启动Spark时报内存不足错误

java.lang.IllegalArgumentException: Required executor memory (1024+384 MB) is above the max threshold (1024 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.        at org.apache.spark.deploy.yarn.Client.verifyClusterResources(Client.scala:281)        at org.apache.spark.deploy.yarn.Client.submitApplication(Client.scala:140)        at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.start(YarnClientSchedulerBackend.scala:57)        at org.apache.spark.scheduler.TaskSchedulerImpl.start(TaskSchedulerImpl.scala:151)        at org.apache.spark.SparkContext.<init>(SparkContext.scala:538)        at org.apache.spark.repl.SparkILoop.createSparkContext(SparkILoop.scala:1022)        at $line3.$read$$iwC$$iwC.<init>(<console>:15)        at $line3.$read$$iwC.<init>(<console>:25)        at $line3.$read.<init>(<console>:27)        at $line3.$read$.<init>(<console>:31)        at $line3.$read$.<clinit>(<console>)        at $line3.$eval$.<init>(<console>:7)        at $line3.$eval$.<clinit>(<console>)

将异常中要求的两个属性设置为Required executor memory (1024+384 MB)比括号中的值大即可,在YARN集群中设置,设置完之后要重启集群

原创粉丝点击