Hadoop 安装及目录结构

优质博文IT-BLOG-CN

一、准备工作

【1】创建用户: useradd用户名

【2】配置创建的用户具有root权限,修改/etc/sudoers文件,找到下面一行,在root下面添加一行,如下所示:(注意:需要先给sudoer文件赋权限,修改完会后,将权限修改回来)修改完毕,现在可以用创建的帐号登录,然后用命令su - ,即可获得root权限进行操作。

shell 复制代码
## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL
创建的用户 ALL=(ALL)     ALL

【3】在/opt目录下创建modulesoftware文件夹,同时修改文件的所有者 sudo chmod 777文件地址。

shell 复制代码
sudo mkdir module
sudo mkdir software

二、下载地址

下载地址

解压:tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/

三、配置环境变量

【1】查看Hadoop解压目录

shell 复制代码
[zzx@localhost hadoop-2.7.2-src]$ pwd
/opt/module/hadoop-2.7.2-src

【2】打开/etc/profile

shell 复制代码
[zzx@localhost etc]$ sudo vi profile

【3】在文件中添加Hadoop的环境变量

shell 复制代码
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

【4】重启配置文件,让修改的配置文件生效

shell 复制代码
[root@localhost etc]# source /etc/profile

【5】测试是否安装成功(如果Hadoop命令不生效就重启试试reboot)

shell 复制代码
[root@localhost soft]# hadoop version
Hadoop 2.7.2
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r b165c4fe8a74265c792ce23f546c64604acf0e41
Compiled by jenkins on 2016-01-26T00:08Z
Compiled with protoc 2.5.0
From source with checksum d0fda26633fa762bff87ec759ebe689c
This command was run using /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-common-2.7.2.jar

四、可能会遇见的问题

【问题描述】Error: JAVA_HOME is not set and could not be found.

【解决办法】在安装目录下/etc/hadoop/下,找到hadoop-env.sh

shell 复制代码
#将下面的 $JAVA_HOME 修改为绝对路径,下面一行为默认的,错误展示
export JAVA_HOME=$JAVA_HOME   
              
#修改后的正确展示 
export JAVA_HOME=/usr/local/soft/jdk8    

五、Hadoop目录结构

【1】查看Hadoop目录结构

shell 复制代码
[root@localhost hadoop-2.7.2]# ll
总用量 28
drwxr-xr-x. 2 10011 10011   194 1月  26 2016 bin
drwxr-xr-x. 3 10011 10011    20 1月  26 2016 etc
drwxr-xr-x. 2 10011 10011   106 1月  26 2016 include
drwxr-xr-x. 3 10011 10011    20 1月  26 2016 lib
drwxr-xr-x. 2 10011 10011   239 1月  26 2016 libexec
-rw-r--r--. 1 10011 10011 15429 1月  26 2016 LICENSE.txt
-rw-r--r--. 1 10011 10011   101 1月  26 2016 NOTICE.txt
-rw-r--r--. 1 10011 10011  1366 1月  26 2016 README.txt
drwxr-xr-x. 2 10011 10011  4096 1月  26 2016 sbin
drwxr-xr-x. 4 10011 10011    31 1月  26 2016 share

【2】重要目录:

◕‿-。 bin目录: 存放对Hadoop相关服务(HDFSYARN)进行操作的脚本,里面常用的就是hadoop这个配置;

。◕‿◕。 etc目录: Hadoop的配置文件目录,存放Hadoop的配置文件。后期会修改大量配置文件;

◕‿-。 lib目录: 存放Hadoop的本地库(对数据进行压缩解压缩功能);

。◕‿◕。 sbin目录: 存放启动或停止Hadoop相关服务的脚本,很重要;

◕‿-。 share目录: 存放Hadoop的依赖jar包、文档、和官方案例;

六、启动 HDFS并运行 MapReduce程序

【1】配置: hadoop-env.sh:在etc/hadoop/hadoop-en.sh修改JAVA_HOME路径为JDK的绝对路径。

shell 复制代码
export JAVA_HOME=/usr/local/soft/jdk8

【2】配置: core-site.xmlhadoop01需要配置hosts映射,存储系统会自动创建

xml 复制代码
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
    <value>hdfs://hadoop1:9000</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

【3】配置: hdfs-site.xml:默认副本数是3个

