hadoop简单介绍安装和配置

hadoop简单介绍安装和配置

hadoop简单介绍安装和配置

一、hadoop简介1、hadoop介绍2、hadoop的特点3、hadoop的组成

二、hadoop安装和运行模式1、安装JDK2、安装hadoop3、hadoop重要目录介绍4、hadoop运行模式介绍5、安全拷贝介绍1)安全拷贝scp(secure copy)1)远程同步rsync

6、SSH免密登录介绍7、hadoop生产环境配置介绍1)集群配置2)历史服务器配置3)日志服务器配置4)集群常用脚本配置5)部分错误

一、hadoop简介

1、hadoop介绍

hadoop是由Apache基金会开发维护的分布式系统基础架构; 狭义的hadoop是指hadoop本身,广义的hadoop主要是指hadoop的生态圈; hadoop的两大功能:主要解决海量数据的存储和海量数据的分析计算问题。

2、hadoop的特点

高可靠性:hadoop底层维护多个数据副本,所以即使部分节点元素出现故障,也能从其他节点恢复; 高扩展性:可以动态的在原先的节点上,新增或删除节点,能适应高爆发的场景; 高效性:在MapReduce的思想下,hadoop是并行工作的,这加快了任务的处理速度; 高容错性:能够将失败的任务重新分配资源再次执行。

3、hadoop的组成

目前2.x开始到3.x的hadoop版本主要由HDFS,MapReduce,Yarn和common四部分组成。 HDFS(Hadoop Distributed File System,简称HDFS,是一个分布式文件系统,负责文件存储) MapReduce(Map阶段并行处理计算输入的数据,reduce阶段负责将Map的结果进行汇总,负责数据计算逻辑) Yarn(Yet Another Resource Negotiator,简称YARN ,是一种资源协调者,是Hadoop的资源管理器,负责资源调度) common(其他一些必要的辅助工具)

二、hadoop安装和运行模式

在 linux 系统下,新建 /opt/software 目录用于存放软件的安装包;新建 /opt/module 目录作为软件的安装目录。

mkdir /opt/software

mkdir /opt/module

安装JDK之前需要先删除 linux 系统自带的JDK。

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

其中 rpm -qa 查询所有安装的 rpm 软件包; grep -i 查找所有文件名中包含java的文件,-i 忽略大小写; xargs -n1 表示每次只传递一个参数,这里传递的是查找出来的包含 java 关键字的文件名; rpm -e --nodeps 强制卸载软件。

1、安装JDK

(1)用xftp将JDK文件拷贝到 /opt/software 目录下 (2)将JDK安装到 /opt/module 目录下

tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module/

(3)配置JDK的环境变量,新建一个独立的 sh 文件,便于管理

sudo vim /etc/profile.d/myenv.sh

(4)在文件里面配置 java home 的内容

#JAVA_HOME

export JAVA_HOME=/opt/module/jdk1.8.0_212

export PATH=$PATH:$JAVA_HOME/bin

export 先设置全局变量JAVA_HOME,再取出path的值,将path后面再接上 $JAVA_HOME/bin 。

(5)source一下profile,相当于刷新一下,使配置生效

source /etc/profile

(6)测试是否成功

java -version

能正常显示 java 的版本信息即为配置成功。

2、安装hadoop

环境和用户准备:

# CentOS需要安装额外的软件epel-release

yum install -y epel-release

# 添加用户

useradd menghui

passwd menghui

# 修改用户权限

vim /etc/sudoers

# 修改/etc/sudoers文件,在%wheel这行下面添加一行,如下所示:

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

## Allows people in group wheel to run all commands

%wheel ALL=(ALL) ALL

menghui ALL=(ALL) NOPASSWD:ALL

(1)用xftp将hadoop安装包拷贝到 /opt/software 目录下 (2)安装hadoop到 /opt/module 目录下面

tar -zxvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/module/

(3)配置hadoop的环境变量

sudo vim /etc/profile.d/myenv.sh

(4)在文件里面接着配置hadoop home的内容

#JAVA_HOME

export JAVA_HOME=/opt/module/jdk1.8.0_212

export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME

export HADOOP_HOME=/opt/module/hadoop-3.1.3

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

(5)source一下profile,相当于刷新一下,使配置生效

source /etc/profile

(6)测试是否成功

hadoop

如果没有报错,这配置成功,如果不成功,请尝试重启后,再测试。 (7)配置主机映射

su root

vim /etc/hosts

# 往里面追加以下内容

192.168.20.102 hadoop102

