手动安装CDH笔记

目录

手动安装CDH笔记

一、集群情况介绍

集群节点:dev16–dev21

  • 已安装的服务:
    1. ZooKeeper
    2. HDFS
    3. YARN
    4. LZO
    5. Hive
    6. HCatalog
    7. Hue
    8. Impala
    9. Presto
  • 准备安装的服务:
    1. Hue
    2. Flume

二、环境准备

1.使用puppet管理所有节点,并初始化环境

2.使用Ganglia监控集群性能变化

dev21节点作为监控服务节点,其他节点为被监控节点。

3.访问Ganglia监控Web界面

三、安装ZooKeeper

官方文档建议zookeeper-server应安装在奇数个节点上,最少三个

在每个节点执行如下命令:

分别在每个节点上执行如下命令,每个节点的myid值都应该是唯一的:

在每个节点上编辑zookeeper的配置文件zoo.cfg

在文件的最后添加如下内容:

启动zookeeper-server

测试zookeeper-server是否正常启动:

四、安装HDFS和YARN

dev16节点安装resource manager

dev16节点安装name node

resource manager节点之外的所有节点上安装node managerdatanodemapreduce

dev17节点安装historyserverproxyserver

在所有节点上安装hadoop-client

五、安装LZO

在所有节点下载lzo源文件并放到/etc/yum.repo.d目录下:

在所有节点安装hadoop-lzo

六、在集群中部署HDFS

1.复制Hadoop配置文件

复制hadoop的默认配置文件到指定目录:

设置alternatives指向新的配置目录:

2.自定义配置文件

编辑core-site.xml文件,加入如下内容:

编辑hdfs-site.xml文件,加入如下内容:

3.配置本地存储目录

在所有节点创建数据存储目录:

修改本地存储目录的所有者:

修改本地存储目录的读写权限:

namenode节点编辑hdfs-site.xml文件,加入如下内容:

datanode节点编辑hdfs-site.xml文件,加入如下内容:

4.设置DataNode节点允许本地存储目录的读写失败

默认情况下,单独dfs.datanode.data.dir的失败会使HDFS的datanode进程关闭,这会造成namenode对这个datanode上的每个block创建新的副本,最终会导致大量无用的block副本被存储在没发生故障的磁盘上。

可以通过对datanode的dfs.datanode.failed.volumes.tolerated进行设置来防止这种情况出现。

在所有datanode节点编辑hdfs-site.xml文件,加入如下内容:

复制配置文件到集群中所有节点:

5.格式化NameNode

namenode节点执行如下命令进行格式化:

6.启用回收站

默认情况下,回收站功能是关闭的,如需打开需要单独进行设置。

启用后,使用Hadoop shell进行文件删除时会将文件移动到该用户的.Trash目录中

在HDFS服务端的core-site.xml文件中加入如下内容:

单位为分钟,该设置代表回收站功能启动,并且会在24小时后删除回收站的内容

7.为DataNode节点设置存储均衡

DataNode默认会按照轮询的方式来写入新block的副本,可以通过设置容量选择策略来使DataNode知道磁盘的可用容量以便决定存储位置。

编辑hdfs-site.xml文件,加入如下内容进行设置:

8.启用WebHDFS

hdfs-site.xml中加入如下内容:

默认情况下,用户名的规则为:

改为如下规则可以在WebHDFS中启用数字用户名:

9.设置LZO

core-site.xml文件中加入如下内容:

10.启动HDFS

下面需要在集群中部署配置文件,在dev16上执行如下命令:

在所有节点上启动HDFS:

在HDFS中创建/tmp文件夹:

修改/tmp目录的权限:

查看HDFS中文件信息:

通过Web界面查看HDFS的详细信息:

七、在集群中部署MapReduce v2(YARN)

1.配置YARN的参数

修改mapred-site.xml文件,并加入如下内容:

2.配置YARN的后台驻留程序:

修改yarn-site.xml文件,并加入如下内容:

需要在集群中所有节点创建yarn配置文件中设置的目录:

修改目录的所有者:

3.配置History Server

mapred-site.xml中加入如下内容:

core-site.xml中加入如下内容:

4.配置Staging目录

mapred-site.xml文件中加入如下内容:

当HDFS正常启动后,可以手动在HDFS中创建该目录

5.将修改后的配置文件部署到整个集群

