在这篇博客中,我将介绍如何基于阿里云服务器配置一个单节点的Hadoop集群。
阿里云服务器
这里我在阿里云服务平台中租了一个2CPU,2Memory配置的服务器,带宽: 2Mbps,操作系统: Ubuntu 18.04. 我是按量支付的,因为我只需要部署这个实现一个wordcount 的例子,如果需要长时间使用的,建议包年包月,因为按量支付如果不删除实例,他就会一直扣款,保存快照也是需要钱的。
Java 安装
ubuntu@master:~$ sudo apt-get update
ubuntu@master:~$ sudo apt-get install openjdk-8-jre-headless
ubuntu@master:~$ sudo apt-get install openjdk-8-jdk
ubuntu@master:~$ java -version
通过前面三个命令安装完Java之后,输入java -version
查看安装的Java版本去验证是否安装成功。
服务器配置
这里我们首先安装一个SSH协议,因为如果是多节点Hadoop集群的话,主节点和slave节点需要使用SSH进行数据交互。虽然这里我们主要介绍单节点Hadoop的安装,也需要安装SSH服务。
ubuntu@master:~$ sudo apt-get install openssh-server
Hadoop用户
这里我们在root用户上不运行Hadoop,而是创建一个Hadoop用户 。
ubuntu@master:~$ sudo addgroup hadoop
ubuntu@master:~$ sudo adduser --ingroup hadoop hduser
ubuntu@master:~$ su hduser
SSH key
使用Hadoop用户hduser登录之后,我们为这个用户生成SSH密钥对
hduser@master:~$ ssh-keygen -t rsa -f id_rsa
hduser@master:~$ mkdir .ssh
hduser@master:~$ mv id_rsa* .ssh/
hduser@master:~$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
hduser@master:~$ chmod 644 .ssh/authorized_keys
# 验证是否能够通过SSH连接localhost
hduser@master:~$ ssh localhost
安装Hadoop
因为使用官方网站安装Hadoop实在是太慢了,所以这里我们使用清华源下载Hadoop2.10.1
hduser@master:~$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.10.1.tar.gz
hduser@master:~$ tar -zxvf hadoop-2.10.1.tar.gz
安装完Hadoop之后,我们需要修改他的配置文件
File: hadoop-env.sh
hduser@master:~$ vim hadoop-2.7.1/etc/hadoop/hadoop-env.sh
# 进入配置文件后,修改JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
# 然后设置用户的环境变量
hduser@master:~$ vim ~/.bashrc
# 将下面的代码放在文件的最后面
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/home/hduser/hadoop-2.10.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
# 最后激活配置文件
hduser@master:~$ source ~/.bashrc
接下来,我们需要修改Hadoop的配置文件,总共有四个配置文件:core-site.xml,core-site.xml,core-site.xml,core-site.xml。如果是多节点Hadoop集群的话,还需要修改slaves文件。下面是配置文件的具体修改过程:
File: core-site.xml
hduser@master:~$ vim hadoop-2.10.1/etc/hadoop/core-site.xml
# 将下面的代码添加到文件的<configuration></configuration>之间
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
File: hdfs-site.xml
hduser@master:~$ vim hadoop-2.10.1/etc/hadoop/hdfs-site.xml
# 文件内容
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hduser/hadoop_tmp/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hduser/hadoop_tmp/hdfs/datanode</value>
</property>
File: yarn-site.xml
hduser@master:~$ vim hadoop-2.10.1/etc/hadoop/yarn-site.xml
# 文件内容
<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>
File: mapred-site.xml
# 这里我们需要先将mapred-site.xml.template的内容复制到mapred-site.xml再进行修改
hduser@master:~$ cp hadoop-2.10.1/etc/hadoop/mapred-site.xml.template hadoop-2.10.1/etc/hadoop/mapred-site.xml
hduser@master:~$ vim hadoop-2.10.1/etc/hadoop/mapred-site.xml
# 文件内容
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
修改完配置文件之后,我们还需要按照配置文件创建Hadoop的namenode和datanode的目录。
hduser@master:~$ mkdir -p hadoop_tmp/hdfs/namenode
hduser@master:~$ mkdir -p hadoop_tmp/hdfs/datanode
然后格式化namemode
hduser@master:~$ hdfs namenode -format
最后启动Hadoop
# 启动Hadoop的文件系统
hduser@master:~$ start-dfs.sh
# 启动Hadoop的MapReduce
hduser@master:~$ start-yarn.sh
# 启动Job History服务,方便我们查看运行的实际情况,等同于日志功能
hduser@master:~$ mr-jobhistory-daemon.sh start historyserver
#最后使用jps验证是否所有服务都启动成功了
hduser@master:~$ jps
Process ID SecondaryNameNode
Process ID JobHistoryServer
Process ID ResourceManager
Process ID NodeManager
Process ID DataNode
Process ID NameNode
Process ID Jps
如果namenode或者datanode没有启动,那就是你格式化namenode的次数过多,导致和datanode的内容产生了不一致。所以我们只需要删除datanode和namenode目录中的所有内容,然后重新格式化namenode即可,这里除了current目录之外,应该还存在一个lock文件,名字我有点忘记了,应该是in_use.lock。
hduser@master:~$ rm -rf hadoop_tmp/hdfs/namenode/current
hduser@master:~$ rm -rf hadoop_tmp/hdfs/namenode/in_use.lock
hduser@master:~$ rm -rf hadoop_tmp/hdfs/datanode/current
hduser@master:~$ rm -rf hadoop_tmp/hdfs/datanode/in_use.lock
WordCount example
配置成功后,我们在Hadoop上运行一个workcount的例子,首先是下载Shakespeare数据集
hduser@master:~$ wget 'https://github.com/hupili/agile-ir/raw/master/data/Shakespeare.tar.gz'
hduser@master:~$ tar -zxvf Shakespeare.tar.gz
然后我们将数据集放到/data文件夹中,并且将其上传到Hadoop文件系统中去
hduser@master:~$ hadoop dfs -copyFromLocal /home/hduser/data /data
hduser@master:~$ hadoop dfs -ls /data
最后将Hadoop自带的wordcount实例复制到当前目录,然后运行它,结果输出在/result目录下:
hduser@master:~$ cp hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar ./
hduser@master:~$ hadoop jar hadoop-mapreduce-examples-2.10.1.jar wordcount /data /result
运行结束之后,如果你想再运行一遍,则需要将原本的结果文件夹删除,或者修改结果文件夹,否则会报错。
单节点的Hadoop部署到这里就讲完了,如果对各位大佬有帮助的话,别忘了关注、点赞和收藏哦。