服务器上部署hadoop集群(扩展节点)

0、设置root初始密码

sudo passwd

一、配置静态ip

sudo vim /etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

#the primary network interface
#网卡名称
auto eth0
#设置为静态
iface eth0 inet static
#静态ip地址
address 192.168.1.101
#子网掩码
netmask 255.255.255.0
#网关
gateway 192.168.1.1

重启网络服务
sudo /etc/init.d/networking restart

二、设置普通用户具有最大权限

修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:

## Allow root to run any commands anywhere
    root    ALL=(ALL)     ALL
    nano    ALL=(ALL)     NOPASSWD:ALL

三、创建目录

sudo mkdir /opt/software 放软件安装包
sudo mkdir /opt/module  放安装后的软件

四、修改用户名:

chown nano:nano /opt/software /opt/module

四、安装jdk

下载jdk(下载一般服务器的jdk会显示版本不匹配,所以直接在线安装就可以)

nano@nano1:~$ sudo apt install default-jdk

查看java版本

java -version

查看java安装路径
进入/usr/bin
查看java的软连接:ls -l java
在这里插入图片描述切换到相应目录/etc/alternatives/java
查看java的软连接:ls -l java
在这里插入图片描述
可知java的安装目录为:/usr/lib/jvm/java-11-openjdk-arm64

配置java环境变量

sudo vim /etc/profile

添加如下:

#JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64
export CLASSPATH=$CLASSPATH:.
export PATH=$PATH:$JAVA_HOME/bin

立即生效:source /etc/profile
查看是否生效: echo $JAVA_HOME
在这里插入图片描述

五、配置ssh无密码登录

先ssh远程连接一下:
在这里插入图片描述
进行无密钥配置

nano@nano1:~/.ssh$ cd ~/.ssh/

使用rsa算法生成公钥和私钥:nano@nano1:~/.ssh$ ssh-keygen -t rsa
(一路回车就可以了,其中第一个是要输入公钥和私钥的保存位置,默认在.ssh/id_rsa,会看到如下提示)
在这里插入图片描述

.ssh文件夹下的文件功能解释
(1)~/.ssh/known_hosts :记录ssh访问过计算机的公钥(publickey)
(2)id_rsa :生成的私钥
(3)id_rsa.pub :生成的公钥
(4)authorized_keys:存放授权过得无秘登录服务器公钥
在这里插入图片描述

  • 将公钥拷贝到要免密登录的目标机器上(从101机器拷贝到所有机器上,包括自己)
nano@nano1:~/.ssh$ ssh-copy-id 192.168.1.102 

在这里插入图片描述
再次远程ssh连接,这次不用密码就可以登录了
在这里插入图片描述
有关远程拷贝:
scp可以实现服务器与服务器之间的数据拷贝。
在这里插入图片描述
六、安装rsync同步工具(rsync命令可以当成是高级版的cp+scp,它可以跨机器复制(同步)文件)

nano@nano1:/opt/module/test$ sudo apt-get install rsync 

注意:每台机器都需要安装rsync同步工具,必须两两都有才能同步,要不然同步不了。

rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
(1)查看rsync使用说明 man rsync | more
(2)基本语法 rsync -rvl p d i r / pdir/ pdir/fname u s e r @ h a d o o p user@hadoop user@hadoophost:$pdir
命令 命令参数 要拷贝的文件路径/名称 目的用户@主机:目的路径
选项 -r 递归 -v 显示复制过程 -l 拷贝符号连接
(3)案例实操 把本机/opt/module/test/下的test.txt文件同步到nano2服务器的nano用户下的/opt/module/test/目录

nano@nano1:/opt/module$ rsync -rvl /opt/module/test/test.txt nano@192.168.1.102:/opt/module/test/ 

在这里插入图片描述
扩展知识:

使用notepad++ 安装NppFTP 远程连接Linux 如果出现如下问题

注意:(每台机器应该都要这样配) 解决: 切换到root用户,打开ssh配置文件sshd_config
root@nano2:/home/nano# vim /etc/ssh/sshd_config 再文件末尾添加如下内容:
KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
保存并退出。 重启ssh服务:root@nano2:/home/nano# service sshd restart

