Hadoop3集群搭建
一、准备
官方文档-Setting up a Single Node Cluster
- 可以下载源码,下载后需要构建一下
- hadoop3.3.0源码
# 科学上网下载比较快,可以自己电脑下好了在上传到服务器
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.0/hadoop-3.3.0-src.tar.gz
# 解压文件
tar -zxvf hadoop-3.3.0-src.tar.gz
# maven构建
- 也可以直接下载安装包
# 比较大,科学上网下载比较快
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
# 解压文件
tar -zxvf hadoop-3.3.0.tar.gz
- 安装 java8
# 默认安装的是 java-1.8.0-openjdk.x86_64
yum install java
# 默认安装到 /usr/lib/jvm/
# 下载常用 java 命令,例如:jps\jstack\jstat\jmap
yum install java-devel
# 注册root环境变量
vim ~/.bashrc
# 加入下面的(示例的JAVA_HOME 只针对于 yum 安装的)
export JAVA_HOME=/usr/lib/jvm/jre
export CLASSPATH=.:$JAVA_HOME/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
- 准备集群环境配置
- 解压文件及挪动
# 目前我是将软件挪到了 /opt 下
mv hadoop-3.3.0 /opt
cd /opt
ln -s hadoop-3.3.0 hadoop
- etc/hadoop/hadoop-env.sh
# set to the root of your Java installation
export JAVA_HOME=/usr/lib/jvm/jre
# 配置一下个资源启动用户
# ps: 我这个是内网,且只有我用才这么配置的都是 root
export HADOOP_USER_NAME=root
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
- 尝试是否ok
# 尝试是否可用
./bin/hadoop
二、启动完全分布式集群
- 先修改一台机器的配置
- etc/hadoop/hadoop-env.sh
# 提高 namenode 堆内存
export HDFS_NAMENODE_OPTS="-XX:+UseParallelGC -Xmx4g"
- /etc/profile
# 设置hadoop环境地址
HADOOP_HOME=/opt/hadoop
export HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- etc/hadoop/core-site.xml
<configuration>
<!-- NameNode URI -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop001:9000</value>
</property>
<!-- Size of read/write buffer used in SequenceFiles. 131072 -->
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
- etc/hadoop/hdfs-site.xml
<configuration>
<!-- namenode 配置 -->
<!-- namenode 本地存储 namespace and transactions logs -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/nn</value>
</property>
<!-- dfs 单 block 存储大小;3.x 默认 268435456 256MB;2.x 默认 128MB -->
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<!-- name node 处理 RPC 线程数量 默认 100 -->
<property>
<name>dfs.namenode.handler.count</name>
<value>40</value>
</property>
<!-- block 副本数量 默认 3 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- datanode 配置 -->
<!-- datanode 本地文件存储位置 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/dn</value>
</property>
<!-- 静态页面访问 dfs 的用户 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
- etc/hadoop/yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- Configurations for ResourceManager and NodeManager -->
<!-- ignored -->
<!-- Configurations for ResourceManager -->
<property>
<!-- resourcemanager 配置,需要设定好 -->
<name>yarn.resourcemanager.hostname</name>
<value>hadoop001</value>
</property>
<!-- Configurations for NodeManager -->
<!-- Multiple paths help spread disk i/o. -->
<!-- Comma-separated list of paths on the local filesystem where intermediate data is written. -->
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/hadoop/nm</value>
</property>
<!-- 每个节点的虚拟核数 默认:8 -->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>
<!-- 单个任务可申请最多的核数 默认:32 -->
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>2</value>
</property>
<!-- 可用总内存数量 默认:8192 -->
<!-- 目前:8GB 系统:2GB HBase:1GB -->
<!-- 16GB 系统:2GB HBase:2GB -->
<!-- 24GB 系统:4GB HBase:4GB -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>3172</value>
</property>
<!-- 每个容器的最小内存分配 默认:1024 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<!-- 每个容器的最大内存分配 默认:8192 -->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>3172</value>
</property>
<!-- mapreduce_shuffle配置,运行 mr 时,此处还是要配置一下,避免找不到 mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
- etc/hadoop/mapred-site.xml
<configuration>
<!-- Configurations for MapReduce Applications -->
<!-- 执行调度框架选用 yarn -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 3.x 后需要指定 mr 的这个路径 -->
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
<!-- map操作最大内存 默认:1536 1.5G -->
<property>
<name>mapreduce.map.memory.mb</name>
<value>512</value>
</property>
<!-- map操作java参数 默认:-Xmx1024M -->
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx512M</value>
</property>
<!-- reduce操作最大内存 默认:3072 3G -->
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>1024</value>
</property>
<!-- reduce操作java参数 默认:-Xmx2560M -->
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx1024M</value>
</property>
<!-- reduce操作shuffle的网络拷贝的并行数 默认:50 -->
<!-- Higher number of parallel copies run by reduces to fetch outputs from very large number of maps. -->
<property>
<name>mapreduce.reduce.shuffle.parallelcopies</name>
<value>50</value>
</property>
<!-- io排序最大内存 默认:512 -->
<!-- map阶段排序时会使用该值占用堆内存,请注意 -->
<property>
<name>mapreduce.task.io.sort.mb</name>
<value>128</value>
</property>
<!-- io排序一次的流数量 默认:100 -->
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>100</value>
</property>
<!-- Configurations for MapReduce JobHistory Server -->
<!-- mapreduce.jobhistory.address Default port is 10020. -->
<!-- mapreduce.jobhistory.webapp.address Default port is 19888. -->
<!-- mapreduce.jobhistory.intermediate-done-dir Default /mr-history/tmp. -->
<!-- mapreduce.jobhistory.done-dir Default /mr-history/done. -->
</configuration>
- etc/hadoop/workers
hadoop001
hadoop002
hadoop003
- 复制两台服务器
阿里云可以通过快照+镜像+实例启动模板,快速新整两台
- 配置免密登录
# 相关命令或文件,不细致描述了
ssh-keygen
~/.ssh/authorized_keys
- 启动集群
可以自行分配节点
# namenode初始化
# cluster_name可以不传 hdfs namenode -format <cluster_name>
hdfs namenode -format
hdfs --daemon start namenode
# 启动 datanode
hdfs --daemon start datanode
# ps: 这个 dfs 是全部启动的命令 dfs
start-dfs.sh
# 启动 yarn 的程序
yarn --daemon start resourcemanager
yarn --daemon start proxyserver
yarn --daemon start nodemanager
start-yarn.sh
# 启动 mr 历史服务器
mapred --daemon start historyserver
# 一下启动全部
start-all.sh
- 停止集群(备用)
hdfs --daemon stop namenode
hdfs --daemon stop datanode
stop-dfs.sh
yarn --daemon stop resourcemanager
yarn --daemon stop nodemanager
stop-yarn.sh
yarn stop proxyserver
mapred --daemon stop historyserver
stop-all.sh
# 刷新配置
yarn rmadmin -refreshSuperUserGroupsConfiguration
- 界面
# 阿里云有防火墙,不可以直接访问,可以配置隧道。尽量不开外网访问,容易被攻击。
NameNode http://nn_host:port/ Default HTTP port is 9870.
ResourceManager http://rm_host:port/ Default HTTP port is 8088.
MapReduce JobHistory Server http://jhs_host:port/ Default HTTP port is 19888.