使用阿里云服务器部署单节点hadoop集群

在这篇博客中,我将介绍如何基于阿里云服务器配置一个单节点的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部署到这里就讲完了,如果对各位大佬有帮助的话,别忘了关注、点赞和收藏哦。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值