192.168.20.103 hadoop103

192.168.20.104 hadoop104

3、hadoop重要目录介绍

安装后的 /opt/module/hadoop-3.1.3 目录下,都是hadoop的目录结构,其中一些重要的介绍如下: bin,bin里面存放一般常用的命令,HDFS,Yarn,MapReduce等的命令; etc, etc存放HDFS,Yarn,MapReduce的各种配置文件; include,include存放各种头文件; lib, lib本地动态链接库; sbin,启动集群,启动yarn,启动历史服务器等的命令; share,提供学习的资料和官方案例。

4、hadoop运行模式介绍

Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。 本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。 伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。可以用来简单的测试,生产环境不用。 完全分布式模式:多台服务器组成分布式环境。生产环境使用。

5、安全拷贝介绍

1)安全拷贝scp(secure copy)

(1)scp介绍 scp(secure copy) 安全拷贝,scp可以实现服务器和服务器之间的数据拷贝。

(2)语法介绍

scp -r $user@$host:$pdir/$fname $user@$host:$pdir/$fname

其中 -r 是递归拷贝,pdir 为文件的路径,fname 为文件的名称,user 为远程服务器的用户名, host 为远程服务的主机名。 scp -r 用户@主机:要拷贝的文件路径/文件名称 目的地用户@主机:目的地路径/文件名称。

(3)基本示例 以下用到的是远程的主机名,没有配置主机名的需要先配置主机名和IP地址的映射。

# 从hadoop102本机拷贝jdk到hadoop103服务器,此时在hadoop102上面

scp -r /opt/module/jdk1.8.0_212 mrlin@hadoop103:/opt/module/

# 从hadoop102服务器拷贝hadoop到hadoop103本机,此时在hadoop103上面

scp -r mrlin@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/

# 从hadoop102服务器拷贝hadoop到hadoop103服务器,此时在hadoop104上面

scp -r mrlin@hadoop102:/opt/module/hadoop-3.1.3 mrliin@hadoop104:/opt/module/

上面的命令均需要输入远程服务器的密码才能完成拷贝过程。

1)远程同步rsync

(1)rsync 介绍 rsync 主要用于备份和镜像,具有速度快、避免复制相同内容和支持符号链接等的优点。 rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度更快,因为 rsync 只对差异的文件做更新,而 scp 只是把所有文件都完整复制过去。

(2)rsync 语法

rsync -av $pdir/$fname $user@$host:$pdir/$fname

其中 -a 是归档拷贝,-v 是显示复制过程,pdir 为文件的路径,fname 为文件的名称,user 为远程服务器的用户名, host 为远程服务的主机名。 scp -r 用户@主机:要同步的文件路径/文件名称 目的地用户@主机:目的地路径/文件名称。

(3)基本示例 随便删掉 hadoop103 上面 /opt/module/hadoop-3.1.3 下面的一个文件,然后再同步文件,如下

# 从hadoop102本机同步hadoop到hadoop103服务器,此时在hadoop102上面

rsync -av /opt/module/hadoop-3.1.3 mrlin@hadoop103:/opt/module/

# 从hadoop102服务器同步hadoop到hadoop103本机,此时在hadoop103上面

rsync -av mrlin@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/

# 从hadoop102服务器同步hadoop到hadoop103服务器,此时在hadoop104上面

rsync -av mrlin@hadoop102:/opt/module/hadoop-3.1.3 mrliin@hadoop104:/opt/module/

此时会发现,rsync 同步的效率比 scp 安全拷贝更高,速度也更快。

6、SSH免密登录介绍

在通过用户名@主机访问远程服务器时,其实是通过SSH登录的,因此每次同步文件的时候,都是需要输入远程服务器的密码,这在实际使用时是比较麻烦的,因为我们通过SSH的私钥和公钥的机制,先分发每个用户对于的公钥,就能在登录的时候,实行免密登录,注意当前是在mrlin用户下面的,mrlin和root是两个用户,需要单独配置。 本机在hadoop102服务器上,先ssh hadoop102 登录一下,然后退出。

ssh hadoop102

(1)进入.ssh

cd /home/mrlin/.ssh

(2)生成公钥和秘钥,输入命令,并按3次回车即可

ssh-keygen -t rsa

(3)将公钥拷贝到需要ssh登录的服务器,登录到本机也是需要密码,所以本地也是需要拷贝一份

ssh-copy-id hadoop102

ssh-copy-id hadoop103

ssh-copy-id hadoop104

