21.CDH搭建攻略

2017-10-23  本文已影响0人  经纶先生

设备规划

我们使用6台真实服务器设备来演示整个CDH搭建、添加服务、调试、监控的整个过程

操作系统及内核版本说明

cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 

uname -r 
3.10.0-514.el7.x86_64

ip及角色规划

我们一共有6台设备,6台设备IP与域名规划分别是:

192.169.20.201   test001.tpy.corp
192.169.20.202   test002.tpy.corp
192.169.20.203   test003.tpy.corp
192.169.20.204   test004.tpy.corp
192.169.20.205   test005.tpy.corp
192.169.20.206   test006.tpy.corp

整个安装过程介绍:

一 、硬盘规划及分区

我来给大家说一下真实环境的大数据服务器应该怎么选购硬盘类型和做raid
首先我们进行大数据服务器选型的时候就应该注意,我们要采购两种不同类型的服务器,一种作为namenode等管理节点,一种作为datanode的数据节点

生产环境namenode 大于 2T硬盘分区脚本:

#!/bin/bash 
for x in b
do
echo "
mklabel gpt 
yes 
mkpart primary 0% 100% 
quit 
" | parted /dev/sd$x

mkfs.xfs /dev/sd${x}1

mkdir -p /data
mount /dev/sd${x}1 /data
echo "/dev/sd${x}1                           /data        xfs     defaults        0 0" >>/etc/fstab
done

分区完成之后检查:

[root@localhost opt]# df -TH 
/dev/sdb1      xfs       4.2T   34M  4.2T   1% /data

生产环境datanode 提供分区脚本:
大于2T的盘需要使用GPT格式,然后12块盘分别挂载至 /data/dn/{b,c,d,e,f,g,h,i,j,k,l,m},并写入/etc/fstab , 上面路径中的dn是datanode的简称

#!/bin/bash
for x in b c d e f g h i j k l m
do
echo "
mklabel gpt
yes
mkpart primary 0% 100%
quit
" | parted /dev/sd$x


mkfs.xfs /dev/sd${x}1

mkdir -p /data/dn/$x
mount /dev/sd${x}1 /data/dn/$x
echo "/dev/sd${x}1                           /data/dn/$x        xfs     defaults        0 0" >>/etc/fstab

done

本次实验环境的磁盘情况:
因为我们是测试环境,没有那么多硬盘,所以我们就使用了如下
六台服务器全部使用了一样的硬盘配置
两块300G 15K SAS 做了raid 1,作为系统盘
几块硬盘做了RAID5+一块全局热备,作为数据盘,并挂载至/data 目录
生产环境强烈不建议这样做

二、安装依赖包

yum install -y chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasi-gssapi fuse portmap fuse-libs redhat-lsb

三、修改主机名

第一步:hostname test001.tpy.corp
第二步:vim /etc/sysconfig/network
HOSTNAME=test001.tpy.corp
或者使用sed

sed -i "s#HOSTNAME=zmxs.com#HOSTNAME=test001.tpy.corp #g" /etc/sysconfig/network && hostname=test001.tpy.corp

坑1:
如果使用hadoop1.com 这种后面会出现各种问题,所以一定要遵从规范,使用如下类型的主机名
hadoop1.zipeiyi.com

四、域名规划

在每一台机器上都做主机名解析,或者你也可以使用DNS,生产环境还是建议使用DNS

vim /etc/hosts
192.169.20.201   test001.tpy.corp
192.169.20.202   test002.tpy.corp
192.169.20.203   test003.tpy.corp
192.169.20.204   test004.tpy.corp
192.169.20.205   test005.tpy.corp
192.169.20.206   test006.tpy.corp

五、安装JAVA

[ -d /app/zpy/java ]  &&  {
echo "java is already installed ,fuck off"
exit
}

mkdir -p /app/zpy/java
tar zxvf jdk-8u51-linux-x64.tar.gz -C /app/zpy/java  > /dev/null 2>&1

echo '# JAVA-8u51' >> /etc/profile
echo 'JAVA_HOME=/app/zpy/java/jdk1.8.0_51' >> /etc/profile
echo 'JAVA_BIN=/app/zpy/java/jdk1.8.0_51/bin' >> /etc/profile
echo 'PATH=$PATH:$JAVA_BIN' >> /etc/profile
echo 'CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/profile
echo 'export JAVA_HOME JAVA_BIN PATH CLASSPATH' >> /etc/profile

source  /etc/profile
echo "java is already installed,please open another session to test it " 

记住:一定要卸载系统本身所带的openjdk
rpm -qa | grep java
rpm -e --nodeps  x.x

六、配置root用户的ssh免密登陆