xml 复制代码
<!-- 指定HDFS副本的数量 -->
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

【4】格式化NameNode (第一次启动时格式化,以后就不要总格式化)

shell 复制代码
[root@localhost hadoop-2.7.2]# bin/hdfs namenode -format

【5】启动NameNode

shell 复制代码
[root@localhost hadoop-2.7.2]# sbin/hadoop-daemon.sh start namenode

【问题描述】 可能会出现:Error: Cannot find configuration directory: /etc/hadoop

【问题解决】 在hadoop-env.sh修改hadoop配置文件所在目录,并进行重启 source xx。同时,需要删除namenodedata中的数据和logs中的namenodenamedate所有文件。

shell 复制代码
export HADOOP_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop/

【6】启动DataNode

shell 复制代码
[root@localhost hadoop-2.7.2]# sbin/hadoop-daemon.sh start datanode

【7】 使用JPS命令查看是否启动成功,JPS 是JDK中的命令,不是Linux命令。不安装JDK不能使用 JPS

【8】web端查看HDFS文件系统(注意需要配置hosts): http://hadoop1:50070/dfshealth.html#tab-overview

【9】查看产生的Log日志: 在企业中遇到Bug时,经常根据日志提示信息去分析问题、解决Bug。当前目录:/opt/module/hadoop-2.7.2/logs

【10】操作集群:HDFS文件系统上创建一个input文件夹,-P创建多级目录

shell 复制代码
[root@localhost hadoop-2.7.2]# bin/hdfs dfs -mkdir -p /user/zzx/input

【11】 将测试文件内容上传到文件系统上:

shell 复制代码
[root@localhost hadoop-2.7.2]# bin/hdfs dfs -put input/zzx /user/zzx/input/

【12】 查看上传的文件是否正确

shell 复制代码
[root@localhost hadoop-2.7.2]# bin/hdfs dfs -ls /user/zzx/input/
Found 1 items
-rw-r--r--   1 root supergroup         74 2020-06-20 16:44 /user/zzx/input/zzx

【13】查看上传的文件是否正确

shell 复制代码
[root@localhost hadoop-2.7.2]# bin/hdfs dfs -cat /user/zzx/input/zzx
zzx
jinlong
tangjin
zzx
zzx
jinlong
jian
fanjing
fanjing
fanjing
fanjing

【14】运行MapReduce程序,与开始时执行的本地是一致的。

shell 复制代码
[root@localhost hadoop-2.7.2]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/zzx/input/ /user/zzx/output/

【15】查看输出结果,命令行查看

shell 复制代码
[root@localhost hadoop-2.7.2]# bin/hdfs dfs -cat /user/zzx/output/*
fanjing    4
jian    1
jinlong    2
tangjin    1
zzx    3

【16】查看输出结果,浏览器查看: Utilities-Brower...-user-zzx-output

七、启动 YARN并运行 MapReduce程序

【1】配置yarn-env.sh,配置一下JAVA_HOME

shell 复制代码
export JAVA_HOME=/usr/local/soft/jdk8

【2】配置yarn-site.xml

xml 复制代码
 <!-- Reducer获取数据的方式 -->
 <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
 </property>
 
 <!-- 指定YARN的ResourceManager的地址 -->
 <property>
     <name>yarn.resourcemanager.hostname</name>
    <value>hadoop1</value>
</property>

【3】配置:mapred-env.sh,配置一下JAVA_HOME

shell 复制代码
export export JAVA_HOME=/usr/local/soft/jdk8

【4】 配置: (对mapred-site.xml.template重新命名为) mapred-site.xml

shell 复制代码
mv mapred-site.xml.template mapred-site.xml

【5】配置:mapred-site.xml

xml 复制代码
<!-- 指定MR运行在YARN上 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

八、启动集群

【1】启动前必须保证NameNodeDataNode已经启动;
【2】启动ResourceManager

shell 复制代码
[root@localhost hadoop-2.7.2]# sbin/yarn-daemon.sh start resourcemanager

【3】启动NodeManager

shell 复制代码
[root@localhost hadoop-2.7.2]# sbin/yarn-daemon.sh start nodemanager

【4】YARN的浏览器页面查看:http://hadoop1:8088/cluster

【5】 删除文件系统上的output文件