七、编写集群分发脚本xsync

1)需求分析:循环复制文件到所有节点的相同目录下。
(1)原始拷贝:

nano@nano1:/opt/module$ rsync -rvl /opt/module nano@192.168.1.102:/opt/

(2)期望脚本:
xsync 要同步的文件名称
(3)在/usr/local/bin这个目录下存放的脚本,可以在系统任何地方直接执行,需要制定路径。
2)案例实操:
(1)在/usr/local/bin目录下创建xsync文件,文件内容如下:

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0));then
echo no args;
exit
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 分发到其它集群上
for((host=102;host<=102;host++));do
        echo ----------192.168.1.$host-----------
        rsync -rvl $pdir/$fname $user@192.168.1.$host:$pdir
done
  • 上面循环中的ip地址随着集群的增大进行更改(只在101机器上改)
    (2)修改脚本 xsync 具有执行权限
    nano@nano1:/usr/local/bin$ chmod a+x xsync
    (3)调用脚本形式:xsync 文件名称
    在这里插入图片描述

八、编写分发脚本xcall

1)需求分析:在所有主机上同时执行相同的命令
xcall +命令
2)具体实现
(1)在/usr/local/bin目录下创建xcall文件,文件内容如下:

#!/bin/bash
pcount=$#
if((pcount==0));then
        echo no args;
        exit;
fi

echo ----------localhost------------
$@
for((host=102;host<=102;host++));do
        echo -----------192.168.1.$host----------------
        ssh 192.168.1.$host $@
done

(2)修改脚本 xcall 具有执行权限
nano@nano1:/usr/local/bin$ chmod a+x xcall
(3)调用脚本形式: xcall 操作命令

nano@nano1:/usr/local/bin$ xcall rm -r /opt/module/test/

在这里插入图片描述

九、配置/etc/hosts,添加ip 主机名,注释前两行

(每台机器都要)
在这里插入图片描述

十、安装hadoop

解压到指定目录
nano@nano1:/opt/software$ tar -xzvf hadoop-2.7.2.tar.gz -C /opt/module/

配置hadoop

1. 将hadoop添加到环境变量

获取Hadoop安装路径:pwd

在这里插入图片描述
打开profile:sudo vim /etc/profile
添加如下:

#HADOOP_HOME
	export HADOOP_HOME=/opt/module/hadoop-2.7.2
	export PATH=$PATH:$HADOOP_HOME/bin
	export PATH=$PATH:$HADOOP_HOME/sbin

设置生效:source /etc/profile
查看是否生效:
在这里插入图片描述
如果不能生效,重启试一试,,切换到root下,执行如下:
sync
Reboot

2. 配置hadoop-env.sh

nano@nano1:/opt/module/hadoop-2.7.2/etc/hadoop$ vim hadoop-env.sh 

在这里插入图片描述

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64
  1. 配置core-site.xml(提前建好目录地址)
<configuration>
        <!--指定HDFS中namenode地址-->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://192.168.1.101:9000</value>
        </property>
        <!--指定hadoop运行时产生的存储目录-->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/module/hadoop-2.7.2/data/tmp</value>
        </property>
</configuration>
  1. 配置hdfs-site.xml(提前建好目录地址)
	<configuration>
	        <!--指定HDFS副本的数量-->
	        <property>
	                <name>dfs.replication</name>
	                <value>3</value>
	        </property>
	        <!--指定secondnamenode地址-->
	        <property>
	                <name>dfs.namenode.secondary.http-address</name>
	                <value>192.168.1.102:50090</value>
	        </property>
	        <!--指定namenode的存放目录-->
	        <property>
	                  <name>dfs.namenode.name.dir</name>
	                  <value>/opt/module/hadoop-2.7.2/data/hadoop/name</value>
	        </property>
	         <!--指定datanode存放的目录地址-->
	         <property>
	                <name>dfs.datanode.data.dir</name>
	                <value>/opt/module/hadoop-2.7.2/data/hadoop/data</value>
	         </property>
	</configuration>
  1. 配置yarn-env.sh
    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64
  2. 配置yarn-site.xml
