文章目录
Hadoop 全家桶分布式搭建
先安装JDK
解压安装包后配置环境变量
# JDK env
JAVA_HOME=/root/app/jdk/jdk1.8.0_144
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
export CLASSPATH
export PATH
先明确对应的分布式节点的功能与角色
笔者的节点部署
name | address |
---|---|
hdmaster | 192.168.175.11 |
hdslave1 | 192.168.175.12 |
hdslave2 | 192.168.175.13 |
hdslave3 | 192.168.175.14 |
hdmaster | hdslave1 | hdslave2 | hdslave3 | |
---|---|---|---|---|
Namenode | ● | ● | ||
Datanode | ● | ● | ● | ● |
ResourceManager | ● | ● | ||
NM | ● | ● | ● | ● |
Zookeeper | ● | ● | ● | |
JournalNode | ● | ● | ● | |
zkfc | ● | ● | ||
HBase | ● | ●(Master) | ● | ●(BackupMaster) |
Hive(MySQL) | ● | |||
Spark & Scala | ● | ● | ● | |
Flume | ● | |||
Sqoop | ● | ● | ● | ● |
Hadoop 本体分布式安装
Hadoop的核心配置文件存放于etc/hadoop/
下
请首先在
etc/hadoop/hadoop-env.sh
中指定JAVA_HOME
的环境变量
安装包解压完毕之后需要修改以下几份核心配置文件
core-site.xml # 控制核心配置相关
hdfs-site.xml # 控制 HDFS 文件系统配置相关
mapred-site.xml # 控制 MapReduce 配置相关
yarn-site.xml # 控制 YARN 资源管理器配置相关
core-site.xml
配置
fs.defaultFS
文件系统的地址,以协议名hdfs://<servicename>
指定HDFS服务名
示例:hdfs://hdmx1
fs.defaultFS
必须设置正确,否则NameNode
将无法访问
hadoop.tmp.dir
Hadoop用于储存临时文件的目录位置
示例:/root/appcache/hddt/hdtmp
ha.zookeeper.quorum
指定Zookeeper集群的地址
示例:hdmaster:2181, ...
ha.zookeeper.session-timeout.ms
指定ZFKC的切换超时
示例:5000
hdfs-site.xml
配置
dfs.replication
文件系统的数据副本数
示例:1
dfs.namenode.name.dir
指定NameNode的Name Table(fsimage)的存放位置,使用逗号可以分隔开多个冗余存放地址
示例:/root/appcache/hddt/dfs/name
dfs.datanode.data.dir
指定DataNode的数据块存放地址,使用逗号可以分隔开多个数据块存放地址
示例:/root/appcache/hddt/dfs/data
dfs.webhdfs.enabled
指定是否启用Web HDFS(REST API)
示例:true
dfs.nameservices
指定文件系统服务名
示例: hdmx1
这里的服务名必须与
core-site.xml
中的fs.defaultFS
的参数一致
dfs.ha.namenodes.<dfs.nameservices>
指定分布式下的NameNode的名称
示例:nn1, nn2
dfs.namenode.http-address.<dfs.nameservices>.<dfs.ha.namenodes.<dfs.nameservices>>
指定对应NameNode的http通信地址
示例:hdmaster:50070
dfs.namenode.rpc-address.<dfs.nameservices>.<dfs.ha.namenodes.<dfs.nameservices>>
指定对应NameNode的rpc通信地址
示例:hdmaster:9000
这里的所有服务名称必须一一对应
例如:<!--这里的nameservices为hdmx1--> <name>dfs.nameservices</name> <value>hdmx1</value> <!--这里的nameservices也必须为hdmx1--> <name>dfs.ha.namenodes.hdmx1</name> <value>nn1, nn2</value> <!--这里的namenode也必须对应上面的参数nn1--> <name>dfs.namenode.rpc-address.hdmx1.nn1</name> <value>hdmaster:9000</value>
dfs.namenode.shared.edits.dir
用于多节点进行通信同步其状态的分布文件系统根目录,这里示例填写了HDFS
示例:qjournal://hdmaster:8485, .../hdmx1
dfs.journalnode.edits.dir
用于存放EditsLog的地址
示例:/root/appcache/hddt/jndt
dfs.ha.automatic-failover.enabled
控制冗余节点自动切换功能的开关
示例:true
dfs.client.failover.proxy.provider.<dfs.nameservices>
指定冗余节点自动切换功能的代理
示例:org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
指定服务隔离的方式
示例:
sshfence
shell</bin/true>
dfs.ha.fencing.ssh.private-key-files
指定用于ssh验证的私钥文件
示例:/root/.ssh/id_rsa
mapred-site.xml
配置
mapreduce.framework.name
MapReduce作业时的运行框架
示例:yarn
mapreduce.jobhistory.address
MapReduce任务历史服务器的地址
示例:hdmaster:10020
mapreduce.jobhistory.webapp.address
MapReduce任务历史服务器的Web UI地址
示例:hdmaster:19888
yarn-site.xml
配置
yarn.resourcemanager.ha.enabled
YARN资源管理器的开关
示例:true
yarn.resourcemanager.cluster-id
YARN资源管理器的集群ID
示例:yarnid
yarn.resourcemanager.ha.rm-ids
YARN资源管理器的节点名
示例:rm1, rm2
yarn.resourcemanager.hostname.<yarn.resourcemanager.ha.rm-ids>
YARN资源管理器的节点主机名
示例:hdslave2
这里的节点名必须一一对应,
yarn.resourcemanager.ha.rm-ids
里面写了什么就要写什么
yarn.resourcemanager.zk-address
YARN资源管理器的Zookeeper集群地址
示例:hdmaster:2181, ...
yarn.nodemanager.aux-services
YARN的NodeManager运行的服务名称
示例:(若要运行MapReduce的话请设置为)mapreduce_shuffle
yarn.log-aggregation-enable
YARN日志聚合
示例:true
yarn.resourcemanager.recovery.enabled
打开这个选项后会将正在YARN上运行的应用的状态信息保存到下面一项的参数中
示例:true
yarn.resourcemanager.store.class
用于储存RM Recovery的信息的接口
示例:org.apache.hadoop.yarn.server.resoucemanager.recovery.ZKRMStateStore
注意下面这两项配置必须设置,否则NodeManage可能启动不了
yarn.nodemanager.resouce.memory-mb
设置为1024
或更高
yarn.nodemanager.resource.cpu-vcores
设置为1
或更高
slaves
配置
请在这个文件里面写入你的集群节点名单,无论运行的是DataNode
还是NameNode
还是其他服务,一个节点地址一行
ZooKeeper 安装
安装包解压完毕后首先配置环境变量
# Zookeeper env
ZOOKEEPER_HOME=/root/app/zook/zookeeper-3.4.5
PATH=$PATH:$ZOOKEEPER_HOME/bin
export ZOOKEEPER_HOME
export PATH
ZooKeeper 的配置
ZooKeeper的配置文件存放于conf/
下
将ZooKeeper的配置文件模板
zoo_sample.cfg
重命名为zoo.cfg
再进行编辑
tickTime
ZooKeeper内部计时的基本单位Tick的基数,单位为毫秒
n Tick 等于 n * tickTime (ms)
initLimit
ZooKeeper集群初始化的耗时限制,需要根据集群中的节点数量来增加这个数值,因为更多的节点选举需要花费更多的时间,单位为 Tick
syncLimit
ZooKeeper集群中节点通信的超时时间,配置时应该考虑集群内网络通信的延时,单位为 Tick
dataDir
ZooKeeper集群的内存数据库快照存放地址,如果dataLogDir
没有指定,将会默认存放到与此参数同一地址下
dataLogDir
ZooKeeper集群的事务日志存放地址,建议与上面的dataDir
分开存放
clientPort
客户端端口
peerType
节点类型,可以指定为observer
,用于跨数据中心部署ZooKeeper节点的集群网络性能优化
需要在配置文件的末尾添加ZooKeeper集群节点的地址信息,格式如下
server.<id [1 - 255]>=<hostName>:<tickPort>:<electionPort>:[observer]
其中server.id
为固定写法,id
为1 - 255的数字,不能重复
<hostName>
为主机名,<tickPort>
为心跳汇报端口,<electionPort>
为选举端口
注意ZooKeeper的集群节点数量推荐为奇数台,否则将会出现脑裂现象导致集群服务不可靠甚至不可用
示例:
server.1=hdmaster:2888:3888
server.2=hdslave1:2888:3888
server.3=hdslave2:2888:3888
server.4=hdslave3:2888:3888:observer # 这里设置为observer模式,所以并不会导致集群出现脑裂
完成配置之后到每一个节点的dataDir
下创建一个myid
文件并且往里面写入该节点的serverID
Hive 安装
安装包解压完毕后首先配置环境变量
# Hive env
HIVE_HOME=/root/app/hive/apache-hive-2.3.5-bin
PATH=$PATH:$HIVE_HOME/bin
export HIVE_HOME
export PATH
Hive 配置
Hive的配置文件存放于conf/
下
首先创建
hive-site.xml
,因为这个配置文件本来不存在与conf/
中
hive-site.xml
配置
javax.jdo.option.ConnectionURL
jdbc驱动数据库的链接字符串
示例:jdbc:mysql://localhost:3306/hivedb?createDatabaseIfNotExist=true
如果MySQL服务于Hive运行于同一节点请使用
localhost
作为主机名
javax.jdo.option.ConnectionDriverName
指定jdbc的驱动名
示例:com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
连接数据库的用户名
示例:root
javax.jdo.option.ConnectionPassword
连接数据库的密码
示例:123456AbCd@!
注意要把MySQL的驱动放到Hive的
conf/
目录下
Flume 安装
Flume的配置文件存放于conf/
将Flume的配置文件模板
flume-env.sh.template
重命名或者重定向到为flume.env.sh
进行配置
安装包解压完毕后首先配置环境变量
# Flume env
FLUME_HOME=/root/app/flume/apache-flume-1.6.0-bin
PATH=$PATH:$FLUME_HOME
export FLUME_HOME
export PATH
flume-env.sh
配置
此配置文件仅用于Flume的环境变量配置,主要是设定JVM的运行参数
必须设定的参数为JAVA_HOME
的环境变量,其他参数可自行根据需要设定
示例:
export JAVA_HOME=/root/app/jdk/jdk1.8.0_144
HBase 安装
安装包解压完毕后首先配置环境变量
# HBase env
HBASE_HOME=/root/app/hbase/hbase-1.2.3
PATH=$PATH:$HBASE_HOME/bin
export HBASE_HOME
export PATH
HBase的配置文件存放于conf/
中
hbase-env.sh
配置
此配置文件仅用于HBase的环境变量配置,主要是设定JVM的运行参数
必须设定的参数为JAVA_HOME
的环境变量,其他参数可自行根据需要设定
示例:
export JAVA_HOME=/root/app/jdk/jdk1.8.0_144
若你的集群使用的是外部ZooKeeper,请将
HBASE_MANAGES_ZK
指定为false,否则HBase将会默认使用内建的ZooKeeper服务
hbase-site.xml
配置
hbase.rootdir
指定HBase的数据存放目录,这里可以填写物理地址或者HA集群的HDFS文件系统地址
示例:hdfs://hdmx1/hbase
habse.cluster.distributed
控制HBase是否启用分布式部署的开关,设置为false即可指定HBase运行在单节点模式(Standalone)
示例:true
hbase.zookeeper.quorum
指定Zookeeper的集群节点地址,使用,
逗号分隔
示例:hdmastser:2181, ...
regionservers
配置
请在这个文件中指定HBase集群节点的地址,一行一个地址
backup-masters
配置
该文件不存在,请首先手动创建
该文件可以指定一个或者多个备用master
节点的地址,一行一个地址
core-site.xml
与 hdfs-site.xml
请将同一个Hadoop集群部署中的这两个文件放到HBase的配置文件目录中
Sqoop 安装
Sqoop的配置文件存放于conf/
安装包解压完毕后首先配置环境变量
# Sqoop env
SQOOP_HOME=/root/app/sqoop/sqoop-1.4.7.bin__hadoop-2.6.0
PATH=$PATH:$SQOOP_HOME/bin
export SQOOP_HOME
export PATH
sqoop-env.sh
配置
将Sqoop的配置文件模板
sqoop-env-template.sh
重命名或者重定向到为sqoop-env.sh
进行配置
这一个.sh
文件用于指定其所需组件的路径
HADOOP_COMMON_HOME
指定Hadoop的目录所在位置
示例:/root/app/hadoop/hadoop-2.6.0
HADOOP_MAPRED_HOME
指定Hadoop的MapReduce目录的所在位置
示例:/root/app/hadoop/hadoop-2.6.0
HBASE_HOME
指定HBase的目录所在位置
示例:/root/app/hbase/hbase-1.2.3/bin/hbase
HIVE_HOME
指定Hive的目录的所在位置
示例:/root/app/hive/apache-hive-2.3.5-bin
ZOOCFGDIR
指定ZooKeeper的配置文件夹所在位置
示例:/root/app/zook/zookeeper-3.4.5/conf
MySQL驱动
请将MySQL的数据库驱动放置到
lib/
下
Kafka 安装
Kafka的配置文件存放于config/
下
server.properties
配置
broker.id
当前节点在Kafka集群中的唯一标识
示例:0
确保这个id是整个集群里唯一的
num.network.threads
当前节点的网络通信的线程数
示例:3
num.io.threads
当前节点的用于磁盘I/O的线程数
示例:8
socket.send.buffer.bytes
数据发送的缓冲区大小,单位Byte
示例:102400
socket.receive.buffer.bytes
数据接收的缓冲区大小,单位Byte
示例:102400
socket.request.max.bytes
服务器接受的请求的大小上限
示例:104857600
log.dirs
存放事务日志的地址,若有多个请使用,
逗号来分隔
示例:/tmp/kafka-logs
num.partitions
指定分区数,一个topic一个分区
示例:1
log.retention.hours
事务日志持久化的最大时间,单位小时
示例:168
log.segment.bytes
事务日志分块的大小上限,若一个分块达到这个上限,Kafka将会创建一个新的分块来记录日志,单位Byte
示例:1073741824
log.retention.check.interval.ms
Kafka检测事务日志是否失效的时间间隔,单位毫秒
示例:300000
zookeeper.connect
ZooKeeper节点的连接地址,使用逗号分隔
示例:hdmaster:2181, ...
zookeeper.connection.timeout.ms
连接ZooKeeper的连接超时时间,单位毫秒
示例:6000
consumer.properties
配置
bootstrap.servers
用于发现集群中其他Kafka节点的地址,建议填写任意两个或以上
示例:hdmaster:9092, ...
group.id
Kafka集群id
示例:clsid
producer.properties
配置
bootstrap.servers
用于发现集群中其他Kafka节点的地址,建议填写任意两个或以上
示例:hdmaster:9092, ...
compression.type
产生数据的压缩编码格式,可选none
, gzip
, snappy
, lz4
示例:gzip
Spark 安装
在安装Spark之前请先安装Scala
Spark的配置文件存放于conf/
下
spark-env.sh
配置
将Spark的配置文件模板
spark-env.sh.template
重命名或者重定向到为spark-env.sh
进行配置
JAVA_HOME
指定JAVA所在的目录
示例:/root/app/jdk/jdk1.8.0_144
SCALA_HOME
指定Scala所在的目录
示例:/root/app/scala/scala-2.11.8
HADOOP_HOME
指定Hadoop所在的目录
示例:/root/app/hadoop/hadoop-2.6.0
HADOOP_CONF_DIR
指定Hadoop配置文件所在的目录
示例:/root/app/hadoop/hadoop-2.6.0/etc/hadoop
SPARK_DAEMON_MEMORY
指定Spark的工作内存
示例:512m
SPARK_WROKER_CORES
指定Spark的工作核心数
示例:1
SPARK_DAEMON_JAVA_OPTS
指定Spark的JVM参数行
示例:-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hdmaster:2181,hdslave1:2181,hdslave2:2181,hdslave3:2181 -Dspark.deploy.zookeeper.dir=/spark
-Dspark.deploy.recoveryMode
指的是FailControl的恢复方式
-Dspark.deploy.zookeeper.url
指的是ZooKeeper集群的连接地址
-Dspark.deploy.zookeeper.dir
指的是ZooKeeper保存Spark数据的位置
slaves
的配置
请在该文件下填入集群节点的地址,一行一个