Linux操作系统下的Hadoop安装与配置

时间:2024-05-21 07:29:39

摘要

  1. 前置(可选)使普通用户获取部分管理员权限
  2. 网络联通配置
  3. 修改主机名、修改主机名与IP地址的对应关系、关闭防火墙
  4. 关闭防火墙、并设置开机不自启动
  5. ssh免密登录
  6. jdk的安装
  7. hadoop的安装
  8. 启动Hadoop

1.1前置(可选)使普通用户获取部分管理员权限

操作步骤:
登陆虚拟控制台ctrl+alt+f2
登录管理员root和密码
打开sudoers文件:vim /etc/sudoers
将光标移动到第98行 root ALL=(ALL) ALL
将该行复制,并将root更改为你的用户名,其后不变
保存退出:按esc,输入:wq(若只是退出,则输入:q)
到这一步,普通用户就获取了所有的管理员权限,执行管理员命令时,需要在前面加上sudo命令
注:也可以用图形界面,也就是自己实际打开sudoers文件(右键选择用gedit打开),在98行下面复制粘贴98行进行修改,关闭。

1.2网络联通配置

1、由上述前置操作,普通用户已经获取了管理员的部分权限,已经可以运行只有管理员才能运行的操作了。所以我们可以用普通用户身份登陆后,打开网络配置文件 sudo vim /etc/sysconfig/network-scripts/ifcfg-eno16777736,
(1)在此文件中更改以下内容(非本人笔记本下,输入ip addr命令不显示虚拟机ip,所以需要手动配置):
BOOTPROTO=static
(static:静态获取IP地址;dhcp:服务器自动为其分配的IP地址)
ONBOOT=yes
(这个网卡是否能用)
(2)并在此文件中添加以下内容(这四个是常见的网络配置项):
(虚拟机Ip地址)IPADDR=192.168.218.10
(子网掩码)NETMASK=255.255.255.0
(网关)GATEWAY=192.168.237.2
(域名解析服务器)DNS1=8.8.8.8
2、重启网络
service network restart
3、测试
ping 8.8.8.8

1.3修改主机名、修改主机名与IP地址的对应关系、关闭防火墙

导入:
如图,有一个主节点、两个从节点:
Linux操作系统下的Hadoop安装与配置
但某一个节点不知道其他节点的角色(是主还是从),这就需要在内部记录一个列表,来记录和自己相连的主机是什么角色。
注意,slave1、slave2只是节点的名称,不代表任何含义,可以任意取
在没有DNS的情况下,即使知道了某个节点的名称,但用节点名去请求这个节点的时候,还是不知道是具体哪个节点,这就需要通过IP地址来获取通讯。但当集群很大时,因为IP地址难记,这就需要用主机名来与IP地址对应。
Hadoop里用两个文件来代替DNS的功能,第一个,节点与节点名称的对应关系(表明与我这个节点相连的主节点和从节点是谁);第二个,节点名称与IP地址的对应关系(表明与我每个相连的节点的IP地址是多少)。即在每个节点内部记录如图以下两个列表:
Linux操作系统下的Hadoop安装与配置
这两个文件,只需要设置写一次,以后再次使用这些节点的IP地址的时候,只需要用主机名去访问即可。
Linux默认主机名是localhost,现在来修改主机名。
输入sudo vim /etc/hostname
在文件里删除原有内容,输入我们欲为Linux起的新主机名NODE1,保存退出,重启,再打开终端,发现localhost已变为NODE1。
修改主机名与ip地址的对应关系:
输入sudo vim /etc/hosts
在最后一行下面输入如下信息后,保存退出:
虚拟机IP地址 NODE1
从节点1的IP地址 node2
从节点2的IP地址 node3
至此已经成功建立起NODE1、node1、node2这三个节点与IP地址的对应关系了,ping时只需要ping节点名即可

1.4关闭防火墙、并设置开机不自启动

查看当前防火墙状态systemctl status firewalld.service,发现active(running),说明当前防火墙开启。
关闭防火墙systemctl stop firewalld.service,输入root密码
重启reboot
再次查看当前防火墙状态systemctl status firewalld.service
发现防火墙仍处于启动状态,所以现在我们要将其设置为开机不启动模式。
查看当前防火墙开机后的状态:systemctl list-unit-files,发现是enable即开机自启动,我们需要修改为disable
systemctl disable firewalld.service,设置为开机不自启动状态
重启,再次查看防火墙状态,发现已经变为disable

1.5ssh免密登录

ssh和Telnet都是远程登录协议,区别在于,ssh在网络中传输的是密文信息;而Telnet是明文方式来传输。
现在尝试如何用ssh登陆自己。
每个用户都有一个用户目录(即cd)
cd回车,发现工作区后加了个~
ls,查看当前目录中的文件
ls -a,查看隐藏文件
ssh-****** -t rsa,会让你输入一些信息(会提示,即默认选项)
一直回车,一直到生成了图形,这就是**
再次ls -a,发现多了个.ssh文件
cd .ssh/
ls,发现有个rsa,是私钥;pub,是公钥。
cp id_rsa.pub authorized_keys,将生成的id_rsa.pub**复制到当前目录中并新命名为authorized_keys,用来存放这个**
ls,发现了个authorized_keys文件
再次ssh 新用户名,发现无需输入密码,这就实现了单节点的免密登陆

1.6jdk的安装

