关于Centos安装单机版hadoop和几点思考

1 安装单机hadoop基本步骤

注意一点,要用普通用户登录到Centos系统哦。

  1. 下载jdk1.7和hadoop2.7;
  2. 关闭防火墙
  3. 修改hostname
  4. ssh自动登录
  5. 安装jdk及其配置
  6. 安装hadoop及其配置

2 下载jdk1.7和hadoop2.7

2.1 为什么要用jdk1.7和hadoop2.7呢?

其实这是我在实际安装中遇到了一些问题,我刚开始用了最新的jdk版本(jdk12),我这个人喜欢用新的软件包,同样hadoop也是用的最新的版本(hadoop3.2),在我眼中,不会考虑太多,单纯地认为,新版本功能更多、作用也更大。但是似乎安装结果不尽人意,我弄了两三天(可能不止吧,我也忘记是什么时候开始、什么时候结束的)。
结果是运行启动脚本:1. start-dfs.sh,本该启动成功3个应用,即NameNode、DataNode和SecondNameNode,但是DataNode启动不了;2. start-all.sh,本该启动5个应用,除了上述的三个外,还包括NodeManager和ResourceManeger的,但是ResourceManager启动不了。非但如此,连管理员界面也打不开,我考量了许久,也许是我jdk和hadoop版本有什么问题。

HadoopJavaVersions:https://cwiki.apache.org/confluence/display/HADOOP2/HadoopJavaVersions
参考了这个,解释如下:Version 2.7 and later of Apache Hadoop requires Java 7. It is built and tested on both OpenJDK and Oracle (HotSpot)'s JDK/JRE. Earlier versions (2.6 and earlier) support Java 6.
hadoop2.7版本和后续版本需要jdk1.7,可以使用OpenJDK和oracle的jdk,早期的版本(hadoop2.6及更早的版本)支持jdk1.6。

相对比较好的支持版本如下:
HadoopJavaVersions
根据上图,我们知道了,使用的比较好的hadoop2.7对应的java版本是jdk1.7,所以建议选择jdk1.7版本。

2.2 jdk下载链接

jdk我一般是在百度找到jdk官网:https://www.oracle.com/technetwork/java/javase/downloads/index.html
页面显示最新的jdk版本下载链接,我们滑倒最下面,看到Java Archive,这里存放了jdk的历史版本,点击download,选择Java SE 7,首先要接受许可,然后选择合适的linux版本jdk: jdk-7u80-linux-x64.tar.gz。这个时候有问题了,要登录oracle才能下载jdk,真气人。注册过程比较复杂,而且竟然没有收到验证注册的邮件。
我为大家找到了一个免费下载jdk1.7的链接:http://www.pc6.com/softview/SoftView_447834.html
点击本地下载,然后再选择一个普通下载地址,随便选一个就行(注意是选择灰色的下载地址哦),浏览器弹出保存框,确认文件是否是146M左右,如果不是,那就取消,重新选一个地址。下载并保存到电脑里面。

2.3 hadoop下载链接

hadoop下载可以直接通过官网下载,百度搜索hadoop,进入官网,然后download页面,选择一个mirror site,镜像网站会比较快,选择清华的镜像网站,选择hadoop2.7.7版本,下载压缩包hadoop-2.7.7.tar.gz

3 关闭防火墙

在终端里面输入简单的几个命令就能关闭防火墙了

service iptables		#查看防火墙的命令
service iptables status	#查看防火墙状态
service iptables stop	#关闭防火墙

注意Active后面显示inactive(dead)即防火墙已关闭。
防火墙已被关闭

4 修改hostname

在终端输入命令

su					#切换到root用户
vim /etc/hosts		#修改hostname
# 修改好后,保存并退出
# Esc ——> : ——> wq
hostname			#打印localhost.localdomain
hostname hmaster 	#无报错
hostname			#显示名称为hmaster

添加后面一行,如下图:
hmaster

5 ssh免密登录

首先查看是否安装了ssh客户端

rpm -qa|grep ssh

显示ssh客户机和服务机即已安装了ssh
ssh
安装和启动ssh

yum  install -y openssh-server openssh-clients	#安装命令
service sshd start 或 /etc/init.d/sshd start		#启动命令
chkconfig --level 2345 sshd on					#配置开机启动

ssh免密登录的过程我不太记得了,如果输入命令ssh localhost,不用输入密码,就表示设置成功了,这个东西要在启动hadoop时用到。

ssh免密登录的命令如下:

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa  
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys  
chmod 600 ~/.ssh/authorized_keys
ssh localhost				#查看是否能够免输入密码登录localhost

ssh免密

6 安装jdk及其配置

注意一下,安装jdk时用root用户安装。用浏览器下载的jdk和hadoop一般在/home/user1/下载文件夹里面(我的普通用户名时user1,所以这个文件名也是user1),我们首先把jdk拷贝到/usr/local/文件夹下面,解压缩,然后配置路径。

