基于OSS存储搭建Hadoop集群

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 本文介绍基于OSS存储搭建Hadoop集群的详细步骤,您可以快速搭建自己的Hadoop计算集群。

简介

本文以Ubuntu操作系统为例,介绍基于Aliyun OSS的hadoop-3.0.0-beta1的集群环境搭建过程,示例的集群环境包括1个master和2个slave节点(slave1和slave2)。
请参考官方文档

操作账户默认使用root账户

注意:为了方便用户操作,减少错误发生,本文假定所有操作都是使用root账户;
如果使用非root,请根据自己的实际情况进行操作步骤的修订。

在各个节点上操作目录均为/home/hadoop目录

所有下载软件包的存放和操作目录为:/home/hadoop

Java安装目录($JAVA_HOME)为:/home/hadoop/jdk1.8.0/

Hadoop安装目录($HADOOP_HOME)为:/home/hadoop/hadoop-3.0.0-beta1/

搭建Hadoop集群

设置集群所有节点的主机名

对所有节点设置主机名

在master节点上执行命令修改hostname: hostname master

在slave1节点上执行命令修改hostname: hostname slave1

在slave2节点上执行命令修改hostname: hostname slave2

对所有节点检查hostname是否修改成功:

在master节点上执行命令 hostname 返回 master。

在slave1节点上执行命令 hostname 返回 slave1。

在slave2节点上执行命令 hostname 返回 slave2。

对所有节点(master和slave)配置/etc/hosts

在各个节点上打开文件:vim /etc/hosts

在文件最后添加如下内容,注意下面的IP地址要替换为实际环境的局域网IP地址

192.168.1.1    master
192.168.1.2    slave1
192.168.1.3    slave2

对所有节点验证互联正确无误

在master节点上执行命令 ping slave1ping slave2,均正常ping通。

在slave1节点上执行命令 ping masterping slave2,均正常ping通。

在slave2节点上执行命令 ping masterping slave1,均正常ping通。

在所有节点上安装JAVA

在所有节点上创建Hadoop操作目录/home/hadoop

mkdir /home/hadoop
cd /home/hadoop

在所有节点下载安装JAVA

下载JDK jdk-8u144-linux-x64.tar.gz(可以根据实际情况来选择具体的JDK版本,本文以144为例), 将下载的JDK压缩包放到/home/hadoop目录中,执行命令cd /home/hadoop进入目录。

解压JDK tar -xzvf jdk-8u144-linux-x64.tar.gz

更改文件夹的名称:mv /home/hadoop/jdk1.8.0_144 /home/hadoop/jdk1.8.0,确保Java放置在/home/hadoop/jdk1.8.0这个固定目录中,方便下文操作。

在所有节点配置$JAVA_HOME环境变量

打开文件 vim /etc/profile

在文件末尾添加如下内容:

export JAVA_HOME=/home/hadoop/jdk1.8.0/
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin

使配置生效 : source /etc/profile

验证配置是否生效 :
执行命令java -version,返回正确版本。
执行命令which java,返回正确结果:/home/hadoop/jdk1.8.0/bin/java

在所有节点上安装SSH,并配置SSH无密码登录

在所有节点安装SSH

查看是否已经安装SSH : ps -e | grep ssh

如果没有安装ssh,则执行该命令进行安装 : apt-get install openssh-server

验证ssh是否安装成功 :

ssh localhost
exit

在master节点上生成公钥,并配置从master无密码验证登录所有节点

在master节点进入~/.ssh/目录并生成公钥,并将id_rsa.pub内容复制到所有节点的authorized_keys文件中。

注意:若某个节点没有~/.ssh/目录,请先执行一次ssh localhost。执行ssh-keygen命令时遇到提示信息,如果要求输入y或yes的则输入y或yes,其他的提示可以默认敲回车

cd ~/.ssh/
ssh-keygen -t rsa

