目录
  1. 1. 基础环境 & 软件包
  2. 2. 系统环境设置
    1. 2.1. 配置JDK
    2. 2.2. 配置hostname
    3. 2.3. ssh免密
    4. 2.4. 关闭iptables/selinux
    5. 2.5. NTP配置
      1. 2.5.1. 主节点
      2. 2.5.2. 从节点
    6. 2.6. 优化项
  3. 3. 主节点安装配置MySQL
    1. 3.1. 安装MySQL
    2. 3.2. 配置MySQL
  4. 4. 安装Cloudera Manager Server
  5. 5. 安装Cloudera Manager Agent
  6. 6. 安装CDH5.7
  7. 7. Hadoop生态圈简介

基础环境 & 软件包

系统环境设置

配置JDK

 下载jdk,环境变量配置/etc/profile,所有节点均需要配置。

1
2
3
4
5
6
JAVA_HOME=/usr/java/jdk1.7
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

配置hostname

  • /etc/sysconfig/network

    1
    2
    NETWORKING=yes
    HOSTNAME=master-node
  • /etc/hosts
     所有节点的IP及hostname

ssh免密

 主节点ssh免密登录所有节点

1
2
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id all_nodes

关闭iptables/selinux

1
2
3
4
5
6
7
$> /etc/init.d/iptables stop
$> chkconfig iptables off
#临时关闭selinux
$> setenforce 0
#永久关闭selinux
$> vim /etc/selinux/config
SELINUX=disabled

NTP配置

主节点

  • /etc/ntp.conf

    1
    2
    3
    4
    5
    6
    7
    driftfile /var/lib/ntp/drift
    restrict 127.0.0.1
    restrict -6 ::1
    restrict default nomodify notrap
    server pool.ntp.org prefer
    includefile /etc/ntp/crypto/pw
    keys /etc/ntp/keys
  • 启动NTP

    1
    2
    $> /etc/init.d/ntpd start
    $> chkconfig ntpd on

从节点

  • /etc/ntp.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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 notrapnopeer noquery
    server master-node perfer
    server pool.ntp.org
    includefile /etc/ntp/crypto/pw
    keys /etc/ntp/keys
  • 启动NTP & 同步时间

    1
    2
    3
    $> ntpdate -u master-node
    $> /etc/init.d/ntpd start

    $> chkconfig ntpd on

优化项

 安装集群时会检测基础环境,需要对以下两项进行优化设置并添加到开机启动/etc/rc.local

1
2
$> echo 1 > /proc/sys/vm/swappiness
$> echo never > /sys/kernel/mm/transparent_hugepage/defrag

主节点安装配置MySQL

 MySQL只需要在主节点(cloudera-scm-server)上安装即可

安装MySQL

1
2
3
$> wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
$> rpm -ivh mysql-community-release-el6-5.noarch.rpm
$> yum install mysql-server

配置MySQL

  • /etc/my.cnf
     由于要将数据全部都存放在大容量的/data分区下,所以需要对MySQL做些简单配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [mysqld]
    datadir=/data/mysql
    socket=/var/lib/mysql/mysql.sock
    character-set-server=utf8
    log-error=/data/log/mysql/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    symbolic-links=0
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    [mysqld_safe]
  • 启动

    1
    2
    3
    4
    $> chkconfig mysqld on
    $> mkdir -p /data/log/mysql
    $> /etc/init.d/mysqld start
    $> mysqladmin -u root password 'your_root_password'
  • 建表及授权

    1
    2
    3
    4
    5
    6
    $> mysql -uroot -p
    mysql> create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    mysql> create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    mysql> create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    mysql> grant all privileges on *.* to 'root'@'master-node' identified by 'your_root_password' with grant option;
    mysql> flush privileges;