shell 复制代码
[root@localhost hadoop-2.7.2]# bin/hdfs dfs -rm -R /user/zzx/output
20/06/20 17:20:20 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /user/zzx/output

【6】执行MapReduce程序

shell 复制代码
[root@localhost hadoop-2.7.2]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/zzx/input /user/zzx/output

【7】查看运行结果,刷新页面即可

九、配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
【1】配置mapred-site.xml,在该文件里面增加如下配置。

xml 复制代码
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop1:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop1:19888</value>
</property>

【2】启动历史服务器

shell 复制代码
[root@localhost hadoop-2.7.2]# sbin/mr-jobhistory-daemon.sh start historyserver

【3】查看历史服务器是否启动JPS

【4】查看JobHistoryhttp://hadoop1:19888/jobhistory

十、配置日志的聚集

日志聚集概念: 应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处: 可以方便的查看到程序运行详情,方便开发调试。
注意: 开启日志聚集功能,需要重新启动NodeManagerResourceManagerHistoryManager

开启日志聚集功能具体步骤如下:
【1】配置yarn-site.xml,在该文件里面增加如下配置

xml 复制代码
 <!-- 日志聚集功能使能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>

<!-- 日志保留时间设置7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

【2】关闭NodeManager ResourceManagerHistoryManager

c 复制代码
[root@localhost hadoop-2.7.2]# sbin/yarn-daemon.sh stop resourcemanager
stopping resourcemanager
[root@localhost hadoop-2.7.2]# sbin/yarn-daemon.sh stop nodemanager
stopping nodemanager
nodemanager did not stop gracefully after 5 seconds: killing with kill -9
[root@localhost hadoop-2.7.2]# sbin/mr-jobhistory-daemon.sh stop historyserver
stopping historyserver

【3】 启动NodeManagerResourceManagerHistoryManager

c 复制代码
[root@localhost hadoop-2.7.2]# sbin/yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-root-resourcemanager-localhost.localdomain.out
[root@localhost hadoop-2.7.2]# sbin/yarn-daemon.sh start nodemanager
starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-root-nodemanager-localhost.localdomain.out
[root@localhost hadoop-2.7.2]# sbin/mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /opt/module/hadoop-2.7.2/logs/mapred-root-historyserver-localhost.localdomain.out
[root@localhost hadoop-2.7.2]# jps
21937 ResourceManager
15458 NameNode
22197 NodeManager
22374 JobHistoryServer
16123 DataNode
22415 Jps

【4】删除HDFS上已经存在的输出文件

c 复制代码
[root@localhost hadoop-2.7.2]# bin/hdfs dfs -rm -R /user/zzx/output

【5】执行WordCount程序

c 复制代码
[root@localhost hadoop-2.7.2]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/zzx/input /user/zzx/output

【6】查看日志,进入JobHistory点击JobID

【7】点击logs

【8】日志的具体信息

十一、配置文件说明

Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

【1】默认配置文件:

要获取的默认文件 文件存放在Hadoopjar包中的位置
[core-default.xml] hadoop-common-2.7.2.jar/ core-default.xml
[hdfs-default.xml] hadoop-hdfs-2.7.2.jar/ hdfs-default.xml
[yarn-default.xml] hadoop-yarn-common-2.7.2.jar/ yarn-default.xml
[mapred-default.xml] hadoop-mapreduce-client-core-2.7.2.jar/ mapred-default.xml

【2】 自定义配置文件: core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

十二、完全分布式运行模式

【1】将/etc/profile/opt/module下的文件拷贝到其它两台服务器上,并进行 source xxx。可以自己去拉hadoop1hadoop1也可自行给你推,hadoop1也可以将hadoop2中的文件推给hadoop3,当传文件夹的时记得加-r递归复制。

c 复制代码
[root@localhost ~]# scp root@192.168.52.131:/etc/bash.bashrc /etc/bash.bashrc 
[root@localhost opt]# scp -r root@hadoop1:/opt /opt

【2】集群部署规划: 根据这个配置修改上面的伪分布式就可以了

hadoop1 hadoop2 hadoop3
HDFS NameNode DataNode DataNode SecondaryNameNode DataNode
YARN NodeManager ResourceManager NodeManager NodeManager

【3】hadoop1配置hdfs-site.xml