复制配置文件目录到集群中的其他节点:

6.在集群中的每个节点启动HDFS

7.如果HDFS中没有/tmp目录,需要手动创建

在HDFS中创建/tmp文件夹:

修改/tmp目录的权限:

查看HDFS中的文件信息:

8.创建history目录并设置权限

通过如下命令创建history并设置正确的权限:

9.在HDFS中创建log目录

在HDFS中创建/var/log/hadoop-yarn目录并设置所有者:

10.查看HDFS中的目录结构

执行如下命令:

可以看到输出的结果为:

11.启动YARN和MapReduce JobHistory Server

要启动YARN,需要先启动ResourceManagerNodeManager服务。

dev16节点上启动ResourceManager服务:

在所有DataNode节点上启动NodeManager服务:

dev17节点启动JobHistory服务:

12.给每一个MapReduce用户创建该用户的home目录:

在NameNode节点给每一个需要使用MapReduce的用户创建各自的目录(下述命令中的代表Linux系统中的用户名):

13.CDH的启动顺序

CDH需要按照固定顺序启动或停止服务,以保证所有服务都能正常运行或关闭。

顺序 服务名称
1 ZooKeeper
2 HDFS
3 HttpFS
4 YARN
5 HBase
6 Hive
7 Oozie
8 Flume
9 Sqoop
10 Hue

14.设置开机启动

暂时保留

15.提高性能

a.禁用Transparent Hugepage Compaction

大部分被CDH 5支持的Linux平台都包含了一个特性,叫做Transparent Hugepage Compaction,这个特性会降低Hadoop的工作负载,并且会显著的降低性能。

症状 :使用top等监控工具会发现system CPU使用占很大的百分比,如果system CPU的使用超过30%或更多,你很可能就遇到了这个问题。

解决办法 :

查看transparent hugepage compaction是否被启用,如果显示[always],则表示该特性已被启用:

要禁用transparent hugepage compaction,需要将如下命令添加到/etc/rc.local文件中:

如果在命令行中执行这条指令,则会立即生效,但重启之后会恢复到默认状态。

在集群中执行如下命令:

b.设置Linux内核参数vm.swappiness

Linux内核参数vm.swappiness用来控制将内存页面写入硬盘的频繁程度。它的值可以设置为0-100,值越高意味着内核会越主动的寻找不活跃的内存页面并将它们写入硬盘。

可以通过如下命令来查看vm.swappiness当前的值:

在大多数系统中,vm.swappiness的默认值为60,这样设置并不适用于Hadoop集群节点,因为这可能导致进程在还有剩余内存时就开始swap,这会影响系统的稳定性和性能。

建议将vm.swappiness的值设置为0:

c.提高Shuffle Handler和IFile Reader的性能

Shuffle Handler

你可以通过启用shuffle readahead来提高Mapreduce的Shuffle Handler的性能,这会使TaskTrackerNodeManager在将map的输出通过socket传递给reducer之前提前获得输出的内容。

为了在YARN中启用这个特性,需要将mapreduce.shuffle.manage.os.cache的值设置为true,为了更好的调试性能,可以对mapreduce.shuffle.readahead.bytes的值进行调整,该值默认为4MB。

IFile Reader

启用IFile readahead来提高merge操作的性能,为启用这个特性需要将mapreduce.ifile.readahead的值设置为true,为了更好的调试性能,可以对mapreduce.ifile.readahead.bytes的值进行调整,该值默认为4MB。

在实际使用中发现如果将值设置为4MB会导致nodemanager无法启动,故从设置项中去除

d.MapReduce配置的最佳实践

这些在mapred-site.xml文件中的配置可以减少MapReduce在执行时的内部等待时间。

task结束时尽可能快的发送心跳

设置mapreduce.tasktracker.outofband.heartbeattrue可以使TaskTracker在task完成后发送心跳,以便减少等待时间,该参数的默认值为false

mapred-site.xml中加入如下内容:

在单节点系统中减少JobClient状态报告的间隔时间

jobclient.progress.monitor.poll.interval定义了以微秒为单位的JobClient状态报告时间,默认值为1000微秒,在单节点系统中可以将该值调小以便加快系统响应,但在大型生产环境集群中调小这个值将会导致服务器和客户端之间的网络堵塞。

调节JobTracker的心跳周期