su										#首先切换到root用户
cp /home/user1/下载/jdk-7u79_linux-x64.tar.gz /usr/local/	#拷贝jdk到/usr/local下
cd /usr/local							#进入/usr/local目录
tar -zxvf jdk-7u79_linux-x64.tar.gz		#解压缩jdk
ls										#显示jdk的文件名,我的是jdk1.7.0_79
# 配置jdk环境变量
vim /etc/profile						#打开配置文件
# 在export JAVA_HOME里面补充如下
export JAVA_HOME=/usr/local/jdk1.7.0_79
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
# 然后保存并退出 Esc——> : ——> wq
source /etc/profile						#使配置文件生效
echo $JAVA_HOME							#查看配置文件的java路径是否正确
java -version
# 查看java版本是否正确(因为centos默认安装了openjdk1.8,要自行卸载),
# 直到显示的java路径和版本都显示是1.7版本才能进行下一步哦

# 删除默认jdk方法
yum list installed | grep java			#列举匹配已安装的java的软件包,我的是openjdk1.8
yum -y remove java-1.8.0-openjdk*		#卸载安装的jdk
source /etc/profile						#重新使jdk配置文件生效
java -version							#查看java版本

7 安装hadoop及其配置

注意一下,安装hadoop时用普通用户user1安装。
首先要解压hadoop压缩包和配置hadoop环境变量;
然后要修改hadoop里面一些文件的内容。

7.1 解压hadoop和配置hadoop环境变量

我们要切换到普通用户,用普通用户安装,配置环境变量时用root用户。

su user1						#root用户切换到普通用户,su 用户名
# hadoop要安装在当前用户目录下,我用的是普通用户user1,所以安装在user1的目录下
cp /home/user1/下载/hadoop-2.7.7.tar.gz /home/user1/
cd /home/user1/					#切换目录
tar -zxvf hadoop-2.7.7.tar.gz	#解压hadoop
ls								#显示所有文件名称,hadoop解压后的文件名为hadoop-2.7.7
su								#切换root用户,配置hadoop的环境变量
vim /etc/profile				#打开配置文件
export HADOOP_HOME=/home/user1/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 然后保存并退出 Esc——> : ——> wq
source /etc/profile				#使配置文件生效
hadoop version					#查看hadoop版本,我的显示的是hadoop-2.7.7

7.2 修改hadoop里面的某些文件内容

主要关注hadoop-2.7.7的三个目录,bin目录下为hadoop命令脚本,etc/hadoop目录下为hadoop的配置文件,sbin目录下为运行hadoop服务的脚本。
首先要修改hadoop的配置文件,在hadoop-2.7.7/etc/hadoop目录下,需要修改的文件有五个,如下:

  1. hadoop-env.sh
  2. core-site.xml
  3. hdfs-site.xml
  4. mapred-site.xml
  5. yarn-site.xml

第1步. 切换用户和目录

su user1									#切换普通用户
cd /home/user1/hadoop-2.7.7/etc/hadoop		#切换到hadoop-2.7.7的etc/hadoop目录
ls											#显示所有文件,查看是否存在上面的那五个文件
# 只有一个文件没有,mapred-site.xml,但是有mapred-site.xml.template,复制一个就可以了
cp mapred-site.xml.template mapred-site.xml	#复制mapred.xml文件

第2步. 修改五个文件

# 1) 修改hadoop-env.sh文件
vim hadoop-env.sh							#打开hadoop-env.sh文件
# 将export JAVA_HOME=${JAVA_HOME}注释掉,添加一行
export JAVA_HOME=/usr/local/jdk1.7.0_79
# 然后保存并退出 Esc——> : ——> wq

# 2) 修改core-site.xml文件
vim core-site.xml							#打开core-site.xml文件
# 在<configuration> </configuration>之间添加如下属性,缩进两个空格
  <!-- NameNode位置 -->
  <property>
    <name>fs.defaultFS</name>
    <!-- 注意hmaster根据你在/etc/hosts文件里面的本地ip取的名称而定 -->
    <value>hdfs://hmaster:9000</value>
  </property>
  <!-- 临时目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/hadoop-2.7.7/tmp</value>
  </property>
# 然后保存并退出 Esc——> : ——> wq

# 3) 修改hdfs-site.xml文件
vim hdfs-site.xml							#打开hdfs-site.xml文件
# 在<configuration> </configuration>之间添加如下属性,缩进两个空格
  <!-- hdfs副本数 -->
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
# 然后保存并退出 Esc——> : ——> wq

# 4) 修改mapred-site.xml文件
vim mapred-site.xml							#打开mapred-site.xml文件
# 在<configuration> </configuration>之间添加如下属性,缩进两个空格
  <!-- 设置MapReduce运行在Yarn上 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
# 然后保存并退出 Esc——> : ——> wq

# 5) 修改yarn-site.xml文件
vim yarn-site.xml							#打开yarn-site.xml文件
# 在<configuration> </configuration>之间添加如下属性,缩进两个空格
  <!-- 指定YARN的老大(ResourceManager)的地址  -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hmaster</value>
  </property>
  <!-- reducer获取数据的方式  -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
# 然后保存并退出 Esc——> : ——> wq

第3步. 格式化命令

