Hadoop伪分布式安装流程补充.docx
《Hadoop伪分布式安装流程补充.docx》由会员分享,可在线阅读,更多相关《Hadoop伪分布式安装流程补充.docx(23页珍藏版)》请在冰点文库上搜索。
![Hadoop伪分布式安装流程补充.docx](https://file1.bingdoc.com/fileroot1/2023-7/22/c19ad5c3-6b08-4146-a0f2-385e8c77758f/c19ad5c3-6b08-4146-a0f2-385e8c77758f1.gif)
Hadoop伪分布式安装流程补充
Hadoop伪分布式安装流程
一、说明
Hadoop的运行模式有三种:
第一种是单机模式(localmode)
此模式不需要运行任何守护进程(daemon),所有的程序都运行在一个JVM上。
在这种模
式下调试和测试较方便,所以通常情况下在这种模式下进行开发测试,是应用开发阶段采
用的模式。
第二种是伪分布模式(pseudo-distributedmode)
模拟分布式,单机上运行Hadoop守护进程。
开发测试阶段采用的模式。
第三种是完全分布式(fully-distributedmode)
Hadoop守护进程运行在一个分布的集群上。
这种模式需要关注的是各组件属性的正确配
置和完整的启动Hadoop守护进程。
GNU/Linux是Hadoop产品开发和运行的平台。
Hadoop已在有四千个节点的GNU/Linux
主机组成的集群系统上得到验证。
Windows平台是作为开发平台支持的。
由于分布式操
作尚未在Windows平台上充分测试,所以还不作为一个生产平台被支持。
所需软件包括:
JDK1.6及以上版本,必须安装,建议选择Sun公司发行的Java版本。
SSH必须安装并且保证sshd服务一直运行,以便用Hadoop脚本管理远端Hadoop守护进程。
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
以Hadoop2.0为例。
集群里的一台机器被指定为NameNode,另一台不同的机器被指定为ResourceManager。
这些机器是Master。
余下的机器即作为DataNode也作为NodeManager。
这些机器是Slaves。
通常使用HADOOP_HOME指定Hadoop的安装的根路径。
要求集群里的所有机器的HADOOP_HOME路径相同。
就是把Hadoop安装在相同的路径下。
伪分布式模拟了分布式Hadoop集群的一些功能。
通常运用在测试环境,并且不是并行的。
但是,小规模的Hadoop安装提供了学习Hadoop基础的简单方法。
Hadoop需要运行在Linux系统上,Linux是Hadoop唯一支持的生产平台,通常是在Windows系统开发,而运行则在Linux系统上的Hadoop环境下运行。
对硬件的要求是双核、2G内存和尽可能大的硬盘空间。
Linux环境,Java环境等。
下面分步说明安装步骤。
1.1Hadoop伪分布式安装流程
1.1.1安装ApacheHadoop
从Hadoop的网站(http:
//hadoop.apache.org/)上下载最新的发布版本(通常是一个打包好的gzippedtar文件),如:
hadoop-*.*.*.tar.gz。
通常把Hadoop安装包解压到/usr/local目录下,当然也可以解压到/opt目录下。
cd/usr/local
tar-xzvfhadoop-2.7.0.tar.gz
mvhadoop-2.7.0hadoop
vi/etc/profile
要为Hadoop配置环境变量,便于在任何目录执行Hadoop命令。
以root用户登录系统,在/etc目录下的profile中添加以下内容。
HADOOP_HOME是Hadoop的安装目录,设置PATH是为了系统可以找到Hadoop所有的命令,并且可以在任何目录执行Hadoop命令,而不用先进入到Hadoop的bin或sbin目录下再执行命令。
CLASS_PATH是告知Java虚拟机Hadoop的jar包在什么位置。
用户root有修改系统文件的权限,用文本编辑器打开/etc/profile文件
vi/etc/profile
在profile文件后面添加以下内容保存退出
exportHADOOP_HOME=/usr/local/hadoop
exportPATH=$PATH:
$HADOOP_HOME/sbin:
$HADOOP_HOME/bin
exportCLASS_PATH=$CLASS_PATH:
$HADOOP_HOME/lib
1.1.2安装JDK
Hadoop是用Java语言编写的,因此需要在Java环境下工作。
尽管其他的JDK安装包也支持Hadoop,但使用最广的任然是Sun提供的JDK。
Hadoop2.0版本以上要求JDK版本在1.6及以上。
从官网下载发布的最新JDK安装包(Linux系统)。
我们以CentOS6.4的Linux系统为例,系统已经预安装了开源的JDK版本,通过命令java-version进行查看。
通过命令删除预安装的JDK版本
rpm-qa|grepjava
rpm-e--nodeps文件名
用命令java-version检查是否已经卸载
安装JDK
cd/usr/local
tar-xzvfjdk-8u51-linux-i586.tar.gz
解压完成后在/usr/local目录下多了一个jdk1.8.0.51目录,注意JAVA_HOME就是JDK的安装目录/usr/local/jdk1.8.0.51。
配置环境变量:
用root用户登录配置环境变量
vi/etc/profile
在profile配置文件最后添加一下内容:
exportJAVA_HOME=/usr/local/jdk1.8.0_51
exportJRE_HOME=/usr/local/jdk1.8.0_51/jre
exportPATH=$JAVA_HOME/bin:
$JRE_HOME/bin:
$PATH
exportCLASS_PATH=.:
$JAVA_HOME/lib:
$JRE_HOME/lib
为了确保JAVA_HOME配置生效,运行profile脚本
source/etc/profile
1.1.3SSH免认证登录(无密码验证)配置
单机模式下,没有Hadoop守护进程,所以不需要配置SSH。
在伪分布式和完全分布式情况下必须启动Hadoop守护进程,然而启动Hadoop守护进程的前提是已经成功安装了SSH。
Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(SecureShell)来启动和停止各个DataNode上的各种守护进程的。
这就必须在节点之间执行指令的时候无需输入密码,因此需要安装配置SSH,这样NameNode使用SSH无密码登录并启动其它节点上的DataNode进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode报告节点运行情况。
用下面的命令查看系统是否安装了SSH服务和RSYNC服务
rpm-qa|grepopenssh
rpm-qa|greprsync
rsync是远程数据同步工具,可以同步多台主机间的文件。
如果没有安装两个服务,采用下面命令安装,但是安装需要连接外网。
安装命令是:
yuminstallssh
yuminstallrsync
在主机上生成密码对。
我们用yarn用户登录生成密码对
命令:
ssh-keygen-trsa-f~/.ssh/id_rsa
sshlocalhost
ls-a
cd.ssh
ls
catid_rsa
cd/etc
ls
cdssh
ls
su
...
visshd_config
exit
cd~
cd.ssh
ls
catauthorized_keys
servicesshdrestart
cd.ssh
ls–l
-rw-------.1yarnyarn3912月2413:
53authorized_keys
-rw-------.1yarnyarn16752月2413:
51id_rsa
-rw-r--r--.1yarnyarn3912月2413:
51id_rsa.pub
-rw-r--r--.1yarnyarn7772月2514:
05known_hosts
chmod600authorized_keys
ls–l
cd~
ls–la
drwx------.2yarnyarn40962月2413:
55.ssh
cd/etc
su
…
vihosts
127.0.0.1YARN
exit
sshlocalhost
把生成的公钥追加到yarn用户的~/.ssh/authorized_keys文件中,就是把密码字符串复制进去,再次追加公钥,前面的信息不能丢失。
这个文件非常重要,机器间登录都要读取这个文件,判断是否允许登录,注意:
使用yarn用户执行下面命令。
使用yarn用户执行下面的命令!
命令:
cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
为文件authorized_keys设置读写权限,这个文件在用户yarn工作目录下,yarn就是属主,设置属主的读写权限,注意:
使用yarn用户执行下面命令。
命令:
chmod600~/.ssh/authorized_keys
为用户yarn修改~/.ssh目录的权限,让yarn用户对目录有读、写、执行的权限
命令:
chmod700~/.ssh
这个命令不要执行,因为我们是伪分布模式。
scp~/.ssh/id_rsa.pubyarn@192.168.1.3:
~/
对/etc/ssh/目录下的sshd_config文件进行配置,注意:
这个文件是root的权限,所以要更换用户,使用管理员权限修改文件。
命令:
su-
cd/etc/ssh
visshd_config
配置完成后要重启服务,退出root,用户yarn测试验证是否成功
命令:
servicesshdrestart
sshlocalhost
配置/etc目录下的文件hosts,注意:
使用root权限,配置如下:
命令:
cd/etc
vihosts
/etc/hosts文件中添加ip和主机名。
…
127.0.0.1YARN
1.1.4创建Hadoop工作目录
数据目录和日志目录通常情况下不在Hadoop安装目录下,因为Hadoop版本升级不会影响到已存储的数据。
当然我们是测试环境,可以在Hadoop安装目录中创建。
cd/usr/local/hadoop
mkdir-pdata/namenode
mkdir-pdata/snamenode
mkdir-pdata/datanode
mkdir-pdata/pid
mkdirlogs
mkdir-ptmp/mapred/local
这些创建的目录在配置文件中要用到。
1.1.5配置hadoop-env.sh配置文件
hadoop-env.sh配置文件是Hadoop运行期核心的配置文件,文件中的变量为集群特有的值。
针对集群的实际情况要对此文件进行配置。
hadoop-env.sh文件中主要设置了Hadoop守护进程的运行环境和守护进程的运行参数。
守护进程包括NameNode进程、DataNode进程、ResourceManager进程、NodeManager进程和SecondaryNameNode进程。
配置如下:
…
#Thejavaimplementationtouse.
exportJAVA_HOME=/usr/local/jdk1.8.0_51
exportHADOOP_CLASSPATH=.
#Thejsvcimplementationtouse.Jsvcisrequiredtorunsecuredatanodes
#thatbindtoprivilegedportstoprovideauthenticationofdatatransfer
#protocol.JsvcisnotrequiredifSASLisconfiguredforauthenticationof
#datatransferprotocolusingnon-privilegedports.
#exportJSVC_HOME=${JSVC_HOME}
exportHADOOP_CONF_DIR=${HADOOP_CONF_DIR:
-"/etc/hadoop"}
#ExtraJavaCLASSPATHelements.Automaticallyinsertcapacity-scheduler.
forfin$HADOOP_HOME/contrib/capacity-scheduler/*.jar;do
if["$HADOOP_CLASSPATH"];then
exportHADOOP_CLASSPATH=$HADOOP_CLASSPATH:
$f
else
exportHADOOP_CLASSPATH=$f
fi
done
#Themaximumamountofheaptouse,inMB.Defaultis1000.
exportHADOOP_HEAPSIZE="500"
exportHADOOP_NAMENODE_INIT_HEAPSIZE="500"
#ExtraJavaruntimeoptions.Emptybydefault.
exportHADOOP_OPTS="$HADOOP_OPTS-D.preferIPv4Stack=true"
#CommandspecificoptionsappendedtoHADOOP_OPTSwhenspecified
exportHADOOP_NAMENODE_OPTS="-XX:
+UseParallelGC${HADOOP_NAMENODE_OPTS}"
exportHADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:
-INFO,RFAS}-Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:
-INFO,NullAppender}$HADOOP_NAMENODE_OPTS"
exportHADOOP_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS$HADOOP_DATANODE_OPTS"
exportHADOOP_SECONDARYNAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:
-INFO,RFAS}-Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:
-INFO,NullAppender}$HADOOP_SECONDARYNAMENODE_OPTS"
exportHADOOP_NFS3_OPTS="$HADOOP_NFS3_OPTS"
exportHADOOP_PORTMAP_OPTS="-Xmx512m$HADOOP_PORTMAP_OPTS"
#Thefollowingappliestomultiplecommands(fs,dfs,fsck,distcpetc)
exportHADOOP_CLIENT_OPTS="-Xmx512m$HADOOP_CLIENT_OPTS"
#HADOOP_JAVA_PLATFORM_OPTS="-XX:
-UsePerfData$HADOOP_JAVA_PLATFORM_OPTS"
#Onsecuredatanodes,usertorunthedatanodeasafterdroppingprivileges.
#This**MUST**beuncommentedtoenablesecureHDFSifusingprivilegedports
#toprovideauthenticationofdatatransferprotocol.This**MUSTNOT**be
#definedifSASLisconfiguredforauthenticationofdatatransferprotocol
#usingnon-privilegedports.
exportHADOOP_SECURE_DN_USER=${HADOOP_SECURE_DN_USER}
#Wherelogfilesarestored.$HADOOP_HOME/logsbydefault.
#exportHADOOP_LOG_DIR=${HADOOP_LOG_DIR}/$USER
#Wherelogfilesarestoredinthesecuredataenvironment.
exportHADOOP_SECURE_DN_LOG_DIR=${HADOOP_LOG_DIR}/${HADOOP_HDFS_USER}
###
#HDFSMoverspecificparameters
###
#SpecifytheJVMoptionstobeusedwhenstartingtheHDFSMover.
#TheseoptionswillbeappendedtotheoptionsspecifiedasHADOOP_OPTS
#andthereforemayoverrideanysimilarflagssetinHADOOP_OPTS
#
#exportHADOOP_MOVER_OPTS=""
###
#AdvancedUsersOnly!
###
#Thedirectorywherepidfilesarestored./tmpbydefault.
#NOTE:
thisshouldbesettoadirectorythatcanonlybewrittentoby
#theuserthatwillrunthehadoopdaemons.Otherwisethereisthe
#potentialforasymlinkattack.
exportHADOOP_PID_DIR=/usr/local/hadoop/data/pid
exportHADOOP_PID_DIR=${HADOOP_PID_DIR}
exportHADOOP_SECURE_DN_PID_DIR=${HADOOP_PID_DIR}
#Astringrepresentingthisinstanceofhadoop.$USERbydefault.
exportHADOOP_IDENT_STRING=$USER
首先要设置JAVA_HOME,JDK安装完成后,安装的路径需要告诉Hadoop,这样Hadoop在运行期才能找到JDK,否则在启动Hadoop服务时会报出找不到JAVA_HOME并终止启动。
设置HADOOP_CLASSPATH为当前目录,这为执行作业提供了方便,在本地文件系统下的任何目录都可以执行MapReduce作业。
JSVC_HOME变量不用设置,和Tomcat服务有关。
HADOOP_CONF_DIR默认是HADOOP_HOME的/etc/hadoop目录。
注意下面的代码,Hadoop2.0后目录结构发生变化,取消了contrib目录,下面的循环不会执行。
#ExtraJavaCLASSPATHelements.Automaticallyinsertcapacity-scheduler.
forfin$HADOOP_HOME/contrib/capacity-scheduler/*.jar;do
if["$HADOOP_CLASSPATH"];then
exportHADOOP_CLASSPATH=$HADOOP_CLASSPATH:
$f
else
exportHADOOP_CLASSPATH=$f
fi
done
设置Hadoop堆内存,Hadoop最大堆内存和NameNode进程最大堆内存,默认1G。
可根据硬件情况和集群规模动态设置:
#Themaximumamountofheaptouse,inMB.Defaultis1000.
exportHADOOP_HEAPSIZE="500"
exportHADOOP_NAMENODE_INIT_HEAPSIZE="500"
设置Hadoop进程的网络协议:
exportHADOOP_OPTS="$HADOOP_OPTS-D.preferIPv4Stack=true"
下面是Hadoop守护进程的运行环境和运行参数。
包括NameNode进程、DataNode进程和SecondaryNameNode进程。
添加下面设置,给NameNode进程设置垃圾回收机制。
exportHADOOP_NAMENODE_OPTS="-XX:
+UseParallelGC${HADOOP_NAMENODE_OPTS}"
设置HADOOP_PID_DIR变量,如果不设置默认/tmp目录下:
exportHADOOP_PID_DIR=/usr/local/hadoop/data/pid
1.1.6配置mapred-env.sh配置文件
mapred-env.sh配置文件是在执行MapReduce作业是的运行环境和运行参数的配置文件。
…
exportJAVA_HOME=/usr/local/jdk1.8.0_51
exportHADOOP_JOB_HISTORYSERVER_HEAPSIZE=500
exportHADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
#exportHADOOP_JOB_HISTORYSERVER_OPTS=
#Wherelogfilesarestored.$HADOOP_MAPRED_HOME/logsbydefault.
#exportHADOOP_MAPRED_LOG_DIR=""
#HadoopJobSummarylogger.
#exportHADOOP_JHS_LOGGER=INFO,RFA
#Thepidfilesarestored./tmpbydefault.
exportHADOOP_MAPRED_PID_DIR=/usr/local/hadoop/data/pid
#Astringrepresentingthisinstanceofhadoop.$USERby