调小TaskTrackerJobTracker的最小心跳时间会在小型集群中提高MapReduce的性能。

立即启动MapReduce的JVM

mapred.reduce.slowstart.completed.maps属性定义了在一个jobMap task必须先于Reduce task执行完成的比例。在一些小任务中需要快速响应,将这个值设置为0会提高性能,较大的值(比如50%)更适合大型的任务。

e.HDFS配置的最佳实践

本节提到的内容均在hdfs-site.xml文件中进行配置。

提高本地读的性能

本地读(local reads)也被称为短路读(short-circuit local reads),这个属性对HBase和Impala来说都可以提高读取数据的速度。

f.部署修改后的配置文件并重启所有服务

部署修改后的配置文件:

重启所有服务:

八、CDH中使用的Hadoop用户

Project User Group Comment
Apache Flume flume flume This user must have write privileges in HDFS.
Apache HBase hbase hbase
HDFS hdfs hdfs
Apache Hive hive hive

九、安装Crunch

在所有节点上安装Crunch:

十、安装Flume

在所有节点安装flume相关的软件包:

复制flume的配置文件:

复制flume配置文件到集群的其他节点:

验证安装是否成功:

启动、停止、重启Flume的命令:

十一、安装HBase

1.安装HBase的软件包

dev16节点上安装hbase:

查看已经安装的hbase相关文件:

2.配置HBase

a. 使用DNS来进行节点间的访问
b.使用NTP来同步时间(Network Time Protocol)
c.增大用户打开文件数量的上限
d.设置HDFS可同时打开的文件数量上限

/etc/hadoop/conf.dev/hdfs-site.xml中加入如下内容:

将修改后的hdfs-site.xml文件分发到所有节点:

重启所有节点的HDFS服务:

3.在独立运行模式下启动HBase

dev16节点安装HBase Master:

启动HBase Master:

4.安装并启动HBase Thrift Server

dev16节点安装Thrift:

启动hbase-thrift:

5.安装并配置REST

dev16节点安装REST:

启动hbase-rest:

REST默认使用8080端口,有可能与其他服务使用的端口发生冲突,如果希望使用其他端口,需要对hbase-site.xml进行修改,加入如下内容:

6.配置HBase为伪分布模式

先停止之前启动的hbase-master

a.修改HBase的配置

hbase-site.xml文件中加入如下内容:

b.在HDFS中创建/hbase目录

在启动hbase-master之前要先在HDFS中创建/hbase目录,HBase Master使用hbase权限运行,没有权限创建顶级目录,所以需要手动进行创建:

c.为HBase的伪分布模式启动相关服务
a) 安装并启动ZooKeeper:

内容见安装ZooKeeper

b) 启动HBase Master:

c) 安装并启动HBase RegionServer:

安装hbase-regionserver

启动hbase-regionserver

d.验证伪分布模式的操作

使用jps命令来查看已经启动的服务:

e.安装并启动HBase Thrift Server

Thrift可以与region server一起运行,但是不应该与NameNode和JobTracker一起运行。

安装hbase-thrift

启动hbase-thrift:

7.在集群中部署HBase

a.选择在什么地方部署HBase的进程

在小型集群中,可将HBase Master与NameNode和JobTracker放在同一个节点,该节点作为HBase的主节点,集群中的其他已经安装DataNode和TaskTracker的节点作为HBase的slave节点,在slave节点上安装RegionServer。

b.配置分布式集群

在所有安装了DataNode的节点上安装RegionServer、Thrift和REST:

将HBase的配置文件部署到所有节点:

在所有slave节点启动RegionServerThriftREST

通过HBase Master的Web页面查看HBase的集群运行情况,在浏览器中打开http://dev16:60010,可以看到所有Slave节点已经被识别。

十二、安装HCatalog

1.安装WebHCat REST Server

dev16节点安装WebHCat REST Server:

在所有节点上安装hcatalog:

hive-site.xml文件中加入如下内容:

hive-site.xml文件部署到所有安装了hcatalog的节点:

启动和停止WebHCat REST Server

十三、安装Hive

1.安装Hive

Hive可以安装在独立的服务器上,不是必须安装在Hadoop集群中。如果需要使用HCatalog,则需要单独安装。

dev16节点安装Hive相关的软件包:

2.配置Metastore Database

a.安装并启动MySQL

dev17节点安装MySQL:

修改/etc/my.cnf

启动mysql-server

b.配置MySQL服务和连接器

dev17节点安装MySQL connector:

设置软链接到hive目录:

设置MySQL的root密码:

设置MySQL开机启动:

查看设置结果:

创建数据库和用户:

创建MySQL的hive用户,并设置用户权限:

设置Metastore服务连接MySQL数据库:

修改/etc/hive/conf/hive-site.xml文件,加入如下内容:

c.配置HiveServer2
a) 配置表锁管理器

修改/etc/hive/conf/hive-site.xml文件,加入如下内容:

d.为YARN配置HiveServer2

需要在/etc/default/hive-server2文件中设置HADOOP_MAPRED_HOME环境变量:

e.启动Metastore

在remote模式中,需要在HiveServer2之前启动metastore。

启动metastore

f.设置文件权限

Hive的数据存储在HDFS中,默认情况下存储在/user/hive/warehouse文件夹中,如果/user/hive/user/hive/warehouse文件夹不存在则需要手动创建。

查看HDFS中Hive的warehouse文件夹信息:

g.启动、停止和使用HiveServer2

启动HiveServer2

验证HiveServer2是否已经正常启动:

h.在客户端安装Hive JDBC

安装hive-jdbc

/usr/lib/hive/lib/*.jar/usr/lib/hadoop/*.jar添加至classpath。

i.设置HADOOP_MAPRED_HOME

十四、安装Impala

Impala由以下几部分组成:

  • impalad -基于HDFS和HBase的数据进行查询的计划和执行。安装在集群中每个datanode节点上。
  • statestored –
  • catalogd –
  • impala-shell –

1.安装Impala的相关软件包

在安装Impala之前,确保Hive已经安装完成,并在/etc/hive/conf/hive-site.xml文件中已加入如下内容:

建议不要再NameNode节点安装Impala,否则可能会出现内存竞争等问题。

在所有DataNode节点安装Impala:

在包括NameNode节点的所有节点安装impala-shell:

2.配置Impala

a.配置短路读:

dev16节点中修改/etc/hadoop/conf/hdfs-site.xml文件,加入如下内容:

修改/var/run/hadoop-hdfs文件夹的权限为775,所属组为root:

b.配置Block位置追踪

为了启动Block位置追踪,需要在hdfs-site.xml中添加如下内容:

/etc/hadoop/conf/hdfs-site.xml文件分发到集群中的其他节点:

复制hive-site.xmlcore-site.xmlhdfs-site.xml到Impala的配置文件目录/etc/impala/conf

重启所有的DataNode服务:

配置Impala启动项:

修改impala所有节点中的/etc/default/impala文件,指定impala-catalogimpala-state-store的服务器名称:

3.启动Impala

dev16节点启动impala-state-store

dev16节点启动impala-catalog

在所有DataNode节点启动impala-server

4.使用impala-shell

十五、安装HttpFS

1.安装HttpFS

dev16节点安装HttpFS:

2.配置HttpFS

文件类型 安装位置
二进制文件 /usr/lib/hadoop-httpfs
配置文件 /etc/hadoop-httpfs/conf
文档 /usr/share/doc/packages/hadoop-httpfs
数据 /var/lib/hadoop-httpfs
日志 /var/log/hadoop-httpfs
临时文件 /var/tmp/hadoop-httpfs
pid文件 /var/run/hadoop-httpfs

编辑core-site.xml文件并加入如下内容:

复制配置文件到集群中的其他节点:

重启HDFS:

3.启动HttpFS

启动HttpFS:

HttpFS默认使用14000端口,调用的URL如下:

使用curl调用HttpFS服务:

十六、安装Oozie

1.安装Oozie的软件包

dev16节点安装Oozie Server:

在其他DataNode节点安装Oozie Client:

2.配置Oozie

安装Oozie后,Oozie Server会在系统中创建所有配置文件、文档和运行时文件。

文件类型 文件位置
二进制文件 /usr/lib/oozie
配置文件 /etc/oozie/conf
文档 /usr/share/doc/oozie
示例 tar.gz /usr/share/doc/oozie
sharelib tar.gz /usr/lib/oozie
数据 /var/lib/oozie
日志 /var/log/oozie
临时文件 /var/tmp/oozie
pid文件 /var/run/oozie

3.配置Oozie使用MySQL数据库

在安装Hive过程中已经在dev17节点安装过mysql服务,可以直接使用dev17的MySQL。

dev17节点登录MySQL,并创建Oozie数据库:

修改oozie-site.xml文件,并加入如下内容:

拷贝或者软链接MySQL JDBC驱动的jar包到/var/lib/oozie/目录

4.创建Oozie的数据库表

oozie用户的身份执行Oozie的数据库工具:

十六、安装Hue

1.安装Hue的安装包

dev16节点安装hue:

2.Hue的依赖关系:

组件 是否必须 应用程序
HDFS Yes Core,File Browser
MapReduce No Job Browser, Job Designer, Oozie, Hive Editor, Pig, Sqoop
YARN No Job Browser, Job Designer, Oozie, Hive Editor, Pig, Sqoop
Oozie Yes Job Designer, Oozie Editor/Dashboard
Hive Yes Hive Editor, Metastore Tables
Impala No Impala Editor, Metastore Tables
HBase No HBase Browser
Pig No Pig Editor, Oozie
Search No Solr Search
Spark No Spark
Sqoop No Oozie
Sqoop 2 No Sqoop Transfer
ZooKeeper No ZooKeeper

3.为Hue配置CDH组件

a.配置WebHDFS或HttpFS

WebHDFS和HttpFS都使用HTTP REST API,所以这两种方式都可以使用,但是Hue必须被配置成其中一种方式。如果想使用HDFS的HA(高可用),则必须使用HttpFS。

1.配置WebHDFS时要做如下设置:

为使NameNode和DataNode中启用WebHDFS,需要在所有节点的hdfs-site.xml文件中加入如下内容:

重启所有HDFS服务:

2.配置Hue为所有其他用户和组的代理用户,意味着hue可以代表所有其他用户提交请求:

WebHDFS:在core-site.xml文件中加入如下内容:

HttpFS:确定/etc/hadoop-httpfs/conf/httpfs-site.xml已添加以下内容:

内容添加后需要重启HttpFS后台服务。

3.确定core-site.xml文件中包含如下内容:

添加后重启Hadoop。

4.使用root权限修改hue.ini文件中的hadoop.hdfs_clusters.default.webhdfs_url属性指向WebHDFS或HttpFS。

WebHDFS

HttpFS

十七、安装Presto

1.环境依赖

  • Linux or Mac OS X
  • Java 7, 64 bit
  • Python 2.4+

2.安装Presto

将Presto的压缩包下载至dev16节点的/opt文件夹下:

解压Presto压缩包:

/var文件夹中创建Presto的数据存储目录,用于存储日志、本地元数据等:

在presto的安装目录中创建etc目录,etc目录用来存储Presto的配置信息,如:Node Properties,JVM Config,Config Properties,Catalog Properties等:

etc目录中创建etc/node.properties文件,并加入如下内容:

node.id在每个节点上都应保持唯一

etc目录下创建etc/jvm.config文件,并加入如下内容:

etc目录中创建config.properties文件,此文件定义了节点的角色,可以配置为Presto的coordinator,也可以配置为worker。

配置为coordinator时的文件内容如下,保存为config.properties

配置为worker时的文件内容如下,保存为config.properties

etc目录中创建log.properties文件,并加入如下内容:

etc目录中创建catalog文件夹:

etc/catalog目录中创建jmx.properties文件,并加入如下内容:

etc/catalog目录中创建hive.properties文件,并加入如下内容:

将presto的安装目录部署到其他节点上:

删除所有worker节点上的coordinator配置文件:

将所有worker节点上的配置文件config.properties_worker更名为config.properties

3.安装Discovery Server

下载Discovery的安装包至dev16节点的/opt目录:

解压discovery-server-1.16.tar.gz

创建Discovery的data目录:

在Discovery的安装目录中创建etc目录:

etc目录中创建node.properties文件,并加入如下内容:

需要注意的是node.id应为唯一的值

etc目录中创建jvm.config文件,并加入如下内容:

etc目录中创建config.properties文件,并加入如下内容:

dev16节点启动Discovery Server:

在所有节点启动Presto:

4.使用命令行访问Presto

dev16节点下载Presto的命令行工具至/opt/presto-server-0.70/bin目录:

将jar包更名为presto:

设置presto的权限为可执行:

运行presto命令行工具:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

文章导航