<configuration>
<configuration>

<!-- Site specific YARN configuration properties -->
<!--reducer获取数据的方式-->
<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>
<!--指定yarn的resourcemanager地址-->
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>192.168.1.101</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
</property>
<!-- 日志保留时间设置7天 单位/秒 -->
<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
</property>

<!--容器是否受虚拟内存限制-->
<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>
<!--容器是否受物理内存限制-->
<property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
</property>
<property>
        <name>yarn.resourcemanager.address</name>
        <value>192.168.1.101:8032</value>
</property>
<property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>192.168.1.101:8030</value>
</property>
<property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>192.168.1.101:8031</value>
</property>
<property>
 <name>yarn.resourcemanager.admin.address</name>
         <value>192.168.1.101:8033</value>
</property>
<!--根据自己电脑内存来配-->
<property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>3072</value>
</property>
<property>
         <name>yarn.scheduler.maximum-allocation-mb</name>
         <value>3072</value>
</property>
<property>
         <name>yarn.scheduler.minimum-allocation-mb</name>
         <value>1024</value>
</property>
</configuration>
</configuration>
  1. 配置mapred-env.sh
    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64
  2. 配置mapred-site.xml (对template重命名)
    cp mapred-site.xml.template mapred-site.xml

<configuration>
        <!--指定mr运行在yarn上-->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <!--配置job历史服务地址-->
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>192.168.1.101:10020</value>
        </property>
        <!--配置job的webapp历史服务地址-->
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>192.168.1.101:19888</value>
        </property>
        <!--根据自己电脑配置来配-->
        <property>
                <name>mapreduce.map.memeory.mb</name>
                <value>1024</value>
        </property>
        <property>
                <name>mapreduce.map.java.opts</name>
                <value>-Xmx819m</value>
        </property>
        <property>
                <name>mapreduce.reduce.memory.mb</name>
                <value>2048</value>
        </property>
        <property>
                <name>mapreduce.reduce.java.opts</name>
                <value>-Xmx1638m</value>
        </property>
        <property>
                <name>mapred.map.tasks</name>
                <value>64</value>
        </property>
        <property>
                <name>mapred.reduce.tasks</name>
                <value>64</value>
       </property>
</configuration>
  1. 配置slaves
192.168.1.102

注意:集群扩大,slaves随着增加
其他机器上需要独立安装:jdk,rsync,ntp安装步骤见前面,后面。

十一、分发集群文件

xsync /opt/module

十二、集群启动

集群部署规划
在这里插入图片描述

  1. 如果是第一次启动集群,需要格式化namenode
    nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs namenode -format
    在这里插入图片描述
  2. Hadoop启动停止方式
    1)各个服务组件逐一启动
    (1)分别启动hdfs组件
    hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
    (2)启动yarn
    yarn-daemon.sh start|stop resourcemanager|nodemanager
    2)各个模块分开启动(配置ssh是前提)常用
    (1)整体启动/停止hdfs
    start-dfs.sh
    nano@nano1:/opt/module/hadoop-2.7.2$ sbin/start-dfs.sh
    在这里插入图片描述 在这里插入图片描述 stop-dfs.sh
    (2)整体启动/停止yarn
    start-yarn.sh
    nano@nano1:/opt/module/hadoop-2.7.2$ sbin/start-yarn.sh
    在这里插入图片描述在这里插入图片描述
    stop-yarn.sh
    3)全部启动(不建议使用)
    start-all.sh
    stop-all.sh
    4)可能出现的问题及解决方案:
    执行start-dfs.sh后,datenode没有启动

十三、集群测试

  1. 上传文件到集群
    创建文件夹
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -mkdir -p /user/hehuan/test/input

上传文件

nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -put /opt/software/hadoop-2.7.2.tar.gz /user/hehuan/test/input
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -put README.txt /user/hehuan/test/input
  1. 对文件进行处理
    yarn上运行mapreduce程序
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/hehuan/test/input/README.txt /user/hehuan/test/output

