hadoop安装与配置
目标:掌握Hadoop安装过程原理
Linux环境准备:
- 安装VMware16 虚拟机
- 部署Centos8 64bit 操作系统
- hadoop-3.3.1.tar.gz
- jdk-8u321-linux-x64.tar.gz
伪分布式模式的安装和配置步骤:
一、准备与配置安装环境:安装虚拟机和linux
- 虚拟机推荐使用vmware,PC可以使用workstation,服务器可 以使用ESXi,在管理上比较方便。ESXi还可以通过拷贝镜像文件复制虚拟机,复制后 自动修改网卡号和ip,非常快捷。如果只是实验用途,硬盘大约预留20-30G空间。
- linux以Centos为例,分区可以选择默认,安装选项选择Desktop Gnome,以及Server、 Server GUI即可。其它Linux,注意选项里应包括ssh,vi(用于编辑配置文件),perl 等(有些脚本里包含perl代码需要解析)
二、安装jdk
-
下载JDK
去Oracle官网下载JDK:Oracle
先下载到本地,然后通过WinSCP与虚拟机链接将安装包上传到linux虚拟机根目录下的/opt
目录中
这里不能将安装包传输过去,因为权限的限制,所以我们先将/opt
目录的权限改为可写,先切换到超级用户然后修改权限
然后就可以传输了
切换至/opt
目录下查看压缩包
-
解压
新建一个/app
文件夹,我们之后的软件都将安装在该目录下mkdir /app
然后解压,并将其移动到/app目录下
tar -zxvf jdk-8u321-linux-x64.tar.gz mv jdk1.8.0_321 /app
可以切换到/app目录下查看解压好的文件夹
-
配置环境变量
解压好JDK之后还需要在环境变量中配置JDK,才可以使用,接下来就来配置JDK
输入命令:vim /etc/profile
编辑配置文件
在文件末尾输入如下代码:
然后保存并退出
最后:source /etc/profile
使刚刚的配置生效
-
测试
最后测试一下环境变量是否配置成功
输入:java -version
出现如下界面代表配置成功
三、安装hadoop
-
下载并解压Hadoop安装包
去官网下载:https://hadoop.apache.org/releases.html
下载到本地目录之后用同样的方法上传到linux虚拟机的/opt
目录下
来到/opt
目录下解压Hadoop的压缩包,然后将解压好的文件移动到/app
目录下
切换到/app
目录下修改一下hadoop文件夹的名字(这里我不小心写错了,修改后的名字是hadoop3.3
,后面改正过来了)
配置Hadoop环境 -
设置DNS解析
vim /etc/hosts
在文本最后一行追加"(本机ip) hadoop0",注意IP与主机名之间用空格隔开
-
设置ssh免密登录
(1)输入如下代码:
ssh-keygen -t rsa -P ''
生成无密码密钥对,询问保存路径直接输入回车,生成密钥对:
id_rsa
和id_rsa.pub
,默认存储在/home/hadoop/.ssh
目录下。接下来:把
id_rsa.pub
追加到授权的key里面去。cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
(2)然后修改权限:
chmod 600 ~/.ssh/authorized_keys
(3)测试:
ssh localhost
-
修改Hadoop配置文件
(1) hadoop-env.sh配置
首先切换到hadoop的目录下cd /app/hadoop3.3/etc/hadoop/
编辑 hadoop-env.sh在文件中插入如下代码:
# The java implementation to use. #export JAVA_HOME=${JAVA_HOME} export JAVA_HOME=/app/jdk1.8.0_321
(2)yarn-env.sh 配置(非必须)
在yarn-env.sh中插入如下代码:export JAVA_HOME=/app/jdk1.8.0_321
(3) core-site.xml配置
在文件末尾的configuration
标签中添加代码如下:<configuration> <property> <name>fs.default.name</name> <value>hdfs://hadoop0:8088</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/hadoop/tmp</value> </property> </configuration>
(4)hdfs-site.xml文件配置
replication指的是副本数量,现在是单节点,所以是1.
<configuration> <property> <name>dfs.name.dir</name> <value>/usr/hadoop/hdfs/name</value> </property> <property> <name>dfs.data.dir</name> <value>/usr/hadoop/hdfs/data</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
(5)mapred-site.xml文件配置(非必须)
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
(6)yarn-site.xml配置
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>hadoop0:8099</value> </property> </configuration>
-
创建文件夹
我们在配置文件中配置了一些文件夹路径,现在我们来创建他们,在
/usr/hadoop/
目录下使用hadoop用户操作,建立tmp
、hdfs/name
、hdfs/data
目录,执行如下命令 :mkdir /usr/hadoop mkdir /usr/hadoop/tmp mkdir /usr/hadoop/hdfs mkdir /usr/hadoop/hdfs/data mkdir /usr/hadoop/hdfs/name
-
将Hadoop添加到环境变量中
vim /etc/profile
在文件末尾插入如下代码:
最后使修改生效:source /etc/profile
-
验证
格式化HDFS文件
使用如下命令:hadoop namenode -format
出现如下界面表示成功
启动Hadoop输入:
start-dfs.sh
表示没有成功,因为root用户现在还不能启动hadoop,需要设置一下:
在/hadoop3.3/sbin
路径下:cd /app/hadoop3.3/sbin
将
start-dfs.sh
,stop-dfs.sh
两个文件顶部添加以下参数#!/usr/bin/env bash HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
还有,
start-yarn.sh
,stop-yarn.sh
顶部也需添加以下代码:#!/usr/bin/env bash YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
再次启动
start-dfs.sh
,最后输入命令jps
验证,出现如下界面代表启动成功:
在你虚拟机的图形化界面中打开火狐浏览器输入:http://localhost:9870/ 或者在windows机器上输入http://虚拟机ip地址:9870/ 也可以访问 hadoop的管理页面
四、HDFS系统初体验
使用Hadoop的HDFS系统来上传文件
-
创建文件夹
和Linux中一样创建文件夹的主要命令是mkdir
,只不过在前面要加上hadoop fs
也可以在浏览器中查看到
-
上传文件至hdfs
(1) 创建文件,并添加数据
(2)将文件上传至HDFS
使用put命令即可将指定文件上传至HDFS的指定文件夹中,在本文中就是将hello.txt上传至HDFS的/test文件夹。
(3)查看文件
在浏览器中显示:
五、实验小结
在Hadoop启动时,datanode结点没有启动,因为多次格式化namenode导致,在配置文件中保存的是第一次格式化时保存的namenode的ID,因此就会造成datanode与namenode之间的id不一致。解决方式是把/usr/hadoop/hdfs/name/current/VERSION文件中的clusterID的值复制到/usr/hadoop/hdfs/data/current/VERSION文件中的clusterID中,将其原来的clusterID注释掉,然后保存之后重新启动即可出现datanode。