Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。
Hadoop由以下三个模块组成:
适用与开发、测试环境,只有一台虚拟机的情况。开发环境,一般由多台(至少三台)机器组成一个集群,不同的进程运行在不同的机器,实现容灾,形成全分布式。而伪分布式就是将所有的进程运行在一台机器上。
进程名 | 作用 |
---|---|
NameNode | 客户端通过NameNode来访问集群 |
DataNode | 负责数据存储与NameNode交通 |
SecondaryNameNode | NameNode备份 |
进程名 | 作用 |
---|---|
ResourceManager | 与客户端交互 |
NodeManager | 与ResourceManager交互,申请计算机资源 |
当然,实际的功能很复杂,这里只是简单建介绍。
这里使用的hadoop的版本是3.2.1,在搭建hadoop环境之间,先配置一下JDK,因为hadoop是用java开发的,需要jdk环境,如果需要配置JDK,参考:https://blog.csdn.net/admin_15082037343/article/details/91598052
vi /etc/hostname
server
vi /etc/hosts
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
ssh登陆就不需要密码了
ssh server
上传、解压就不多说了,解压之后目录如下:
这里注意一下,conf/,这个目录是之后加的,后面会提到。
export HADOOP_HOME=/opt/tools/hadoop-3.2.1
export PATH=$HADOOP_HOME/bin:$PATH
这里就是将bin目录加到PATH里面
在 ${HADOOP_HOME}/etc/hadoop 下,有几个重要配置文件。
<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>
<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.hosts、dfs.hosts.exclude对应的值,是两个文件
server
这里表示的是数据结点(DataNode)的机器名,尽量用机器名,一行代表一个机器名。
excludes为空
这两个在以后动态新增或移除DataNode的时候会很有用。
<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>
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
在 ${HADOOP_HOME}/sbin 下,指定启动用户,这里为了方便,就直接用root用户启动。但是通常情况下的做法是,创建用户, 更改文件拥有者为创建的用户,使用创建的用户启动hadoop
HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
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
hdfs namenode -format
./start-all.sh
jps
浏览器访问
http://server:8088/