在这里插入图片描述

  1. 查看文件内容
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -cat /user/hehuan/test/output/*
  1. 从集群下载文件
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -get /user/hehuan/test/output/* ./data/tmp
  1. 删除集群上的文件
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -rm -r /user/hehuan/test/input/hadoop-2.7.2.tar.gz

十四、设置集群时间同步

  1. 首先master节点下载ntp,ntpdate同步时间工具
nano@nano1:/opt/module/hadoop-2.7.2$ sudo apt-get install ntp ntpdate
  1. 修改/etc/ntp.conf配置文件
    修改如下(表示从IP地址192.168.1.0-192.168.1.254,默认网关255.255.255.0的服务器都可以使用我们的NTP服务器来同步时间)
    restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
    在这里插入图片描述
  2. 重启ntp服务(ntpdate执行时ntp必须关闭才可以执行)
    先ntpdate同步网络时间
    root@nano1:~/.ssh# ntpdate cn.pool.ntp.org
    然后启动ntp服务
    root@nano1:/opt/module/hadoop-2.7.2# service ntp stop
    root@nano1:/opt/module/hadoop-2.7.2# service ntp status
    root@nano1:/opt/module/hadoop-2.7.2# service ntp start
    root@nano1:/opt/module/hadoop-2.7.2# service ntp status
  3. slave的机器上进行定时同步时间(和master同步)
    先下载ntpdate
nano@nano2:/opt/module/hadoop-2.7.2$ sudo apt-get install ntpdate

切换到root用户下,添加定时任务
crontab -e
设置每分钟同步一次,并写入硬件中(192.168.1.101是master的ip)

* * * * * /usr/sbin/ntpdate 192.168.1.101;/sbin/hwlocal -w

ok

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop集群作为一个大数据处理框架,具有许多优点和一些缺点。下面是Hadoop集群的一些主要优缺点: 优点: 1. 可扩展性:Hadoop集群可以轻松地扩展到上百台或上千台机器,以处理大规模的数据集和高并发的计算需求。 2. 高可靠性:Hadoop集群通过数据的冗余存储和自动故障恢复机制,提供了高可靠性的数据存储和计算服务。即使某个节点发生故障,数据仍然可以在其他节点上找到和恢复。 3. 高性能:Hadoop集群采用分布式计算模型,能够并行处理大规模数据集。它利用每个节点的计算资源,实现了高性能的数据处理和分析。 4. 灵活性:Hadoop集群支持多种数据处理方式,包括批处理、实时流处理、图计算等。同时,它还提供了丰富的工具和组件,如Pig、Hive、Spark等,以满足不同的数据处理需求。 5. 成本效益:Hadoop集群可以在廉价的商用硬件上构建,相比传统的大型服务器集群,具有更低的成本。同时,它还能够充分利用集群中的空闲资源,提高硬件利用率。 缺点: 1. 复杂性:Hadoop集群部署和管理相对复杂,需要专业知识和经验。对于一些小型和简单的数据处理任务,使用Hadoop可能会显得过于繁琐和冗余。 2. 延迟:由于Hadoop集群是基于磁盘存储和分布式计算模型,相比于内存计算或专用硬件加速的系统,可能会存在一定的延迟。这可能影响实时数据处理和低延迟的应用场景。 3. 数据管理复杂性:Hadoop集群对于大规模数据的管理和维护需要一定的注意和投入。数据的分片、备份、迁移等操作需要进行有效的规划和管理。 4. 学习曲线:对于没有经验的用户来说,学习和使用Hadoop集群可能需要一定的时间和学习成本。熟悉Hadoop生态系统中的各种工具和组件,以及调优和故障排查等技术,都需要一定的学习和实践。 综上所述,虽然Hadoop集群具有许多优点,如可扩展性、高可靠性和高性能等,但也存在一些缺点,如复杂性、延迟和数据管理复杂性等。在选择和使用Hadoop集群时,需要根据具体的需求和情况进行权衡和考虑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值