Hadoop系列文章 Hadoop部署
Hadoop分为三种部署方式
- Standalone Operation(单节点集群):默认情况下,Hadoop被配置为作为单个Java进程以非分布式模式运行。这对于调试非常有用。
- Pseudo-Distributed Operation(伪分布式):在单节点上以伪分布式模式运行,其中每个Hadoop守护进程运行在单独的Java进程中。
- 分布式部署Fully-Distributed Operation:真集群部署
构件 | 版本 |
---|---|
Hadoop | 3.2.1 |
CentOS | 7 |
Java | 1.8 |
IDEA | 2018.3 |
Gradle | 4.8 |
Springboot | 2.1.2 RELEASE |
Apache Hadoop 3.2.1 单节点部署
Java安装
因为Hadoop是基于Java的,所以一个Java环境是不能少的。
CentOS7 安装JDK1.8
下载安装包
Apache Hadoop 3.2.1 binary 下载地址
在服务器中解压到指定目录
一般我们将Hadoop放到/usr/local/
目录下
# tar -zxvf hadoop-3.2.1.tar.gz -C /usr/local/hadoop-3.2.1
配置环境变量
配置文件/etc/profile
export JAVA_HOME=/usr/java/default
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/usr/local/hadoop-3.2.1/
export PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
更改立即生效:source /etc/profile
HDFS Shell命令一览
hadoop fs … 与 hdfs dfs …命令作用一样的,因为它们在shell里被翻译成同一个命令。
测试Hadoop安装成果
$ mkdir input
$ cp etc/hadoop/*.xml input
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
$ cat output/*
Apache Hadoop 3.2.1 伪分布式部署
hadoop环境配置文件
修改配置文件hadoop-env.sh
大概54行的位置
export JAVA_HOME=/usr/java/default
配置文件设置
配置文件etc/hadoop/core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
<!-- 将localhost换为自己主机的IP,不然此Hadoop将不能被另外的计算机访问
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.84.132:9000</value>
</property>
-->
</property>
</configuration>
配置文件etc/hadoop/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
添加HDFS操作账户
我们需要制定可以管理HDFS的账户:sbin/start-dfs.sh
第一项配置项之前添加:
HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
因为我们现在做的单节点集群所以一次把三个必要角色都加上。
设置SSH
Setup passphraseless ssh
Now check that you can ssh to the localhost without a passphrase:
$ ssh localhost
If you cannot ssh to localhost without a passphrase, execute the following commands:
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
格式化HDFS
Execution
The following instructions are to run a MapReduce job locally. If you want to execute a job on YARN, see YARN on Single Node.
Format the filesystem:
$ bin/hdfs namenode -format
Start NameNode daemon and DataNode daemon:
$ sbin/start-dfs.sh
The hadoop daemon log output is written to the $HADOOP_LOG_DIR directory (defaults to $HADOOP_HOME/logs).
dfs的启动时间比较长,大家要耐心。
启动完毕之后,可以先访问Hadoop的web控制台http://192.168.84.132:9870/dfshealth.html#tab-overview
yarn部署
yarn作为建立在hadoop中的资源调度中心,用于承接各个计算框架分配、管理各种资源,是大数据业务线中的重要组件。
配置yarn成员:sbin/start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
让我们先把yarn可调度的资源范围调大一些
yarn对集群资源调度的范围默认是0.1,这是在是有些小了,特别是在单机上,这很容易引发application申请不到资源的情况。
调整yarn对资源调度的范围: etc/hadoop/capacity-scheduler.xml
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>0.6</value>
<description>
Maximum percent of resources in the cluster which can be used to run
application masters i.e. controls number of concurrent running
applications.
</description>
</property>
配置yarn对节点内存的管理范围
配置文件:etc/hadoop/yarn-site.xml
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
在节点资源不富裕的情况下,以上两个配置是很重要的,不然很可能会出现,任务运行资源申请不到的情况或者是( java.nio.channels.ClosedChannelException异常)出现。
启动yarn:
[root@node1 hadoop-3.2.1]# sbin/start-yarn.sh
对于伪分布式(单节点集群)必要的进程有:
- NameNode
- SecondaryNameNode
- ResourceManager
- NodeManager
- DataNode
查看各组件运行状态
HDFS
yarn
进入资源控制面板:http://192.168.84.132:8088/cluster/nodes
常见问题
hadoop的基础配置并不复杂,不过由于新手的误操作也可能引发一些问题。
DataNode起不来或者起来了在nodemanager里看不到
这个问题大都是因为cluster id 不一致引起的。
导致cluster id 不一致的原因主要有namenode -format 之前没有执行 stop-all.sh ,旧的cluster id 还保存在节点的磁盘上,导致hdfs与datanode之间无法建立连接。
DataNode 的Cluster Id 在文件:/tmp/hadoop-root/dfs/data/current/VERSION
#Sun Feb 23 12:30:49 EST 2020
storageID=DS-73bb1abb-6310-46ff-b975-a6c1f2c72ba5
clusterID=CID-f5f90a56-eda8-4cb4-8580-eebb7c40b3f7
cTime=0
datanodeUuid=10b54422-9b93-4a63-bc54-2d0ee76ecd89
storageType=DATA_NODE
layoutVersion=-57
对照下Hadoop控制面板中的Cluster id
如果确定了是双方Cluster id不一致,可以直接将 /tmp/hadoop-root/dfs/data/current/VERSION
文件里的clusterid该为面板中的ID,然后重启datanode即可。