六台分别执行:
ssh-keygen -t rsa
cd ~
chmod  -R 700 .ssh
每台上分别执行六条:(记住每台设备与自己的ssh也要打通)
ssh-copy-id -i ~/.ssh/id_rsa.pub test001.tpy.corp
ssh-copy-id -i ~/.ssh/id_rsa.pub test002.tpy.corp
ssh-copy-id -i ~/.ssh/id_rsa.pub test003.tpy.corp
ssh-copy-id -i ~/.ssh/id_rsa.pub test004.tpy.corp
ssh-copy-id -i ~/.ssh/id_rsa.pub test005.tpy.corp
ssh-copy-id -i ~/.ssh/id_rsa.pub test006.tpy.corp

七、配置NTP时间同步

vim ntp.sh
#!/bin/bash 
ntpdate cn.pool.ntp.org >/dev/null 2>&1
ntpdate cn.pool.ntp.org >/dev/null 2>&1
[ $? -ne 0 ] && {
ntpdate ntp1.aliyun.com >/dev/null 2>&1
ntpdate ntp1.aliyun.com >/dev/null 2>&1
之后添加到/etc/crontab
*/5 * * * *  root /usr/bin/sh /app/zpy/ntp/ntp.sh

八、安装mysql服务端与客户端

首先CentOS7 已经不支持mysql,因为收费了你懂得,所以内部集成了mariadb
而安装mysql的话会和mariadb的文件冲突,所以需要先卸载掉mariadb。
以下为卸载mariadb,安装mysql的步骤:
1.列出所有被安装的 rpm package :
rpm -qa | grep mariadb
2.卸载
rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
3.下载mysql的yum源

cd /etc/yum.repos.d/      
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm      
rpm -ivh mysql-community-release-el7-5.noarch.rpm     
yum install -y mysql-server  #这个server端只需要在cm主节点上安装就好了,这个我们需要安装在06节点上   
yum install -y mysql。#这个6台设备都要安装

4.在test006.tpy.corp上面编辑他的mysql配置文件,配置文件模版:

[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

5.在主节点上启动mysql服务端:
service mysqld start

6.设置初始密码及自启动

mysqladmin -u root password '1qaz@WSX?'     
chkconfig mysqld on

八、下载主程序

下载Cloudera Manager
The recommended tool for installing Cloudera

我们先去CDH官网查看下依赖关系:
https://www.cloudera.com/
进入downloads,选择Cloudera Manager,版本选择5.11.0 
进入之后,会选择注册等步骤,这个我们暂时略过
进入下载页面后,会有
Supported Opetating Systems 
Supported JDK Versions 
Supported DATAbases 

然后我们进入CDH源 网址,下载clouderaManager
http://archive-primary.cloudera.com/cm5/cm/5/

下载主程序:
wget http://archive.cloudera.com/cm5/cm/5/cloudera-manager-centos7-cm5.11.0_x86_64.tar.gz     
tar zxvf cloudera-manager-centos7-cm5.11.0_x86_64.tar.gz  
解压完成后发现有两个文件夹:    
[root@test006 zpy]# ll
drwxr-xr-x 4 1106 4001 36 Apr 13 05:15 cloudera
drwxr-xr-x 9 1106 4001 88 Apr 13 05:15 cm-5.11.0

九、创建并配置CM数据库

安装MySQL JDBC驱动

下载JDBC连接mysql的库:mysql-connector-java-5.1.38-bin.jar
下载地址:https://dev.mysql.com/downloads/file/?id=412737    
最新版   https://dev.mysql.com/downloads/file/?id=470332    

下载下来是一个tar.gz 的包,解压后文件夹内有一个.jar的包
cp mysql-connector-java-5.1.44-bin.jar /app/zpy/cm-5.11.0/share/cmf/lib/

创建数据库

/app/zpy/cm-5.11.0/share/cmf/schema/scm_prepare_database.sh  mysql cm -hlocalhost -uroot -p1qaz@WSX? --scm-host localhost scm scm scm

之后我们检查数据库:
mysql> show databases ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cm                 |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

发现多了一个cm库

登录数据库执行
Use cm;
Flush tables;
mysql为了提高其性能,部分数据时缓存在内存中,因此要刷新表(清除缓存),就需要使用

配置cm代理:

vim /app/zpy/cm-5.11.0/etc/cloudera-scm-agent/config.ini 
修改:
server_host=hadoop1.zipeiyi.com(这里一定写域名)
可以看到它的server_port是7180

vim /app/zpy/cm-5.11.0/etc/cloudera-scm-agent/config.ini 
修改:
parcel_dir=/app/zpy/cloudera/parcels

十、配置parcel 源

我们选择的parcel源服务器就是test006.tpy.corp
yum install httpd
mkdir -p /var/www/html/cdh5/parcels/latest
cd /var/www/html/cdh5/parcels/latest

wget http://archive.cloudera.com/cdh5/parcels/5.11.0/CDH-5.11.0-1.cdh5.11.0.p0.34-el7.parcel
wget http://archive.cloudera.com/cdh5/parcels/5.11.0/CDH-5.11.0-1.cdh5.11.0.p0.34-el7.parcel.sha1
wget http://archive.cloudera.com/cdh5/parcels/5.11.0/manifest.json

mv CDH-5.11.0-1.cdh5.11.0.p0.34-el7.parcel.sha1 CDH-5.11.0-1.cdh5.11.0.p0.34-el7.parcel.sha

service httpd start
验证:http://192.169.20.206/cdh5/parcels/latest/

十一、分发程序

把test006主机上的cm-5.11.0,拷贝到其他所有机器上
scp -r cm-5.11.0/ root@test001.tpy.corp:/app/zpy
scp -r cm-5.11.0/ root@test002.tpy.corp:/app/zpy
scp -r cm-5.11.0/ root@test003.tpy.corp:/app/zpy
scp -r cm-5.11.0/ root@test004.tpy.corp:/app/zpy
scp -r cm-5.11.0/ root@test005.tpy.corp:/app/zpy

十二、创建用户

每台设备上都添加用户:
useradd --system  --home=/app/zpy/cm-5.11.0/run/cloudera-scm-server  --no-create-home  --shell=/bin/false  --comment "Cloudera SCM User"  cloudera-scm

添加用户说明:
-d, --home HOME_DIR
           The new user will be created using HOME_DIR as the value for the user′s login directory. The default is to append the LOGIN name to BASE_DIR and use that as the login
           directory name. The directory HOME_DIR does not have to exist but will not be created if it is missing.

-c comment
           新 帐 号 password 档 的 说 明 栏 。

十三、创建目录并修改权限

mkdir -p /app/zpy/cloudera/parcels
chown  cloudera-scm:cloudera-scm  /app/zpy/cloudera/parcels
chown -R  cloudera-scm:cloudera-scm  /app/zpy/cloudera
mkdir -p /var/lib/cloudera-scm-server
chmod  777 /var/lib/cloudera-scm-server

十四、在test006.tpy.corp 上面启动cloudera-server

1)启动命令:
      /app/zpy/cm-5.11.0/etc/init.d/cloudera-scm-server start
2)启动之后注意观察日志,日志目录:
      /app/zpy/cm-5.11.0/log/cloudera-scm-server