为了方便管理,我们在用户目录下新建一个安装目录java,用来存放所有安装到linux中的软件
新建目录mkdir 目录名
使用图形界面,直接将jdk文件拖动到相应位置即可
tar zxvf 压缩包名,将压缩包解压到当前java目录下
解压完成后,会在当前java目录下出现一个解压后的新目录
mv 原名 新名,将此新的目录改名为jdk,作用:简化目录名
安装jdk之后,需要在环境变量里指定jdk的安装路径,也就是需要将jdk的命令路径添加到全局变量PATH中,使得所有程序都可以使用jdk提供的命令(放在其中的bin目录下)
在用户目录下的bachrc文件中修改全局变量的值(echo PATHPATHvim /.bashrc.bashrcJAVAHOME=/home/lhr/java/jdkjavajdkjdkpwdPATH=PATH可以查看当前全局变量PATH的值,结果显示里面都是些不同的命令路径的值) vim ~/.bashrc,打开用户目录下的.bashrc文件 在此文件的任意位置添加以下内容: JAVA_HOME=/home/lhr/java/jdk(定义一个java的全局变量,赋值为jdk的安装路径即解压后的地方,如何查看安装路径?在jdk目录下,pwd,将结果复制过来) PATH={PATH}????{JAVA_HOME}/bin(在原PATH变量的基础上添加新值。因为bin目录是用来存放命令的,所以需要加在后面)
添加完成后,保存退出
source ~/.bashrc,让此文件立即生效
java -version,看看我们的jdk是否安装成功
注意:我们原Linux操作系统中已经自动安装了1.7 和1.8的openjdk这个版本,这时我们需要手动卸载已有的openjdk。
rpm -qa | grep jdk,查看当前系统中已有的所有jdk版本
sudo rpm -e 已有jdk完整名称 --nodeps,卸载它(—nodeps解除依赖关系)

1.7hadoop的安装

同java的安装,在用户目录下新建一个hadoop目录,并将下载的hadoop利用图形界面拖到hadoop目录中,解压,改名
因为hadoop的命令存放在bin、sbin中,欲在所有程序中执行,同样需要将这俩的命令路径添加到全局变量中去(bin存放的是普通日常命令,而sbin存放的是特权命令)
修改环境变量:
vim ~/.bashrc文件,添加以下内容:(若不加export,则只能在当前进程中执行bin、sbin命令,但经export导出,就可以在所有进程中使用这些命令)
export JAVA_HOME=/home/用户目录/java/jdk(这是之前添加的jdk的全局变量)
export HADOOP_HOME=/home/用户目录/hadoop/hadoop
exportPATH=PATH:{PATH}:{JAVA_HOME}/bin: ${HADOOP_HOME}/bin: ${HADOOP_HOME}/sbin

保存退出,立即生效,用hadoop version检验是否安装成功
虽然已完成安装,但是需要更改配置文件(均在hadoop根目录下的etc/hadoop目录下):
1、hadoop-env.sh
打开此文件,找到第25行,将原export值删掉,改为export JAVA_HOME=/home/用户目录/java/jdk即我们jdk的安装路径。
2、yarn-env.sh
打开此文件,找到第23行,将export前的#和空格去掉,改为export JAVA_HOME=/home/用户目录/java/jdk
3、core-site.xml
打开此文件,在标签对中添加以下内容:
Linux操作系统下的Hadoop安装与配置
这是一个可被外界访问的端点,value里指定这个端点的位置,使得所有访问hadoop服务器集群的客户端用户都知道hdfs(hadoop的文件系统)的主节点的位置,就在localhost这个节点上,欲访问它,需要通过9000端口去访问。
保存退出,在hadoop根目录下新建一个tmp目录。
4、hdfs-site.xml
添加以下内容:
Linux操作系统下的Hadoop安装与配置
第一个:
代表文件的备份数(一台服务器坏掉,其他服务器上还有n个备份),默认3
第二个:
这个参数用于确定将hdfs文件系统的元信息保存在什么目录下。如果这个参数值设置为多个目录,那么这些目录下都保存着元信息的多个备份。
默认存放位置:HADOOPHOME/tmp/dfs/namehdfshdfsHADOOP_HOME/tmp/dfs/name 第三个: 这个参数用于确定将hdfs文件系统的数据保存在什么目录下。若将这个参数值设置为多个分区,即可将hdfs建立在不同的分区上。 默认存放位置:HADOOP_HOME/tmp/dfs/data
若不设置第二个和第三个参数,则都默认放到tmp目录中。
5、mapred-site.xml.template
先复制该文件并改名为mapred-site.xml,打开,添加以下内容:
Linux操作系统下的Hadoop安装与配置
yarn作为mapreduce运行的媒介。
6、yarn-site.xml
Linux操作系统下的Hadoop安装与配置
指定了去访问yarn的主节点的守护进程的服务时的IP地址和端口号。
7、slaves
在此文件中写明所有从节点的节点名,一行一个(如果为伪分布式部署,则默认localhost即可,无需更改)

1.8启动Hadoop

hadoop namenode -format,格式化hdfs,出现has been successfully formatted就代表格式化成功;
打开tmp目录,会发现多了个dfs,打开后,会出现个name,说明我们之前配置的namenode值生效了。
start-all.sh,启动Hadoop(也可以多次start单个配置文件,逐个启动);
注:若出现问题,可以用几次stop-all.sh和start-all.ssh
yes
jps,看到有5个守护进程,说明hadoop启动成功。

出现错误时,如何定位出错在哪儿?
查看运行日志来定位问题点。
cd $HADOOP_HOME/logs目录下,打开后看到每个守护进程都有各自的启动日志,找到我们需要的对应的守护进程日志目录(后缀为.log)。向下看直到看到缩进行,上面那句话就是错误。