大数据集群之CDH版本搭建完整版
2017-11-03 20:45
567 查看
如果感兴趣,可以移驾我的博客,原文地址:https://hywelzhang.github.io/2017/11/03/%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA-CDH%E6%90%AD%E5%BB%BA.html
本方法采用离线安装,需要先下载好cloudera manager和CDH的parcel安装包。
系统为CentOS,jdk版本为1.8,CDH版本5.5.4和5.10.0都安装过,没有区别,所以CDH版本也不影响。
将下载好的jdk-1.8.tar.gz包解压到指定目录(我习惯是放在/usr/local/java/)
配置环境变量,在
小备注:配置环境变量的主要目的是将java/bin下边的命令添加到PATH路径,这样能够在任意路径调用java/bin下的执行命令。至于添加CLASS_PATH这个路径是指定java编译运行时可能需要的部分类包的位置>。主要是dt.jar和tools.jar,前者主要是Swing包的运行环境类库,后者主要是工具类库,一般java/bin下的命令实际代码是在这个里边实现的。
原理:所谓”公钥登录”,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回给远程主机。远程主机用事先储存的公钥进行解密>,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
安装SSH服务:
生成公密匙(每台服务器,包含master):
将每台服务器的公钥(包含master,得到一份完整的authorized_keys)都拷贝到master的
将master上这一份完整的authorized_keys拷贝到各节点机器:
(实现各机器间可以无密码登录)
修改hosts(/etc/hosts),绑定IP和hostname
1. 关闭防火墙
关闭SELinux
主要思路:master节点作为ntp服务器与外界对时中心同步时间,随后对所有datanode节点提供时间同步服务。所有datanode节点以master节点为基础同步时间。
所有节点安装相关组件:yum install ntp。
配置开机启动:chkconfig ntpd on,
检查是否设置成功:chkconfig –list ntpd(其中2-5为on状态就代表成功)
先手动同步一下master的时间
ntp只有一个配置文件
首先,master的/etc/ntp.conf配置:
配置好后,启动服务
检查master的ntp服务是否启动成功
用ntpstat命令查看同步状态,出现以下状态代表启动成功:
如果出现异常请等待几分钟,一般等待5-10分钟才能同步。
节点机器,/etc/ntp.conf配置
修改完成后,先手动与master同步一下
根据提示设置root的初试密码:
授权用户访问MYSQL权限并刷新权限(用户依据自己的来)
配置mysql
配置
安装包制作工具createrepo :
将下载好的cm软件包(cm5.5.2-centos6.tar.gz这个压缩包)解压缩到/var/www/html/mirrors/(解压后文件夹名称假定为cm)
制作本地源
在cm文件夹同级目录,使用
踩坑提醒!!!
(源制作好后,千万别往源文件夹里修改或增加,不然后续安装过程会出现蜜汁错误,有更改请使用createrepo命令更新或重新制作源 —–by一位踩坑人士)
创建本地源文件
在/etc/yum.repos.d/目录(该目录下是yum的源文件)下自定义一个myrepo.repo(名字自选)
相关的文件如下:
• CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel
• CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1
• manifest.json
最后将CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1,重命名为CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha,这点必须注意,否则,系统会重新下载CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel文件
踩坑提醒!!!
CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha中的值是manifest.json中与版本相对应的hash值。请自行查找manifest.json中对应值修改到.sha文件中
(跳过网络安装 !!!一定需要加–-skip_repo_package=1,踩坑提醒)
安装cloudera manage时,踩坑问题指引:
1. 如果在20%处失败(安装oracaljdk时),请先查找自己源中是否有Oraclejdk这个包。如果有,问题多半是因为网络连接问题,你的源没有配置好。检查下列选项:
• 输入网址127.0.0.1:8080查看能否使用浏览器访问
• 查看yum本地源是否配置成功,日志会提示网址未找到报错
• 是否加了—skip_repo_package这个参数,可能是上网去寻找包了
2. 如果是在40%处失败,我想想~~~
可能是你以前安装失败过,删除/etc/cloudera文件夹 和/var/lib/cloudera/db.properties 和 忘了(搜索“卸载cloudera-manager”,一定要卸载完全)
3. 失败查日志
4. 安装agent时失败,可能是缺少相关包,详细请看下文的“踩坑集锦03”
如果使用了mysql数据库,需要mysql-connector-java-5.1.33-bin.jar,放到/opt/cm-5.1.3/share/cmf/lib/(不一定在此目录,根据自己情况而定。看自己的cmf文件夹在哪里,就放在cmf下的lib目录)
Agent配置
修改/opt/cm-5.1.3/etc/cloudera-scm-agent/config.ini(视自己目录定,我的是在/etc/cloudera-scm-agent/config.ini)中的server_host为主节点的主机名。
同步Agent到其他节点
报错信息:
Unknown host:
在/etc/hosts里添加一条记录
非root账户配置cm时,在visudo下配置
cloudera ALL =(ALL) NOPASSWD: ALL
给用户添加无密码sudo权限
安装cloudera-manager-agent需要提前安装好下列包:
+. MySQL-python
+. httpd
+. openssl-devel
+. fuse
+. python-psycopg2
+. fuse-libs
+. mod_ssl
解决httpd版本不同问题:
方法一:distro sync 同步版本
方法二:禁用源,卸载冲突版本,重新安装被需要的版本
云主机上配置hostname和hosts,一定要与云主机名相同(这点可能是由于我的云主机比较特殊,不存在参考价值,不过还是记录下来)
检查主机正确性时出现 “Cloudera 建议将 /proc/sys/vm/swappiness 设置为 0。当前设置为 60。” 的警告,进行如下设定
检查主机正确性时出现:
已启用“透明大页面”,它可能会导致重大的性能问题。版本为“/sys/kernel/mm/transparent_hugepage”且发行版为“{1}”的 Kernel 已将 enabled 设置为“{2}”,并将 defrag 设置为“{3}”。请运行“echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag”以禁用此设置,然后将同一命令添加到一个 init 脚本中,如 /etc/rc.local,这样当系统重启时就会予以设置。或者,升级到 RHEL 6.5 或更新版本>,它们不存在此错误。将会影响到以下主机:
解决办法:
创建 Hive Metastore 数据库表
报错信息:Failed to Create Hive Metastore Database Tables.exec /opt/cloudera/parcels/CDH-5.5.2-1.cdh5.5.2.p0.4/lib/hadoop/bin/hadoop jar /opt/cloudera/parcels/CDH-5.5.2-1.cdh5.5.2.p0.4/lib/hive/lib/hive-cli-1.1.0-cdh5.5.2.jar org.apache.hive.beeline.HiveSchemaTool -verbose -dbType mysql -initSchemaorg.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driverorg.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver
原因:我们使用了MySql作为hive的元数据存储,hive默认没有带mysql的驱动,通过以下命令拷贝一个就行了
解决办法:
在服务 Oozie 上执行命令 Create Oozie Database Tables 失败
报错:Error: Could not connect to the database: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
原因和解决办法如上一条一样,将mysql连接包放到Oozie/lib下边
本方法采用离线安装,需要先下载好cloudera manager和CDH的parcel安装包。
系统为CentOS,jdk版本为1.8,CDH版本5.5.4和5.10.0都安装过,没有区别,所以CDH版本也不影响。
A. 安装jdk
这一步大家都经常接触,很熟悉,所以这里就只大概叙述将下载好的jdk-1.8.tar.gz包解压到指定目录(我习惯是放在/usr/local/java/)
配置环境变量,在
/etc/profile中新增JAVA_HOME,CLASS_PATH,并添加到PATH
export JAVA_HOME=/usr/local/java/jdk1.8.0_65/ export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH
小备注:配置环境变量的主要目的是将java/bin下边的命令添加到PATH路径,这样能够在任意路径调用java/bin下的执行命令。至于添加CLASS_PATH这个路径是指定java编译运行时可能需要的部分类包的位置>。主要是dt.jar和tools.jar,前者主要是Swing包的运行环境类库,后者主要是工具类库,一般java/bin下的命令实际代码是在这个里边实现的。
source /etc/profile将配置在当前账户立刻生效。或者重启也可以。
B. SSH免密互信
配置集群间的机器免密互信,可以不用密码进行ssh通信原理:所谓”公钥登录”,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回给远程主机。远程主机用事先储存的公钥进行解密>,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
安装SSH服务:
yum install openssh-server
生成公密匙(每台服务器,包含master):
ssh-keygen –t rsa
将每台服务器的公钥(包含master,得到一份完整的authorized_keys)都拷贝到master的
authorized_keys:
ssh-copy-id master@server(至此master各节点机器可以无密码登录master)
将master上这一份完整的authorized_keys拷贝到各节点机器:
scp ~/.ssh/authorized_keys spark@slave1:~/.ssh/
(实现各机器间可以无密码登录)
C. 修改hostname和hosts,将节点IP和hostname绑定
修改hostname(可选)vim /etc/sysconfig/network
NETWORKING=yes HOSTNAME=master
修改hosts(/etc/hosts),绑定IP和hostname
127.0.0.1 localhost (保留本地的对应解析) 192.168.194.128 master 192.168.194.129 slave1 192.168.194.130 slave2 ...
D. 关闭防火墙和SELinux
安装CDH需要关闭防火墙和SELinux安全策略1. 关闭防火墙
相关命令: service iptables stop (临时关闭) chkconfig iptables off (重启后生效) chkconfig --level 35 iptables off (永久关闭) /etc/init.d/iptables status (查看防火墙状态)
关闭SELinux
isetenforce 0(临时生效)或者修改 /etc/selinux/config 下的
SELINUX=disabled(重启后永久生效)
E. 配置NTP时间同步服务
由于分布式集群心跳机制等原因,集群间时间需要保持一致,多以需要配置NTP服务保证时间同步主要思路:master节点作为ntp服务器与外界对时中心同步时间,随后对所有datanode节点提供时间同步服务。所有datanode节点以master节点为基础同步时间。
所有节点安装相关组件:yum install ntp。
配置开机启动:chkconfig ntpd on,
检查是否设置成功:chkconfig –list ntpd(其中2-5为on状态就代表成功)
先手动同步一下master的时间
ntpdate -u 65.55.56.206(手动同步时间)
ntp只有一个配置文件
/etc/ntp.conf,配置好了就OK。这里只给出有用的配置,不需要的配置都用#注掉,这里就不在给出。
首先,master的/etc/ntp.conf配置:
driftfile /var/lib/ntp/drift restrict 127.0.0.1 restrict -6 ::1 restrict default nomodify notrap server 65.55.56.206 prefer includefile /etc/ntp/crypto/pw keys /etc/ntp/keys
配置好后,启动服务
service ntpd start
检查master的ntp服务是否启动成功
用ntpstat命令查看同步状态,出现以下状态代表启动成功:
synchronised to NTP server () at stratum 2 time correct to within 74 ms polling server every 128 s
如果出现异常请等待几分钟,一般等待5-10分钟才能同步。
节点机器,/etc/ntp.conf配置
# 配置ntp客户端(所有datanode节点) driftfile /var/lib/ntp/drift restrict 127.0.0.1 restrict -6 ::1 restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery #这里是主节点的主机名或者ip server master includefile /etc/ntp/crypto/pw keys /etc/ntp/keys
修改完成后,先手动与master同步一下
ntpdate -u master (主节点ntp服务器)。这里可能出现同步失败的情况,请不要着急,一般是本地的ntp服务器还没有正常启动,一般需要等待5-10分钟才可以正常同步>。启动服务:
service ntpd start
F. 安装MYSQL(可选,如果不安装,则使用cloudera内置的postgreSQL数据库)
yum install mysql-server安装mysql服务器
chkconfig mysqld on设置开机启动
sudo /sbin/chkconfig --list mysqld验证是否设置成功(2~5为on表示成功)
service mysqld start启动mysql服务
根据提示设置root的初试密码:
mysqladmin -u root password 'xxxx'
mysql -uroot -pxxxx进入mysql命令行,创建以下数据库:
#hive 用于存放hive的元数据信息 create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci; #activity monitor create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
授权用户访问MYSQL权限并刷新权限(用户依据自己的来)
grant all privileges on *.* to 'root'@'n1' identified by 'xxxx' with grant option; flush privileges;
配置mysql
配置
/etc/my.cnf文件(包含连接数,缓存大小等,依据需要配置,建议最大连接可以大些,因为集群跑起来可能会占用很多连接,曾经因为这个连接数不够问题,找了好几天bug)
[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
G. 制作本地安装源
安装httpd(http服务,用于可以使用http访问)yum install httpd(安装httpd服务)
安装包制作工具createrepo :
yum install createrepo
将下载好的cm软件包(cm5.5.2-centos6.tar.gz这个压缩包)解压缩到/var/www/html/mirrors/(解压后文件夹名称假定为cm)
制作本地源
在cm文件夹同级目录,使用
createrepo ./cm(创建本地源,会在cm下生成相应的repodata文件夹)
踩坑提醒!!!
(源制作好后,千万别往源文件夹里修改或增加,不然后续安装过程会出现蜜汁错误,有更改请使用createrepo命令更新或重新制作源 —–by一位踩坑人士)
创建本地源文件
在/etc/yum.repos.d/目录(该目录下是yum的源文件)下自定义一个myrepo.repo(名字自选)
[cloudera-manager] name = Cloudera Manager, Version 5.5.2 baseurl = http://<你的主机IP>/mirrors/cm/ gpgcheck = 0
H. 制作本地parcel(利用parcel安装CDH中的软件)
将CHD5相关的Parcel包放到主节点的/opt/cloudera/parcel-repo/目录中(parcel-repo需要手动创建)(这是一个固定目录,路径最好别更改)相关的文件如下:
• CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel
• CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1
• manifest.json
最后将CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1,重命名为CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha,这点必须注意,否则,系统会重新下载CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel文件
踩坑提醒!!!
CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha中的值是manifest.json中与版本相对应的hash值。请自行查找manifest.json中对应值修改到.sha文件中
I. 执行cloudera-manager-installer.bin安装cloudera-manager
sudo ./cloudera-manager-installer.bin –-skip_repo_package=1
(跳过网络安装 !!!一定需要加–-skip_repo_package=1,踩坑提醒)
安装cloudera manage时,踩坑问题指引:
1. 如果在20%处失败(安装oracaljdk时),请先查找自己源中是否有Oraclejdk这个包。如果有,问题多半是因为网络连接问题,你的源没有配置好。检查下列选项:
• 输入网址127.0.0.1:8080查看能否使用浏览器访问
• 查看yum本地源是否配置成功,日志会提示网址未找到报错
• 是否加了—skip_repo_package这个参数,可能是上网去寻找包了
2. 如果是在40%处失败,我想想~~~
可能是你以前安装失败过,删除/etc/cloudera文件夹 和/var/lib/cloudera/db.properties 和 忘了(搜索“卸载cloudera-manager”,一定要卸载完全)
3. 失败查日志
4. 安装agent时失败,可能是缺少相关包,详细请看下文的“踩坑集锦03”
J.数据库连接配置和Agent配置
mysql连接配置如果使用了mysql数据库,需要mysql-connector-java-5.1.33-bin.jar,放到/opt/cm-5.1.3/share/cmf/lib/(不一定在此目录,根据自己情况而定。看自己的cmf文件夹在哪里,就放在cmf下的lib目录)
Agent配置
修改/opt/cm-5.1.3/etc/cloudera-scm-agent/config.ini(视自己目录定,我的是在/etc/cloudera-scm-agent/config.ini)中的server_host为主节点的主机名。
同步Agent到其他节点
scp -r /opt/cm-5.1.3 root@n2:/opt/(使用自己目录)
L. 安装相关hdfs,hive等框架
安装好cloudera-manager后,可以访问7180端口进入网页管理界面,跟随网页指引,配置集群,选取需要安装的框架服务。至此集群搭建完成。踩坑集锦
安装好cm后,启动失败报错信息:
Unknown host:
在/etc/hosts里添加一条记录
非root账户配置cm时,在visudo下配置
cloudera ALL =(ALL) NOPASSWD: ALL
给用户添加无密码sudo权限
安装cloudera-manager-agent需要提前安装好下列包:
+. MySQL-python
+. httpd
+. openssl-devel
+. fuse
+. python-psycopg2
+. fuse-libs
+. mod_ssl
解决httpd版本不同问题:
方法一:distro sync 同步版本
方法二:禁用源,卸载冲突版本,重新安装被需要的版本
云主机上配置hostname和hosts,一定要与云主机名相同(这点可能是由于我的云主机比较特殊,不存在参考价值,不过还是记录下来)
检查主机正确性时出现 “Cloudera 建议将 /proc/sys/vm/swappiness 设置为 0。当前设置为 60。” 的警告,进行如下设定
vim /etc/sysctl.conf添加
vm.swappiness = 0
检查主机正确性时出现:
已启用“透明大页面”,它可能会导致重大的性能问题。版本为“/sys/kernel/mm/transparent_hugepage”且发行版为“{1}”的 Kernel 已将 enabled 设置为“{2}”,并将 defrag 设置为“{3}”。请运行“echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag”以禁用此设置,然后将同一命令添加到一个 init 脚本中,如 /etc/rc.local,这样当系统重启时就会予以设置。或者,升级到 RHEL 6.5 或更新版本>,它们不存在此错误。将会影响到以下主机:
解决办法:
echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag vim /etc/rc.local添加 echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
创建 Hive Metastore 数据库表
报错信息:Failed to Create Hive Metastore Database Tables.exec /opt/cloudera/parcels/CDH-5.5.2-1.cdh5.5.2.p0.4/lib/hadoop/bin/hadoop jar /opt/cloudera/parcels/CDH-5.5.2-1.cdh5.5.2.p0.4/lib/hive/lib/hive-cli-1.1.0-cdh5.5.2.jar org.apache.hive.beeline.HiveSchemaTool -verbose -dbType mysql -initSchemaorg.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driverorg.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver
原因:我们使用了MySql作为hive的元数据存储,hive默认没有带mysql的驱动,通过以下命令拷贝一个就行了
解决办法:
cp /usr/share/cmf/lib/mysql-connector-java-5.1.26-bin.jar /opt/cloudera/parcels/CDH-5.5.2-1.cdh5.5.2.p0.4/lib/hive/lib/
在服务 Oozie 上执行命令 Create Oozie Database Tables 失败
报错:Error: Could not connect to the database: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
原因和解决办法如上一条一样,将mysql连接包放到Oozie/lib下边
相关文章推荐
- 大数据集群之CDH版本搭建完整版
- CDH版本大数据集群下搭建Avro(hadoop-2.6.0-cdh5.5.4.gz + avro-1.7.6-cdh5.5.4.tar.gz的搭建)
- CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
- CDH版本大数据集群下搭建pig(hadoop-2.6.0-cdh5.5.4.gz + hive-1.1.0-cdh5.5.4.tar.gz + pig-0.12.0-cdh5.5.4.tar.gz的搭建)
- Hadoop cdh版本分布式集群搭建图文教程
- 朝花夕拾之--大数据平台CDH集群离线搭建
- (大数据之hadoop)Hadoop2.2.0版本多节点集群及eclipse开发环境搭建
- 在虚拟机中搭建CDH版本的大数据平台
- 大数据平台之CDH集群离线搭建
- 大数据平台CDH集群离线搭建
- 六台Debian主机安装搭建Cloudera Manager 5和CDH5(版本5.9.0)大数据集群
- 朝花夕拾之--大数据平台CDH集群离线搭建
- CDH 版本 Hadoop集群搭建
- CDH集群搭建步骤
- 大数据之hadoop伪集群搭建与MapReduce编程入门
- Hadoop2.2.0版本多节点集群及eclipse开发环境搭建
- 1)CDH集群离线搭建
- MongoDBV3.0.7版本(shard+replica)集群的搭建及验证
- 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
- 【大数据】开发环境搭建(三):hadoop伪分布式集群环境搭建(下)