3)检查错误日志:
sed -n "/ERROR/p" cloudera-scm-server.log

发现错误日志:
    2017-10-22 18:12:30,501 ERROR main:org.hibernate.engine.jdbc.spi.SqlExceptionHelper: Table 'cm.CM_VERSION' doesn't exist(表不存在)


解决方法:
这是因为没有cm库没有被识别的原因
A.关闭cm-server
      /app/zpy/cm-5.11.0/etc/init.d/cloudera-scm-server stop
B. 登陆数据库
    检查表是否存在,之后执行 flush tables;
C.重启cloudera-server
    /app/zpy/cm-5.11.0/etc/init.d/cloudera-scm-server start

再次检查日志,发现没有继续报错


以下是你有可能遇到的其他报错:
报错二:
/var/lib/cloudera-scm-server 没有权限,进入后发现没有这个目录,所以临时创建
[root@hadoop1 ~]# mkdir -p /var/lib/cloudera-scm-server
[root@hadoop1 ~]# chmod 777 /var/lib/cloudera-scm-server

报错三:
对于没有innodb的情况
>show databases;查看
删除/var/lib/mysql/下ib*,重启服务即可

十五、在所有主机上启动cm-agent

/app/zpy/cm-5.11.0/etc/init.d/cloudera-scm-agent start 
然后去看下日志:
/app/zpy/cm-5.11.0/log/cloudera-scm-agent 


发现报错:
[22/Oct/2017 21:07:24 +0000] 2353 MainThread agent        ERROR    Caught unexpected exception in main loop.
Traceback (most recent call last):
  File "/app/zpy/cm-5.11.0/lib64/cmf/agent/build/env/lib/python2.7/site-packages/cmf-5.11.0-py2.7.egg/cmf/agent.py", line 710, in __issue_heartbeat
    self._init_after_first_heartbeat_response(resp_data)
  File "/app/zpy/cm-5.11.0/lib64/cmf/agent/build/env/lib/python2.7/site-packages/cmf-5.11.0-py2.7.egg/cmf/agent.py", line 948, in _init_after_first_heartbeat_response
    self.client_configs.load()
  File "/app/zpy/cm-5.11.0/lib64/cmf/agent/build/env/lib/python2.7/site-packages/cmf-5.11.0-py2.7.egg/cmf/client_configs.py", line 713, in load
    new_deployed.update(self._lookup_alternatives(fname))
  File "/app/zpy/cm-5.11.0/lib64/cmf/agent/build/env/lib/python2.7/site-packages/cmf-5.11.0-py2.7.egg/cmf/client_configs.py", line 434, in _lookup_alternatives
    return self._parse_alternatives(alt_name, out)
  File "/app/zpy/cm-5.11.0/lib64/cmf/agent/build/env/lib/python2.7/site-packages/cmf-5.11.0-py2.7.egg/cmf/client_configs.py", line 446, in _parse_alternatives
    path, _, _, priority_str = line.rstrip().split(" ")
