hadoop 伪分布式部署

伪分布式安装 Hadoop 只需要一台机器,硬件配置最低为 4 核 CPU、8G 内存,将 Hadoop 程序安装到 /opt/hadoop 目录下,Hadoop 配置文件放到 /etc/hadoop 目录下。
点击这里下载,https://mirror.bit.edu.cn/apache/hadoop/core/
我用的是3.2.1版本

部署hadoop

[root@hadoop3server ~]#mkdir /opt/hadoop
[root@hadoop3server ~]#cd /opt/hadoop
[root@hadoop3server hadoop]#tar zxvf hadoop-3.2.1.tar.gz
[root@hadoop3server hadoop]#ln -s hadoop-3.2.1 current

[root@hadoop3server ~]#mkdir /etc/hadoop
[root@hadoop3server hadoop]#cp -r /opt/hadoop/current/etc/hadoop /etc/hadoop/conf

目录软链接到 current 是为了后续运维方便,因为可能涉及 Hadoop 版本升级、自动化运维等操作,这样设置后,可以大大减轻运维工作量

部署jdk

[root@hadoop3server ~]#mkdir /usr/java
[root@hadoop3server ~]#cd /usr/java
[root@hadoop3server java]#tar zxvf jdk-8u171-linux-x64.tar.gz
[root@hadoop3server java]#ln -s jdk1.8.0_171 default

这个操作过程的最后一步,做这个软连接,也是为了后续运维自动化配置、升级方便。

环境变量设置

[root@master docker]# pwd
/home/docker
#  用户的根目录

[root@master docker]# cat .bashrc 
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
# 下面的内容为新增
export JAVA_HOME=/usr/java/default
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/opt/hadoop/current
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
export CATALINA_BASE=${HTTPFS_CATALINA_HOME}
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HTTPFS_CONFIG=/etc/hadoop/conf
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

加载

[root@master docker]# source .bashrc

[root@master docker]# java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

[root@master docker]# hadoop version  
Hadoop 3.2.1
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r b3cbbb467e22ea829b3808f4b7b01d07e0bf3842
Compiled by rohithsharmaks on 2019-09-10T15:56Z
Compiled with protoc 2.5.0
From source with checksum 776eaf9eee9c0ffc370bcbc1888737
This command was run using /opt/hadoop/hadoop-3.2.1/share/hadoop/common/hadoop-common-3.2.1.jar

搞定了, 惊不惊喜,意不意外
Hadoop 安装完成后,先来了解一下其安装目录下几个重要的目录和文件,这里将 Hadoop 安装在了 /opt/hadoop/current 目录下,打开这个目录,需要掌握的几个目录如下表所示:
在这里插入图片描述
了解完目录的功能后,就开始进行配置操作了,Hadoop 的配置相当复杂,不过这些是后面要研究的内容。
而在伪分布模式下,仅仅需要修改一个配置文件即可,该文件是 core-site.xml,此文件目前位于 /etc/hadoop/conf 目录下,在此文件 标签下增加如下内容

<configuration>

  <property>
    <name>fs.defaultFS</name>
      <value>hdfs://master</value>
  </property>

</configuration>

fs.defaultFS 属性描述的是访问 HDFS 文件系统的 URI 加一个 RPC 端口, 不加端口的话,默认是 8020。
hdfs://master可以是服务器的主机名,也可以是任意字符,但都需要将此标识在服务器的 /etc/hosts 进行解析,如下:

[root@master current]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.49.139 master
192.168.49.142 node142
192.168.49.155 node155

启动hadoop

配置操作完成后,下面就可以启动 Hadoop 服务了,虽然是伪分布模式,但 Hadoop 所有的服务都必须要启动,需要启动的服务有如下几个。
在这里插入图片描述

启动NameNode

对 NameNode 进行格式化,命令如下:

[root@master current]# bin/hdfs namenode -format         
2020-07-04 15:48:41,797 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = master/192.168.49.139
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 3.2.1
STARTUP_MSG:   ********************************************
********************************************
********************************************
********************************************

2020-07-04 15:48:43,139 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.49.139
************************************************************/

启动 NameNode

[root@master current]# hdfs --daemon start namenode
[root@master current]# jps |grep NameNode
4515 NameNode

NameNode的日志文件存放在/opt/hadoop/current/logs/hadoop-docker-namenode-master.log
NameNode 启动完成后,就可以通过 Web 页面查看状态了,默认会启动一个 http 端口 9870,可通过访问地址:http://192.168.49.139:9870 查看 NameNode 服务状态,如下图所示:
在这里插入图片描述
启动 NameNode 2

[root@master current]# hdfs --daemon start secondarynamenode
[root@master current]# jps |grep SecondaryNameNode
5308 SecondaryNameNode

启动datanode

[root@master current]# hdfs --daemon start datanode
[root@master current]# jps|grep DataNode
5479 DataNode
[root@master current]# 

启动ResourceManager

注意,启动 resourcemanager 服务的命令变成了 yarn

[root@master current]# yarn --daemon start resourcemanager
[root@master current]# jps|grep ResourceManager
5624 ResourceManager
[root@master current]# 

esourceManager 服务启动后,会默认启动一个 http 端口 8088,可通过访问 http://192.168.49.139:8088 查看 ResourceManager 的 Web 状态页面,如下图所示:
在这里插入图片描述
在上图中,需要重点关注的是 ResourceManager 中可用的内存资源、CPU 资源数及活跃节点数,目前看来,这些数据都是 0,是因为还没有 NodeManager 服务启动。

