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为自己主节点的主机名,需修改)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hostname:9000</value>
</property>
<!-- 新增加的配置 可以按需配置 -->
<!-- 设置hadoop默认临时目录-建议配置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:///home/yu/bigdata/hadoop/temp</value>
</property>
<!-- 流文件缓冲区大小,默认4096,可选 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!-- 如出现权限问题,则需要配置,以下三个中的yu需配置成自己的用户名 -->
<property>
<name>hadoop.proxyuser.yu.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.yu.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>yu</value>
</property>
</configuration>
c. 修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml,新增配置可以不配
<configuration>
<!-- 为namenode集群定义一个services name -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- 配置hdfs中副本个数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 配置hdfs中块大小 2.x版本后默认128M -->
<property>
<name>dfs.blocksize</name>
<value>64M</value>
</property>
<!-- 配置namenode的数据存放目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/用户名/bigdata/hadoop/data/nn</value>
</property>
<!-- 配置datanode的数据存放目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/用户名/bigdata/hadoop/data/dn</value>
</property>
<!-- 配置checkpoint的数据存放目录 -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///home/用户名/bigdata/hadoop/data/snn</value>
</property>
<!-- 配置edits的数据存放目录 -->
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:///home/用户名/bigdata/hadoop/data/snn</value>
</property>
<!-- 新增的配置 -->
<!-- WebHDFS Namenodes和Datanodes(REST API),可在web页对HDFS文件系统进行操作 -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!-- NN,JT等所使用的web tracker页面服务器所使用的用户和组 -->
<property>
<name>dfs.web.ugi</name>
<value>yu,yu</value>
</property>
<!-- 创建文件和目录使用umask值 默认为022,不建议修改为000-->
<property>
<name>fs.permissions.umask-mode</name>
<value>000</value>
</property>
<!-- 在HDFS中启用权限检查 TRUE|FALSE 默认为true,若出现权限问题可设置成false -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!-- 权限superusergroup组 -->
<property>
<name>dfs.permissions.superusergroup</name>
<value>yu</value>
</property>
<!-- 集群中满足正常配置的数据块比例 -->
<property>
<name>dfs.namenode.safemode.threshold-pct</name>
<value>0f</value>
</property>
<!-- NN尝试恢复之前失败的dfs.namenode.name.dir目录。在创建checkpoint是做此尝试。如果设置多个磁盘,建议允许 -->
<property>
<name>dfs.namenode.name.dir.restore</name>
<value>true</value>
</property>
<!-- 设置hdfs集群的超级管理员 -->
<property>
<name>dfs.cluster.administrators</name>
<value>*</value>
</property>
<!-- 设置secondary name node web 监听端口 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hostname:9001</value>
</property>
</configuration>
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
<configuration>
<!-- 指定运行mapreduce程序为yarn -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 新增加的配置 -->
<!-- 配置jobhistory服务器的地址 ip:端口 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hostname:10020</value>
</property>
<!-- 配置jobhistory服务器的weiui地址 ip:端口 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hostname:19888</value>
</property>
<!-- 配置在jobhistory服务器WebUI中最多显示多少条 -->
<property>
<name>mapreduce.jobhistory.joblist.cache.size</name>
<value>20000</value>
</property>
<!-- 配置jobhistory数据存放目录 -->
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/jobhistory/hadoop-yarn/staging</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
</property>
<!-- 设置是否开启小作业优化 -->
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
</configuration>
f. 修改$HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<!-- 配置resourcemanager的hostname -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hostname</value>
</property>
<!-- 配置resourcemanager的adress -->
<property>
<name>yarn.resourcemanager.address</name>
<value>hostname:18040</value>
</property>
<!-- 配置resourcemanager对AM暴露的地址 -->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hostname:18030</value>
</property>
<!-- RM对NM暴露地址,NM通过该地址向RM汇报心跳,领取任务 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hostname:18025</value>
</property>
<!-- 管理员可以通过该地址向RM发送管理命令等 -->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hostname:18141</value>
</property>
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定shuffle的类 -->
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- 中间结果存放位置,可配置多目录 -->
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>file:///home/用户名/bigdata/hadoop/data/nm</value>
</property>
<!-- 新增加的配置 -->
<!-- 日志聚合服务器URL -->
<property>
<name>yarn.log.server.url</name>
<value>http://hostname:19888/jobhistory/logs/</value>
</property>
<!-- 是否启用日志聚合。 日志收集聚合 每个容器的日志,这些日志移动到文件系统 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- Web应用程序代理服务器 需单独启动 yarn-daemon.sh -->
<property>
<name>yarn.web-proxy.address</name>
<value>hostname:20000</value>
</property>
<!-- 日志保存时间 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>-1</value>
</property>
<!-- 日志存放目录 -->
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/logs</value>
</property>
<!-- 是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
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不一致导致
网友评论