ValueError: too many values to unpack




解决方案是修改 /app/zpy/cm-5.11.0/lib64/cmf/agent/build/env/lib/python2.7/site-packages/cmf-5.11.0-py2.7.egg/cmf/client_configs.py 这个脚本的第444行。

    for line in output.splitlines():
      if line.startswith("/"):
        if len(line.rstrip().split(" "))<=4:
          path, _, _, priority_str = line.rstrip().split(" ")

          # Ignore the alternative if it's not managed by CM.
          if CM_MAGIC_PREFIX not in os.path.basename(path):
            continue

          try:
            priority = int(priority_str)
          except ValueError:
            THROTTLED_LOG.info("Failed to parse %s: %s", name, line)

          key = ClientConfigKey(name, path)
          value = ClientConfigValue(priority, self._read_generation(path))
          ret[key] = value

        else:
          pass
    return ret
添加 if len(line.rstrip().split(" "))<=4:  和  else:  pass;

十六 安装cm 控制台

图片.png 图片.png 图片.png 图片.png 图片.png 图片.png 图片.png 图片.png
sysctl vm.swappiness=10 && echo “vm.swappiness=10” >>/etc/sysctl.conf
echo never > /sys/kernel/mm/transparent_hugepage/defrag  &&  echo never > /sys/kernel/mm/transparent_hugepage/enabled

vim /etc/rc.local
添加:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
图片.png 图片.png 图片.png

页面下方有一个了解更多帮助:


创建数据库时,输入的作为数据库主机名称的值必须与为主机输入的值(若有的话)匹配(请参阅 Installing and Configuring an External Database)。
例如,如您为 Activity Monitor 数据库输入了以下值 
grant all on activity_monitor.* TO 'amon_user'@'localhost' IDENTIFIED BY 'amon_password';
,则在此处为数据库主机名称输入的值必须为 localhost。
另一方面,当您创建数据库时输入了以下值 
grant all on activity_monitor.* TO 'amon_user'@'myhost-1.myco.com' IDENTIFIED BY 'amon_password';
,则在此处为数据库主机名称输入的值必须为 myhost-1.myco.com。
如您未指定主机或使用了通配符以从任意主机访问,则可在此处输入完全限定域名 (FQDN) 或 localhost。例如,如您输入了 
grant all on activity_monitor.* TO 'amon_user'@'%' IDENTIFIED BY 'amon_password';
,则在此处为数据库主机名称输入的值可以为 FQDN 或 localhost。
同样,如您输入了 
grant all on activity_monitor.* TO 'amon_user' IDENTIFIED BY 'amon_password';
,则在此处为数据库主机名称输入的值可以为 FQDN 或 localhost。

按照提示需要修改权限:
mysql> grant all on *.* to root@'test028.tf.corp' identified by '1qaz@WSX?';
Query OK, 0 rows affected (0.01 sec)
图片.png 图片.png 图片.png 图片.png 图片.png

十七、安装hive

解决方案:
for hive hive安装前cp(--hive-master节点才需要这个mysql连接库--)
cd /app/zpy/cm-5.11.0/share/cmf/lib/
cp mysql-connector-java-5.1.25-bin.jar /app/zpy/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.34/lib/hive/lib/
图片.png 图片.png 图片.png 图片.png
之后登陆mysql
create database hive ;

grant all on hive.* to 'hive'@'test028.tf.corp' identified by '1qaz@WSX?';
图片.png 图片.png
spark 关于 JAVA_HOME报错相关:
echo "export JAVA_HOME=/app/zpy/java/jdk1.8.0_51" >> /app/zpy/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.34/meta/cdh_env.sh
HIVE mysql 驱动
解决方案:
for hive hive安装前cp(--hive-master节点才需要这个mysql连接库--)
cd /app/zpy/cm-5.11.0/share/cmf/lib/
cp mysql-connector-java-5.1.25-bin.jar /app/zpy/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.34/lib/hive/lib/
删除整个hive服务,重新安装

十八、安装hbase

首先安装hbase 需要首先按装zookeeper,安装过程略

图片.png

十九 安装spark

spark 有两种模式
spark on yarn
spark standalone
我们一般选择 spark on yarn

上一篇下一篇

猜你喜欢

热点阅读