了解Iaas、Paas、SaaS定义,大数据基础组件部署用于搭建数据处理平台,提供平台能力和服务,属于Paas平台建设;部署文档第一部分为Hadoop(apache版)+ storm + spark(on yarn)+flink (on yarn)等组件的拼装式部署;第二部分为CDH统一部署;
第一部分:基于Apache社区版部署
节点及版本
节点规划
本次部署在5台物理机上完成,部署组件包括zk、Kafka、Hadoop(Apache版)、Stom(非on yarn)、spark(on yarn)、redis等。
IP |
组件 |
角色 |
xxx.155 |
zk,kafka,storm,hdfs,yarn,mr |
nameNode,resourceManager,zk,nimbus,kafka |
xxx.156 |
zk,kafka,storm,hdfs,yarn,mr |
secondaryNameNode,DataNode,nodeManager,zk,Supervisor,kafka |
xxx.157 |
zk,kafka,storm,hdfs,yarn,mr |
DataNode,nodeManager,zk,Supervisor,kafka |
xxx.158 |
zk,kafka,storm,hdfs,yarn,mr |
DataNode,nodeManager,Supervisor,kafka |
xxx.159 |
zk,kafka,storm,hdfs,yarn,mr |
DataNode,nodeManager,Supervisor,kafka |
组件版本
Linux系统:Centos 6.8(lsb_release -a)
主机:5台物理机(128G内存+8C)
组件 |
版本 |
JDK |
jdk1.8.0_144 |
Hadoop |
Hadoop 3.0.3(Apache版) |
Storm |
apache-storm-0.9.5 |
Spark |
spark-2.4.0-bin-hadoop2.7 |
Kafka |
kafka_2.10_0.10_0.0 |
ZK |
zookeeper-3.4.5 |
Scala |
scala-2.11.12 |
Hive |
apache-hive-3.1.1 |
Mysql |
mysql-5.6.42 |
Hbase |
hbase-2.0.2 |
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
用户及环境准备
用户及权限
部署Hadoop相关组件尽量不使用root用户,但需要给部署stream用户赋予sudo权限,让其可以修改etc/hosts文件、装ansible小工具、使其在/data盘有生成文件权限;
修改etc/hosts
使用Sudo权限修改etc/hosts文件,用于免密准备;
ssh免密登录
5台主机均使用stream作为部署用户,为方便设置hdfs和yarn的data和log在数据盘的路径权限,用户需要 sudo权限;
注:主机A/B/C为例,设置免密登录的方法:
① 每台机器上执行 ssh-keygen -t rsa ,敲3次回车会在家目录/home/csap下生成隐藏的.ssh目录,首先需要给此目录赋权限700: chmod 700 .ssh;这个目录下有两个文件:id_rsa 私钥和id_rsa.pub 公钥;
② 在此目录中创建 authorized_keys 文件并赋权:
cd .ssh
touch authorized_keys
chmod 644 authorized_keys
③ 以机器A为例,执行以上操作后,如果不知道其他机器的密码,比如绑定4A;把自己的 id_rsa.pub 公钥 以及其他两台机器的公钥粘贴到 authorized_keys文件中,然后把这个文件复制到其他2台机器即可。等于所有机器都有其他机器的公钥,即可完成ssh 免密登录;
④ 如果知道其他机器密码,可以直接执行这个把公钥写到其他机器的authorized_keys文件中:ssh-copy-id -i ~/.ssh/[email protected]
关闭SELINUX及防火墙
SELINUX 文件路径为:/etc/sysconfig/selinux,设置 SELINUX=disabled,永久关闭。
JDK安装
JDK安装包复制到/home/stream目录下解压,将JAVA_HOME环境变量配置到/home/stream/.bash_profile文件中,并使其立即生效。
① /home/stream/.bash_profile文件增加:
export JAVA_HOME=/home/stream/jdk1.8.0_144
export path=${path}:${JAVA_HOME}/bin:${JAVA_HOME}/sbin
② 使其立即生效:source /home/stream/.bash_profile
③ java -version 指令查看是否生效;
Ansible工具安装
需要使用sudo权限安装 yum install ansible,并修改/etc/ansible/hosts文件,添加组及主机列表;
//复制文件到其他主机:
ansible stream -m copy -a 'src=/home/stream/apache-storm-0.9.5/conf/storm.yaml dest=/home/stream/apache-storm-0.9.5/conf/'
//运行command
ansible stream -m command -a 'ls /home/stream'
//批量解压
ansible stream -m command -a 'tar -zxvf /home/stream/hadoop-3.0.3.tar.gz'
Zookeeper 配置
Zookeeper为分布式协调组件,分布式协调技术主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果。
配置
直接解压Zookeeper压缩包/home/stream下,需要修改的配置文件在zk的conf目录下,复制zoo_sample.cfg 并改名:cp zoo_sample.cfg zoo.cfg,在zoo.cfg文件中的配置项如下:
注:原生的conf目录中没有zoo.cfg
Zoo.cfg的配置:
# the port at which the clients will connect
//zookeeper对外通信端口,默认不用修改
clientPort=2181
# The number of milliseconds of each tick
//Zookeeper服务器心跳时间,单位毫秒
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
//投票选举新leader的初始化时间
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
//Leader与Follower之间的最大响应时间单位,响应超过syncLimit*tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
//数据持久化目录,也保存有节点的ID信息,需要自己创建指定
dataDir=/home/xxxx/zookeeperxxxx/data
//日志保存路径,这个目录必须手工创建指定,否则启动报错。
dataLogDir=/home/xxx/zookeeper/logs
//Session超时时间限制,如果客户端设置的超时时间不在这个范围,那么会被强制设置为最大或最小时间。默认的Session超时时间是在2 *tickTime ~ 20 * tickTime这个范围
maxSessionTimeout=120000
# The number of snapshots to retain in dataDir
//这个参数和下面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。(No Java system property)New in 3.4.0
autopurge.snapRetainCount=2
# Purge task interval in hours
# Set to "0" to disable auto purge feature
//在上文中已经提到,3.4.0及之后版本,ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能,但可以运行bin/zkCleanup.sh来手动清理zk日志。
autopurge.purgeInterval=3
//配置zookeepe集群各节点之间通信和选举的端口,其中2888端口号是zookeeper服务之间通信的监听端口,而3888是zookeeper选举通信端口。server.N N代表这个节点的ID编号,需要用户手工指定各节点对应的编号,编号不能有重复;
server.1=namenode:2888:3888
server.2=datanode1:2888:3888
server.3=datanode2:2888:3888
配置集群节点编号myid
新建文件myid(在zoo.cfg配置的dataDir目录下,此处为/home/xxx/zookeeperxxx/data),使得myid中的值与server的编号相同,比如namenode上的myid:1;datanode1上的myid:2,以此类推;
配置log4j.properties:
在~/zookeeper/conf/路径下有log4j.properties文件,需要修改host及其他的log路径配置信息;
启动和验证
进入bin目录下,./zkServer.sh start启动服务;
运行./zkServer.sh status,查看各节点状态,其中1个节点是leader,其余是follower,也可以通过jps查看,多了一个QuorumPeerMain的进程。
./zkServer.sh stop停止服务,服务起不来请检查:
① 端口2181 2888 3888 被占用
② Ip和主机名没有加入/etc/hosts,配置里面配置了主机名
Kafka 配置
Kafka是分布式的高吞吐消息系统,其节点状态需要Zk维护;
配置
直接将Kafka的tar.gz包解压到/home/stream目录下。需要修改xxx/kafka/config/server.properties文件,修改的常用配置项有:
//Kafka机器的每个节点都是一个broker,这个配置本节点的broker编号ID,每个节点编号必须唯一。
//Kafka默认对外通信端口9092以及本机的IP地址,如果不指定hostname和port会使用当前主机,并使用默认的9092端口;
//Kafka 数据持久化目录,需要手工创建指定。
//Kafka集群数据保留周期,默认168小时,一般不推荐修改,可以通过命令修改单一topic的超时。
//配置指向的zookeeper集群。
delete.topic.enable |
默认false |
启用delete topic参数,建议设置为true。 |
//如果不开启true,那么当用命令删除topic的时候并不是真正的删除,而只是标记为marked for deletion
log.cleanup.policy = delete //默认
//日志清理策略 选择有:delete和compact 主要针对过期数据的处理,或是日志文件达到限制的额度,会被 topic创建时的指定参数覆盖
auto.leader.rebalance.enable =true //默认false
//是否自动平衡broker之间的分配策略
message.max.bytes =1000000 //默认
//消息体的最大大小,单位是字节。服务器可以接收到的最大的消息大小。注意此参数要和consumer的maximum.message.size大小一致,否则会因为生产者生产的消息太大导致消费者无法消费。
replica.fetch.max.bytes=1000000
//最好和上面保持一致
log.retention.check.interval.ms=5minutes //默认
//文件大小检查的周期时间,是否触发 log.cleanup.policy中设置的策略;
启动和验证
分别到各个主机的bin目录下,逐个启动服务:
cd /home/xxx/kafka_xxxx/bin;
后台启动服务:
nohup ./kafka-server-start.sh ../config/server.properties &
验证:
jps命令查看是否有kafka的进程,也可以使用zkCli.sh查看broker的状态是否注册,并创建topic测试;
Hadoop配置(非HA)
Hadoop是分布式的高可用批处理框架,CDH的Hadoop自带Hbase,Hive等其他组件,但Apache包仅带有分布式文件系统HDFS和资源调度Yarn,及批处理计算框架Mapred,其他组件如Hbase和Hive需要自己适配安装配置;
Hadoop的版本为Apache Hadoop 3.0.3,将tar.gz压缩包解压后放在/home/stream家目录,介绍下解压后的几个文件:
bin:Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop;
etc:Hadoop配置文件所在的目录,包括core-site,xml、hdfs-site.xml、mapredsite.xml等配置文件;
include:对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序;
lib:该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用;
libexec:各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息;
sbin:Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/关闭脚本;
share:Hadoop各个模块编译后的jar包所在的目录;
配置
Hadoop中Common、HDFS、Yarn和MapReduce各有对应的配置文件,用于保存对应模块中可配置的参数,这些配置文件均为XML格式且由两部分构成:系统默认配置文件和管理员自定义配置文件。
系统默认配置文件分别是core-default.xml、hdfs-default.xml、mapred-default.xml、yarn-default.xml,其中大部分属性值默认指定,链接如下:
自定义配置文件分别是core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml,官网上其daemon的配置属性链接如下:
.Configuring the Hadoop Daemons
这些配置文件用于定义一些默认配置没有的属性或者覆盖默认配置文件中的默认值,这些配置一旦确定,便不能被修改(如果想修改,需重新启动Hadoop)。
core-default.xml和core-site.xml属于公共基础库的配置文件,默认情况下,Hadoop优先加载它们。
Hadoop-env.sh
只需要配置JAVA_HOME和HADOOP_HOME的值;
Hdfs
需要定义默认Fs和临时文件夹及IO的缓冲大小;
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://xxx.155/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data01/hadoop</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
namenode的配置:
<configuration>
<property>
<name>dfs.namenode.rpc-address</name>
<value>xxx.155:8020</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>xxx.156:9868</value>
</property>
<property>
<name>dfs.namenode.secondary.hosts</name>
<value>xxx.156</value>
</property>
<property>
<name>dfs.secondarynamenode.hosts</name>
<value>xxx.156</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data01/hdfs/nn</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>xxx.155</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>xxx.155:9870</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
</configuration>
datanode的配置:
<configuration>
<property>
<name>dfs.namenode.rpc-address</name>
<value>xxx.155:8020</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>xxx.156:9868</value>
</property>
<property>
<name>dfs.namenode.secondary.hosts</name>
<value>xxx.156</value>
</property>
<property>
<name>dfs.secondarynamenode.hosts</name>
<value>xxx.156</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data01/hdfs/nn</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>xxx.155</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>xxx.155:9870</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data01/hdfs/dn</value>
</property>
</configuration>
Yarn
Yarn是负责集群资源调度管理的组件,yarn的目标是实现“一个集群多个框架”,同一集群上部署一个统一的资源调度管理框架yarn,在yarn之上可以部署其他各种计算框架,比如MapRudece、Storm、Spark等,yarn为这些计算框架提供统一的资源管理服务(包括CPU、内存),并且能够根据各种计算框架的负载需求,调整各自占用的资源,实现集群资源共享和资源弹性收缩,从而提高集群利用率。不同框架共享底层存储从而避免了数据的跨集群移动,也大大降低了企业运维成本,总结为:
- 计算资源按需伸缩
- 不用负载应用混搭,集群利用率高
- 共享底层存储,避免数据跨集群迁移
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>xxx.155:8081</value>
</property>
<property>
<name> yarn.resourcemanager.am.max-attempts</name>
<value>4</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>xxx.155:8082</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>xxx.155:8083</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>xxx.155:8084</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>xxx.155:8085</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>xxx.155</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>100</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.resourcemanager.nodes.include-path</name>
<value>HA-DLZX-E0407-csap,HA-DLZX-E0507-csap,HA-DLZX-E0408-csap,HA-DLZX-E0508-csap</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>90</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data01/yarn/nodemanager</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/data01/yarn/logs</value>
</property>
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>10800</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
MapReduce
MapReduce是一种分布式的并行计算框架,用于大规模数据集(大于1T)的并行计算,它将复杂的、运行于大规模集群上的并行计算过程高度抽象到两个函数:Map和Ruduce,极大地方便了分布式编程工作,在编程人员不会分布式并行编程的情况下,也可以很容易将自己的程序运行在分布式系统上,完成海量数据的计算;
MapReduce设计理念是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为在大规模数据下移动计算比移动数据更加经济,移动数据需要大量的网络传输开销。本着这一理念,在一个集群中,只要有可能MapRdeuce框架就会将Map程序就近地在HDFS数据所在节点运行,即计算节点和存储节点一起运行,从而减少了节点间的数据移动开销;
<configuration>
<property>
<name> mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>1536</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx2014M</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3072</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2560M</value>
</property>
<property>
<name>mapreduce.task.io.sort</name>
<value>512</value>
</property>
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>100</value>
</property>
<property>
<name>mapreduce.reduce.shuffle.parallelcopies</name>
<value>50</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>xxx.155:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>xxx.155:19888</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/data01/yarn/temp</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/data01/yarn/done</value>
</property>
</configuration>
Worker文件
列出所有工作节点的主机名或IP地址,每行一个。
List all worker hostnames or IP addresses in your etc/hadoop/workers file, one per line. Helper scripts (described below) will use the etc/hadoop/workers file to run commands on many hosts at once.
xxx.156
xxx.157
xxx.158
xxx.159
启动和验证
第一次启动hdfs需要格式化:
$HADOOP_HOME/bin/hdfs namenode -format
启动daemon实例:
$HADOOP_HOME/bin/hdfs --daemon start namenode
$HADOOP_HOME/bin/hdfs --daemon start datanode
$HADOOP_HOME/bin/yarn --daemon start resourcemanager
$HADOOP_HOME/bin/yarn --daemon start nodemanager
$HADOOP_HOME/bin/yarn --daemon start proxyserver
$HADOOP_HOME/bin/mapred --daemon start historyserver
关闭daemon实例后,启动组件:
$HADOOP_HOME/sbin/start-yarn.sh
$HADOOP_HOME/sbin/start-dfs.sh
使用jps查看相关组件进程是否存在,手动在hdfs上创建文件夹并上传文件,验证hdfs是否配置成功:
问题
1、xml中配置的hdfs、yarn、MR的data和log的路径权限, yarn的日志目录没有写权限造成yarn启动成功,但spark启动失败(卡住不动),解决办法是给yarn-site.xml配置中yarn.nodemanager.log-dirs的路径赋权;
2、core-site.xml的配置中fs.defaultFs的值和主机不一致问题,按照官网配置fs.defaultFS的值是hdfs://xxx.15:9000,有提示报错:java.io.IOException: Failed on local exception;去掉fs.defaultFs中端口号成功;
<property>
<name>fs.defaultFS</name>
<value>hdfs://xxx.155/</value>
</property>
3、未解决:运行的时候发现出现:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 错误,在配置文件hadoop-env.sh中增加:
exportHADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
Hive 配置
Hive是基于Hadoop的数据仓库工具,可以用于对存储在Hadoop文件中的数据集进行数据整理、特殊查询和分析处理。Hive学习门槛较低,因为它提供了类似于关系数据库SQL语言的查询语言Hive QL,可以通过HiveQL语句快速实现简单的MR统计,Hive本身可以自动将HiveQL语句转换成MR任务运行,不必实现MR的api开发,因而十分适合数据仓库的统计分析;
Hive部署有三种部署模式:单用户、多用户和远程服务器模式。单用户模式连接到一个In-memory的数据库Derby,一般用于Unit Test;多用户模式是最常用到的部署模式,通过网络连接到一个数据库中,数据库一般选择MySQL存储Metastore元数据;远程服务器模式即Metastore元数据存储在远程服务器端的数据库中,客户端通过Thrift协议访问MetastoreServer数据库。
部署分两部分:先装mysql并创建用户和数据库,其次配置Hive;
配置
Mysql部分
1、Mysql官网下载tar包,5.6.33(64位linux通用版),下载地址为:https://dev.mysql.com/downloads/mysql/5.6.html#downloads;在安装路径下/usr/local/解压、重命名为mysql;
注:getconf LONG_BIT 得到系统位数
2、新建mysql用户(属组mysql),将安装路径/usr/local/mysql的属主和属组变为mysql,新建数据路径/var/lib/mysql及/var/lib/mysql/data,将文件的属主和属组变为mysql;;
groupadd mysql
useradd -r -g mysql mysql
mkdir –p /var/lib/mysql/data
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /var/lib/mysql
3、安装数据库,传参:数据目录和安装目录;
sudo ./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/var/lib/mysql/data --user=mysql
4、启动脚本和配置文件修改:
./support-files/mysql.server和my.cnf;前者是启动时候运行的脚本,后者是启动时候读取的mysql配置,如果不做任何调整的话,默认的basedir是/usr/local/mysql,datadir是/var/lib/mysql/data,如果修改这两个参数需要修改很多配置量;
linux在启动MySQL服务时按照次序搜索my.cnf,先在/etc目录下找,找不到则会搜索"$basedir/my.cnf",linux操作系统在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如/etc/my.cnf.bak,否则该文件会干扰正确配置,造成无法启动。
sudo cp ./support-files/mysql.server/etc/init.d/mysqld
sudo chmod755/etc/init.d/mysqld
sudo cp./support-files/my-default.cnf/etc/my.cnf
//修改my.cnf配置文件中的数据目录和安装目录:
sudo vi/etc/init.d/mysqld
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/mysql
5、启动服务
sudo service mysqld start
//关闭mysql服务
sudo service mysqld stop
#查看mysql服务运行状态
sudo service mysqld status
- 设置环境变量,并测试连接,配置登录权限:
//设置环境变量
export MYSQL=/usr/local/mysql
export PATH=${MYSQL}/bin:${PATH}
//赋权所有库下的所有表在任何IP地址或主机都可以被root用户连接
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
//修改root用户的登录密码(须停服务,完成后重启)
UPDATE user SET Password=PASSWORD(‘123456’) where USER=’root’;
flush privileges;
7、创建hive库和hive用户,用来保存hive仓库的元数据信息,对hive用户赋权
create database hive character set latin1;
create user hive;
hive用户在表mysql.user下的赋权操作(略)
flush privileges;
Hive部分
Hive的默认元数据保存在Derby中,这里修改其元数据库为mysql,需要下载mysql驱动,地址:https://dev.mysql.com/downloads/file/?id=480090,并将驱动复制到hive/lib文件中。
Hive读取的配置文件:hive-default.xml和hive-site.xml,可以不修改前者大量默认配置项,后者配置信息可以覆盖前者, 参考官网:Getting Started Guide;
1、在hdfs上新建hive的元数据路径
$HADOOP_HOME/bin/hadoop fs –mkdir /tmp
$HADOOP_HOME/bin/hadoop fs –mkdir /user/hive/warehouse
$HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
2、新建并修改hive-site.xml配置文件,如下(配置中读写元数据的mysql用户是root,权限太高,需优化):
cp hive-default.xml.template hive-site.xml
//hive-site.xml的详细配置:
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://172.19.52.155:3306/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
</configuration>
3、初始化hive元数据库,验证mysql设置是否成功(成功后hive库下的表会有很多hive的元数据表);
schematool -dbType mysql -initSchema
启动和验证
完成以上配置,直接hive命令启动hive服务,测试建表;
//hdfs有相应的文件夹,说明配置成功:
问题
1、配置mysql并启动成功,但修改mysql.user表的登录用户配置信息后,重启发现localhost主机上root用户无法读取mysql的系统库(mysql库),解决方法:关掉mysql进程并删除datadir中的data目录后,重新初始化;
2、配置mysql库时候的登录权限问题,对用户和登录主机赋权;
HBase 配置
Hbase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,主要用来存储非结构化的和半结构化的松散数据。Hbase可以支持超大规模数据存储,可以通过水平扩展的方式,利用廉价硬件集群处理超过10亿元素和数百万列元素组成的数据集。
配置
配置参考官网:Example Configurations,需要修改3个配置文件:hbase-env.sh和hbase-site.xml和regionserver文件;
1、hbase-env.sh修改JAVA_HOME, HBASE_CLASSPATH, BASE_MANAGES_ZK,如果使用独立安装的zk,则HBASE_MANAGES_ZK 修改为false,这里复用之前部署的zk;
export JAVA_HOME=/home/stream/jdk1.8.0_144
export HBASE_CLASSPATH=/home/stream/hbase/conf
export HBASE_MANAGES_ZK=false
2、hbase-site.xml文件设置zk地址和其他配置:
<configuration>
<property>
<name>hbase.zookeeper.quorum</name>
<value>xxx.155,xxx.156,xxx.157</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/stream/zk/zookeeper/dataDir</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://xxx.155/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/stream/hbase/temp</value>
</property>
</configuration>
3、修改regionserver文件,添加regionserver主机
xxx.156
xxx.157
xxx.158
xxx.159
启动和验证
在bin目录下运行./start-hbase.sh脚本,查看Hmaster进程,使用hbase shell指令启动hbase命令行建表,测试;
可以使用zkCli.sh进入zk查看hbase注册的节点信息:
问题
1、启动报错:java.lang.ClassNotFoundException:org.apache.htrace.SamplerBuilder
解决方法: cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/
2、启动报错:Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that can provide it.
解决方法:在hbase-site.xml中增加配置:
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
Storm 配置
Strom为分布式、高可用的实时计算框架, Zookeeper负责Nimbus节点和Supervior节点之间的通信,监控各个节点之间的状态。提交任务在Nimbus节点上,Nimbus节点通过zk集群将任务分发下去,而Supervisor是真正执行任务的地方。
Nimbus节点通过zk集群监控各个Supervisor节点的状态,当某个Supervisor节点出现故障的时候,Nimbus通过zk集群将那个Supervisor节点上的任务重新分发到其他Supervisor节点上执行。
如果Nimbus节点出现故障的时候,整个任务并不会停止,但是任务的管理会出现影响,通常这种情况下我们只需要将Nimbus节点恢复就可以了。
Nimbus节点不支持高可用,这也是Storm目前面临的问题,一般情况Nimbus节点的压力不大,通常不会出问题。
配置
直接解压到/home/stream目录下.需要配置/home/stream/apache-storm-0.9.5/conf/storm.yaml,常用配置项及value 如下:
//配置zk的地址和端口和storm存放在zookeeper里目录
storm.zookeeper.server:
- “192.168.159.145”
- “192.168.159.144”
- “192.168.159.143”
storm.zookeeper.port: 21810
storm.zookeeper.root: /storm_new10
//storm主节点的地址 web页面的端口
nimbus.host: “192.168.159.145”
ui.port: 8989
//每个worker使用的内存
worker.heap.memory.mb: 512
storm.local.dir: "/home/zyzx/apache-storm-0.9.5/data"
//配置工作节点上的进程端口。你配置一个端口,意味着工作节点上启动一个worker,在实际的生产环境中,我们需要根据实际的物理配置以及每个节点上的负载情况来配置这个端口的数量。在这里每个节点我象征性的配置5个端口。
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
- 6700
nimbus.thrift.max_buffer_size: 204876
worker.childopts: “-Xmx1024m”
启动和验证
控制节点启动nimbus和storm ui,其他节点启动Supervisor节点,通过JPS查看进程,主节点启动 nimbus进程,工作节点会启动 supervisor 进程;
nohup storm ui &
nohup storm nimbus &
nohup storm supervisor &
storm的配置文件storm.yaml对格式规范要求高,多余空格可以造成读取配置失败,在启动所有节点后可以在zookeeper的zkCli客户端的root目录下查看storm下存活的supervisor节点数验证是否启动成功:
在~/storm/bin下运行./storm list命令列出在集群上提交的拓扑:
Spark (on yarn) 配置
Spark使用简练、优雅的Scala语言编写,基于Scala提供了交互式的编程体验,同时提供多种方便易用的API。Spark遵循“一个软件栈满足不同应用场景”的设计理念,逐渐形成了一套完整的生态系统(包括 Spark提供内存计算框架、SQL即席查询(Spark SQL)、流式计算(Spark Streaming)、机器学习(MLlib)、图计算(Graph X)等),Spark可以部署在yarn资源管理器上,提供一站式大数据解决方案, 同时支持批处理、流处理、交互式查询。
MapReduce计算模型延迟高,无法胜任实时、快速计算的需求,因而只适用于离线场景,Spark借鉴MapReduce计算模式,但与之相比有以下几个优势:
- Spark提供更多种数据集操作类型,编程模型比MapReduce更加灵活;
- Spark提供内存计算,将计算结果直接放在内存中,减少了迭代计算的IO开销,有更高效的运算效率。
- Spark是基于DAG的任务调度执行机制,迭代效率更高;
在实际开发中MapReduce需要编写很多底层代码,不够高效,Spark提供了多种高层次、简洁的API实现相同功能的应用程序,实现代码量比MapReduce少很多。
Spark作为计算框架只是取代了Hadoop生态系统中的MapReduce计算框架,它任需要HDFS来实现数据的分布式存储,Hadoop中的其他组件依然在企业大数据系统中发挥着重要作用;
Spark配置on yarn模式只需要修改很少配置,也不用使用启动spark集群命令,需要提交任务时候须指定任务在yarn上。
配置
Spark运行需要Scala语言,须下载Scala和Spark并解压到家目录,设置当前用户的环境变量(~/.bash_profile),增加SCALA_HOME和SPARK_HOME路径并立即生效;启动scala命令和spark-shell命令验证是否成功;Spark的配置文件修改如果按照管网教程不好理解,这里完成的配置参照博客及调试。
Spark的需要修改两个配置文件:spark-env.sh和spark-default.conf,前者需要指明Hadoop的hdfs和yarn的配置文件路径及Spark.master.host地址,后者需要指明jar包地址;
spark-env.sh配置文件修改如下:
export JAVA_HOME=/home/stream/jdk1.8.0_144
export SCALA_HOME=/home/stream/scala-2.11.12
export HADOOP_HOME=/home/stream/hadoop-3.0.3
export HADOOP_CONF_DIR=/home/stream/hadoop-3.0.3/etc/hadoop
export YARN_CONF_DIR=/home/stream/hadoop-3.0.3/etc/hadoop
export SPARK_MASTER_HOST=xxx.155
export SPARK_LOCAL_IP=xxx.155
spark-default.conf配置修改如下:
//增加jar包地址,
spark.yarn.jars=hdfs://xxx.155/spark_jars/*
该设置表明将jar地址定义在hdfs上,必须将~/spark/jars路径下所有的jar包都上传到hdfs的/spark_jars/路径(hadoop hdfs –put ~/spark/jars/*),否则会报错无法找到编译jar包错误;
启动和验证
直接无参数启动./spark-shell ,运行的是本地模式:
启动./spark-shell –master yarn,运行的是on yarn模式,前提是yarn配置成功并可用:
在hdfs文件系统中创建文件README.md,并读入RDD中,使用RDD自带的参数转换,RDD默认每行为一个值:
使用./spark-shell --master yarn启动spark 后运行命令:val textFile=sc.textFile(“README.md”)读取hdfs上的README.md文件到RDD,并使用内置函数测试如下,说明spark on yarn配置成功;
问题
在启动spark-shell时候,报错Yarn-site.xml中配置的最大分配内存不足,调大这个值为2048M,需重启yarn后生效。
设置的hdfs地址冲突,hdfs的配置文件中hdfs-site.xml设置没有带端口,但是spark-default.conf中的spark.yarn.jars值带有端口,修改spark-default.conf的配置地址同前者一致:
Flink (on yarn) 配置
Flink是针对流数据和批数据的分布式内存计算框架,设计思想主要来源于Hadoop、MPP数据库、流计算系统等,Fink主要是由Java代码实现,主要靠开源社区贡献而发展。Flink所处理的主要场景是流数据,默认把所有任务当成流数据处理,批数据只是流数据的一个特例,其支持本地快速迭代及一些环形迭代任务。
Flink以层级式系统形式组建软件栈,不同层的栈建立在其下层基础上,其特性如下:
- 提供面向流处理的DataStreaming API和面向批处理的DataSet API。DataSet API支持Java、Scala和Pyhton,DataStreaming API支持Java和Scala。
- 提供多种候选部署方案,如本地模式(Local)、集群模式(Cluster)、云模式(Cloud),对于集群而言,可以采用独立模式(Standalone)或者yarn;
- 提供了较好的Hadoop兼容性,不仅可以支持yarn,还可以支持HDFS、Hbase等数据源;
Flink支持增量迭代,具有对迭代自行优化的功能,因此在on yarn上提交的任务性能略好于 Spark。Flink是一行一行地处理数据,Spark是基于RDD的小批量处理,所以Spark在流式数据处理上不可避免地会增加一些延时,实时性没有Flink好。Flink和Storm可以支持毫秒级计算响应,Spark只能支持秒级响应。Spark的市场影响力和社区活跃度明显强于Flink,在一定程度上限制了Flink的发展空间;
配置
解压,进入bin目录下运行./yarn-session.sh –help 查看帮助验证yarn是否成功配置,./yarn-session.sh –q 显示yarn所有nodeManager节点资源;
Flink提供两种方式在yarn上提交任务:启动一个一直运行的 YARN session(分离模式)和在 YARN 上运行一个 Flink 任务(客户端模式),flink只需要修改一个配置conf/flink-conf.yaml ,详细参数请参考官网:
通用配置:Configuration,HA配置:High Availability (HA)
//需要设置 conf/flink-conf.yaml中的fs.hdfs.hadoopconf 参数来定位YARN和HDFS的配置;
//yarn模式下jobmanager.rpc.address不需要指定,因为哪一个容器作为jobManager由Yarn决定,不由Flink配置决定;taskmanager.tmp.dirs也不需要指定,这个参数将被yarn的tmp参数指定,默认就是/tmp目录下,保存一些用于上传到ResourceManager的jar或lib文件。parrallelism.default也不需要指定,因为在启动yarn时,通过-s指定每个taskmanager的slots数量。
//需要修改yarn-site.xml配置里面的yarn.resourcemanager.am.max-attempts,使得resourcemanager的连接的重试次数为4,默认是2;同时在flink-conf.yaml中增加yarn.application-attempts: 4;
//flink-on-yarn cluster HA虽然依赖于Yarn自己的集群机制,但Flink Job在恢复时依赖检查点产生的快照,这些快照配置在hdfs,但其元数据信息保存在zookeeper中,所以我们还要配置zookeeper的HA信息;其中recovery.zookeeper.path.namespace也可以在启动Flink on Yarn时通过-z参数覆盖。
flink-conf.yaml完整配置如下:
# The RPC port where the JobManager is reachable.
jobmanager.rpc.port: 6123
# The heap size for the JobManager JVM
jobmanager.heap.size: 1024m
# The heap size for the TaskManager JVM
taskmanager.heap.size: 1024m
# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.
taskmanager.numberOfTaskSlots: 1
# The parallelism used for programs that did not specify and other parallelism.
parallelism.default: 1
# env
HADOOP_CONF_DIR:/home/stream/hadoop-3.0.3/etc/hadoop
YARN_CONF_DIR:/home/stream/hadoop-3.0.3/etc/hadoop
# Fault tolerance and checkpointing
state.backend:filesystem
state.checkpoints.dir:hdfs://xxx.155/yzg/flink-checkpoints
state.savepoints.dir:hdfs://xxx.155/yzg/flink-checkpoints
# hdfs
#The absolute path to the Hadoop File System’s (HDFS) configuration directory
fs.hdfs.hadoopconf:/home/stream/hadoop-3.0.3/etc/hadoop
#The absolute path of Hadoop’s own configuration file “hdfs-site.xml” (DEFAULT: null).
fs.hdfs.hdfssite:/home/stream/hadoop-3.0.3/etc/hadoop/hdfs-site.xml
#HA
high-availability: zookeeper
high-availability.zookeeper.quorum: xxx.155:2181,xxx.156:2181,xxx.157:2181
high-availability.storageDir: hdfs:///yzg/flink/recovery
high-availability.zookeeper.path.root: /flink
yarn.application-attempts: 4
HA模式下需要配置zk,修改conf下的zoo.cfg;zoo.cfg配置如下:
dataDir=/home/stream/zk/zookeeper/logs
# The port at which the clients will connect
clientPort=2181
# ZooKeeper quorum peers
server.1=xxx.155:2888:3888
server.1=xxx.156:2888:3888
server.1=xxx.157:2888:3888
启动和验证
采用分离模式来启动Flink Yarn Session,提交后提示该yarn application成功提交到yarn并返回id,使用yarn application –kill application_id 来停止yarn上提交的任务;
yarn-session.sh -n 3 -jm 700 -tm 700 -s 8 -nm FlinkOnYarnSession -d –st
可以直接提交自带的词频统计用例,验证on yarn模式是否配置成功:
~/bin/flink run -m yarn-cluster -yn 4 -yjm 2048 -ytm 2048 ~/flink/examples/batch/WordCount.jar
总结
以上基本完成大数据平台(包含批和流)的基础组件部署。综合而言,基于apache Hadoop的散装部署较为麻烦,需要自己适配组件,且组件的配置较多,配置较繁琐;目前完成的组件运行情况如下(on yarn模式的spark和flink无进程):
第二部分:基于CDH版部署
版本比较
根据上一章部署步骤可看出,基于Apache的组件部署较繁琐且容易出错,组件耦合性太大,因此考虑到Hadoop集群部署的高效,集群的稳定性,以及后期集中的配置管理,业界多使用Cloudera公司的发行版(CDH),综述两者的区别及第三方发行版本如下。
Apache社区版
优点:完全开源免费,社区活跃,且文档、资料详实;
缺点:1、复杂的版本管理。版本管理比较混乱的,各种版本层出不穷;
2、复杂的集群部署、安装、配置。通常按照集群需要编写大量的配置文件,分发到每一台节点上,容易出错,效率低下。
3、复杂的集群运维。对集群的监控,运维,需要安装第三方的其他软件,运维难度较大。
4、复杂的生态环境。在Hadoop生态圈中,组件的选择、使用,比如Hive,Mahout,Sqoop,Flume,Spark,Oozie等等,需要大量考虑兼容性的问题,版本是否兼容,组件是否有冲突,编译是否能通过等。经常会浪费大量的时间去编译组件,解决版本冲突问题。
第三方发行版
优点:1、基于Apache协议且100%开源,版本管理清晰。
2、比Apache Hadoop在兼容性、安全性、稳定性上有增强。第三方发行版通常都经过了大量的测试验证,有众多部署实例,大量运行到各种生产环境。
3、版本更新快:通常情况,CDH每季度有update,每年有个release。
3、提供了部署、安装、配置工具,大大提高了集群部署的效率,可以在几个小时内部署好集群。
4、运维简单:提供了管理、监控、诊断、配置修改的工具,管理配置方便,定位问题快速、准确,使运维工作简单,有效。
发行版比较
Cloudera:最成型的发行版本,拥有最多的部署案例。提供强大的部署、管理和监控工具。Cloudera开发并贡献了可实时处理大数据的Impala项目。
Hortonworks: Hortonworks是第一家使用了Apache HCatalog元数据服务特性的提供商。并开创性地极大地优化Hive项目。Hortonworks为入门提供了一个非常好的,易于使用的沙盒。Hortonworks开发了很多增强特性并提交至核心主干,这使得Apache Hadoop能够在包括Windows Server和Windows Azure在内的Microsft Windows平台上本地运行。
MapR:与竞争者相比,它使用了一些不同的概念,特别是为了获取更好的性能和易用性而支持本地Unix文件系统而不是HDFS(使用非开源的组件)。可以使用本地Unix命令来代替Hadoop命令。除此之外,MapR还凭借快照、镜像或有状态的故障恢复之类的高可用性特性来与其他竞争者相区别。
考虑到大数据平台高效的部署和安装,中心化的配置管理,使用过程中的稳定性、兼容性、扩展性,以及未来较为简单、高效的运维,遇到问题低廉的解决成本,个人建议使用第三方发行版本。
部署规划
SAS盘和SATA盘区别:SAS盘是企业级应用盘,我们可以称之为Enterprise Disk,SATA盘是面向普通用户,面向对性能、可靠性要求不高的应用,我们也可以称之为Nearline Disk。SATA盘采用的是铝材料基板;SAS盘采用的是玻璃材料基板。采用铝材料的优点在于存储密度高,但是,基板的整体平整度不高,这就带来很严重的可靠性问题。在微观世界中,不平整的基板就像丘陵地带一样,当磁头高速运转的时候,如果有个风吹草动,磁头就会和这些山丘碰撞,导致DISC盘面划伤,数据丢失。玻璃基板的优点在于平整度高,但是存储密度不如铝材料高,这就导致SAS盘的数据存储容量小于SATA盘的容量。
系统盘一般SAS,数据盘一般SATA,3T左右的SAS价格3千左右;
Raid:RAID是由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发 挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会受到损坏硬盘的影响。
组件版本
服务 |
版本 |
操作系统 |
6.8 |
JDK |
1.8 |
CM |
5.7 |
CDH |
5.0.6 |
角色划分
本次安装使用中移在线研发域中3台虚拟机完成,root密码2wsx@WSX;主机的角色分配和规划如下:
地址 |
主机名 |
安装组件 |
角色 |
172.22.247.52 |
01.cdh.hadoop.csap |
HDFS, MR, Yarn, Hive, Hbase, Spark, Kafka |
NN, SNN,CM,RM |
172.22.247.54 |
02.cdh.hadoop.csap |
HDFS, MR, Yarn, Hive, Hbase, Spark, Kafka |
DN,AM |
172.22.247.56 |
03.cdh.hadoop.csap |
HDFS, MR, Yarn, Hive, Hbase, Spark, Kafka |
DN,AM |
访问界面
服务名称 |
地址 |
登录方式 |
Cloudera Manager |
http://172.22.247.52:7180 |
admin/yzg_cm |
元数据库
库名 |
用户 |
密码 |
备注 |
cm |
cm |
password |
Database of Cloudera Manager |
am |
am |
password |
Database of Application Manager |
rm |
rm |
password |
Database of Reports Manager |
安装准备
主机名
1. 修改/etc/sysconfig/network中的hostname选项
2. centos系统中使用vi /etc/hostname 修改主机名;
3. 在/etc/hosts中添加hostname对应的ip地址
4. 执行命令:hostname xxx,让修改的hostname立即(短暂性的)生效(重启也可以让hostname立即生效)
4. reboot now 重启主机
注意:
1. 修改hosts文件,vi /etc/hosts,一般不能去掉localhost,去掉后zookeeper等框架可能会出问题,如下:
2. 不能只修改/etc/sysconfig/network,而不修改/etc/hosts,因为有的组件使用java的InetAddress通过hostname来/etc/hosts取对应的ip,取不到会报UnknownHostException异常。
3. 重启网络服务(service network restart)对修改hostanme来说没有卵用;
修改hostname有几种方式?
1:hostname xxxx -- 运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改
2:echo xxxx > /proc/sys/kernel/hostname -- 运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改
3: sysctl kernel.hostname=xxxx -- 运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改
4:vi /etc/sysconfig/network下的HOSTNAME变量 -- 重启生效,永久性修改。
修改hosts映射
由于需要搭建集群,所以hosts内的需要配置其他节点主机的ip及对应的主机名映射关系,用于寻址:
禁用SElinux
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,是一个 Linux 内核模块,也是 Linux 的一个安全子系统,SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则),这里部署CDH需要将该服务关闭,避免不必要的报错,修改/etc/selinux/config文件如下:
SELINUX=disabled
SELINUXTYPE=targeted
集群时钟同步
1、所有机器安装ntp :yum -y install ntp
2、CM节点配置时钟与自己同步:vim /etc/ntp.conf,加入:
#server 0.rhel.pool.ntp.org iburst
#server 1.rhel.pool.ntp.org iburst
#server 2.rhel.pool.ntp.org iburst
#server 3.rhel.pool.ntp.org iburst
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
3、其他非CM节点,同步CM节点的时间,vim /etc/ntp.conf,加入:
#server 0.rhel.pool.ntp.org iburst
#server 1.rhel.pool.ntp.org iburst
#server 2.rhel.pool.ntp.org iburst
#server 3.rhel.pool.ntp.org iburst
server 172.22.247.52
4、重启所有机器的ntp服务
systemctl restart ntpd或者service ntpd restart
systemctl status ntpd或者service ntpd status
5、验证同步
所有节点执行ntpq –p,左边出现*号表示同步成功。
CM配置安装
配置mysql
在此次安装主机是centos 6系统,本地yum源没有mariaDB,因此安装mysql,安装mariaDB操作与mysql相同;
1、在172.22.247.52节点使用本地yum安装mysql:
yum -y install mysql
yum -y install mysql-server
2、启动并初始化(root密码是123456):
service mysqld start
/usr/bin/mysql_secure_installation
3、登录mysql并建库、建表:mysql -u root –p,根据需求创建相关的用户和数据库,以下sql几乎包含了所有的cloudera所需用户:
- 创建hive元数据库和用户
create database metastore default character set utf8;
CREATE USER 'hive'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON metastore. * TO 'hive'@'%';
FLUSH PRIVILEGES;
- 创建CM库和用户
create database cm default character set utf8;
CREATE USER 'cm'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON cm. * TO 'cm'@'%';
FLUSH PRIVILEGES;
- 创建AM库和用户
create database am default character set utf8;
CREATE USER 'am'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON am. * TO 'am'@'%';
FLUSH PRIVILEGES;
- 创建RM库和用户
create database rm default character set utf8;
CREATE USER 'rm'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON rm. * TO 'rm'@'%';
FLUSH PRIVILEGES;
- 其他:
create database hue default character set utf8;
CREATE USER 'hue'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON hue. * TO 'hue'@'%';
FLUSH PRIVILEGES;
create database oozie default character set utf8;
CREATE USER 'oozie'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON oozie. * TO 'oozie'@'%';
FLUSH PRIVILEGES;
create database sentry default character set utf8;
CREATE USER 'sentry'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON sentry. * TO 'sentry'@'%';
FLUSH PRIVILEGES;
create database nav_ms default character set utf8;
CREATE USER 'nav_ms'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nav_ms. * TO 'nav_ms'@'%';
FLUSH PRIVILEGES;
create database nav_as default character set utf8;
CREATE USER 'nav_as'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nav_as. * TO 'nav_as'@'%';
FLUSH PRIVILEGES;
安装Mysql驱动
mv mysql-connector-java.jar /usr/share/java/,其中jar包名字必须是mysql-connector-java.jar
配置httpd服务
配置172.22.247.52主机的http服务,目的是配置网络yum源,在CM配置CDH时候可以分发到其他主机;
yum -y install httpd
systemctl start httpd 或service httpd start
在浏览器输入ip地址,网页正常打开则说明安装成功:
制作CM的rpm元数据
将CM的系列rpm包和CDH的parcel包下载到本地,并上传172.22.247.52主机,CM的下载地址为:http://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5.7/RPMS/x86_64/
CDH的parcel相关包地址:http://archive.cloudera.com/cdh5/parcels/latest/
在172.22.247.52主机上创建两个目录,分别将CDH的parcel包和CM的rpm包copy到该目录:
mkdir /var/www/html/cdh506
mkdir /var/www/html/cm-5.7.0
在 /var/www/html/cm-5.7.0 目录下执行:createrepon .生成rpm元数据,并对/var/www/html下的所有目录和文件赋权:chmod -R 755 /var/www/html
配置Web服务器
通过http服务和CM的rpm元数据制作,可以在网页端进行yum源配置,制作Cloudera Manager的repo源,执行:vim /etc/yum.repos.d/cm.repo,加入一些配置项:
[cmrepo]
name = cm_repo
baseurl = http://172.22.247.52/cm-5.7.0
enable = true
gpgcheck = false
yum repolist验证是否成功,在web输入网址172.22.247.52/cm-5.7.0看是否可以访问(这里标题中CM是5.7版本,但rpm包时5.14版本,由于下载较慢直接拷贝5.14版本包):
如果以上都成功,则可以先安装一下CM的rpm包中的JDK,验证一下:
yum -y install oracle-j2sdk1.7-1.7.0+update67-1*
配置 CM Server
1、通过yum安装Cloudera Manager Server
yum -y install cloudera-manager-server的rpm包名称
2、 配置CM的元数据库:
/usr/share/cmf/schema/scm_prepare_database.sh mysql cm cm password
3、 启动Cloudera Manager Server
systemctl start cloudera-scm-server或service cloudera-scm-server start
4、 验证:
(1)netstat -lnpt | grep 7180 端口有运行
(2)查看日志:tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log 提示ScmActive completed successfully
(3)web查看172.22.247.52:7180是否可以访问
CDH安装
选择自定义存储库,输入cm的http地址:
继续完成安装;
问题
Centos 6.8系统由于缺少很多yum依赖,所以无法使用yum安装cloudera-manager-agent,使用centos 7.2系统可以;