hadoop2.9.2集群搭建

2020-04-14  本文已影响0人  小王_min

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不一致导致

上一篇 下一篇

猜你喜欢

热点阅读