大数据集群之CDH版本搭建完整版
来源:互联网 发布:vero moda淘宝旗舰店 编辑:程序博客网 时间:2024/05/16 18:39
如果感兴趣,可以移驾我的博客,原文地址: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版本也不影响。
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.jarexport 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=yesHOSTNAME=master
- 修改hosts(/etc/hosts),绑定IP和hostname
127.0.0.1 localhost(保留本地的对应解析)192.168.194.128 master192.168.194.129 slave1192.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/driftrestrict 127.0.0.1restrict -6 ::1restrict default nomodify notrapserver 65.55.56.206 preferincludefile /etc/ntp/crypto/pwkeys /etc/ntp/keys
配置好后,启动服务service ntpd start
- 检查master的ntp服务是否启动成功
用ntpstat命令查看同步状态,出现以下状态代表启动成功:
synchronised to NTP server () at stratum 2time correct to within 74 mspolling server every 128 s
如果出现异常请等待几分钟,一般等待5-10分钟才能同步。
- 节点机器,/etc/ntp.conf配置
# 配置ntp客户端(所有datanode节点)driftfile /var/lib/ntp/driftrestrict 127.0.0.1restrict -6 ::1restrict default kod nomodify notrap nopeer noqueryrestrict -6 default kod nomodify notrap nopeer noquery#这里是主节点的主机名或者ipserver masterincludefile /etc/ntp/crypto/pwkeys /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 monitorcreate 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 = 0key_buffer = 16Mkey_buffer_size = 32Mmax_allowed_packet = 32Mthread_stack = 256Kthread_cache_size = 64query_cache_limit = 8Mquery_cache_size = 64Mquery_cache_type = 1max_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 = mixedread_buffer_size = 2Mread_rnd_buffer_size = 16Msort_buffer_size = 8Mjoin_buffer_size = 8M# InnoDB settingsinnodb_file_per_table = 1innodb_flush_log_at_trx_commit = 2innodb_log_buffer_size = 64Minnodb_buffer_pool_size = 4Ginnodb_thread_concurrency = 8innodb_flush_method = O_DIRECTinnodb_log_file_size = 512M[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pidsql_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.2baseurl = 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/defragvim /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集群离线搭建
- 大数据平台之CDH集群离线搭建
- 大数据平台CDH集群离线搭建
- 在虚拟机中搭建CDH版本的大数据平台
- 大数据CDH之Impala_10_02
- 大数据CDH之Oozie_10_03
- (大数据之hadoop)Hadoop2.2.0版本多节点集群及eclipse开发环境搭建
- Hadoop cdh版本分布式集群搭建图文教程
- CDH搭建hadoop集群
- CDH集群搭建部署
- CDH 与 CM 环境搭建,配置,集成大数据服务
- 完整版opentsdb集群搭建
- 大数据集群环境搭建
- 大数据---hadoop集群搭建
- 大数据---hbase集群搭建
- (大数据之hadoop)hadoop1.0集群搭建
- (大数据之hadoop)hadoop2.2.0集群搭建
- HTML部分基础总结(6)
- 中夜之思
- 【变治法】霍纳法则C++代码实现,求一个多项式在一个给定点的值
- 三周五次课(11月3日) 1.生成式和生成器 2.迭代器 3.装饰器
- 工厂模式
- 大数据集群之CDH版本搭建完整版
- 浅谈Java中的equals和==
- java:jsonp前后端实例演示
- java 设计模式之单例模式
- bzoj 4034(树链剖分)
- 5G:非正交多址接入(NOMA)与串行干扰删除(SIC)
- Android秋招面经
- 常用的兼容IE6及小技巧
- 死锁的四个必要条件以及怎样处理