利用cloudera manager搭建Hadoop集群

前期准备:

     1.我这里用了三台虚拟机,.默认已经配置好静态IP和IP域名映射,它们相互之间可以ping通

         第一台:192.168.174.131      hadoopNumber01.medal.com

         第二台:192.168.174.132      hadoopNumber02.meda.com

         第三台:192.168.174.133      hadoopNumber03.medal.com

     2.虚拟机一定不可以上网,因为我们后面用的是离线方式安装

一、搭建前的系统设置

    1.将三台虚拟机切换到root用户,禁用IPv6

      命令是:#echo "alias net-pf-10 off"  >> /etc/modprobe.d/dist.conf

          #echo "alias ipv6 off"  >> /etc/modprobe.d/dist.conf

    2.配置普通用户的sudo权限

      命令是:#chmod  u+w   /etc/sudoers

          #vi   /etc/sudoers

             在第一行加上:用户名  ALL=(root)NOPASSWD:ALL

            因为我是以xunzhang这个用户登录的,所以我加上xunzhang ALL=(root)NOPASSWD:ALL

          #chmod  u-w  /etc/sudoers

    3.关闭防火墙

      命令是:$sudo  service iptables stop

          $sudo  chkconfig  iptables  off

    4.禁用selinux

      命令是:$sudo  vi  /etc/sysconfig/selinux

            修改内容:SELINUX= disabled

    5.卸载JdK

      命令是:$sudo  rpm  -qa | grep  java

          $sudo  rpm  -e  --nodeps  xxx   yyy   zzz

    6.设置文件打开数量和用户最大进程数

      命令是:$sudo  vi  /etc/security/limits.conf

          加上内容:

              *  soft   nofiles   65535

              *  hard  nofiles   65535

              *  soft    nproc    32000

              *  hard   nproc    32000

    7.设置集群时间同步(ntp)

      比如说我现在设置第二台和第三台虚拟机与第一台虚拟机进行时间同步,

          1>首先检查第一台虚拟机有没有安装ntp软件,命令是:#rpm  -qa | grep ntp,默认系统已经自带了

        2>编辑配置文件ntp.conf

          命令是:#vi  /etc/ntp.conf

           去掉一行注释,将#restrict  192.168.1.0  mask 255.255.255.0  nomodify  notrap,去掉注释,并将其改成192.168.174.0,因为我的ip是在这个网段里面

           加上三行注释,将service  0.centos.pool.ntp.ort和service  1.centos.pool.ntp.org还有service  2.centos.pool.ntp.org这三行注释掉

           去掉两行注释,将末尾的server  127.127.1.0   #local   clock和fudge  127.127.1.0   stratum   10这两行的注释去掉

       3>编辑配置文件ntpd

         命令是:#vi  /etc/sysconfig/ntpd

            内容是:# Drop  root  to id  'ntp:ntp'  by  default.

                SYNC_HWCLOCK =yes

                OPTIONS="-u  ntp:ntp  -p  /var/run/ntpd.pid   -g"

       4>启动服务

         命令是:#service  ntpd  start

             #chkconfig   ntpd  on

       5>在另外两台虚拟机上,写脚本,进行时间的同步

          在第二台虚拟机上,切换到root用户,设置同步

             命令是:crontab  -e

               加上如下内容:

                  0-59/10  * * * * /usr/sbin/ntpdate  hadoopNumber01.medal.com

                  注意:在这里每个*号之间有一个空格,后面这个域名是我第一台主机的主机名

          在第三台虚拟机上,也做如第二台虚拟机相同的操作

