安装笔记

一. 环境说明
本例中安装一个六个节点的集群,一个控制节点,两个管理节点,三个数据节点。控制节点主要安装Ambari、Ambari Metrics等服务,用于集群各服务的控制,监控,任务提交等。管理节点主要安装各服务的Master组件,如Namenode、ResourceManager、Hive、Hbase、KDC、OpenLdap、Ranger、Ambari infra等。数据节点主要安装各服务的Slave组件,如Datanode、NodeManager、Regionserver等。
IP地址
主机名
节点类型
198.218.36.1
bigdata-cn-01
控制节点
198.218.36.2
bigdata-nn-01
管理节点
198.218.36.3
bigdata-nn-02
198.218.36.4
bigdata-dn-01
数据节点
198.218.36.5
bigdata-dn-02
198.218.36.6
bigdata-dn-03
二. 环境准备
0、 准备集群批量执行环境
编辑/etc/profile文件,添加如下环境变量信息: # vi /etc/profile export all=” 198.218.36.1 198.218.36.2 198.218.36.3 198.218.36.4 198.218.36.5 198.218.36.6” export sync=” 198.218.36.2 198.218.36.3 198.218.36.4 198.218.36.5 198.218.36.6”
1、 配置host (以bigdata-cn-01为例)
  • Centos6:
1). 编辑 /etc/sysconfig/network ,修改HOSTNAME。 # vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=bigdata-cn-01 2).编辑 /etc/hosts,增加一行 #vi /etc/hosts 198.218.36.1 bigdata-cn-01.cars.com bigdata-cn-01 198.218.36.2 bigdata-nn-01.cars.com bigdata-nn-01 ….. 198.218.36.6 bigdata-dn-03.cars.com bigdata-dn-06 退出ssh,再登陆,即生效。
  • Centos7:
1). hostnamectl set-hostname bigdata-cn-01 2).编辑 /etc/hosts,增加一行 #vi /etc/hosts 198.218.36.1 bigdata-cn-01.cars.com bigdata-cn-01 198.218.36.2 bigdata-nn-01.cars.com bigdata-nn-01 ….. 198.218.36.6 bigdata-dn-03.cars.com bigdata-dn-06 退出ssh,再登陆,即生效。
  • 注意:如果是在公司openstack上面安装集群的话,配置hosts文件的时候,ip要配置openstack的内部IP,不要配置浮动IP。
2、SSH免密登陆(适用于centos6 和centos 7)
1)生成秘钥文件(在test1上执行) for h in ${all[@]} do ssh ${h} -C "ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa" ssh ${h} -C "cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys" done 2)分发秘钥(在test1上执行) for h in ${sync[@]} do ssh-copy-id ${h} done
3、集群时间同步
  • 一般使用集群中的某一个节点作为时间同步服务器,本例中选择Ambari所在的机器作为ntp服务端。
安装: for h in ${all[@]} do ssh ${h} -C " yum install ntp -y " done 修改服务端/etc/ntp.conf: $ vi /etc/ntp.conf # 取消此处restrict前面的注释,并将对应的ip段设置为自己主机所在的ip段(如果是公司openstack,则要配置内部地址) # Hosts on local network are less restricted. restrict 172.16.0.0 mask 255.255.255.0 nomodify notrap 例如IP是172.17.109.11 则修改为restrict 172.17.0.0 mask 255.255.255.0 nomodify notrap # 将下面的外网server均注释掉,加下面的两行,使用本地clock作为,时间服务器 # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #server 0.rhel.pool.ntp.org iburst #server 1.rhel.pool.ntp.org iburst #server 2.rhel.pool.ntp.org iburst #server 3.rhel.pool.ntp.org iburst server 127.127.1.0 fudge 127.127.1.0 stratum 10 启动服务端ntp centos 6: service ntpd start centos 7: systemctl start ntpd 修改客户端(集群中其他节点)/etc/ntp.conf,为了方便,先拷贝一份到本地/tmp目录下,修改好再同步: $ scp root@bigdata-nn-01:/etc/ntp.conf /tmp $ vi /tmp/ntp.conf # 将文件中的public servers全部注释掉,填写服务端的地址(ip 或者 hostname 均可) # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #server 0.rhel.pool.ntp.org iburst #server 1.rhel.pool.ntp.org iburst #server 2.rhel.pool.ntp.org iburst #server 3.rhel.pool.ntp.org iburst server 172.16.0.118 iburst 同步配置文件到其他服务器: for h in ${sync[@]} do scp /tmp/ntp.conf ${h}:/etc done 同步集群的时间: for h in ${sync[@]} do ssh $h -C "ntpdate <AMBARI HOSTNAME/IP>" done 配置时间自动同步: centos6: for h in ${all[@]} do ssh ${h} -C "chkconfig ntpd on ; service ntpd start ;" ssh ${h} -C "chkconfig –list | grep ntpd" done centos7: for h in ${all[@]} do ssh ${h} -C " systemctl enable ntpd ; systemctl start ntpd;" ssh ${h} -C " systemctl is-enabled ntpd " done
4、安装Postgresql
  • 正式的生产环境中需要分别安装Ambari所用到的元数据库和Hadoop集群用到的元数据库,其中Hadoop集群用到的PG数据库需要配置HA和流同步。这部分工作一般由PG组帮助完成. 下面仅提供简单的PG安装方法(rpm包的方式):
