0. 搭建前准备
(1) Linux环境,本文以Ubuntu16.04为例(VMware中虚拟出的环境),并且以及做了ssh免密登录、主机名-ip映射以及固定ip操作
(2) Hadoop 2.9.2程序包
(3) JDK1.8+(Linux版)
1. 搭建前相关约束
(1) 所有的安装包以及第三方软件包都置于/opt/softwares
(2) 所有的软件的软链接都置于/opt/links
(3) 当前用户对/opt下的所有目录都有最高的权限,以防止出现权限不足的问题
(4) hostname为hadoop
2. 集群的搭建
(1) 解压jdk以及hadoop
tar -zxvf jdk-8u201-linux-x64.tar.gz -C /opt/softwares/
tar -zxvf hadoop-2.9.2.tar.gz -C /opt/softwares/
(2) 创建软链接
ln -sf /opt/softwares/jdk1.8.0_201 /opt/links/jdk
ln -sf /opt/softwares/hadoop-2.9.2 /opt/links/hadoop
(3) 配置环境变量 vi ~/.bashrc或者其他的三个配置文件,此步骤亦可不做,只是为了在任意路径下都可以执行环境变量中的可执行脚本,不过在执行时需要加上脚本的路径
###_JDK_CONF_###
export JAVA_HOME=/opt/links/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASS_PATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
###_HADOOP_CONF_###
export HADOOP_HOME=/opt/links/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 用于提交mr任务时以及访问hdfs集群时所用身份
export HADOOP_USER_NAME=yu
(4) 生效~/.bashrc文件
source ~/.bashrc
(5) 测试是否安装成功,若显示版本号则表示成功
java -version
hadoop version
(6) 配置hadoop环境
0) 创建存放hadoop hdfs数据目录
a. 存放hadoop hdfs数据目录
mkdir -p ~/bigdata/hadoop/data
b. 存放hadoop、yarn的pid(进程号)目录
mkdir -p ~/bigdata/hadoop/pid/hadoop
mkdir -p ~/bigdata/hadoop/pid/yarn
1) 单机(不做任何hadoop环境配置)
2) 伪分布
a. 修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh
第25行:export JAVA_HOME=/opt/links/jdk
第113行:export HADOOP_PID_DIR=/home/yu/bigdata/hadoop/pids/hadoop
(113行影响namenode、datanode以及secondarynamenode的pid文件存储位置)
b. 修改$HADOOP_HOME/etc/hadoop/core-site.xml(hostname为自己主节点的主机名,需修改)
fs.defaultFS
hdfs://hostname:9000
hadoop.tmp.dir
file:///home/yu/bigdata/hadoop/temp
io.file.buffer.size
4096
hadoop.proxyuser.yu.hosts
*
hadoop.proxyuser.yu.groups
*
hadoop.http.staticuser.user
yu
c. 修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml,新增配置可以不配
dfs.nameservices
ns1
dfs.replication
3
dfs.blocksize
64M
dfs.namenode.name.dir
file:///home/用户名/bigdata/hadoop/data/nn
dfs.datanode.data.dir
file:///home/用户名/bigdata/hadoop/data/dn
dfs.namenode.checkpoint.dir
file:///home/用户名/bigdata/hadoop/data/snn
dfs.namenode.checkpoint.edits.dir
file:///home/用户名/bigdata/hadoop/data/snn
dfs.webhdfs.enabled
true
dfs.web.ugi
yu,yu
fs.permissions.umask-mode
000
dfs.permissions.enabled
false
dfs.permissions.superusergroup
yu
dfs.namenode.safemode.threshold-pct
0f
dfs.namenode.name.dir.restore
true
dfs.cluster.administrators
*
dfs.namenode.secondary.http-address
hostname:9001
d. 复制$HADOOP_HOME/etc/hadoop/mapred-site.xml.template并改文件名为mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
e. 修改$HADOOP_HOME/etc/hadoop/mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
hostname:10020
mapreduce.jobhistory.webapp.address
hostname:19888
mapreduce.jobhistory.joblist.cache.size
20000
yarn.app.mapreduce.am.staging-dir
/jobhistory/hadoop-yarn/staging
mapreduce.jobhistory.intermediate-done-dir
${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate
mapreduce.jobhistory.done-dir
${yarn.app.mapreduce.am.staging-dir}/history/done
mapreduce.job.ubertask.enable
true
f. 修改$HADOOP_HOME/etc/hadoop/yarn-site.xml
yarn.resourcemanager.hostname
hostname
yarn.resourcemanager.address
hostname:18040
yarn.resourcemanager.scheduler.address
hostname:18030
yarn.resourcemanager.resource-tracker.address
hostname:18025
yarn.resourcemanager.admin.address
hostname:18141
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.auxservices.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
yarn.nodemanager.local-dirs
file:///home/用户名/bigdata/hadoop/data/nm
yarn.log.server.url
http://hostname:19888/jobhistory/logs/
yarn.log-aggregation-enable
true
yarn.web-proxy.address
hostname:20000
yarn.log-aggregation.retain-seconds
-1
yarn.nodemanager.remote-app-log-dir
/logs
yarn.nodemanager.pmem-check-enabled
false
yarn.nodemanager.vmem-check-enabled
false
g. 修改$HADOOP_HOME/etc/hadoop/yarn-env.sh,添加如下配置
# 设置yarn PID文件存储位置,影响NodeManager、ResourceManager PID文件存储
export YARN_PID_DIR=/home/yu/bigdata/hadoop/pids/yarn
h. 修改$HADOOP_HOME/etc/hadoop/mapred-env.sh
# 设置mapred PID PID文件存储位置,影响JobHistoryServer PID文件存储
第28行:export HADOOP_MAPRED_PID_DIR=/home/yu/bigdata/hadoop/pids/mr
3) 全分布
a. 将一个节点上的java、hadoop环境以及配置文件发送至其他机器
scp 源文件目录 用户名@hostname:目标目录
b. 步骤同伪分布
c. 修改$HADOOP_HOME/etc/hadoop/slaves文件,加入从节点的hostname,注意需要一行一个ip或者是hostname
hadoop02
hadoop03
hadoop04
(6) 格式化HDFS文件系统,若出现has been successfully formatted字样则说明格式化成功
hdfs namenode -format
(7) 启动集群
1) 启动/停止hdfs集群 (8/9一起启动命令:start-all.sh/stop-all.sh)
start-dfs.sh/stop-dfs.sh
2) 启动/停止snn(secondarynamenode)
hadoop-daemon.sh start/stop secondarynamenode
3) 启动/停止yarn集群
start-yarn.sh/stop-yarn.sh
4) 启动/停止jobhistory服务器
mr-jobhistory-daemon.sh start/stop historyserver
yarn-daemon.sh start/stop historyserver
5) 启动/停止WEB代理服务器
a. 作为守护进程启动(一般使用这种)
yarn-daemon.sh start proxyserver
b. 独立启动
yarn proxyserver
(8) 测试MR(计算圆周率pi)
hadoop jar /opt/hadoop-2.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.3.0.jar pi 20 10
(9) WEB访问
1) hdfs集群访问端口 50070
2) yarn集群访问端口 8088
(10) 所遇到的问题
1) namenode可以正常启动,datanode无法启动
a. 重新格式化
删除所有节点~/bigdata/hadoop/data目录下的所有文件
-> 重新执行 hadoop namenode -format
原因:namenode的VERSION中的clusterID与datanode中中的VERSION的clusterID不一致导致