免密登录的原理,就是先利用密码在本地生成秘钥对,本地保留私钥,而将公钥发送给需要ssh登录的服务器,当本地发送数据到其他服务器时,先由本地私钥加密,再在其他服务器通过公钥解密即可;当其服务器发送数据时,其他服务器通过公钥加密,本地再通过私钥解密即可。所以需要本地保留私钥,而将公开的公钥发送给其他需要登录的服务器。

注意:以上的步骤只是实现了在服务器hadoop102的mrlin用户上面登录其他服务器的功能,如需在hadoop103上面也能登录其他服务器,也需在hadoop103上面执行上面的操作。同理,hadoop104或者更多的服务器也需要各执行一遍。 同时,ssh登录是区分用户的,这里我是在 mrlin 的用户下面执行的ssh配置,如需要其他用户也实现免密登录功能,需先切换用户,再执行上面的操作,如需在 root 用户下也能实现,则需在切换成 root 用户后,再次生成秘钥对,并分发公钥。

(4).ssh文件夹下(~/.ssh)的文件功能解释

known_hosts记录ssh访问过计算机的公钥(public key)id_rsa生成的私钥id_rsa.pub生成的公钥authorized_keys存放授权过的无密登录服务器公钥

(5)根据上面的内容,我们可以写如下的集群分发脚本 要求:循环复制所有文件到其他服务器的相同目录下,同步后的名称要相同,并且在任何路径下面都可以直接调用 在 hadoop102 下面新建 bin 目录和 sxync 文件。

mkdir /home/mrlin/bin

cd /home/mrlin/bin

vim sxync

编写内容如下:

#!/bin/bash

#1.判断参数个数

if [ $# -lt 1 ]

then

echo Not Enough Arguement!

exit;

fi

#2.遍历集群所有机器

for host in hadoop102 hadoop103 hadoop104

do

echo ================== $host ==================

# 3.遍历所有目录,挨个发送

for file in $@

do

# 4.判断文件是否存在

if [ -e $file ]

then

# 5.获取父目录

pdir=$(cd -P $(dirname $file); pwd)

# 6.获取当前文件的名称

fname=$(basename $file)

# 7.ssh登录其他服务器账号创建目录

ssh $host "mkdir -p $pdir"

# 8.同步文件

rsync -av $pdir/$fname $host:$pdir

else

echo $file does not exists!

fi

done

done

修改脚本具有执行权限

chmod +x xsync

测试脚本是否可用,将xsync脚本同步到其他服务器上

xsync /home/mrlin/bin

将脚本复制到/bin中,以便全局调用

sudo cp xsync /bin/

同步环境变量配置(root所有者)

sudo ./bin/sxync /etc/profile.d/myenv.sh

注意:如果用了sudo,那么 xsync 一定要给它的路径补全 ./bin/sxync。

7、hadoop生产环境配置介绍

Hadoop配置文件分两类:默认配置文件和自定义配置文件,当想修改某一配置值时,我们一般是修改自定义配置文件,更改其相应属性值。因为一是自定义的配置文件优先级比默认配置文件的优先级高,同一个属性如果在默认配置和自定义配置都设置,则会以自定义中设置的为准,而造成修改默认配置却不生效的后果;二是我们一般不修改系统的默认配置,这样当想恢复系统默认的时候,只需要删除自定义配置文件里面相对应的属性值即可。 (1)系统默认配置文件路径

要获取的默认文件文件存放在Hadoop的jar包中的位置[core-default.xml]hadoop-common-3.1.3.jar/core-default.xml[hdfs-default.xml]hadoop-hdfs-3.1.3.jar/hdfs-default.xml[yarn-default.xml]hadoop-yarn-common-3.1.3.jar/yarn-default.xml[mapred-default.xml]hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

(2)自定义配置文件路径 自定义配置文件的路径都在 /opt/module/hadoop-3.1.3/etc/hadoop 里面,里面分别对应核心配置文件 core-site.xml,hdfs 配置文件 hdfs-site.xml ,yarn 配置文件 yarn-site.xml 和 mapreduce 配置文件 mapred-site.xml。

1)集群配置

配置 NameNode、SecondaryNameNode 和 ResourceManager 到不同的服务器上面,这3个都是比较耗内存的,也是功能不同的,所以分开配置到不同服务器。 这里 NameNode 可以看成是 HDFS 的管理者,SecondaryNameNode 是辅助 NameNode 的次管理者,帮忙协助 NameNode 处理事情,也能作为 NameNode 的部分备份。 ResourceManager 可以看成是 yarn 的管理者,也叫资源管理器。 自定义文件配置:

vim /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

vim /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml

vim /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml

vim /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml

(1)配置核心文件 core-site.xml

fs.defaultFS

hdfs://hadoop102:8020

hadoop.tmp.dir

/opt/module/hadoop-3.1.3/data

hadoop.http.staticuser.user

mrlin

(2)配置HDFS文件 hdfs-site.xml

dfs.namenode.http-address

hadoop102:9870

dfs.namenode.secondary.http-address

hadoop104:9868

(3)配置YARN文件 yarn-site.xml

yarn.nodemanager.aux-services

mapreduce_shuffle

yarn.resourcemanager.hostname

hadoop103

yarn.nodemanager.env-whitelist

JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME

(4)配置MapReduce文件 mapred-site.xml

mapreduce.framework.name

yarn

(5)配置集群的workers,将需要添加进集群的服务器都加进来

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

添加如下内容:

hadoop102

hadoop103

hadoop104

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

(6)分发配置信息 将自定义的配置信息分发到其他的服务器上面。

xsync /opt/module/hadoop-3.1.3/etc/hadoop/

在其他的服务上面,查看 mapred-site.xml 是否和配置的信息一致。

(7)启动集群 如果集群是第一次启动,需要在hadoop102节点格式化NameNode,格式化NameNode会生成新的集群id。如果是集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止 namenode 和 datanode 进程,并且要删除所有服务器上面的data和logs目录,然后再进行格式化。如果不先删除data和log目录的内容,当重新格式化NameNode后,会生成新的id,导致新的id跟之前datanode的id不一致,集群就无法正常启动。

# 在 hadoop102 节点上格式化 namenode(集群第一次启动时,才需要)

hdfs namenode -format

# 在 hadoop102 节点上启动HDFS

sbin/start-dfs.sh

# 在配置了ResourceManager的节点(hadoop103上)启动YARN

sbin/start-yarn.sh

Web端查看HDFS的NameNode (a)浏览器中输入:http://hadoop102:9870 (b)查看HDFS上存储的数据信息 Web端查看YARN的ResourceManager (a)浏览器中输入:http://hadoop103:8088 (b)查看YARN上运行的Job信息

(8)测试集群基本功能 在集群新建目录,上传文件到集群中,并将文件再次下载下来:

hadoop fs -mkdir /input

hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /

hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./

新建目录并上传文件后,可以通过 http://hadoop102:9870 查看文件是否存在。

2)历史服务器配置

为了查看程序的历史运行情况,需要配置一下历史服务器,具体配置步骤如下: (1)配置mapred-site.xml 在 mapred-site.xml 文件里面添加如下配置

mapreduce.jobhistory.address

hadoop102:10020

mapreduce.jobhistory.webapp.address

hadoop102:19888

(2)分发历史服务器的配置

xsync /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml

(3)在hadoop102启动历史服务器

mapred --daemon start historyserver

(4)查看历史服务器是否启动

jps

(5)在Web端,浏览器中输入以下网址,查看JobHistory http://hadoop102:19888/jobhistory

3)日志服务器配置

应用运行完成以后,将程序运行日志信息上传到HDFS系统上,可以查看到程序运行的详细情况,方便开发和调试。具体配置步骤如下: 注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。 (1)配置yarn-site.xml 在 yarn-site.xml 中添加配置如下:

yarn.log-aggregation-enable

true

yarn.log.server.url

http://hadoop102:19888/jobhistory/logs

yarn.log-aggregation.retain-seconds

604800

(2)分发日志服务器的配置到其他服务器

xsync /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml

(3)关闭NodeManager 、ResourceManager和HistoryServer

sbin/stop-yarn.sh

mapred --daemon stop historyserver

其中 start-dfs.sh / stop-dfs.sh 为整体启动或关闭 HDFS 进程; start-yarn.sh / stop-yarn.sh 为整体启动或关闭 yarn 进程; 单独启动或关闭 HSDF 组件namenode,datanode,secondarynamenode 命令如下:

hdfs --daemon start/stop namenode/datanode/secondarynamenode

单独启动或关闭 yarn组件 resourcemanager,nodemanager 命令如下:

yarn --daemon start/stop resourcemanager/nodemanager

单独启动或关闭历史服务器命令如下:

mapred --daemon start/stop historyserver

(4)启动NodeManager 、ResourceManager和HistoryServer

sbin/start-yarn.sh

mapred --daemon start historyserver