下载postgresql rpm包,下载地址: https://www.postgresql.org/download/linux/redhat/ ,或 https://yum.postgresql.org/rpmchart.php 主要下载postgresql95-9.5.5-1PGDG.rhel6.x86_64.rpm,postgresql95-contrib-9.5.5-1PGDG.rhel6.x86_64.rpm,postgresql95-devel-9.5.5-1PGDG.rhel6.x86_64.rpm,postgresql95-libs-9.5.5-1PGDG.rhel6.x86_64.rpm,postgresql95-server-9.5.5-1PGDG.rhel6.x86_64.rpm
  • 安装
yum install postgresql*.rpm -y
  • 安装后检查
sudo rpm -aq| grep postgres
  • 初始化数据库
centos6: service postgresql-9.5 initdb centos7: /usr/pgsql-9.5/bin/postgresql95-setup initdb
  • 数据库开机自启
centos6: chkconfig postgresql-9.5 on centos7: systemctl enable postgresql-9.5
  • 修改监听地址
vi /var/lib/pgsql/9.5/data/postgresql.conf listen_addresses = '*'
  • 允许所有ip访问
vi /var/lib/pgsql/9.5/data/pg_hba.conf 将原来的用#隐藏,直接添加下面一行 host all all 0.0.0.0/0 md5
  • 启动数据库
centos6: service postgresql-9.5 start centos7: systemctl start postgresql-9.5
  • 进入命令行修改密码
su - posrgres psql postgres=# \password
5、安装JDK(在test1上执行,centos6和centos7 通用)
1)准备安装包jdk-8u65-linux-x64.tar.gz并解压 tar -xvf jdk-8u65-linux-x64.tar.gz -C /opt/ 2)下载jce_policy-8.zip安装jce unzip -o -j -q jce_policy-8.zip -d /opt/jdk1.8.0_65/jre/lib/security/ chown 10:143 /opt/jdk1.8.0_65/jre/lib/security/local_policy.jar chown 10:143 /opt/jdk1.8.0_65/jre/lib/security/US_export_policy.jar 3)配置环境变量 # vi /etc/profile export JAVA_HOME=/opt/jdk1.8.0_65 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 4)分发 for h in ${sync[@]} do scp -r /opt/ jdk1.8.0_65 ${h}:/opt scp -r /etc/profile ${h}:/etc ssh ${h} -C “source /etc/profile” done 5) 检查 for h in ${syncall[@]} do ssh ${h} -C “java -version” done
6、关闭防火墙
  • Centos6:
chkconfig iptables off --永久关闭 /etc/init.d/iptables stop --临时关闭 分发: for h in ${all[@]} do ssh ${h} -C "chkconfig iptables off; /etc/init.d/iptables stop" ssh ${h} -C " /etc/init.d/iptables status " done
  • Centos7:
systemctl disable firewalld systemctl stop firewalld 分发: for h in ${all[@]} do ssh ${h} -C " systemctl disable firewalld;sytemctl stop firewalld" ssh ${h} -C "systemctl status firewalld " done
7、关闭Selinux(centos6和centos7 通用)
在test1上做如下配置: # setenforce 0 ----临时禁止 # vi /etc/selinux/config ---永久禁止 SELINUX=disabled 分发配置 for h in ${sync[@]} do scp -r /etc/selinux/config ${h}:/etc/selinux done
8、关闭PackageKit
vim /etc/yum/pluginconf.d/refresh-packagekit.conf [main] enabled=0 分发到其他机器上: for h in ${sync[@]} do scp -r /etc/yum/pluginconf.d/refresh-packagekit.conf ${h}:/etc/yum/pluginconf.d/ done
9、设置umask
1) 临时改变: umask 0022 2) 永久改变所有用户的umask echo umask 0022 >>/etc/profile 3) 分发: for h in ${all[@]} do ssh root@${h} "echo umask 0022 >>/etc/profile" done
10、设置最大文件数
  • Centos6:
临时修改: ulimit -n 65535 永久修改: vim /etc/security/limits.conf * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 分发: for h in ${sync[@]} do scp -r /etc/security/limits.conf ${h}:/etc/security done
  • Centos7:
临时修改: ulimit -n 65535 永久修改: 1) vim /etc/security/limits.conf * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 2) vim /etc/systemd/system.conf 和 vim /etc/systemd/user.conf DefaultLimitCORE=infinity DefaultLimitNOFILE=65535 DefaultLimitNPROC=65535 分发: for h in ${sync[@]} do scp /etc/security/limits.conf ${h}:/etc/security scp /etc/systemd/system.conf ${h}:/etc/systemd scp /etc/systemd/user.conf ${h}:/etc/system ssh $h -C "systemctl daemon-reload" done
11、关闭THP
  • Centos6:
临时关闭: # echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled # cat /sys/kernel/mm/redhat_transparent_hugepage/enabled always madvise [never] 永久关闭: [root@getlnx06 ~]# vi /etc/rc.local #!/bin/sh # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled fi 分发: for h in ${sync[@]} do scp /etc/rc.local ${h}:/etc/ done
  • Centos7:
临时禁止: echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag 永久禁止: vi /etc/systemd/system/disable-thp.service ,如果此文件不存在,创建即可 [Unit] Description=Disable Transparent Huge Pages (THP) [Service] Type=simple ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag" [Install] WantedBy=multi-user.target 分发: for h in ${sync[@]} do scp /etc/systemd/system/disable-thp.service ${h}:/etc/systemd/system/ ssh ${h} -C "systemctl daemon-reload;systemctl start disable-thp;systemctl enable disable-thp" done
12、安装http server(只需要在ambari所在的机器上安装)
  • Centos6:
安装:yum install httpd -y 自启动:chkconfig httpd on 启动:service httpd start
  • Centos7:
安装:yum install httpd -y 自启动:systemctl enable httpd 启动:systemctl start httpd
三. 设置本地源
1、下载安装包(地址)
2、解压安装包到http服务器目录
mkdir -p /var/www/html/ tar -zxvf ambari-2.4.2.0-centos7.tar.gz -C /var/www/html/ tar -zxvf HDP-2.5.3.0-centos7-rpm.tar.gz -C /var/www/html/
mkdir -p /var/www/html/HDP-UTILS tar -zxvf HDP-UTILS-1.1.0.21-centos7.tar.gz -C /var/www/html/
3、下载ambari.repo,并编辑
#VERSION_NUMBER=2.5.0.3-7 [ambari-2.5.0.3] name=ambari Version - ambari-2.5.0.3 baseurl=http://172.20.103.22/ambari/centos7 gpgcheck=1 gpgkey=http://172.20.103.22/ambari/centos7/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins enabled=1 priority=1
hdp.repo,并编辑
[HDP-2.6] name=HDP-2.6 baseurl=http://172.20.103.22/HDP/centos7 path=/ enabled=1 gpgcheck=0
hdp-utils.repo,并编辑
[HDP-UTILS-1.1.0.21] name=HDP-UTILS-1.1.0.21 baseurl=http://172.20.103.22/HDP-UTILS path=/ enabled=1 gpgcheck=0


  • 注意:baseurl 和 gpgkey 需要找到有 RPM-GPG-KEY 的那一层目录,同理HDP和HDP-UTILS的配置也是。下载的ambari、HDP、HDP-UTILS里面自带ambari.repo、hdp.repo、hdp-utils.repo