cp  ~/.ssh/id_rsa.pub  ~/.ssh/authorized_keys

scp ~/.ssh/id_rsa.pub root@slave1:~/.ssh/authorized_keys

scp ~/.ssh/id_rsa.pub root@slave2:~/.ssh/authorized_keys

在master节点上验证SSH配置正确无误

在master节点执行如下命令,不再提示输入密码,说明SSH配置OK了。

ssh master 
exit

ssh slave1 
exit

ssh slave2 
exit

在master节点上安装Hadoop

Hadoop-3.0.0-beta1官方下载地址: http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.0.0-beta1/

在master节点进入操作目录: cd /home/hadoop/

下载 wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.0.0-beta1/hadoop-3.0.0-beta1.tar.gz

解压 tar -xzvf hadoop-3.0.0-beta1.tar.gz

验证 ls /home/hadoop/hadoop-3.0.0-beta1,返回Hadoop目录的文件列表。

在master节点上配置Hadoop环境

在master节点上进行Hadoop基本配置

在master节点上配置$HADOOP_HOME等环境变量

在master节点打开文件: vim /etc/profile

在文件末尾添加如下内容;注意:如果已经存在重复的export变量内容,则将原来的删掉:

export JAVA_HOME=/home/hadoop/jdk1.8.0/ 
export JRE_HOME=$JAVA_HOME/jre/

export HADOOP_HOME=/home/hadoop/hadoop-3.0.0-beta1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$HADOOP_HOME/share/hadoop/tools/lib/hadoop-aliyun-3.0.0-beta1.jar:$HADOOP_HOME/share/hadoop/common/hadoop-common-3.0.0-beta1.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.0.0-beta1.jar

export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_NODEMANAGER_USER=root
export HDFS_DATANODE_USER=root
export YARN_RESOURCEMANAGER_USER=root

使配置生效: source /etc/profile

验证配置是否生效:
执行命令echo $JAVA_HOME,返回/home/hadoop/jdk1.8.0/
执行命令echo $HADOOP_HOME,返回/home/hadoop/hadoop-3.0.0-beta1
执行命令echo $HDFS_NAMENODE_USER,返回root

在master节点进入HADOOP主目录,执行如下命令,创建相应文件夹。
cd    $HADOOP_HOME

mkdir $HADOOP_HOME/tmp
mkdir $HADOOP_HOME/hdfs
mkdir $HADOOP_HOME/hdfs/name
mkdir $HADOOP_HOME/hdfs/data

在master节点上配置文件$HADOOP_HOME/etc/hadoop/hadoop-env.sh

打开文件: vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh

在文件相应位置增加如下内容,请替换为真实的JAVA_HOME的值:

export JAVA_HOME=/home/hadoop/jdk1.8.0/

执行如下两条命令,返回的结果内容应该是统一的,都包含/home/hadoop/jdk1.8.0/

echo $JAVA_HOME

grep JAVA_HOME $HADOOP_HOME/etc/hadoop/hadoop-env.sh | grep -v '#' | awk -F '=' '{print $2}'

在master节点上配置文件$HADOOP_HOME/etc/hadoop/core-site.xml

打开文件: vim $HADOOP_HOME/etc/hadoop/core-site.xml

configuration标签中添加:

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/hadoop/hadoop-3.0.0-beta1/tmp</value>
    </property> 

在master节点上配置文件$HADOOP_HOME/etc/hadoop/hdfs-site.xml

打开文件: vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml

configuration标签中添加:

    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/hadoop/hadoop-3.0.0-beta1/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/hadoop/hadoop-3.0.0-beta1/hdfs/data</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
    </property>

在master节点上配置文件$HADOOP_HOME/etc/hadoop/workers

打开文件: vim $HADOOP_HOME/etc/hadoop/workers

删除所有文件内容,根据实际节点情况,修改内容为:

slave1
slave2

在master节点上配置文件$HADOOP_HOME/etc/hadoop/mapred-site.xml