xml 复制代码
<!-- 指定HDFS副本的数量 -->
<property>
        <name>dfs.replication</name>
        <value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hadoop3:50090</value>
</property>


【4】配置yarn-site.xml

xml 复制代码
<!-- Reducer获取数据的方式 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop2</value>
</property>

提前配置SSH免密配置

十三、群起集群

【1】配置slaves

c 复制代码
[root@hadoop1 hadoop-2.7.2]# vi etc/hadoop/slaves 

在该文件中增加如下内容: 该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

java 复制代码
hadoop1
hadoop2
hadoop3

同步所有节点配置文件

c 复制代码
[root@hadoop1 hadoop-2.7.2]# xsync etc/hadoop/slaves

【2】启动集群: 如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenodedatanode进程,然后再删除datalog数据)

c 复制代码
[root@hadoop1 hadoop-2.7.2]# bin/hdfs namenode -format

【3】启动HDFS(前提:终止之前运行namenode 等)

c 复制代码
[root@hadoop1 hadoop-2.7.2]# sbin/start-dfs.sh 

启动完成之后,Hadoop1会启动NameNodeDataNode,其他两台只会启动 DataNode
【4】在Hadoop2中启动YARN 。注意:NameNodeResourceManger如果不是同一台机器,不能在NameNode上启动YARN,应该在 ResouceManager所在的机器上启动YARN

c 复制代码
[root@hadoop2 hadoop-2.7.2]# sbin/start-yarn.sh 

【5】查看SecondaryNameNode信息:http://hadoop3:50090/status.html

【6】NameNode测试,创建/user/zzx/input并上传文件

c 复制代码
[root@hadoop1 hadoop-2.7.2]# bin/hdfs dfs -mkdir -p /user/zzx/input
[root@hadoop1 hadoop-2.7.2]# bin/hdfs dfs -put input/zzx /user/zzx/input

【7】上传文件后查看文件存放在什么位置:查看HDFS文件存储路径

c 复制代码
[root@hadoop1 subdir0]# ll
总用量 8
-rw-r--r--. 1 root root 74 6月  21 19:19 blk_1073741825
-rw-r--r--. 1 root root 11 6月  21 19:19 blk_1073741825_1001.meta
[root@hadoop1 subdir0]# pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-1538823143-192.168.52.131-1592727848753/current/finalized/subdir0/subdir0

十四、集群启动/停止方式总结

【1】 各个服务组件逐一启动/停止

c 复制代码
#分别启动/停止HDFS组件
hadoop-daemon.sh  start/stop  namenode/datanode/secondarynamenode
#启动/停止YARN
yarn-daemon.sh  start/stop  resourcemanager/nodemanager

【2】各个模块分开启动/停止(配置ssh是前提)

shell 复制代码
#整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
#整体启动/停止YARN
start-yarn.sh/stop-yarn.sh

十五 扩展

如果装的是3.x.xHadoop改了挺多东西的。

管理页面端口变动,Hadoop NameNode管理页面默认端口为9870

集群配置变动,etc/hadoop/slaves改成了etc/hadoop/workers

启动命令变动,sbin/yarn-daemon.sh start resourcemanager这种也能用,但是启动时会标记已被弃用,变成yarn -daemon start resourcemanger类似这种命令

相关推荐
lang201509281 分钟前
Java JSR 250核心注解全解析
java·开发语言
齐鲁大虾10 分钟前
Linux下用什么编程语言方便开发B/S架构程序
linux·运维·架构
czhc114007566312 分钟前
协议 25
java·开发语言·算法
逆光的July13 分钟前
如何解决超卖问题
java
Volunteer Technology18 分钟前
MinIo介绍和使用
架构
落花流水 丶18 分钟前
Java 集合框架完全指南
java
绝缘体124 分钟前
如何使用外卖霸王餐api接口?
大数据·搜索引擎·微信·pygame
lang2015092838 分钟前
Java WebSocket API:JSR-356详解
java·python·websocket
jiang_changsheng41 分钟前
环境管理工具全景图与深度对比
java·c语言·开发语言·c++·python·r语言
计算机学姐43 分钟前
基于SpringBoot的民宿预定管理系统【三角色+个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·mysql·信息可视化·intellij-idea·推荐算法