安装Cloudera Manager Server

 在主节点上安装Cloudera Manager Server

  • 创建cloudera-scm用户

    1
    useradd --system --home=/opt/cm-5.7.0/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
  • 安装配置Cloudera Manager Server
     由于要将数据都放到/data分区,所以才需要创建软连接,否则不需要。

    1
    2
    3
    4
    5
    $> tar -zxf cloudera-manager-el6-cm5.7.0_x86_64.tar.gz
    $> cp -a cm-5.7.0/ /data
    $> cp -a cloudera /data
    $> ln -s /data/cm-5.7.0 /opt/cm-5.7.0
    $> ln -s /data/cloudera /opt/cloudera
  • 初始化Cloudera Manager Server数据库

    1
    2
    3
    $> cp mysql-connector-java-5.1.38-bin.jar /opt/cm-5.7.0/share/cmf/lib/mysql-connector-java.jar
    $> mkdir -p /usr/share/java/ && cp mysql-connector-java-5.1.38-bin.jar /usr/share/java/mysql-connector-java.jar
    $> /opt/cm-5.7.0/share/cmf/schema/scm_prepare_database.sh mysql cm -hmaster-node -uroot -p --scm-host master-node scm scm scm
  • 离线Parcels
     在集群安装过程中需要下载parcels,由于国内网络原因需要先离线下载文件,再将以下文件放到/opt/cloudera/parcel-repo/

    • CDH-5.7.0-1.cdh5.7.0.p0.45-el6.parcel
    • CDH-5.7.0-1.cdh5.7.0.p0.45-el6.parcel.sha1 (必须将下载的原文件CDH-5.7.0-1.cdh5.7.0.p0.45-el6.parcel.sha1重命名成CDH-5.7.0-1.cdh5.7.0.p0.45-el6.parcel.sha,否则会重新下载)
    • manifest.json
  • 启动Cloudera Manager Server

    1
    $> /opt/cm-5.7.0/etc/init.d/cloudera-scm-server start

安装Cloudera Manager Agent

 Cloudera Manager Agent在所有节点都需要安装,包括主节点。

  • 创建cloudera-scm用户

    1
    $> useradd --system --home=/opt/cm-5.7.0/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
  • 配置cloudera-scm-agent
     修改cm-5.7.0目录下文件cm-5.7.0/etc/cloudera-scm-agent/config.ini,将server_host修改成cloudera manager server地址
     可自定义log_file路径

    1
    2
    server_host=master-node
    log_file=/data/cm-5.7.0/log/cloudera-scm-agent/cloudera-scm-agent.log

  • 同步cloudera-scm-agent
     将修改好配置的cm-5.7.0文件夹同步到剩余所有节点。
     这里需要特别注意一点:绝对不能先启动cloudera-scm-agent再同步文件夹。因为cloudera-scm-agent启动后会在/opt/cm-5.7.0/lib/cloudera-scm-agent/目录下生成uuid,如果启动agent后再同步文件夹则会使得集群所有agent的uuid都相同,而uuid是用来标识集群中的每个节点的,必须唯一。假若先启动后同步的话,想要修复问题则需要删除/opt/cm-5.7.0/lib/cloudera-scm-agent/目录下所有文件,若问题仍旧没有修复则需要清空主节点Cloudera Manager的数据库。

    1
    2
    3
    $> scp -r /opt/cm-5.7.0 root@bj1-200-centos12:/data/
    $> ln -s /data/cm-5.7.0 /opt/cm-5.7.0
    $> ln -s /data/cloudera /opt/cloudera
  • 启动cloudera-scm-agent
     cloudera-scm-agent有个bug,pid会放在/opt/cm-5.7.0/run/cloudera-scm-agent/目录下,但这个目录不会自动创建,于是启动时会报错,故需要手动创建该目录。

    1
    2
    $> mkdir -p /opt/cm-5.7.0/run/cloudera-scm-agent/
    $> /opt/cm-5.7.0/etc/init.d/cloudera-scm-agent start

安装CDH5.7

 当cloudera-scm-servercloudera-scm-agent都成功启动后就可以通过Cloudera Manager的Web界面安装CDH5.7及相关服务。直接访问http://master-node:7180/cmf/login,默认初始用户及密码是:admin/admin。由于安装过程截图太多懒得一张张放上来了,只要安装提示一步步安装。
 选择安装其他服务时,若服务需要连接MySQL则可能需要将JDBC驱动文件放到相应服务的目录下。比如安装Hive,如果日志中提示连接MySQL错误则JDBC驱动文件放到/opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/hive/lib/目录下。
 如果安装Impala的话,需要在daemon节点安装perl:yum install -y perl
 如果安装Hue的话,需要安装python-lxmlyum install -y python-lxml
 如果启动某些服务提示libxslt.so.1错误,需要安装yum install -y libxml2 libxslt
 在安装不同服务时可能会遇到各种各样的问题,需要到/var/log/<server_name>下查看日志逐个排查。