4、安装ambari yum源
1) 集群之间可以root免密(ambari-server上的机器上有amabri repo库就行): cp ambari.repo /etc/yum.repos.d/ 即可 2) 集群之间不可以root免密(集群中每台机器都需要配置ambari repo库): for h in ${sync[@]} do scp -r /etc/yum.repos.d/ambari.repo ${h}:/etc/yum.repos.d done
同上 将hdp.repo hdp-utils.repo 都拷贝到节点

四. 安装Ambari
1、安装ambari-server
  • 安装:
yum install ambari-server
su postgres
psql
create database ambari
\c ambari
\i /var/lib/ambari-server/resources/Ambari-DDL-Postgres-CREATE.sql
  • 启动:
启动:ambari-server start 访问页面:http://<ambari server host>:8080/
2、安装ambari-agent (optional)
如果集群之间不能root免密,还需要在每台机器上安装ambari-agent。 1)在每台机器上安装ambari agent for h in ${sync[@]} do ssh $h -C “yum install ambari-agent -y” done 2) 修改ambari-agent.ini文件的配置 #vi /etc/ambari-agent/conf/ambari-agent.ini [server] Hostname=<ambary server host> url_port=8440 secured_url_port=8441 3) 分发ambari-agent.ini文件 for h in ${sync[@]} do scp /etc/ambari-agent/conf/ambari-agent.ini $h:/etc/ambari-agent/conf done 4)启动ambari agent # ambari-agent start
五. 界面化安装hdp
1、安装hdp
  • 访问:http:// <ambari host name>:8080/ --> admin/admin登录 ,具体的安装步骤如下:
  • 点击launch install wizard开始安装,如下图:
  • 填写集群的名字
  • 选择本地yum源:
  • 填写集群要安装的节点信息,并选择ambari agent的安装注册方式
  • 确认集群节点的信息

上图底下有个“ Click hereto see the warnings.” 按钮,打开后会显示主机上的各种警告信息,虽然已经安装了 ambari-agent,可是还有其他可能导致安装集群失败的潜在不足,比如 ntp没做,或防火墙规则存在,虽然放行了 ssh,但是等安装hadoop集群,需要打开很多的tcp 端口,可能会导致错误发生。自己视情况检查吧(我这个环境因为安装过HDP,许多提示都是说已经安装了某包,有某些配置文件已存在等等)。一定要确保所有的检测都通过,否则安装过程中会出现错误。

  • 选择要安装的服务
  • 选择各服务 master组件 安装的节点,一般都放在管理节点上面
  • 选择各服务 slaves和client 服务安装的节点,一般安装在数据节点上面
  • 根据自身需求自定义一些服务的配置,如果有显示红色标记的配置项,一定要配置,否则无法进行下一步。下面涉及到数据库的地方,一定要提前先建立好相应的数据库,除了下面的一些配置外,生产中还需要一些额外的配置,配置项参考链接:服务配置规范
      1. 在hive标签页,配置hive元数据库
root@DoctorLiA~: find / -name postgres*jar
root@DoctorLiA~: ambari-server setup --jdbc-db=postgres --jdbc-driver=/usr/lib/ambari-server/postgresql-9.3-1101-jdbc4.jar
      1. 在Ambari Metrics标签页,配置grafana admin的密码
      1. 配置Smartsense标签页,配置Activity Explorer admin用户的密码
      1. 在misc标签页,进行服务用户的选择,为了方便我们都合并为了一个用户hadoop。在更改yarn和hdfs用户的时候,会跳出一些其他的参数修改推荐,一律选择apply,参考下图:


  • 检查所要安装服务的信息:
  • 安装,启动和测试,如果安装过程中没有错误,那么直接点击完成,如果出现错误,则需要查看具体的错误,直接点击错误链接即可查看错误信息,错误解决后,点击 retry按钮,重试安装。