二、离线搭建

  方式一:利用rpm包进行搭建

    1、启动本地Apache服务器(系统自带Apache服务器)

       命令是:sudo service httpd start

         sudo chkconfig httpd on

    2.搭建本地源

      1>软件下载

        cm-5.3.6  bin文件 http://archive.cloudera.com/cm5/installer/5.3.6/cloudera-manager-installer.bin

        cm-5.3.6  依赖rpm包 http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.3.6/RPMS/x86_64/

        依赖其它包  postgresq-libs和repo-libs

      2>安装cm-5.3.6

        命令:cd /var/www/html

           sudo mkdir -p cm5/redhat/6/x86_64/cm/5/RPMS/x86_64/,然后,将上面下载的依赖rpm包,全部放在这个目录下

      3>设置域名映射

        命令:sudo  vi  /etc/hosts

           加上:192.168.174.131      archive.cloudera.com

      4>修改本地源

        命令:cd /etc/yum.repos.d

           sudo  rm  -rf   ./*

           touch  cloudera-manager.repo

        然后将http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/cloudera-manager.repo里面的内容写入cloudera-manager.reop文件中,并将最后倒数第三行的https修改成http,将倒数第二行改成enable=1,倒数第一行改成gpgcheck=0

     

      完成后,再创建一个名RPM-GPG-KEY-cloudera文件

        切换到cm5/redhat/6/x86_64/cm/目录下

        执行命令:sudo  touch   RPM-GPG-KEY-cloudera

        并把http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/RPM-GPG-KEY-cloudera里面的内容,写入这个文件中 

      5>安装依赖包repo-libs

        进入postgresq-libs目录下

        执行命令:chmod  u+x ./*

           sudo  rpm  -ivh  ./*

        进入repo-libs目录下

        执行命令:chmod   u+x  ./*

           sudo  rpm  -ivh  ./*.rpm  

       

      安装完成后,切换到/var/www/html/cm5/redhat/6/x86_64/cm/5下

        执行命令:sudo   createrepo  .

    3.安装cm-5.3.6

      执行:cm-5.3.6  bin文件

        切换到cm-5.3.6  bin文件所在的目录

      执行命令:

        sudo  ./cloudera-manager-installer.bin

      然后一直下一步,下一步,就安装好了.安装完成后,运行命令:sudo netstat -tnlp,看看7180端口,有没有打开,如果开启了,就可以访问web页面,没有开启,就查看你的cloudera  服务有没有打开,执行命令:sudo service cloudera-scm-server status,如果服务正在运行,等待一会儿就好了

至此,cloudera manager集群搭建完成,接着搭建cdh集群了  

    4.搭建cdh集群

      1> 将cdh的两个文件,放到/opt/cloudera/parcel-repo/目录下

        命令:cd   /opt/cloudera/parcel-repo/

           sudo cp  /opt/softwares/cdh-5.3.6 /* ./

      2>  修改cloudera-manager.repo文件

         命令:cd   /etc/yum.repos.d

          然后将archive.cloudera.com改成你的主机名

      3>  将第2步的cloudera-manager.repo文件,在另外两台虚拟机上也创建出来

        第二台虚拟机:

          命令:cd   /etc/yum.repo.d

           sudo rm  -rf  ./*

           sudo  touch  cloudrea-manager.repo

          最后将第一台虚拟机里面cloudera-manager.repo中的内容,复制到这个里面

       第三台虚拟机,也做第二台虚拟机相同的操作

      4>用浏览器访问你虚拟机的主机名:hadoopNumber01.medal.com:7180,用户名是:admin,密码是:admin,这个是初始的用户名和密码,大家设置好后,可以修改的,选择免费版,继续,继续,然后把这三台虚拟机的主机名或ip,填进去,继续,点击“自定义存储库”,在下面的方框中,输入“https://hadoopNumber01.medal.com/cm5/redhat/6/x86_64/cm/5/”,就是开始我们的cloudera-manager.repo里面的倒数第三行的内容,继续,安装Oracle,继续, 其他用户,xunzhang,输入你的用户密码,同时安装数量为3,继续,然后集群安装,下一步,下一步,最后的你cdh就装好了

    5、中间的黄色警告:

      1>修改你的hosts文件

      2>三台虚拟机都要做

        $ sudo sysctl -w vm.swappiness=0

        # echo "vm.swappiness=0" >> /etc/sysctl.conf

      3>三台虚拟机都要做

        # echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag

        将“echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag” 追加到/etc/rc.local中

   方式二:利用tar包进行搭建

   0.克隆虚拟机,重新生成mac地址,设置静态ip,命令:

      #vi  /etc/udev/rules.d/70-persistent-net.rules

      #vi  /etc/sysconfig/network-scripts/if-cfg-eth0   

DEVICE=eth0
TYPE=Ethernet
UUID=ffc58755-5c20-4e35-8be6-f3a61434a347
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
HWADDR=00:0C:29:A6:31:AF
IPADDR=192.168.174.132
PREFIX=24
GATEWAY=192.168.174.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"

   1.配置ssh面密钥登陆

     1>切换到家目录

        2>执行ssh-keygen  -t  rsa  ,然后4个回车

           3>进入.ssh目录,执行ssh-copy-id   目标主机 

    2.在所有节点上安装jdk(最好是1.7以上),安装jdk,在这里,我就不赘述了

    3.安装mysql(master节点)

      4.安装cloudera manager server 和 agent

      1>解压tar包,将/opt/software/下的cloudera-manager-el6-cm5.12.0_×86_64.tar.gz解压到/opt/目录下

      2>为cloudera manager 5建立数据库

         将准备好的mysql-connector-java-5.1.27-bin.jar文件放到/opt/cm-5.12.0/share/cmf/lib/中

         在master节点初始化cm5的数据库

           命令:

             /opt/cm-5.12.0/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -proot --scm-host localhost scm scm scm

             说明:            

                /opt/cm-5.12.0/share/cmf/schema/scm_prepare_database.sh   这个是固定的

                mysql   是指mysql数据库,如果你是oracle,那么这里就是oracle

                cm    是创建的数据库名

      3>配置Agent

        修改/opt/cm-5.12.0/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名master

          命令:vi  /opt/cm-5.12.0/etc/cloudera-scm-agent/config.ini

            #Hostname  of  the  CM  server.

                server_host=master

                注意:这里的master是你的主机名,我的主机名是hadoopNumber01.medal.com,所以是server_host=hadoopNumber01.medal.com

        同步Agent到其它节点

            命令:

             scp  -r /opt/cm-5.12.0/   用户名@主机名:/opt/

      4>在所有节点上创建cloudera-scm用户

           命令:useradd --system --home=/opt/cm-5.12.0/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

      5>准备Parcels,用以安装CDH5  

        将CHD5相关的Parcel包放到主节点的/opt/cloudera/parcel-repo/目录中(parcel-repo需要手动创建)。

          相关的文件如下:

             CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel.sha1

             CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel

             manifest.json

        后将CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel.sha1,重命名为CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel.sha1,这点必须注意,否则,系统会重新下载CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel.sha文件。

      6>执行启动脚本

        在master节点上启动服务端

          命令:

            /opt/cm-5.12.0/etc/init.d/cloudera-scm-server start

        在所有节点启动Agent

          命令:

           /opt/cm-5.12.0/etc/init.d/cloudera-scm-agent  start

        以上脚本是启动命令,相关停止或重启命令仅需将start变成stop或restart即可。

     7>配置cdh集群

        Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置了。

        在浏览器打开http://master:7180进入CDH管理界面,由于CM Server的启动需要花点时间,这里可能要等待一会才能访问,默认的用户名和密码均为admin。

        选择安装的集群,这里注意只有已启动cloudera-scm-agent的主机才能被CM管理。 

        选择我们安装需要的Parcel包,这里可以看到我们已准备好的CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel包,若没有,就检查相关文件是否正确放入/parcel-repos中,且CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel.sha1是否正确重命名。 

        继续,如果上一步检查配置没问题,这里的第一个进度条应该瞬间完成,CM不需要再向用品下载Parcel,然后等待CM将Parcel分发到各slave节点上并激活。  

        CM会检测集群很多环境项,此处如果出现这样的警告,是一个默认环境变量的问题,Cloudera建议将/proc/sys/vm/swappiness设置为0,当前设置为 60。在所有节点执行这个命令: # echo 0 > /proc/sys/vm/swappiness,这个命令在方式一中已经说明了

        所安装的角色有些需要用到数据库,则在mysql中新建相应数据库即可。进行下一步之前必须测试数据库的连通性,以hive举例:

          mysql -h localhost -u root -p

          create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

          设置服务所需的目录结构,若无特殊需求这里也可以保持默认目录结构。

      在这之间可能会出现以下错误:

       Logon denied for user/password. Able to find the database server and database, but logon request was rejected

      解决办法:

       登陆进mysql,然后use  mysql,设置root授权访问所有的数据库: grant all privileges on *.* to 'root'@'%' identified by '123' with grant option;

       刷新:flush privileges;

           接下来就等待初始化和启动服务,这里可能会遇到Hive报错的问题,因为我们选择了Mysql作为hive的元数据存储,查看日志知道是Hive初始化Mysql的时候找不到jar文件,将mysql-connector-java-5.1.33-bin.jar拷贝到hive存放jar文件的目录重试即可。

            cp /opt/cm-5.12.0/share/cmf/lib/mysql-connector-java-5.1.27-bin.jar /opt/cloudera/parcels/CDH-5.12.0-1.cdh5.12.0.p0.12/lib/hive/lib/ 

      安装spark完成后,运行bin/spark-shell,也许会出现以下错误:

        Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStream

      解决办法:

        进入/opt/cloudera/parcels/CDH/etc/spark/conf.dist目录下,编辑spark-env.sh文件,加入export SPARK_DIST_CLASSPATH=$(hadoop classpath),然后保存退出      

      如果服务都启动成功,这个集群已安装上所需要的Hadoop服务,整个部署过程结束。 

原文地址:https://www.cnblogs.com/medal-li/p/7458984.html