CDH5
Hadoop集群完全离线安装说明
系统环境:CentOS6.5 64位
用到的文件
JDK1.8.0.111安装包
方法一使用:jdk-8u111-linux-x64.rpm
方法二使用:jdk-8u111-linux-x64.tar.gz
JDK环境配置(所有节点)
(先用命令:rpm -qa |
grep java
查看系统是否已自带了openjdk,若系统自带了openjdk,需要先卸载掉,方法参照后面说明)
通常有两种方式来安装JDK,根据从Oracle官网上下载的文件扩展名(tar.gz和.rpm),分别说明两种安装配置方式:
方法一:用rpm安装JDK
如果主机能访问外网,则联网下载安装包
[root@one-centos ~]#curl -O
http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-linux-x64.rpm
若不能访问外网,则使用离线包,将下载好的rpm包上传到主机某文件夹下(比如/home/root/下载)
[root@one-centos ~]#cd 下载
使用rpm命令安装:
[root@one-centos 下载] #rpm
-ivh jdk-8u111-linux-x64.rpm
[if !vml]
[endif]
设置环境变量:
[root@one-centos 下载]#vim/etc/profile
在打开的profile文件中添加如下内容:
#set java environment
JAVA_HOME=/usr/java/jdk1.8.0_111
JRE_HOME=/usr/java/jdk1.8.0_111/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
[if !vml]
[endif]
让修改生效
[root@one-centos 下载]#source
/etc/profile
验证JDK有效性:
[root@one-centos yt]#java -version
[root@one-centos yt]#java
[root@one-centos yt]#javac
[if !vml]
[endif]
[root@one-centos yt]#echo $JAVA_HOME
/usr/java/jdk1.8.0_111
方法二:用tar.gz包安装JDK
在/usr/目录下创建java目录:
[root@localhost ~]#mkdir/usr/java
[root@localhost ~]#cd /usr/java
下载JDK,然后解压:
[root@localhost java]#curl -O
http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-linux-x64.tar.gz
[root@localhost java]#tar -zxvf jdk-8u111-linux-x64.tar.gz
设置环境变量:(同上)
[root@one-centos 下载]#vim/etc/profile
在打开的profile文件中添加如下内容:
#set java environment
JAVA_HOME=/usr/java/jdk1.8.0_111
JRE_HOME=/usr/java/jdk1.8.0_111/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
让修改生效:(同上)
[root@one-centos 下载]#source
/etc/profile
验证JDK有效性:(同上)
[root@one-centos yt]#java -version
[root@one-centos yt]#java
[root@one-centos yt]#javac
[if !vml]
[endif]
[root@one-centos yt]#echo $JAVA_HOME
/usr/java/jdk1.8.0_111
卸载Linux自带的openjdk
安装了centos7系统,发现自带了openjdk,想删除centos自带的jdk。具体方法如下:
1.使用rpm命令查看系统已经安装的java包
[root@dev]# rpm -qa | grep java
java-1.8.0-openjdk-headless-1.8.0.101-3.b13.el7_2.x86_64
javapackages-tools-3.4.1-11.el7.noarch
tzdata-java-2016f-1.el7.noarch
java-1.8.0-openjdk-1.8.0.101-3.b13.el7_2.x86_64
Python-javapackages-3.4.1-11.el7.noarch
2.使用rpm命令删除已安装的java依赖
[root@dev]# rpm -e --nodepsJava-1.8.0-openjdk-1.8.0.101-3.b13.el7_2.x86_64
[root@dev]# rpm -e --nodepsjava-1.8.0-openjdk-headless-1.8.0.101-3.b13.el7_2.x86_64
[root@dev]# rpm -e --nodeps tzdata-java-2016f-1.el7.noarch
[root@dev]# rpm -e --nodepsjavapackages-tools-3.4.1-11.el7.noarch
[root@dev]# rpm -e --nodepspython-javapackages-3.4.1-11.el7.noarch
3.再次检查java相关依赖以删除
[root@dev]# rpm -qa | grep java
[root@dev]# java -version
如果输出类似not found command则说明删除完成!
网络环境配置(所有节点)
我部署的集群中包括4个节点:1个master,3个salve,节点之间局域网连接,可以相互ping通。节点IP地址分布如下:
机器名称 IP地址
master 10.1.34.59
slave1 10.1.34.66
slave2 10.1.34.67
slave3 10.1.34.68
主机名配置
下面以master机器为例,即主机名为“master”,IP为“10.1.34.59”进行主机的配置,他的slave机器以此为依据进行修改。
命令hostname可查看当前主机名
修改hostname:
[root@master ~]#vim
/etc/sysconfig/network
[if !vml]
[endif]
配置完成之后,我们需要重启主机,命令:
[root@master ~]#reboot
(注:CentOS7以上系统修改主机名见附录)
配置hosts文件
“/etc/hosts”这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应HostName和IP用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名(或域名)对应的IP地址。
在进行Hadoop集群配置中,需要在“/etc/hosts”文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。所以在所有的机器上的“/etc/hosts”文件末尾中都要添加如下内容:
[root@master ~]#vim
/etc/hosts
10.1.34.59 master
10.1.34.66 slave1
10.1.34.67 slave2
10.1.34.68 slave3
[if !vml]
[endif]
[if !vml]
[endif]
从上图中我们已经能用主机名进行ping通了,说明我们刚才添加的内容,在局域网内能进行DNS解析了,那么现在剩下的事儿就是在其余的slave机器上进行相同的配置。然后进行测试。
关闭防火墙
本文档是假定“服务器在防火墙以内”的前提下编纂的,在这个前提下,服务器本身在内部网络是不需要防火墙的(在需要抵御内部安全威胁的情况下,您也可以用您在iptables方面的相关知识,根据实情设置防火前,并保证服务器端防火墙启动的状态)。另外,在一般情况下,我们不需要SELinux复杂的保护,所以也将其设置为无效的状态。
关闭防火墙
[root@master ~]#serviceiptables stop
(注:service iptables stop (临时关闭)
chkconfig iptables off (重启后生效)
防火墙相关操作命令见附录)
关闭SELinux
[root@master ~]#vim/etc/sysconfig/selinux
将SELINUX=enforcing修改为SELINUX=disabled
[if !vml]
[endif]
(注:setenforce 0 (临时生效))
SSH无密码验证配置
Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。
安装和启动SSH协议
[root@master ~]#rpm
-qa | grep openssh
[root@master ~]#rpm
-qa | grep rsync
[if !vml]
[endif]
(注:我的本机已经安装了openssh和rsync,如果没有安装,可执行如下命令进行安装:
yum install ssh
yum install rsync
service sshd restart
要确保所有的服务器都安装了这两个工具)
配置master无密码登录所有salve
SSH无密码原理
[if !vml]
[endif]
[if !vml]
[endif]
SSH无密码原理简介:
master(NameNode |JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器salve(DataNode | Tasktracker)上时,需要在master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的slave上。当master通过SSH连接salve时,salve就会生成一个随机数并用master的公钥对随机数进行加密,并发送给master。master收到加密数之后再用私钥解密,并将解密数回传给slave,slave确认解密数无误之后就允许master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端master复制到slave上。
master机器上生成密码对
在master节点上执行以下命令(以root账户登录):
[root@master root]#ssh-keygen -t rsa -P ''
这条命令是生成其无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在“/home/hadoop/.ssh”目录下。
[if !vml]
[endif]
查看/home/hadoop/下是否有.ssh文件夹,且.ssh文件下是否有两个刚生产的无密码密钥对:
[if !vml]
[endif]
接着在master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。
[root@master .ssh]#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在验证前,需要做两件事儿。第一件事儿是修改文件authorized_keys权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能),另一件事儿是用root用户设置/etc/ssh/sshd_config的内容。使其无密码登录有效。
修改文件authorized_keys:
[root@master .ssh]#chmod 600 ~/.ssh/authorized_keys
设置SSH配置:
用root用户登录服务器修改SSH配置文件/etc/ssh/sshd_config的下列内容
[root@master .ssh]#vim /etc/ssh/sshd_config
[if !vml]
[endif]
(注:参数说明如下:
RSAAuthentication yes #启用RSA认证
PubkeyAuthentication yes #启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径,和上面生成的文件相同)
[if !vml]
[endif]
设置完之后重启SSH服务,能使刚才设置有效。
[root@master .ssh]#service sshd restart
[if !vml]
[endif]
验证是否成功。
[root@master .ssh]#ssh localhost
[if !vml]
[endif]
从上图得知无密码登录本机已经设置完毕,接下来是把公钥复制所有的slave机器上。
在往下做之前,把其他几台的公钥私钥全部产生,参照以上步骤。
使用下面的命令格式进行复制公钥:
scp ~/.ssh/id_rsa.pub远程用户名@远程服务器IP:~/
把master上的公钥复制到slave1上:
[hadoop@master .ssh]$scp ~/.ssh/id_rsa.pub hadoop@slave1:~/
[if !vml]
[endif]
从被复制的Slave机上可以用ls –a查看确实存在id_rsa.pub这个文件:
[root@slave1 ~]#ll
-a
[if !vml]
[endif]
依据以上方式,分别复制到其他几台slave主机的根目录下。
在所有slave机上,将公钥添加到授权密钥文件authorized_keys内(添加完成后,把/home/hadoop/目录下的id_rsa.pub文件删除掉):
[root@slave1 ~]#cat
~/id_rsa.pub >> ~/.ssh/authorized_keys
[if !vml]
[endif]
配置所有slave无密码登录master
和master无密码登录所有slave原理一样,就是把slave的公钥追加到master的.ssh文件夹下的authorized_keys中,记得是追加(>>)。
思想:分别在其他几台slave机上使用scp命令,将slave上的公钥发到master上去,然后每发送一个,在master上,使用cat命令将slave的公钥添加到master的授权文件中。然后把传过来的公钥文件删除。
比如我这里的slave1机发送公钥到master机:
[root@slave1 ~]#scp
~/.ssh/id_rsa.pub hadoop@10.1.34.68:~/
[if !vml]
[endif]
然后master机上,将slave1的公钥添加到master的授权文件中:
[root@master .ssh]#cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
[if !vml]
[endif]
到此,配置已完成。验证一下ssh可以master和slave之间的无密码相互登陆
[if !vml]
[endif]
安装NTP服务(所有节点)
集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。具体思路如下:
1.master节点作为ntp服务器与外界对时中心同步时间,随后对所有datanode节点提供时间同步服务。
2.所有datanode节点以master节点为基础同步时间。
所有节点安装相关组件:ntp与ntpdate。
查看当前系统是否已安装ntp:
[root@master ~]#rpm
-qa | grep ntp
[if !vml]
[endif]
如果当前系统没有安装ntp,则安装:
yum -y install ntp ntpdate
或者下载安装ntpd的稳定版本。比如ntp-4.2.6p3.
wgethttp://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p3.tar.gz
tar zxf ntp-4.2.6p3.tar.gz
mkdir /app/ntp
cd ntp-4.2.6p3
./configure --prefix=/app/ntp --enable-all-clocks--enable-parse-clocks
make clean && make check && make
&& make intall
(注意:/app/ntp为ntpd的安装后文件路径)
完成后,配置开机启动。
[root@master ~]#chkconfig
ntpd on
[root@master ~]#chkconfig
--list ntpd
[if !vml]
[endif]
其中2-5为on状态就代表成功。
配置内网NTP服务器(master节点)
在配置之前,先使用ntpdate手动同步一下时间,免得本机与对时中心时间差距太大,使得ntpd不能正常同步。这里选用65.55.56.206作为对时中心。
[root@master ~]#ntpdate
-u 65.55.56.206
[if !vml]
[endif]
(注:在公司由于网络受限,导致对时失败,可以先不用管)
ntp服务只有一个配置文件,配置好了就OK。这里只给出有用的配置,不需要的配置都用#注掉,这里就不再给出:
[root@master ~]#vim
/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
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
[if !vml]
[endif]
配置文件完成,保存退出,启动服务,执行如下命令:
service ntpd start
chkconfig ntpd on (设置开机启动)
一般等待5-10分钟才能同步
配置NTP客户端(所有slave节点)
[root@slave1 ~]#vim
/etc/ntp.conf
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
server 10.1.34.59
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
[if !vml]
[endif]
保存退出,请求服务器前,请先使用ntpdate手动同步一下时间:
[root@slave1 ~]#ntpdate
-u 10.1.34.59
[if !vml]
[endif]
(注:这里可能出现同步失败的情况,请不要着急,一般是本地的ntp服务器还没有正常启动,一般需要等待5-10分钟才可以正常同步。启动服务:
service ntpd start
chkconfig ntpd on)
附:其他可能用到的ntp设置
/etc/ntp.conf配置文件中,还可以设置其他属性,以更好的完成时间同步任务:
#允许内网其他机器同步时间
restrict 192.168.1.0 mask 255.255.255.0 nomodify
notrap
#中国这边最活跃的时间服务器: http://www.pool.ntp.org/zone/cn
server 210.72.145.44 perfer #中国国家受时中心
server 202.112.10.36 #1.cn.pool.ntp.org
server 59.124.196.83 #0.asia.pool.ntp.org
#允许上层时间服务器主动修改本机时间
restrict 210.72.145.44 nomodify notrap noquery
restrict 202.112.10.36 nomodify notrap noquery
restrict 59.124.196.83 nomodify notrap noquery
#外部时间服务器不可用时,以本地时间作为时间服务
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
安装配置(master节点)
检查系统是否已安装MySQL
先检查系统是否已经安装了MySQL,运行命令
[root@master ~]#rpm
-qa | grep -i mysql
如果安装了MySQL,就会有提示,有的系统没有安装MySQL数据库,但可能安装了MySQL的库文件,类似于mysql-libc-XXX,这个也要卸载。
卸载命令rpm -e --nodeps mysql-xxx
卸载完成后,运行 rpm -qa | grep mysql 查看是否卸载完全。
[if !vml]
[endif]
安装MySQL
(以下安装步骤适用于MySQL5.7.17版本,若要安装5.6.34等版本,请参考博客:
CentOS6.4离线安装mysql5.6.22
http://www.voidcn.com/blog/q383965374/article/p-6299314.html)
卸载完成后,上传MySQL安装包到hadoop的master服务器的某路径下,比如我这里上传到了:/home/hadoop/mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
解压缩tar包:
[root@master hadoop]#tar -xvf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
[if !vml]
[endif]
依次序执行安装操作:(注意:是依次执行,不要乱了顺序,因为它们之间有依赖关系)
[root@master hadoop]#rpm -ivh mysql-community-common-5.7.17-1.el6.x86_64.rpm
[root@master hadoop]#rpm -ivh mysql-community-libs-5.7.17-1.el6.x86_64.rpm
[root@master hadoop]#rpm -ivh mysql-community-client-5.7.17-1.el6.x86_64.rpm
[root@master hadoop]#rpm -ivh mysql-community-server-5.7.17-1.el6.x86_64.rpm
[if !vml]
[endif]
以上安装操作完成,启动MySQL
[root@master hadoop]#service mysqld start
(注:若是安装5.6.34版本,安装顺序如下:
MySQL-server-5.6.34-1.linux_glibc2.5.x86_64.rpm
MySQL-client-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-shared-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-devel-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-shared-compat-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-embedded-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-test-5.6.34-1.linux_glibc2.5.x86_64.rpm
)
修改密码
启动后在/var/log/mysqld.log中获取root账户的初始密码
[root@master hadoop]#vim /var/log/mysqld.log
[if !vml]
[endif]
(注:可通过
#grep
"password" /var/log/mysqld.log命令获取MySQL的临时密码)
连接MySQL数据库:
[root@master hadoop]#mysql -u root -p
[if !vml]
[endif]
修改数据库root用户的密码:
mysql>alter
user 'root'@'localhost' identified by '123456';
[if !vml]
[endif]
MySQL对用户密码安全性有所加强,所以设置的密码必须包含有数字,大写字母,小写字母,特殊符号,如果你设置的密码过于简单,会提示:
ERROR 1819 (HY000): Your password does not satisfy the currentpolicy requirements
修改密码后,刷新:
mysql>flush
privileges;
(注:若想使用简单密码,修改方法见附录)
设置MySQL远程连接
查看MySQL的用户:
mysql>selecthost, user from mysql.user;
设置允许所有地址访问:
mysql>update mysql.user
set host="%" where user="root";
mysql>flush
privileges;
关闭防火墙或设置3306端口允许访问:
要访问3306可以用两种方式,一个就是让防火墙开放3306端口,另一个是关闭防火墙。推荐使用开放3306端口
1. 开放3306端口
方法1:
[root@master hadoop]#iptables -I INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT
[root@master hadoop]#iptables -I OUTPUT -o eth0 -p tcp --sport 3306 -j ACCEPT
对应阻止3306端口的命令为:
[root@master hadoop]#iptables -I INPUT -i eth0 -p tcp --dport 3306 -j DROP
[root@master hadoop]#iptables -I OUTPUT -o eth0 -p tcp --sport 3306 -j DROP
保存设置:
[root@master hadoop]#/etc/rc.d/init.d/iptables save
方法2:
修改/etc/sysconfig/iptables文件,增加如下一行:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport3306 -j ACCEPT
然后重启防火墙:
[root@master hadoop]#service iptables restart
1. 关闭防火墙
重启后生效:
[root@master hadoop]#chkconfig iptables off
即时成效,但重启后会再次启动:
[root@master hadoop]#service iptables stop
至此,应该可以远程连接MySQL了。
设置MySQL不区分大小写
Linux下的MySQL安装完之后默认是区分表名的大小写,不区分列名的大小写。
改变表名大小写区分规则的方法:
root账户登录,在/etc/my.cnf或/etc/mysql/my.cnf中的[mysqld]后添加lower_case_table_names=1,重启MySQL服务。
[if !vml]
[endif]
重启MySQL服务:
[root@master ~]#service
mysqld restart
[if !vml]
[endif]
(注:如果在/etc或/etc/mysql找不到my.cnf文件,需要从其他地方拷贝过来,因为使用rpm安装MySQL时,需要手工拷贝my.cnf文件。操作如下:
到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf:
[root@master mysql]#cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
my-small.cnf是为小型数据库设计的,不应该把这个模型用于含有一些常用项目的数据库
my-medium.cnf是为中等规模的数据库而设计的
my-large.cnf是为专用于一个SQL数据库的计算机而设计的
my-huge.cnf是为企业中的数据库而设计的
拷贝完成后,进入etc目录下,编辑my.cnf
修改MySQL默认编码
MySQL数据库的默认编码并不是utf-8,启动服务并登陆MySQL,可以查看MySQL数据库的编码
mysql>show
variables like '%char%';
[if !vml]
[endif]
由上图可知,database和server的字符集使用了latin1编码方式,不支持中文,即存储中文时会出现乱码。一下修改为utf-8编码:
关闭MySQL服务:
[root@master mysql]#service mysqld stop
[if !vml]
[endif]
打开my.cnf,在文件内的[mysqld]下增加如下两行设置,并保存退出
character_set_server=utf8
init_connect=’SET NAMES utf8’
[if !vml]
[endif]
重启MySQL服务
[root@master mysql]#service mysqld start
登陆MySQL后,可以看到,编码方式已经修改为utf8
[if !vml]
[endif]
设置MySQL开机启动
[root@master ytfiles]#hkconfig mysqld on
c[if !vml]
[endif]
创建数据库
进入mysql命令行,创建以下数据库:
#hive
>create database hive DEFAULT CHARSET
utf8 COLLATE utf8_general_ci;
#activity monitor
>create database amon DEFAULT CHARSET
utf8 COLLATE utf8_general_ci;
#hue
>create database hue DEFAULT CHARSETutf8 COLLATE utf8_general_ci;
#activity oozie
>create database oozie DEFAULT CHARSET
utf8 COLLATE utf8_general_ci;
#Reports Manager
>create database reportsmanager DEFAULT
CHARSET utf8 COLLATE utf8_general_ci;
授权root用户在主节点拥有所有数据库的访问权限
>grant all privileges on *.* to
'root'@'master' identified by 'xxxx' with grant option;
>flush privileges;
安装Cloudera Manager Server和Agent
解压安装包至/opt默认目录
在master节点解压安装包至/opt默认目录
[root@master tmp]#tar
-zxvf cloudera-manager-el6-cm5.10.1_x86_64.tar.gz -C /opt
为Cloudera Manager 5建立数据库
将准备好的mysql-connector-java-5.1.33-bin.jar文件放到/opt/cm-5.10.1/share/cmf/lib/中。
并分别复制到:
/opt/cloudera/parcels/CDH-5.10.1-1.cdh5.10.1.p0.10/lib/hive/lib/ (hive需要使用)
/opt/cloudera/parcels/CDH-5.10.1-1.cdh5.10.1.p0.10/lib/oozie/lib/ (oozie需要使用)
/var/lib/oozie/ (oozie需要使用)
[root@master tmp]#cp
mysql-connector-java-5.1.33.jar /opt/cm-5.10.1/share/cmf/lib/
在master节点初始化CM5的数据库
[root@master tmp]#/opt/cm-5.10.1/share/cmf/schema/scm_prepare_database.sh
mysql cm -hlocalhost -uroot -p123456 --scm-host localhost scm 123456 scm
note:在这里后面的参数分别是:数据库类型数据库名称数据库主机名数据库用户名密码 --scm-host cmserver主机名数据库用户名 数据库用户对应的密码 scm(未知参数,未查到用途,去掉也可以执行成功,暂且保留,与网上保持一致)
配置Agent
修改/opt/cm-5.10.1/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名master。
[root@master ~]#vim
/opt/cm-5.10.1/etc/cloudera-scm-agent/config.ini
[if !vml]
[endif]
同步Agent到所有slave节点
[root@master lib]#scp
-r /opt/cm-5.10.1/ root@slave3:/opt/
在所有节点创建cloudera-scm用户
[root@master lib]#useradd
--system --home=/opt/cm-5.10.1/run/cloudera-scm-server/ --no-create-home
--shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
[if !vml]
[endif]
准备Parcels,用以安装CDH5
将CHD5相关的Parcel包放到主节点的/opt/cloudera/parcel-repo/目录中
相关的文件如下:
CDH-5.10.1-1.cdh5.10.1.p0.10-el6.parcel.sha1
CDH-5.10.1-1.cdh5.10.1.p0.10-el6.parcel
manifest.json
最后将CDH-5.10.1-1.cdh5.10.1.p0.10-el6.parcel.sha1,重命名为CDH-5.10.1-1.cdh5.10.1.p0.10-el6.parcel.sha,这点必须注意,否则,系统会重新下载CDH-5.10.1-1.cdh5.10.1.p0.10-el6.parcel文件。
执行启动脚本
在master节点启动服务端:
[root@master ~]#/opt/cm-5.10.1/etc/init.d/cloudera-scm-server
start
在所有节点启动Agent:
[root@slave1 ~]#/opt/cm-5.10.1/etc/init.d/cloudera-scm-agent
start
以上脚本是启动命令,相关停止或重启命令仅需将start变成stop或restart即可。
[if !vml]
[endif]
配置CDH集群
登录网页,安装CDH5
Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置了。
在浏览器打开http://master:7180进入CDH管理界面,由于CM
Server的启动需要花点时间,这里可能要等待一会才能访问,默认的用户名和密码均为admin。
[if !vml]
[endif]
以下选择安装的CM版本,选Express免费版或者Enterprise试用版都行。
[if !vml]
[endif]
[if !vml]
[endif]
选择安装的集群,这里注意只有已启动cloudera-scm-agent的主机才能被CM管理。
点击继续,各个Agent节点正常启动后,可以在当前管理的主机列表中看到对应的节点。选择要安装的节点,点继续。
[if !vml]
[endif]
接下来,出现以下包名,说明本地Parcel包配置无误,直接点继续就可以了
[if !vml]
[endif]
如果此处发现不到parcel包,就重启所有节点的agent服务,和master的server服务,然后重新尝试。并且确认CDH版本小于或者等于CM的版本
[if !vml]
[endif]
本地通过Parcel安装过程与本地通过Package安装过程完全一致,不同的是两者的本地源的配置。
区别如下:
Package本地源:软件包是.rpm格式的,数量通常较多,下载的时候比较麻烦。通过”createrepo .”的命令创建源,并要放到存放源文件主机的web服务器的根目录下,详见创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备
Parcel本地源:软件包是以.parcel结尾,相当于压缩包格式的,一个系统版本对应一个,下载的时候方便。如centos
6.x使用的CDH版本为CDH-X.X.X-1.cdhX.X.X.p0.22-el6.parcel,而centos 5.x使用的CDH版本为CDH-X.X.X-1.cdhX.X.X.p0.22-el5.parcel。
这些文件放好之后,CM会获取这个包,并出现在主机->包裹的页面。出现的快慢跟你设置的包的刷新频率有关,默认是1小时。也可以重启CM服务和agent服务识别。
可以在管理页面的属性标签下的包裹种类里修改。
parcel安装,查看日志
[if !vml]
[endif]
正常情况下,内网网速速好的话10分钟左右激活完毕,最多不超过30分钟,如果卡住了,建议看看日志
安装过程中有什么问题,可以用
/opt/cm-5.10.1/etc/init.d/cloudera-scm-agentstatus
/opt/cm-5.10.1/etc/init.d/cloudera-scm-serverstatus
查看服务器客户端状态
也可以通过
/var/log/cloudera-scm-server/cloudera-scm-server.log
/var/log/cloudera-scm-agent/cloudera-scm-agent.log
查看日志
如果上面的路径找不到则在
日志文件夹"/opt/cm-5.10.1/log"查看日志,里面包含server和agent的log,使用命令如下:
tail -f/opt/cm-5.10.1/log/cloudera-scm-server/cloudera-scm-server.log
tail -f/opt/cm-5.10.1/log/cloudera-scm-agent/cloudera-scm-agent.log
成功激活后继续右下角点击继续
[if !vml]
[endif]
主机检查
会进入自动检查主机(耗时2分钟左右)然后给出报告,包括需要修改的部分和组件的版本
[if !vml]
[endif]
解决警告
这里有2个警告需要解决一下,至于版本里的不可用不适用不需要管。
警告一
Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10。当前设置为 60。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf,以在重启后保存该设置。您可以继续进行安装,但 Cloudera
Manager 可能会报告您的主机由于交换而运行状况不良。以下主机将受到影响
解决方法
每台受影响的主机运行
echo 10 > /proc/sys/vm/swappiness 即可解决。
[if !vml]
[endif]
[root@master ~]#vim
/etc/sysctl.conf
[if !vml]
[endif]
警告二
已启用透明大页面压缩,可能会导致重大性能问题。请运行“echo
never > /sys/kernel/mm/transparent_hugepage/defrag”以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始脚本中,以便在系统重启时予以设置。以下主机将受到影响
解决方法
每台受影响的主机运行命令
[root@master ~]#echo
never > /sys/kernel/mm/transparent_hugepage/defrag
[root@master ~]#echo
never > /sys/kernel/mm/transparent_hugepage/enabled
[if !vml]
[endif]
并且
vim /etc/rc.local
加入
echo never >
/sys/kernel/mm/transparent_hugepage/defrag
echo never >
/sys/kernel/mm/transparent_hugepage/enabled
[if !vml]
[endif]
然后点击重新运行进行重新检查
[if !vml]
[endif]
[if !vml]
[endif]
全部绿勾了,然后点击右下角的完成。
选择安装哪些组件服务--这里根据需求选择即可。
[if !vml]
[endif]
右下角点击继续,然后配置角色。一般情况下保持默认就可以了(Cloudera
Manager会根据机器的配置自动进行配置,如果需要特殊调整,自行进行设置就可以了)。
我这里使用默认配置,所以直接点击继续就可以了。
[if !vml]
[endif]
配置数据库
然后配置数据库
这里需要输入自己的mysql的对应数据库名称和用户名以及密码。
我们之前在mysql中新建的数据名分布对应填入然后点击测试连接。
hive root 123456
oozie root 123456
hue root 123456
[if !vml]
[endif]
如果测试连接全部是Successful,则点击右下角的继续。
[if !vml]
[endif]
参考博文
hadoop基础----hadoop实战(七)-----hadoop管理工具---使用Cloudera
Manager安装Hadoop---Cloudera
Manager和CDH5.8离线安装
http://www.voidcn.com/blog/q383965374/article/p-6326985.html
CDH5 Hadoop集群完全离线安装步骤总结
http://blog.csdn.net/it_taojingzhan/article/details/51537258
Centos7 CM5和CDH5(5.9.0) 离线安装
http://blog.csdn.net/myself_way/article/details/54864651
ERROR 1819 (HY000): Your password does not satisfy the currentpolicy requirements
http://www.cnblogs.com/ivictor/p/5142809.html
附录
CentOS7以下系统的防火墙操作
本机连接好着,远程连接不上telnet 192.168.1.561521
Linux自身的防火墙名为“iptables”
chkconfig命令只是查看和设置服务的自动启动情况,并不能反映当前服务的状态.
service iptables status
可以查看到iptables服务的当前状态
查看防火墙状态:
/etc/init.d/iptablesstatus
暂时关闭防火墙:
/etc/init.d/iptables stop
永久关闭防火墙:
chkconfig iptables off
开启防火墙:
/etc/init.d/iptablesstart
永久开启防火墙:
chkconfig iptableson
禁止防火墙在系统启动时启动:
/sbin/chkconfig --level2345 iptables off
重启iptables:
/etc/init.d/iptablesrestart
开放防火墙端口(1521、1158)
/sbin/iptables -I INPUT-p tcp --dport 1521 -j ACCEPT
/sbin/iptables -I INPUT-p tcp --dport 1158 -j ACCEPT
保存设置命令:
/etc/rc.d/init.d/iptablessave
查看端口打开情况命令:
/etc/init.d/iptablesstatus
CentOS7以上系统的防火墙操作
centos6的版本防火墙使用的iptables,iptables是一个静态防火墙,也就是说它不能够动态的添加开启端口,必须在配置文件中添加开启端口,然后重启防火墙才能生效。
centos7的防火墙使用的是firewalld,它是动态的,可以通过命令添加开启端口,不用重启服务就可以使改变生效。
启动:#systemctlstart firewalld
查看状态:#systemctl
status firewalld或者firewall-cmd --state
停止:#systemctl
stop firewalld
禁用:#systemctl
disable firewalld
永久开启80端口:firewall-cmd --zone=public --add-port=80/tcp –permanent
说明:--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
更新防火墙规则:#firewall-cmd
--reload
#firewall-cmd
--complete-reload
两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务
CentOS7以上系统修改主机名
第一种:hostname 主机名
hostname 主机名称
这种方式,只能修改临时的主机名,当重启机器后,主机名称又变回来了。
第二种:hostnamectl set-hostname
hostnamectl set-hostname 主机名
使用这种方式修改,可以永久性的修改主机名称!
MySQL5.6.34相关操作
(参考博文:)
安装MySQL5.6.34的执行顺序:
rpm -ivhMySQL-server-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivhMySQL-client-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivhMySQL-shared-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-devel-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivhMySQL-shared-compat-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivhMySQL-embedded-5.6.34-1.linux_glibc2.5.x86_64.rpm
rpm -ivhMySQL-test-5.6.34-1.linux_glibc2.5.x86_64.rpm
[if !vml]
[endif]
安装完成后,查看生成的临时随机密码:
[root@master ytfiles]#vim /root/.mysql_secret
[if !vml]
[endif]
启动MySQL服务:
[root@master ytfiles]#service mysql start
[if !vml]
[endif]
登录MySQL:
[root@master ytfiles]#mysql -u root -p
[if !vml]
[endif]
修改MySQL初始密码:
mysql> set password for 'root'@'localhost'=password('123456');
[if !vml]
[endif]
找到my.cnf配置文件
如果"/etc/"目录下没有my.cnf配置文件,请到"/usr/share/mysql/"下找到my-default.cnf文件,拷贝其中一个合适的配置文件到"/etc/"并改名为"my.cnf"中。命令如下:
cp /usr/share/mysql/my- default.cnf /etc/my.cnf
编辑MySQL的配置文件"/etc/my.cnf"为保证MySQL能够正常工作,需要指明"mysql.sock"文件的产生位置,以及默认编码修改为UTF-8。用下面命令:
vim /etc /my.cnf
[mysqld] #下添加以下命令
socket = /var/lib/mysql/mysql/mysql.sock
datadir=/mysql_data/mysql #如果你的数据存储位置要改变的话需要在这里指定存储目录
character-set-server=utf8
lower_case_table_names=1
[if !vml]
[endif]
#(注意linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;# lower_case_table_names =0 0:区分大小写,1:不区分大小写)
注意:
1)还有在此配置文件还有[client]的一项配置,其中也可以设置socket,datadir两个选项
2)如果你修改了数据的存储位置目录,则需要修改MySQL启动脚本/etc/rc.d/init.d/mysql,修改 datadir=/mysql_data/mysql。
vim /etc/rc.d/init.d/mysql
问题:有时候发现设置的my.cnf值没生效:
了解一下mysql配置文件的加载顺序:
$ mysqld --help --verbose|grep -A1 -B1 cnf
Default options are read from the following files in the givenorder:
/etc/my.cnf/etc/mysql/my.cnf/usr/my.cnf
~/.my.cnf
mysql按照上面的顺序加载配置文件,后面的配置项会覆盖前面的。把/usr/my.cnf这个文件删掉,/etc/my.cnf里面的就生效了。
[root@master usr]#mv
my.cnf my.cnf.bak
[if !vml]
[endif]
错误:
MySQL> update user set host='%' where user =
'root';ERROR 1062 (23000):
Duplicate entry '%-root' for key 'PRIMARY'然后查看了下数据库的host信息如下:MySQL> select host from user where user =
'root';+-----------------------+| host |+-----------------------+| % || 127.0.0.1 || localhost.localdomain |+-----------------------+3 rows in set (0.00 sec)host已经有了%这个值,所以直接运行命令:复制代码 代码如下:MySQL>flush privileges;再用MySQL
administrator连接...成功!!
MySQL5.7修改简单密码
MySQL对用户密码安全性有所加强,所以设置的密码必须包含有数字,大写字母,小写字母,特殊符号,如果你设置的密码过于简单,会提示:
ERROR 1819 (HY000): Your password does not satisfy the currentpolicy requirements
这个其实与validate_password_policy的值有关。
validate_password_policy有以下取值:
PolicyTests Performed
0 or LOWLength
1 or MEDIUMLength; numeric, lowercase/uppercase, and special characters
2 or STRONGLength; numeric, lowercase/uppercase, and special characters; dictionary file
默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
有时候,只是为了自己测试,不想密码设置得那么复杂,譬如说,我只想设置root的密码为123456。
必须修改两个全局参数:
首先,修改validate_password_policy参数的值
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00sec)
这样,判断密码的标准就基于密码的长度了。这个由validate_password_length参数来决定。
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 8 |
+----------------------------+
1 row in set (0.00sec)
validate_password_length参数默认为8,它有最小值的限制,最小值为:
validate_password_number_count
+validate_password_special_char_count
+ (2 *validate_password_mixed_case_count)
其中,validate_password_number_count指定了密码中数据的长度,validate_password_special_char_count指定了密码中特殊字符的长度,validate_password_mixed_case_count指定了密码中大小字母的长度。
这些参数,默认值均为1,所以validate_password_length最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。如下所示:
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 8 |
+----------------------------+
1 row in set (0.00sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00sec)
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 4 |
+----------------------------+
1 row in set (0.00sec)
如果修改了validate_password_number_count,validate_password_special_char_count,validate_password_mixed_case_count中任何一个值,则validate_password_length将进行动态修改。
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 4 |
+----------------------------+
1 row in set (0.00sec)
mysql> select @@validate_password_mixed_case_count;
+--------------------------------------+
| @@validate_password_mixed_case_count |
+--------------------------------------+
| 1 |
+--------------------------------------+
1 row in set (0.00sec)
mysql> set global validate_password_mixed_case_count=2;
Query OK, 0 rows affected (0.00sec)
mysql> select @@validate_password_mixed_case_count;
+--------------------------------------+
| @@validate_password_mixed_case_count |
+--------------------------------------+
| 2 |
+--------------------------------------+
1 row in set (0.00sec)
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 6 |
+----------------------------+
1 row in set (0.00sec)
当然,前提是validate_password插件必须已经安装,MySQL5.7是默认安装的。
那么如何验证validate_password插件是否安装呢?可通过查看以下参数,如果没有安装,则输出将为空。
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
|Variable_name | Value |
+--------------------------------------+-------+
|validate_password_dictionary_file | |
|validate_password_length | 6 |
|validate_password_mixed_case_count | 2 |
|validate_password_number_count | 1 |
|validate_password_policy |LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
6 rows in set (0.00sec)
(注:出自博客:http://www.cnblogs.com/ivictor/p/5142809.html)
Linux系统备份与还原
Linux不像windows,它不限制根用户存取任何东西,因此,你完全可以把一个分区上每一个的文件放入一个TAR文件中。
使用root用户切换到根目录
[root@master ~]#cd
/
然后,创建backup文件夹,用以存放备份的系统压缩包:
[root@master /]#mkdir
backup
然后,使用下面的命令备份完整的系统:
[root@master /]#tar
cvpzf /backup/backup_full.tar.gz --exclude=/proc --exclude=/lost+found
--exclude=/backup --exclude=/mnt --exclude=/sys /
说明:
tar 部分就是我们将要使用的软件。
'cvpfz'是我们给tar加的选项,像“创建一个压缩文档”(这是显然的),“保存权限”(以便使每一个相同的文件有相同的权限),以及“gzip”(缩减大小)。接下来,是压缩文档将获得的名称,在我们的例子中是backup.tgz。
紧随其后的是我们想要备份的根目录。既然我们想备份所有东西:/。接着就是我们要剔除的目录了:我们不想备份每一样东西,因为包括有些目录不是非常有用。同时确保你没有把备份文件本身也加进去了,否则,你会得到怪异的结果的。你也许同样不打算把/mnt文件夹包括进来——如果你在那儿挂载了其他分区——否则最终你会把那些也备份的。同时确保你没有任何东西挂载在 /media(即没有挂载任何cd或可移动介质)。否则,剔除/media。
在进程的最后,你也许会得到一条信息,写着“tar:由于先前错误的耽搁而存在错误”或者其他什么,不过大多数情况下你可以仅仅忽略它。
作为选择,你可以使用Bzip来压缩你的备份。这意味着较高的压缩比但是也意味着较低的速度。如果压缩比对你很重要,只需用“j”替换命令中的“z”,同时给备份命一个相应的扩展名。这些会使命令变成这样:
[root@master /]#tar cvpjf /backup/backup_full.tar.bz2
--exclude=/proc --exclude=/lost+found --exclude=/backup --exclude=/mnt
--exclude=/sys /
恢复:
如果系统被毁坏,那么我们就可以用备份好的tar包进行恢复。
在分区的backup目录下的backup_full.tar.gz文件
[root@master /]#tar
xvpfz /backup/backup_full.tar.gz -C /
如果你使用 bz2:
[root@master /]#tar
xvpfj /backup/backup_full.tar.bz2 -C /
警告:这会把你分区里所有文件替换成压缩文档里的文件!
确保在你做其他任何事情之前,重新创建你剔除的目录:
[root@master /]#mkdir
proc
[root@master /]#mkdir
lost+found
[root@master /]#mkdir
mnt
[root@master /]#mkdir
sys
/proc 权限:文件所有者:root群组:root 所有者:读取执行群组:读取执行其它:读取执行
/lost+found 权限:文件所有者:root群组:root 所有者:读取写入执行群组:读取执行其它:读取执行
/mnt 权限:文件所有者:root群组:root 所有者:读取写入执行群组:读取执行其它:读取执行
/sys 权限:文件所有者:root群组:root 所有者:读取写入执行群组:读取执行其它:读取执行
当你重启以后,所以的事情都会和你备份的时候一模一样。
(注:参考博客:http://www.centoscn.com/image-text/2013/0418/318.html)