cd ../../bin				#切换到hadoop-2.7.7的bin目录
ls							#可以看到有hadoop、hdfs、mapred和yarn命令
hdfs namenode -format		#格式化

格式化成功如下图(不能报错,而且要有黑色显示的那一行log,才算格式化OK):
格式化

第4步. 启动hadoop

cd ../sbin					#切换到hadoop-2.7.7的sbin目录
jps							#首先我们来查看启动了什么进程
# 结果显示只有jps一个进程
ls							#查看都有哪些启动命令,一般使用start-all.sh全部启动就好了,关闭就stop-all.sh
# 如果要你输入密码,这是ssh没有配置免密登陆的原因,密码为你的用户登陆Centos的密码。
./start-all.sh				#等待一会,在启动时如果要输入yes/no,你就输入yes就好了
jps							#启动后要查看hadoop是否启动成功
# 结果显示有6个进程:Jps、ResourceManager、SecondaryNameNode、NameNode、NodeManager、DataNode,
# 少一个都不行,我之前安装hadoop3.2和jdk12时就启动不了某个应用

第5步. 登录hadoop管理员界面

访问NameNode:http://192.168.1.107:8088(ip地址写你的主机ip)
NameNode
访问hdfs:http://192.168.1.107:50070(ip地址写你的主机ip)
hdfs
只有当你能够访问hadoop管理员界面才算搭建hadoop单机环境成功。当你进行到这一步时,恭喜你,成功搭起了hadoop单机环境!

8 几点思考

8.1 选用合适的jdk和hadoop版本

思考了安装hadoop竟然用了这么多天,主要原因时jdk和hadoop的版本没有选对,我首先就安装了jdk12,最新但可能是最不稳定jdk了,只是觉得jdk变化得好快呀,一两年前才到1.8还是1.9,我在windows安装的jdk都是最新版本的,但是centos系统好像不一样。系统还自带了一个openjdk,openjdk一定要卸载哦,因为不卸载,有一个问题:echo $JAVA_HOME是你配置的jdk号,但是java -version显示的是openjdk1.8,所以要把openjdk卸载,以防在配置hadoop的hadoop-env.sh时出现问题。

因缘巧合让我发现了一个神奇的网站HadoopJavaVersions,即这个网址 https://cwiki.apache.org/confluence/display/HADOOP2/HadoopJavaVersions
根据官方提议,目前hadoop2.7是比较稳定的版本,而且需要搭配jdk1.7,于是我换成了jdk1.7和hadoop2.7。这样,按照网上的教程很快就安装成功了,心里好开心哦~

8.2 主机配置的问题

答案只有一个,方法不对,现在以及改正过来了,首先配置hosts文件,加入一行本机ip host名称,然后输入一行命令

hostname hmaster				#hmaster为你的host名称

网上大多数教程教你配置hostname的名称,这个配置我不知道是怎么弄出来的,他们修改/etc/hosts文件,hostname命令本来是打印的study.centos.wen,我不知道他们怎么让它改成wen这样没有点的名称,这个属性又跟hadoop配置文件有关,比如说这个属性hdfs://hmaster:9000,一下子把hmaster设为localhost,一下子又设置成我的主机ip,之前我在看教程的时候,有两个地方要设置出来,还有一个类似192.168.124.144:50090这样子的网站链接,我快要被这三个东西弄得头晕了:

  1. 到底怎么设置hostname呢?
  2. /etc/hosts里面的内容到底怎么写,ip用哪个?
  3. 因为有的教程是用的虚拟机环境,主机ip设置成了192.168.1.100,然后在配置文件里面又写程192.168.1.1或在127.0.0.1,那到底怎么对应的呢?
  4. ……

还有好多问题,但是现在我发现那个hostname根本就不用管它,在/etc/hosts加一行你的主机ip [tab键] 为它取一个名字hmaster就好了,只要设置core-site.xml里面的hdfs://hmaster:9000是这样子的。另外一个链接192.168.124.144:50090可以不用设置的。

8.3 防火墙问题

不知道怎么回事,service iptables命令无效,防火墙文件好像有些问题,每次都定位不到,后来在百度里面搜索打印的那个问题,改来改去,竟然自己好了,问题和解决方案我忘记了。
防火墙问题
这是因为Centos7默认的防火墙是firewalld而非iptables,所以不能用service iptables status命令查防火墙状态,但是很方便就想用这个命令service firewalld status查防火墙状态,Centos也确实这么做了。
防火墙处于激活状态
我们需要永久地关闭防火墙,命令如下:

firewall-cmd --state                #显示centOS7防火墙状态(只显示是否running)
systemctl stop firewalld			#关闭防火墙
systemctl mask firewalld			#禁用防火墙
systemctl disable firewalld    		#禁止开机自启动

如果要用防火墙服务的话,开启防火墙命令如下:

systemctl unmask firewalld			#开启防火墙

如果你想用iptables的防火墙的话,需要安装iptables,并配置开机启动,就可以使用service iptables命令了。

yum install iptables-services		#安装iptables服务
systemctl enable iptables			#设置开机启动iptables
service iptables status				#查看防火墙状态
service iptables stop				#关闭防火墙
service iptables start				#开启防火墙
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值