打开文件: vim $HADOOP_HOME/etc/hadoop/mapred-site.xml

configuration标签中添加:

    <property>  
        <name>mapreduce.framework.name</name>  
        <value>yarn</value>  
    </property>  
  
    <property>  
        <name>mapreduce.application.classpath</name>  
        <value>
          /home/hadoop/hadoop-3.0.0-beta1/etc/hadoop,  
          /home/hadoop/hadoop-3.0.0-beta1/share/hadoop/common/*,  
          /home/hadoop/hadoop-3.0.0-beta1/share/hadoop/common/lib/*,  
          /home/hadoop/hadoop-3.0.0-beta1/share/hadoop/hdfs/*,  
          /home/hadoop/hadoop-3.0.0-beta1/share/hadoop/hdfs/lib/*,  
          /home/hadoop/hadoop-3.0.0-beta1/share/hadoop/mapreduce/*,  
          /home/hadoop/hadoop-3.0.0-beta1/share/hadoop/mapreduce/lib/*,  
          /home/hadoop/hadoop-3.0.0-beta1/share/hadoop/yarn/*,  
          /home/hadoop/hadoop-3.0.0-beta1/share/hadoop/yarn/lib/*,   
          /home/hadoop/hadoop-3.0.0-beta1/share/hadoop/tools/lib/*
        </value>
    </property> 

    <property>
        <name>mapreduce.map.memory.mb</name>
        <value>2048</value>
    </property>
    <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>2048</value>
    </property>

在master节点上配置文件$HADOOP_HOME/etc/hadoop/yarn-site.xml

打开文件: vim $HADOOP_HOME/etc/hadoop/yarn-site.xml

configuration标签中添加:

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>

在master节点上,将配置好的Hadoop文件夹从master复制到各个slave节点:slave1, slave2

前面章节已经在各个slave节点上创建hadoop工作目录:/home/hadoop;请登录各个slave节点,执行如下命令,确保/home/hadoop是一个存在的空目录

cd /home/hadoop/
ls /home/hadoop/

前面章节已经配置好master节点可以无密码SSH登录到各个slave节点,在master节点上执行如下命令,将Hadoop文件夹复制到各个slave节点:

scp -r $HADOOP_HOME root@slave1:/home/hadoop/ 

scp -r $HADOOP_HOME root@slave2:/home/hadoop/

在master节点上启动Hadoop

在master节点上格式化hdfs

在master节点,进入hadoop主目录,格式化hdfs :

cd    $HADOOP_HOME
bin/hdfs  namenode  -format

在master节点上启动集群

在master节点,进入hadoop主目录,启动dfs :

cd   $HADOOP_HOME
sbin/start-all.sh

在master节点上检查dfs能够正常工作

执行如下命令,在hdfs上创建文件夹my-test-dir然后显示和删除该文件夹,均能够返回预期结果:

$HADOOP_HOME/bin/hadoop fs -mkdir /my-test-dir
$HADOOP_HOME/bin/hadoop fs -ls /
$HADOOP_HOME/bin/hadoop fs -rm -r /my-test-dir

在master节点上检查dfs的基本信息

$HADOOP_HOME/bin/hdfs  dfsadmin  -report

$HADOOP_HOME/bin/hdfs  dfsadmin  -report | grep Hostname

能够正确报告文件系统的基本信息和统计信息。

在master节点上运行wordcount验证多机环境的正确性

cd  $HADOOP_HOME 

bin/hadoop fs -rm -r /output
bin/hadoop fs -mkdir /input 
bin/hadoop fs -put $HADOOP_HOME/README.txt /input
bin/hadoop fs -ls  /input 
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0-beta1.jar  wordcount  /input/README.txt  /output

bin/hadoop fs -ls  /output 
bin/hadoop fs -cat /output/part-r-00000  

然后分别执行如下两条命令,如果能够返回相同的统计结果, 则说明Hadoop多机环境下已经成功运行wordcount
$HADOOP_HOME/bin/hadoop fs -cat /output/part-r-00000 | grep hadoop | wc -l

grep hadoop $HADOOP_HOME/README.txt | wc -l

在master节点上停止集群

cd  $HADOOP_HOME
sbin/stop-all.sh  

在master节点上配置Hadoop的AliyunOSS数据源

安装好Hadoop并且调试验证环境之后,可以配置AliyunOSS数据源。

在master节点上检查Aliyun的Hadoop库文件

ls  $HADOOP_HOME/share/hadoop/tools/lib 
ll  $HADOOP_HOME/share/hadoop/tools/lib/*aliyun*.jar

在目录$HADOOP_HOME/share/hadoop/tools/lib下有如下jar包:

aliyun-sdk-oss-2.8.1.jar 
hadoop-aliyun-3.0.0-beta1.jar  

在master节点上配置文件$HADOOP_HOME/etc/hadoop/hadoop-env.sh

打开文件: vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh

在相应位置增加如下内容:

export HADOOP_OPTIONAL_TOOLS="hadoop-aliyun"

执行如下命令,能够返回刚刚增加的文件内容:
grep HADOOP_OPTIONAL_TOOLS $HADOOP_HOME/etc/hadoop/hadoop-env.sh | grep -v '#'

在master节点上配置文件$HADOOP_HOME/etc/hadoop/core-site.xml

打开文件: vim $HADOOP_HOME/etc/hadoop/core-site.xml

configuration标签中加入如下内容:
注意把fs.oss.endpoint、fs.oss.accessKeyId、fs.oss.accessKeySecret属性对应的<value>的值设置为自己的具体内容。

    <property>
      <name>fs.oss.endpoint</name>
      <value>YourEndpoint</value>
      <description>Aliyun OSS endpoint to connect to. </description>
    </property>

    <property>
      <name>fs.oss.accessKeyId</name>
      <value>YourAccessKeyId</value>
      <description>Aliyun access key ID</description>
    </property>

    <property>
      <name>fs.oss.accessKeySecret</name>
      <value>YourAccessKeySecret</value>
      <description>Aliyun access key secret</description>
    </property>

    <property>
      <name>fs.oss.impl</name>
      <value>org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem</value>
    </property>

    <property>
      <name>fs.oss.buffer.dir</name>
      <value>/tmp/oss</value>
    </property>

在master节点上运行wordcount验证基于AliyunOSS数据源的Hadoop环境

在master节点上重启Hadoop

cd   $HADOOP_HOME
sbin/stop-all.sh  
sbin/start-all.sh

如果能够显示bucket的内容,则表示配置AliyunOSS数据源成功,注意:bucket-hadoop需要替换为已经存在的真实的bucket名称。

$HADOOP_HOME/bin/hadoop fs -ls oss://bucket-hadoop/
$HADOOP_HOME/bin/hadoop fs -mkdir oss://bucket-hadoop/input
$HADOOP_HOME/bin/hadoop fs -ls oss://bucket-hadoop/

$HADOOP_HOME/bin/hadoop fs -put $HADOOP_HOME/README.txt oss://bucket-hadoop/input/README.txt
$HADOOP_HOME/bin/hadoop fs -ls oss://bucket-hadoop/input

运行wordcount进行验证

$HADOOP_HOME/bin/hadoop fs -rm -r oss://bucket-hadoop/output

$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0-beta1.jar  wordcount oss://bucket-hadoop/input/README.txt oss://bucket-hadoop/output

$HADOOP_HOME/bin/hadoop fs -cat oss://bucket-hadoop/output/part-r-00000

然后分别执行如下两条命令,如果能够返回相同的统计结果, 则说明基于OSS的Hadoop多机环境下已经成功运行wordcount

$HADOOP_HOME/bin/hadoop fs -cat oss://bucket-hadoop/output/part-r-00000 | grep hadoop | wc -l

$HADOOP_HOME/bin/hadoop fs -cat oss://bucket-hadoop/input/README.txt | grep hadoop | wc -l

至此,基于Aliyun OSS的Hadoop多机环境已经搭建成功。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
15天前
|
存储 分布式计算 Hadoop
Hadoop数据块分散存储NameNode管理
【4月更文挑战第17天】Hadoop是一个开源的分布式计算框架,依赖HDFS进行分布式存储。文件被分割成数据块分散在DataNode上,NameNode负责元数据管理和协调,确保数据可靠性。NameNode的高可用性配置能防止单点故障,保证系统稳定性。这套机制支持高效、可靠和可扩展的大数据存储与访问。
16 3
|
26天前
|
存储 分布式计算 Hadoop
Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
40 3
|
15天前
|
存储 分布式计算 Hadoop
Hadoop数据块分散存储分散存储
【4月更文挑战第17天】Hadoop是一个开源分布式计算框架,核心是HDFS,用于高可靠性和高吞吐量的大规模数据存储。文件被分割成数据块,分散存储在不同节点,每个块有多个副本,增强容错性。Hadoop根据数据位置将计算任务分发到相关节点,优化处理速度。HDFS支持超大文件,具备高容错性和高数据吞吐量,适合处理和分析海量数据。
18 2
|
28天前
|
存储 分布式计算 资源调度
Hadoop【环境搭建 04】【hadoop-2.6.0-cdh5.15.2.tar.gz 基于ZooKeeper搭建高可用集群】(部分图片来源于网络)
【4月更文挑战第1天】Hadoop【环境搭建 04】【hadoop-2.6.0-cdh5.15.2.tar.gz 基于ZooKeeper搭建高可用集群】(部分图片来源于网络)
54 3
|
15天前
|
存储 分布式计算 Hadoop
Hadoop数据块分散存储数据块大小
【4月更文挑战第17天】Hadoop的 数据块大小影响文件在HDFS中的切分与存储。默认值为64MB、128MB或256MB,可按需调整。选择数据块大小需平衡访问模式、存储效率、网络带宽和磁盘I/O。大块减少元数据,但可能降低读取效率;小块提高读取效率,却增大元数据和网络开销。应用需求决定块大小,如小文件读取频繁则选小块,大文件存储选大块。设置前需全面考虑集群需求,遵循官方文档和最佳实践。
16 3
|
26天前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
74 2
|
8天前
|
存储 SQL 关系型数据库
存储系统、数据库和对象存储 | 青训营
存储系统、数据库和对象存储 | 青训营
|
14天前
|
分布式计算 监控 Hadoop
Ganglia监控Hadoop与HBase集群
Ganglia监控Hadoop与HBase集群
|
14天前
|
存储 分布式计算 Hadoop
Hadoop确定新的存储目录
【4月更文挑战第18天】在Hadoop中设置新存储目录,需创建数据存储目录(如`/data/hadoop/newdata1`、`newdata2`),修改`hdfs-site.xml`配置文件,指定新目录(如`dfs.namenode.name.dir`、`dfs.datanode.data.dir`)。接着重启Hadoop服务,验证新目录是否生效。注意不同环境可能有差异,参照官方文档操作,并确保数据备份、安全性和可扩展性。
15 3
|
19天前
|
存储 分布式计算 负载均衡
Hadoop数据块分散存储与副本创建
【4月更文挑战第15天】Hadoop是一个用于大数据处理的分布式框架,其核心特性包括数据块的分散存储和副本创建。数据块默认为128MB,存储在不同DataNode上,由NameNode管理元数据。每个数据块通常有3个副本,分置于不同节点,确保容错性和可靠性。当节点故障时,Hadoop能自动恢复并根据负载平衡副本位置。这种设计优化了计算资源利用,实现并行处理和高可用性。
21 3

相关产品

  • 对象存储