美文网首页
CDH5 Hadoop集群完全离线安装说明

CDH5 Hadoop集群完全离线安装说明

作者: 钟敏_1788 | 来源:发表于2018-12-09 16:01 被阅读0次

    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 ServerAgent

    解压安装包至/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参数来决定。

    [if !vml][endif]

    mysql> select @@validate_password_length;

    +----------------------------+

    | @@validate_password_length |

    +----------------------------+

    |                          8 |

    +----------------------------+

    1 row in set (0.00sec)

    [if !vml][endif]

    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。如下所示:

    [if !vml][endif]

    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)

    [if !vml][endif]

    如果修改了validate_password_number_count,validate_password_special_char_count,validate_password_mixed_case_count中任何一个值,则validate_password_length将进行动态修改。

    [if !vml][endif]

    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)

    [if !vml][endif]

    当然,前提是validate_password插件必须已经安装,MySQL5.7是默认安装的。

    那么如何验证validate_password插件是否安装呢?可通过查看以下参数,如果没有安装,则输出将为空。

    [if !vml][endif]

    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

    相关文章

      网友评论

          本文标题:CDH5 Hadoop集群完全离线安装说明

          本文链接:https://www.haomeiwen.com/subject/qxckhqtx.html