Linux下搭建Hadoop伪分布环境

hadoop简单介绍

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。
Hadoop由以下三个模块组成:

  • hdfs:可以简单理解为一个文件系统,就像windows那样,有文件和文件夹的区别。
  • yarn:可以简单理解为计算机资源(CPU和内存)的调度系统。
  • MapReduce:定义计算任务,定义完成后提交到yarn执行。
hadoop伪分布式

适用与开发、测试环境,只有一台虚拟机的情况。开发环境,一般由多台(至少三台)机器组成一个集群,不同的进程运行在不同的机器,实现容灾,形成全分布式。而伪分布式就是将所有的进程运行在一台机器上。

hadoop进程
  • hdfs
进程名作用
NameNode客户端通过NameNode来访问集群
DataNode负责数据存储与NameNode交通
SecondaryNameNodeNameNode备份
  • yarn
进程名作用
ResourceManager与客户端交互
NodeManager与ResourceManager交互,申请计算机资源

当然,实际的功能很复杂,这里只是简单建介绍。

准备工作
  • jdk

这里使用的hadoop的版本是3.2.1,在搭建hadoop环境之间,先配置一下JDK,因为hadoop是用java开发的,需要jdk环境,如果需要配置JDK,参考:https://blog.csdn.net/admin_15082037343/article/details/91598052

  • 免密登陆
  1. 修改主机名
vi /etc/hostname
server
  1. 配置主机名与IP映射
vi /etc/hosts

  1. 生成秘钥
ssh-keygen[Enter][Enter][Enter]

此时,在 /root/.ssh (如果不是root用户,路径为:/root/${username}/.ssh)中生成了两个密钥文件:id_rsa和id_rsa.pub,其中id_rsa为私钥,id_rsa.pub 为公钥。

需要将 id_rsa.pub 追加到 authorized_keys 中,authorized_keys 用于保存所有允许以当前用户身份登录到 ssh 客户端用户的公钥内容。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  1. 验证

ssh登陆就不需要密码了

ssh server
环境搭建
  1. 下载
    https://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz

上传、解压就不多说了,解压之后目录如下:

这里注意一下,conf/,这个目录是之后加的,后面会提到。

  1. 配置环境变量
export HADOOP_HOME=/opt/tools/hadoop-3.2.1
export PATH=$HADOOP_HOME/bin:$PATH

这里就是将bin目录加到PATH里面

  1. 修改配置

${HADOOP_HOME}/etc/hadoop 下,有几个重要配置文件。

  • core-site.xml
<configuration>
    <!-- 指定 hdfs -->
    <property>
        <name>fs.defaultFS</name>
	    <value>hdfs://server:9000</value>
    </property>
    <!-- recycle bin -->
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
	
	<!-- 这里的root可以改成其他用户名 -->
	<property>
		<name>hadoop.proxyuser.root.hosts</name>
		<value>*</value>
	</property>
	<property>
		<name>hadoop.proxyuser.root.groups</name>
		<value>*</value>
	</property>
</configuration>
  • hdfs-site.xml
<configuration>
    <!-- 副本数量 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <!-- namenode储存位置 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/tools/data/hadoop/name</value>
    </property>
    <!-- datanode储存位置 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/tools/data/hadoop/data</value>
    </property>
    <!-- 辅助namenode储存位置 -->
    <property>
        <name>dfs.namenode.checkpoint.dir</name>
        <value>/opt/tools/data/hadoop/second</value>
    </property>
    <!-- 运行用IP代替主机名 -->
    <!-- <property>
        <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
        <value>false</value>
    </property> -->
  
    <!-- datanode白名单 -->
    <property>
        <name>dfs.hosts</name>
        <value>/opt/tools/hadoop-3.2.1/conf/includes</value>
    </property>
    <!-- datanode黑名单 -->
    <property>
        <name>dfs.hosts.exclude</name>
        <value>/opt/tools/hadoop-3.2.1/conf/excludes</value>
    </property>
</configuration>

这里注意一下dfs.hostsdfs.hosts.exclude对应的值,是两个文件

  • includes
server

这里表示的是数据结点(DataNode)的机器名,尽量用机器名,一行代表一个机器名。

excludes为空

这两个在以后动态新增或移除DataNode的时候会很有用。

  • yarn-site.xml
<configuration>
  <!-- 单个容器可申请的最小内存,应用在运行申请内存时不能超过最大值,小于最小值则分配最小值。默认值1024 -->
  <property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
	<value>512</value>
  </property>
  <!-- 单个容器可申请的最大内存,应用在运行申请内存时不能超过最大值,小于最小值则分配最小值。默认值8192 -->
  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
	<value>2048</value>
  </property>
  <!-- 最小核心数 -->
  <property>
    <name>yarn.scheduler.minimum-allocation-vcores</name>
	<value>1</value>
  </property>
  <!-- 最大核心数 -->
  <property>
    <name>yarn.scheduler.maximum-allocation-vcores</name>
	<value>4</value>
  </property>
  <!-- NodeManager总的可用物理内存 -->
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
	<value>4096</value>
  </property>
  <!-- 任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1 -->
  <property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
	<value>1</value>
  </property>
  <!-- NodeManager总的可用虚拟CPU个数 -->
  <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
	<value>4</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>
  • mapred-site.xml
<configuration>
  <!-- 指定mr框架为yarn方式 -->
  <property>
    <name>mapreduce.framework.name</name>
	<value>yarn</value>
  </property>
</configuration>

${HADOOP_HOME}/sbin 下,指定启动用户,这里为了方便,就直接用root用户启动。但是通常情况下的做法是,创建用户, 更改文件拥有者为创建的用户,使用创建的用户启动hadoop

  • start-dfs.sh、stop-dfs.sh
HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
  • start-yarn.sh、stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
  • start-all.sh、stop-all.sh
HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root

start-hdfs.sh + start-yarn.sh = start-all.sh

  1. 格式化namenode
hdfs namenode -format
  1. start-all启动
./start-all.sh
  1. 验证
jps

浏览器访问

http://server:9870/

http://server:8088/


我这里配置了机器名与IP映射,所以能直接使用机器名+端口访问。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流年ln

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值