Hadoop生态圈简介

  围绕Hadoop有一系列的服务和组件简单记录一下它们的用途。我所使用的是Cloudera的CDH集群,基本都是Cloudera的生态,故Ambari涉及的都没怎么了解。

  • Hadoop
     Hadoop是Apache开发的一套分布式软件框架,目前是2.x版本,主要有以下三部分构成:

    • HDFS
       HDFS(Hadoop分布式文件系统)是Hadoop的分布式存储系统,HDFS主要又由以下三个部分组成:
      • NameNode
         管理文件系统的元数据(metadata),元数据(metadata)包括命名空间(namespace)、块信息等。
      • Secondary NameNode
        Secondary NameNode不是NameNode的备份。需要弄明白Secondary NameNode的作用先了解NameNode是如何保存元数据(metadata)的。
         NameNode会维护fsimageedits两个文件,fsimage是NameNode启动时对整个文件系统的快照,edits是NameNode启动后文件系统改动的记录(类似MySQL的binlog)。当NameNode重启时才将edits里的内容合并到fsimage中得到整个文件系统最新的快照。这样就会有个问题,当NameNode长时间没有重启时,edits文件会变得非常大,要将edits中的内容合并到fsimage将会耗费很多时间。于是有了Secondary NameNode来解决此类问题。
         Secondary NameNode定期向NameNode获取edits文件的内容并更新到自己维护的fsimage中,合并完后再将最新的fsimage复制给NameNode。这样NameNode重启是用的fsimage就会是最新的。
      • DataNode
         存储数据
    • MapReduce
       分布式计算框架
    • Yarn
       新一代Hadoop引入的资源管理器,新一代的MapReduce(MRv2)。主要解决上一代Hadoop扩展性问题。
  • Spark
     Spark是另一个分布式计算框架,基于内存计算所以能提供更快的数据处理速度,由Scala语言编写提供更通用的API。其实Spark与MapReduce对应,都是计算框架。此外还有Flink和流计算框架Storm等等。不同的计算框架各有优缺点,根据不同场景选择不同的计算框架。

  • Hive
     Hive是Hadoop的数据仓库系统。使用HQL(HiveQL,类似SQL)的查询语言,将SQL转化为MapReduce任务在Hadoop上执行。其实就是MapReduce程序写起来麻烦,于是为了简化和方便查询开发出能使用类似SQL进行查询的组件,这就是Hive。

  • Pig
     Pig是基于Hadoop的数据分析平台。如果说Hive是SQL在Hadoop上的实现,那么Pig就是脚本方式的实现。Pig定义一种数据流语言——Pig Latin,将脚本语言转化为MapReduce任务在Hadoop上执行。

  • Hbase
     分布式、可伸缩的面向列的数据库,支持随机、实时读写访问,来源与Google的BigTable。个人感觉如果应要和MySQL数据库对应的话,Hbase算是类似于NoSQL的KV数据库吧。Hbase提供Web UI:http://Hbase_master:60010

  • Phoenix
     Phoenix简单说就是SQL On Hbase,使SQL查询转换成Hbase的查询。

  • Impala
     Impala是Cloudera公司开放,提供批量和实时查询的工具。Impala不需要使用到MapReduce计算模型,依赖Hive并可直接对HDFS和Hbase中的数据进行SQL(HiveSQL)查询,查询是速度是Hive的数倍。之所以会有Impala是因为Hive这种需要将SQL转成MapReduce的方式查询速度实在太慢,改用直接使用SQL(HiveSQL)在HDFS/Hbase中进行查询以提高速度。

  • Oozie
     Oozie是一个工作流调度管理工具,协调数据接收、存储、转换和分析等工作。当需要将多个MapReduce任务连接在一起完成整个工作时,就需要使用到Oozie来协调多个MapReduce任务。

  • Hue
     Hue是Cloudera开发的Web UI工具,用Pyhton的Django框架编写的。Hue UIHue ServerHue DB三部分组成,http://Hue_Server:8000

  • Solr
     Solr是个企业级搜索引擎。

  • Sqoop
     Sqoop是数据迁移工具,全称是Sql-To-Hadoop,主要用于传统关系型数据库(MySQL/Oracle/Postgres)和Hadoop之间的数据转换。

  • Mahout
     Hadoop的机器学习库。

Powered: Hexo, Theme: Nadya remastered from NadyMain