Hadoop集群配置搭建文档/教程

本文详细介绍了Hadoop集群从零开始的搭建过程,包括多台机器的配置、环境变量设置、SSH免密码登录配置及Hadoop核心配置文件的编写等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hadoop集群搭建之夜

废话少说、书归正传,集群搭建步骤:

  • 拥有两台或以上具有独立IP的机器
  • 每台机器设置好地址映射(hosts与hostname文件)
  • 每台机器依次配置好jdk、scala、hadoop环境
  • 增加独立的hadoop用户(可选)
  • 配置每台机器的ssh免密码登录(主要指master向slave)
  • 每台机器配置好hadoop下的五个xml配置文件
  • 初始化然后尝试运行
  • 排错然后再运行

错误的努力

我经历了一个错误的白费力气的夜晚:我尝试以我装了Ubuntu16.04的系统作为master节点带动一个Ubuntu的Aliyun服务器作为slave1,但是发现一切配置妥当之后,居然ssh自己的ip行不通,但是以localhost之名ssh自己却没问题;一通乱改之后发现:原来连接路由器的pc不具备独立ip,无法被外网ssh登录22号端口;所以pc连接都是以局域网内网ip在配置集群;于是我再出血61.55元再买一台主机作为slave1节点,原来的slave1因为性能尚可被命为master节点;


每台机器设置好地址映射

现在先在准备作为master的主机上作

vi /etc/hostname

然后抹去原来名字,设为”master”

vi /etc/hosts

然后添加

111.123.123.122 master
121.133.123.125 slave1

然后在准备作为slave1的主机上

vi /etc/hostname

然后抹去原来名字,设为”slave1”

vi /etc/hosts

然后添加

111.123.123.122 master
121.133.123.125 slave1

最好在pc上也配置一下代号,然后方便随时切换登录,之后会超频繁;


依次配置好jdk、scala、hadoop环境

下载jdk,scala,限于云主机速度我是用pc传过去的
供主机下载的地址:
JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
scala:http://www.scala-lang.org/download/

root@pc$ scp jdk-8u131-linux-x64.tar.gz master:/download/ 
root@pc$ scp scala-2.12.2.tgz master:/download
root@pc$ scp jdk-8u131-linux-x64.tar.gz slave1:/download/ 
root@pc$ scp scala-2.12.2.tgz slave1:/download
root@pc$ ssh master
root@master$ sudo mkdir /usr/lib/jdk
root@master$ sudo mkdir /usr/lib/scala
root@master$ sudo tar -zxvf jdk-8u131-linux-x64.tar.gz -C /usr/lib/jdk
root@master$ sudo tar -zxvf scala-2.12.2.tgz -C /usr/lib/scala
root@master$ sudo vim /etc/profile

然后加入:

export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_131   
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH

export SCALA_HOME=/usr/lib/scala/scala-2.12.2
export PATH=${SCALA_HOME}/bin:$PATH

再去往修改

root@master$ vim ~/.bashrc

增加在最后一行

export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_131

再使其生效

root@master$ source ~/.bashrc
root@master$ source /etc/profile

检查配置

root@master$ $JAVA_HOME/bin/java -version 

配置master向slave组的ssh免密码登录

请注意:root后面的名字表明了我们此时正在哪一台主机上面;

root@master$ apt-get install openssh-service
root@master$ ssh localhost
root@master$ logout
root@master$ cd ~/.ssh
root@master$ ssh-keygen -t rsa
root@master$ cat ./id_rsa.pub >> ./authorized_keys
root@master$ scp ~/.ssh/id_rsa.pub slave1:~
root@master$ ssh slave1
root@slave1$ cd ~/.ssh
root@slave1$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
root@slave1$ rm ~/id_rsa.pub
root@slave1$ logout
root@master$ ssh slave1
root@slave1$ logout

最后两步即是检验是不是能够无密码登录了;


配置hadoop文件夹下的5个xml配置文件

由于要求集群每台主机的hadoop下配置相同,所以我们先在master上安装hadoop,完成配置,再复制到其他slave主机,最后再写入环境变量;

root@pc$ scp hadoop.tar.gz master:/usr/local
root@pc$ ssh master
root@master$ cd /usr/hadoop
root@master$ sudo tar -zxf ./hadoop-2.7.3.tar.gz
root@master$ cd hadoop-2.7.3/etc/hadoop
root@master$ vim slaves
root@master$ vim core-site.xml
root@master$ vim hdfs-site.xml
root@master$ vim mapred-site.xml
root@master$ vim yarn-site.xml

这五次分别配置为
slaves

slave1

core-site.xml

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop-2.7.3/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>

hdfs-site.xml

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop-2.7.3/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop-2.7.3/tmp/dfs/data</value>
        </property>
</configuration>

mapred-site.xml

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>master:19888</value>
        </property>
</configuration>

yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

配置完成,打包整个hadoop文件复制到其他所有slave节点,并配置hadoop环境变量;

root@master$ tar -zcf hadoop.tar.gz ./hadoop-2.7.3/
root@master$ scp hadoop.tar.gz slave1:/usr/local
root@master$ ssh slave1
root@slave1$ cd /usr/local
root@slave1$ sudo tar -zxf ./hadoop-2.7.3.tar.gz

首先执行 vim ~/.bashrc,加入一行:

export PATH=$PATH:/usr/local/hadoop-2.7.3/bin:/usr/local/hadoop-2.7.3/sbin

再执行source ~/.bashrc;


接近尾声

接下来可以启动试试,首先要初始化

root@master$ hdfs namenode -format 
root@master$ start-dfs.sh
root@master$ start-yarn.sh
root@master$ mr-jobhistory-daemon.sh start historyserver

尝试开启分布式任务

root@master$ hdfs dfs -mkdir /user
root@master$ hdfs dfs -mkdir -p /user/root
root@master$ hdfs dfs -mkdir input
root@master$ hdfs dfs -put /usr/local/hadoop-2.7.3/etc/hadoop/*.xml input
root@master$ hdfs dfs -ls input
root@master$ hadoop jar /usr/local/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
root@master$ hdfs dfs -cat output/*

root@master$ stop-dfs.sh
root@master$ stop-yarn.sh
root@master$ mr-jobhistory-daemon.sh stop historyserver
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值