2、重新安装hdp
  1. 停止所有启动的服务
  2. 删除pg数据库中的ambari元数据库
  3. 重新设置ambari server
ambari-server setup
  1. 删除hadoop集群相关配置文件,需在每台机器上执行
yum -y erase hdp-select python /usr/lib/python2.6/site-packages/ambari_agent/HostCleanup.py --silent --skip=users
  1. 再次界面话安装
六. 服务可用性检查
1.HDFS检查
su - hadoop hdfs dfs -put ~/.bashrc / hdfs dfs -cat /.bashrc
2.Yarn和MapReduce检查
su - hadoop hdfs dfs -mkdir /testin hdfs dfs -put ~/.bashrc /testin hadoop jar /usr/hdp/2.6.0.3-8/hadoop-mapreduce/hadoop-mapreduce-examples-2.7.3.2.6.0.3-8.jar wordcount /testin/ /testout 同时登录 http://<resource_manager_host>:8088 --> Applications --> running 查看是否有刚才提交的任务
3.Hive检查
su - hadoop hive hive> create table people(id string, name string); OK hive> insert into people values("1","louis"); Query ID = hadoop_20170620112529_356f40fa-60d4-4c25-9728-ee3ff6adb49c Total jobs = 1 Launching Job 1 out of 1 Status: Running (Executing on YARN cluster with App id application_1497866533048_0004) -------------------------------------------------------------------------------- VERTICES STATUS TOTAL COMPLETED RUNNING PENDING FAILED KILLED -------------------------------------------------------------------------------- Map 1 .......... SUCCEEDED 1 1 0 0 0 0 -------------------------------------------------------------------------------- VERTICES: 01/01 [==========================>>] 100% ELAPSED TIME: 7.23 s -------------------------------------------------------------------------------- Loading data to table default.people Table default.people stats: [numFiles=1, numRows=1, totalSize=8, rawDataSize=7] OK Time taken: 11.96 seconds hive> select * from people; OK 1 louis Time taken: 0.393 seconds, Fetched: 1 row(s)
4.Hbase检查
su - hadoop hbase shell //创建表 hbase(main):001:0> create 'test','cf' 0 row(s) in 4.8910 seconds => Hbase::Table - test //查看所有表 hbase(main):002:0> list TABLE test 1 row(s) in 0.0560 seconds => ["test"] //往表里面插入数据 hbase(main):003:0> put 'test','row1','cf:a','value1' 0 row(s) in 0.3720 seconds hbase(main):004:0> put 'test','row2','cf:b','value2' 0 row(s) in 0.0270 seconds hbase(main):005:0> put 'test','row3','cf:3','value3' 0 row(s) in 0.0220 seconds //扫描表中的所有数据 hbase(main):006:0> scan 'test' ROW COLUMN+CELL row1 column=cf:a, timestamp=1497929482464, value=value1 row2 column=cf:b, timestamp=1497929489695, value=value2 row3 column=cf:3, timestamp=1497929495188, value=value3 3 row(s) in 0.0680 seconds //获取表中的一条数据 hbase(main):007:0> get 'test','row1' COLUMN CELL cf:a timestamp=1497929482464, value=value1 1 row(s) in 0.0550 seconds
5.spark检查
su - hadoop // 使用spark-submit提交任务 spark-submit --class org.apache.spark.examples.SparkPi \ --master yarn --deploy-mode client \ --driver-memory 1G --executor-memory 1G \ --executor-cores 1 /usr/hdp/2.6.0.3-8/spark/lib/spark-examples-1.6.3.2.6.0.3-8-hadoop2.7.3.2.6.0.3-8.jar 40 输出的结果中会有: 17/06/20 11:48:02 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:36, took 4.955870 s Pi is roughly 3.1410777852694465 // 使用spark-shell连接hive spark-shell scala> val result = sqlContext.sql("select * from default.people") scala> result.show +---+-----+ | id| name| +---+-----+ | 1|louis| +---+-----+

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 打赏
      打赏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    盒马coding

    你的支持是我最大的动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值