启动NodeManager

[root@master current]# yarn --daemon start nodemanager
[root@master current]# jps|grep NodeManager
5928 NodeManager

启动Jobhistoryserver

[root@master current]# mapred  --daemon start historyserver
[root@master current]# jps|grep JobHistoryServer
6096 JobHistoryServer

注意,启动 Jobhistoryserver 服务的命令变成了 mapred,而非 yarn。这是因为 Jobhistoryserver 服务是基于 MapReduce 的,Jobhistoryserver 服务启动后,会运行一个 http 端口,默认端口号是 19888,可以通过访问此端口查看每个任务的历史运行情况,如下图所示
在这里插入图片描述

运用 Hadoop HDFS 命令进行分布式存储

查看根目录

[root@master current]# hadoop fs -ls /
Found 1 items
drwxrwx---   - root supergroup          0 2020-07-04 16:10 /tmp

创建log目录

[root@master current]# hadoop fs -mkdir /logs 
[root@master current]# hadoop fs -ls /        
Found 2 items
drwxr-xr-x   - root supergroup          0 2020-07-04 16:16 /logs
drwxrwx---   - root supergroup          0 2020-07-04 16:10 /tmp

上传本地文件

[root@master current]# tree /opt/hadoop/ -L 1
/opt/hadoop/
├── current -> hadoop-3.2.1
├── hadoop-3.2.1
└── hadoop-3.2.1.tar.gz

2 directories, 1 file
[root@master current]# 
[root@master current]# hadoop fs -put /opt/hadoop/hadoop-3.2.1.tar.gz /logs
2020-07-04 16:18:49,798 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
2020-07-04 16:18:50,865 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
2020-07-04 16:18:51,819 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
[root@master current]# 
[root@master current]# 
[root@master current]# hadoop fs -ls /logs   
Found 1 items
-rw-r--r--   3 root supergroup  359196911 2020-07-04 16:18 /logs/hadoop-3.2.1.tar.gz

在 Hadoop 中运行 MapreDuce 程序

创建一个测试文件 demo.txt,内容如下:

[root@master current]# cat demo.txt 
Linux Unix windows
hadoop Linux spark
hive hadoop Unix
MapReduce hadoop  Linux hive
windows hadoop spark
guxf
guxf
guxf wangzd

将创建的文件放入HDFS

[root@master current]# hadoop fs -put demo.txt /logs
2020-07-04 16:28:07,846 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
[root@master current]# 
[root@master current]# hadoop fs -ls /logs
Found 2 items
-rw-r--r--   3 root supergroup        127 2020-07-04 16:28 /logs/demo.txt


[root@master current]# hadoop jar /opt/hadoop/current/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar  wordcount /logs  /output4  
[root@master current]# hadoop fs -ls /output4
Found 2 items
-rw-r--r--   3 root supergroup          0 2020-07-04 16:49 /output4/_SUCCESS
-rw-r--r--   3 root supergroup         77 2020-07-04 16:49 /output4/part-r-00000
[root@master current]# 
[root@master current]# hadoop fs -text /output4/part-r-00000
2020-07-04 16:49:52,124 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
Linux   3
MapReduce       1
Unix    2
guxf    3
hadoop  4
hive    2
spark   2
wangzd  1
windows 2

千万别放无关的东西,别问我怎么写这句话┭┮﹏┭┮
任务执行完毕后,可以查看 /output 目录下有两个文件,其中:
_SUCCESS,任务完成标识,表示执行成功;
part-r-00000,表示输出文件名,常见的名称有 part-m-00000、part-r-00001,其中,带 m 标识的文件是 mapper 输出,带 r 标识的文件是 reduce 输出的,00000 为 job 任务编号,part-r-00000 整个文件为结果输出文件。
通过查看 part-r-00000 文件内容,可以看到 wordcount 的统计结果。左边一列是统计的单词,右边一列是在文件中单词出现的次数。

在web上展示统计信息

在 ResourceManager 的 Web 页面展示运行任务
mapred-site.xml

<configuration>
  <property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
  </property>

  <property>
   <name>yarn.app.mapreduce.am.env</name>
   <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  </property>

  <property>
   <name>mapreduce.map.env</name>
   <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  </property>

  <property>
   <name>mapreduce.reduce.env</name>
   <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  </property>


</configuration>                

yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

</configuration>

配置完之后要重启ResourceManager和NodeManager
并且重新执行上面的存储命令

[root@master current]# tree /etc/hadoop/conf/
/etc/hadoop/conf/
├── mapred-site.xml
└── yarn-site.xml
1 directory, 32 files

[root@master current]# yarn --daemon stop resourcemanager 
[root@master current]# jps|grep ResourceManager          
[root@master current]# yarn --daemon start resourcemanager
[root@master current]# jps|grep ResourceManager
6562 ResourceManager

[root@master current]# yarn --daemon stop nodemanager 
[root@master current]# jps|grep NodeManager
[root@master current]# yarn --daemon start nodemanager
[root@master current]# jps|grep NodeManager           
7661 NodeManager

# 重新执行
[root@master current]# hadoop jar /opt/hadoop/current/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar  wordcount /logs  /output45
# 刷新http://master:8088/cluster/apps 得到以下结果

在这里插入图片描述
在这里插入图片描述
搞定
其他的配置自己摸索吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值