这篇CM+CDH的搭建流程一直以文档的形式在电脑里边存着,搭建的时候也参考了网上的一些博客,现在拿出来分享一下,步骤相对来说还是比较详细的,有错误的地方欢迎大家指出
注:以下操作为root用户
1、相关包下载
1.1、Cloudera Manager5.12.1下载
http://archive.cloudera.com/cm5/cm/5/
1.2、CDH5.12.1下载
http://archive.cloudera.com/cdh5/parcels/5.12.1/
2、网络配置
2.1、所有节点修改IP地址和主机名的映射关系
vi /etc/hosts
2.2、各节点修改主机名
vi /etc/sysconfig/network
hostnamectl set-hostname "主机名"
2.3、刷新重启
service network restart
3、关闭防火墙、Selinux
3.1、关闭防火墙
#直接关闭:systemctl stop firewalld.service
#禁止开机启动:systemctl disable firewalld
#查看防火墙状态:systemctl status firewalld
3.2、关闭Selinux
3.2.1、永久关闭
vi /etc/selinux/config
SELINUX=disabled
#重启后生效
3.2.2、暂时关闭
setenforce 0
4、查看IP
ip addr<ifconfig不可用,需安装net-tools>
5、配置SSH
5.1、主节点
cd ~/.ssh
ssh-keygen -t rsa<一路回车>
chmod -R 700 ~/.ssh
#创建各节点公钥存放目录
mkdir ~/.ssh/cdh01
mkdir ~/.ssh/cdh02
mkdir ~/.ssh/cdh03
cp ~/.ssh/id_rsa.pub ~/.ssh/cdh01
cat ~/.ssh/cdh01/id_rsa.pub>> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
5.2、其它节点
cd
ssh-keygen -t rsa
chmod -R 700 ~/.ssh
#把其它节点下的id_rsa.pub复制到主节点的对应目录下
scp ~/.ssh/id_rsa.pub root@cdh01:~/.ssh/cdh02
5.3、主节点
#将对应目录其它节点公钥追加到授权文件
cat ~/.ssh/cdh02/id_rsa.pub>> ~/.ssh/authorized_keys
#将授权文件发送到其它节点
scp ~/.ssh/authorized_keys root@cdh02:~/.ssh/
#检查授权文件<所有节点>
cat ~/.ssh/authorized_keys
#重启SSH服务<所有节点>
/bin/systemctl restart sshd.service
#免密码登陆校验
ssh cdh02
exit
6、配置NTP时间同步
6.1、每个节点安装NTP
6.1.1、离线安装
自行下载ntp的RPM包
6.1.2、离线安装遇到的问题
find / -name 'libcrypto*'<如下为没有安装>
问题
find / -name 'libopts*'<如下为没有安装>
find / -name 'ntpdate*'<如下为没有安装>
6.1.3、离线安装成功
6.2、每个节点配置NTP
将原有/etc/ntp.conf做备份为/etc/ntp.conf.backup
cp /etc/ntp.conf /etc/ntp.conf.backup
6.2.1、修改/etc/ntp.conf
master配置
slave配置
6.3、启动服务
systemctl start ntpd.service
6.4、检查是否成功
ntpstat
注意:如显示如下需等待几分钟
7、设置swap空间
Cloudera建议将交换空间设置为0,过多交换空间
echo "vm.swappiness = 0" >> /etc/sysctl.conf
8、关闭大页面压缩
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
9、安装MySQL
9.1、创建mysql系统目录
mkdir -p /home/mysql/software/mysql
mkdir -p /home/mysql/data/mysql
mkdir -p /home/mysql/data/log/mysql
9.2、下载安装mysql
http://dev.mysql.com/downloads/mysql/
上传mysql安装包到/home/mysql/software/mysql
解压缩到/usr/local/目录下
tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
cd /usr/local/
改名
mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql
9.3、创建mysql用户用户组及目录
groupadd mysql
useradd -r -s /sbin/nologin -g mysql mysql -d /usr/local/mysql
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
chown -R mysql:mysql /home/mysql/data/mysql/
chown -R mysql:mysql /home/mysql/data/log/
9.4、初始化mysql
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data/mysql
如下为成功,拷贝下初始化密码
然后再执行
./bin/mysql_ssl_rsa_setup --datadir=/home/mysql/data/mysql
进入support-files目录
cp mysql.server /etc/init.d/mysql
vi /etc/init.d/mysql
vi /etc/my.cnf
[client]
port=3306
socket=/usr/local/mysql/mysql.sock
[mysql]
no-auto-rehash
default-character-set=utf8
[mysqld]
datadir=/home/mysql/data/mysql
socket=/usr/local/mysql/mysql.sock
basedir=/usr/local/mysql
max_allowed_packet=64M
explicit_defaults_for_timestamp=true
skip-ssl
secure-file-priv=NULL
lower_case_table_names=1
back_log=300
max_connections=3000
max_connect_errors=100
table_open_cache=4096
external-locking=FALSE
max_allowed_packet=64M
sort_buffer_size=32M
join_buffer_size=32M
thread_cache_size=16
query_cache_size=128M
query_cache_limit=4M
thread_stack=512K
transaction_isolation=REPEATABLE-READ
tmp_table_size=128M
max_heap_table_size=128M
character-set-server=utf8
long_query_time=6
slow_query_log_file=/home/mysql/data/log/mysql/slow.log
# Disabling symbolic-links is recommended to prevent assorted security risks
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
open-files-limit=8192
log-error=/home/mysql/data/log/mysql/mysql_3306.err
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#
# include all files from the config directory
#
9.5、运行mysql
cd /home/mysql/data/log/mysql/
touch mysql_3306.err
chown -R mysql:mysql mysql_3306.err
chmod -R 755 mysql_3306.err
cd /usr/local/mysql
./bin/mysqld_safe --user=mysql &
./bin/mysql --user=root -p
密码使用上边拷贝好的初始密码
mysql> set password=password('123456');<修改密码>
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';<允许远程访问>
mysql> flush privileges;<刷新授权表>
9.6、创建CM用的数据库
<hive数据库>
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
<集群监控数据库>
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
9.7、配置环境变量
vi /etc/profile
添加
export PATH=/usr/local/mysql/bin:$PATH
执行
source /etc/profile
9.8、配置开机启动
chmod 755 /etc/init.d/mysql
chkconfig --add mysql<将MySQL添加为受chkconfig管理的服务>
chkconfig --level 345 mysql on<在级别3和5上设定服务为”on”>
10、安装Java
首先要卸载自带的OpenJdk,有些Linux会自带较低版本的jdk
rpm -qa | grep java<查询>
rpm -e 包 --nodeps<有则卸载>
10.1、所有节点
cd /usr
mkdir java
cd java<上传java安装包>
rpm -ivh rpm包
设置全局变量
echo "JAVA_HOME=/usr/java/latest/" >> /etc/environment
验证
java -version
11、正式安装CM+CDH
11.1、主节点配置
cd /home
mkdir cm
cd cm
tar -zxvf cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz
mv cloudera /opt/
mv cm-5.12.1 /opt/
上传mysql-connector-java-5.1.46.tar.gz到/home/mysql/目录下并解压
cd mysql-connector-java-5.1.46
cp ./mysql-connector-java-5.1.46-bin.jar /opt/cm-5.12.1/share/cmf/lib/
主节点初始化CM5的数据库
/opt/cm-5.12.1/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -p123456 --scm-host localhost scm scm scm
修改/opt/cm-5.12.1/etc/cloudera-scm-agent/config.ini
修改server_host为主节点主机名
同步至其它节点
scp -r /opt/cm-5.12.1 其它IP:/opt/
11.2、所有节点
useradd --system --home=/opt/cm-5.12.1/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
11.3、主节点
将提前下载好的文件上传到/opt/cloudera/parcel-repo/目录中
注:
sha1结尾文件一定要改为sha结尾,否则系统会重新下载
11.4、启动
11.4.1、启动服务端<主节点>
/opt/cm-5.12.1/etc/init.d/cloudera-scm-server start
查看启动日志
tail -f /opt/cm-5.12.1/log/cloudera-scm-server/cloudera-scm-server.log
出现如下为成功
INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.
11.4.2、启动Agent服务<所有节点>
/opt/cm-5.12.1/etc/init.d/cloudera-scm-agent start
查看启动日志
tail -f /opt/cm-5.12.1/log/cloudera-scm-agent/cloudera-scm-agent.log
11.4.3、7180登陆
初始用户名密码都是:admin
11.4.4、CDH安装
最终用户许可条款和条件
继续
选择部署免费版本
继续
继续
指定主机
继续
选择存储库
继续
安装选定Parcel
问题
所有节点执行以下操作
临时解决:
通过echo 0 > /proc/sys/vm/swappiness即可解决
永久解决:
sysctl -w vm.swappiness=0
echo vm.swappiness = 0 >> /etc/sysctl.conf
选择需要安装组件
群集组件分配
继续
群集数据库设置
问题
解决办法:
mysql -u root -p
grant all privileges on hive.* to 'hive'@'%' identified by '123456';
继续
群集设置
mkdir -p /home/dfs/nn
mkdir -p /home/dfs/dn
mkdir -p /home/dfs/snn
mkdir -p /home/yarn/nm
继续
首次运行
问题一
解决方法
所有节点下载安装perl
下载地址
http://www.perl.org/get.html#unix_like
将tar.gz上传至自定目录如/home目录并解压
cd至解压过的目录
执行
./Configure -de
出现如下
下载安装gcc
cd /home
mkdir gcc
执行安装
rpm -ivh *.rpm --nodeps --force
安装成功验证
继续perl安装
cd至perl解压过的目录
执行
make<有问题再执行./Configure -de>
make test
make install
问题二
如果报NameNode初始化失败,那么需要切换为hdfs用户进行初始化
执行
hadoop namenode -format
问题三
Hive启动失败
解决方法
将mysql-connector-java-5.1.46-bin.jar放到Hive目录lib目录下
问题四
解决方法
su hdfs
hdfs dfs -mkdir /user/spark
hdfs dfs -mkdir /user/spark/applicationHistory
hdfs dfs -chown -R spark:spark /user/spark
hdfs dfs -chmod 1777 /user/spark/applicationHistory
问题五
解决方法
问题六
解决方法
问题七
解决方法
root用户
cd /opt/cloudera/parcels/CDH/lib/hive/bin
./schematool -dbType mysql -initSchema
hive --service metastore &
问题八
解决方法
ALTER DATABASE hive CHARACTER SET latin1;
ALTER DATABASE mysql CHARACTER SET latin1;
问题九
Can't open cm-5.12.1/run/cloudera-scm-agent/process NODEMANAGER : 权限不够
解决方法:
cd /opt/cm-5.12.1/run/cloudera-scm-agent/process/**-hdfs-NAMENODE
chmod 666 supervisor.conf
不行再执行下边这条
chmod +020 supervisor.conf
12、Spark重新编译、HA及Hive升级配置
12.1、Scala安装
由于Spark依赖Scala,需要在每个节点安装Scala2.11.X
所有节点执行如下
cd /home
mkdir scala
上传Scala Tar包并解压
配置环境变量
vi /etc/profile
添加
export PATH=/home/scala/scala-2.11.8/bin:$PATH
执行刷新命令
source /etc/profile
12.2、Spark2安装
需要四个文件
http://archive.cloudera.com/spark2/csd/
http://archive.cloudera.com/spark2/parcels/2.2.0.cloudera2/
所有节点执行如下
创建/opt/cloudera/csd,将SPARK2_ON_YARN-2.2.0.cloudera2.jar移至该目录下
修改所属用户
chown cloudera-scm:cloudera-scm SPARK2_ON_YARN-2.2.0.cloudera2.jar
Master节点操作如下
将/opt/cloudera/parcel-repo目录下的原有manifest.json重命名
将以下三个文件上传
SPARK2-2.2.0.cloudera2-1.cdh5.12.0.p0.232957-el7.parcel
SPARK2-2.2.0.cloudera2-1.cdh5.12.0.p0.232957-el7.parcel.sha1(结尾sha1改为sha)
manifest.json
执行/opt/cm-5.12.1/etc/init.d/cloudera-scm-server restart
所有节点执行如下
/opt/cm-5.12.1/etc/init.d/cloudera-scm-agent restart
重启
配置Spark2.2的parcel库地址
12.3、配置NameNode的HA
进入HDFS页面
12.4、CDH支持SparkSQL
12.4.1、下载安装Scala
12.4.2、下载Maven
上传并解压apache-maven-3.3.9-bin.tar.gz
配置环境变量
vi /etc/profile
添加如下
MAVEN_HOME=/home/maven/apache-maven-3.3.9
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
刷新环境变量
source /etc/profile
验证
mvn -v
设置Maven编译所占空间
cd /apache-maven-3.3.9/bin
编辑mvn添加
export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
修改Maven库
vi apache-maven-3.3.9/conf/settings.xml
改为
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!cloudera</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
12.4.3、环境变量
Java:
export JAVA_HOME=/usr/java/default
Maven:
export MAVEN_HOME=/home/maven/apache-maven-3.3.9
Scala:
export SCALA_HOME=/home/scala/scala-2.11.8
总的:
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$SCALA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
12.4.4、Spark2.2
上传并解压spark-2.2.0.tgz
cd spark-2.2.0
mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -DskipTests clean package
mvn -Pyarn -Phive -Phive-thriftserver -DskipTests clean package
mvn -Pyarn -Dscala-2.11 -DskipTests clean package
修改spark-2.2.0目录下的pom文件
改为
<repositories>
<repository>
<id>cloudera</id>
<!-- This should be at top, it makes maven try the central repo first and then others and hence faster dep resolution -->
<name>Maven Repository</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
再执行
./dev/make-distribution.sh --name 2.6.0-cdh5.12.1 --tgz -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.12.1 -Phive -Phive-thriftserver
编译出spark-2.2.0-bin-2.6.0-cdh5.12.1.tgz
配置Spark环境变量
export SPARK_HOME=/opt/cloudera/parcels/SPARK2/lib/spark2
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME
进入cloudera/parcels/SPARK2/lib/spark2目录
mv jar jar000
cp -r spark-2.2.0/spark-2.2.0-bin-2.6.0-cdh5.12.1/jars cloudera/parcels/SPARK2/lib/spark2/
cp cloudera/parcels/CDH/lib/hive/conf/hive-site.xml cloudera/parcels/SPARK2/lib/spark2/conf/
cp spark-2.2.0/bin/spark-sql cloudera/parcels/SPARK2/lib/spark2/bin/
支持beeline
复制编译的sbin目录下的
cp spark-2.2.0/sbin/start-thriftserver.sh cloudera/parcels/SPARK2/lib/spark2/sbin/
cp spark-2.2.0/sbin/stop-thriftserver.sh cloudera/parcels/SPARK2/lib/spark2/sbin/
cp spark-2.2.0/bin/beeline cloudera/parcels/SPARK2/lib/spark2/bin/
启动
./start-thriftserver.sh --master yarn --hiveconf hive.server2.thrift.port=10001 --executor-memory 2g --num-executors 10
启动失败:
找到cloudera/parcels/SPARK2/lib/spark2/bin/load-spark-env.sh
注释掉文件最底部<如下>
再次启动还报错
进入cloudera/parcels/SPARK2/lib/spark2目录创建logs目录
赋权限chmod 777 logs/
完成
连接
./beeline -u jdbc:hive2://IP:10001/default -n hdfs -p hdfs
12.5、Hive升级
问题
启动元数据库报错
mysql> use hive
mysql> show tables;
mysql> select * from VERSION;
mysql> update VERSION set SCHEMA_VERSION='2.1.0' where VER_ID=1;
mysql> flush privileges;