(5)测试hadoop系统自带的wordcount程序 在 /opt/module/hadoop-3.1.3 目录新建 input 目录,并新建文件word.txt。

mkdir input

vim word.txt

word.txt 里面写入如下内容:

hello world

Hello hadoop

hello hadoop

执行wordcount程序:

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

目标文件 output 为hadoop上 hdfs 的目录,且该目录不能存在,存在就会报错。如果再次执行wordcount程序时,需要先删除 output 目录。

hadoop fs -rm -r /output

(6)查看刚刚执行程序的日志 http://hadoop102:19888/jobhistory

常用端口号说明:

端口名称Hadoop3.xNameNode内部通信端口8020 / 9000 / 9820NameNode HTTP UI9870MapReduce查看执行任务端口8088历史服务器通信端口19888

4)集群常用脚本配置

在启动集群的时候,每次都要启动hdfs,启动yarn,启动历史服务器,就显的比较繁琐,一般这种情况,可以将所有的命令都写到脚本里面,只需执行一个命令就所有的进程都启动,同理,关闭的时候也所有的都关闭。 在 /home/mrlin/bin 目录下新建 myhadoop.sh 文件,并输入以下内容:

#!/bin/bash

if [ $# -lt 1 ]

then

echo "No Args Input..."

exit ;

fi

case $1 in

"start")

echo " =================== 启动 hadoop集群 ==================="

echo " --------------- 启动 hdfs ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"

echo " --------------- 启动 yarn ---------------"

ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"

echo " --------------- 启动 historyserver ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"

;;

"stop")

echo " =================== 关闭 hadoop集群 ==================="

echo " --------------- 关闭 historyserver ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"

echo " --------------- 关闭 yarn ---------------"

ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"

echo " --------------- 关闭 hdfs ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"

;;

*)

echo "Input Args Error..."

;;

esac

修改脚本赋予执行的权限:

chmod +x myhadoop.sh

测试效果:

myhadoop.sh stop

myhadoop.sh start

查看三台服务器Java进程脚本:jpsall 在 /home/mrlin/bin 目录下新建 jpsall 文件,并输入以下内容:

#!/bin/bash

for host in hadoop102 hadoop103 hadoop104

do

echo =============== $host ===============

ssh $host jps

done

同理,赋予执行的权限:

chmod +x jpsall

测试效果:

jpsall

测试有效时,将脚本分发到其他服务器上,这样其他服务器也能使用:

xsync /home/mrlin/bin/

5)部分错误

(1)在hadoop102启动集群的时候,报hadoop104无权限问题,查看hadoop104中的hadoop文件是什么用户,这里是root用户时,因为用户的权限不同,会报无权限问题。 解决方法:修改hadoop104的hadoop文件的用户为mrlin即可,就是跟hadoop102上面属于同一用户。

(2)is running 233589248B beyond the ‘VIRTUAL’ memory limit. Current usage: 10.0 MB of 1 GB physical memory used; 2.3 GB of 2.1 GB virtual memory used. Killing container. 这是因为虚拟内存的检查导致,将虚拟内存的检查关闭即可。 解决方法:在 yarn-site.xml 配置文件中添加如下虚拟内存的检测关闭即可。

yarn.nodemanager.vmem-check-enabled

false

修改完之后,注意分发到其他服务器上面。然后重启yarn服务。

xsync /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml

sbin/stop-yarn.sh

sbin/start-yarn.sh

(3)虚拟机卡死,断电后重启报错/run/initramfs/rdsosreport.txt 解决方法:

# 第一步:首先输入命令查看mapper下面有哪些设备

ls /dev/mapper

# 第二步:输入命令修复centos-root

xfs_repair /dev/mapper/centos-root -L

# 第三步:重启

reboot

(4)不识别主机名称 解决方法:在 /etc/hosts 文件中添加ip地址和主机名称的对应关系

192.168.20.102 hadoop102

192.168.20.103 hadoop103

192.168.20.104 hadoop104

192.168.20.105 hadoop105

(5)修改环境变量后不生效 一般查看是否没有执行更新命令导致。 解决方法:source /etc/profile

✧ 相关推荐 ✧

鉑族金屬
365bet博彩官网

鉑族金屬

📅 07-23 👁️ 2764
九阴真经服务器开启时间安排与公告
365bet博彩官网

九阴真经服务器开启时间安排与公告

📅 06-28 👁️ 7046
贷款还款失败怎么再还款?解决措施大全
365bet足球官方开户网

贷款还款失败怎么再还款?解决措施大全

📅 07-22 👁️ 6198