虚拟机Ubuntu(18.04.2)下安装配置Hadoop(2.9.2)(伪分布式+Java8)
【本文结构】
- 【1】安装Hadoop前的准备工作
- 【1.1】 创建新用户
- 【1.2】 更新APT
- 【1.3】 安装SSH
- 【1.4】 安装Java环境
- 【2】安装和配置hadoop
- 【2.1】 Hadoop下载
- 【2.2】 Hadoop伪分布式配置
【踩过的坑】
- 【1】 需要在Java8上安装Hadoop,开始用Java11一直失败;
- 【2】 一定要再熟悉大致流程后再安装,专注于一篇笔记的同时参考其他笔记。
- 【3】 本文参考笔记
【所需下载的文件】
- 【1】 JDK–Java8环境
- 【2】 Apache Hadoop2.9.2
【其他知识点】
-
【1】 查看本机ip
sudo apt install net-tools ifconfig # 查看虚拟机Ip
-
【2】 VIM命令
vi filename # 进入文件 insert键 # 编辑文本 esc键 # 退出编辑 :wq # 退出并保存 ctrl+s # 锁屏 ctrl+q # 解锁 fi # 文件结尾标识
【1】安装hadoop前的准备
- 【1.1】 创建Hadoop用户
为了方便以后的实验进行,推荐创建一个新的Hadoop用户,所有的实验内容都登录该用户进行,具体的shell代码和注释如下:
$ sudo useradd -m hadoop -s /bin/bash # 创建hadoop用户,并使用/bin/bash 作为shell
$ sudo passwd hadoop # 为hadoop用户设置密码,之后需要连续输入两次密码
$ sudo adduser hadoop sudo # 为hadoop用户添加管理员权限
$ su - hadoop # 切换当前用户为hadoop
- 【1.2】更新apt
APT是一款软件管理工具,Linux采用APT来安装和管理各种软件,安装成功Linux系统以后,需要及时更新APT软件,否则后序的一些软件可能无法正常安装,更新APT使用以下命令:
$ sudo apt-get update # 更新hadoop用户的apt,方便后面的安装
- 【1.3】安装SSH,设置SSH无密码登录
SSH是Secure Shell的缩写,
为什么安装hadoop之前需要配置SSH呢? 这是因为Hadoop名称节点(NameNode) 需要启动集群中所有机器的Hadoop守护进程,这个过程需要通过SSH登录来实现。Hadoop并没有提供SSH输入密码登录的形式,因此,为了能够顺利登录集群中的每台机器,需要将所有机器配置为“名称节点可以无密码登录它们”
Ubuntu默认已安装SSH客户端,故只需要安装SSH服务器,在终端执行以下命令:
$ sudo apt-get install openssh-server # 安装ssh服务器
然后可以使用如下命令登录本机(因为是伪分布式集群,只有一台机器,同时作为名称节点和普通节点),如果提示输入密码,则表示安装成功了。
$ ssh localhost # 登录ssh,第一次登录输入yes 或者让输入密码直接两次回车
由于这样登录需要每次输入密码,所以,需要配置SSH为无密码登录,这样在hadoop集群中,名称节点要登录某台机器就不需要人工输入密码了。
$ cd ~/.ssh # 切换目录 $ ssh-keygen -t rsa # 会有提示,按enter即可(即不设置密码),这条语句生成公钥和私钥两个文件 $ cat ./id_rsa.pub >> ./authorized_keys # 加入授权,cat file1 >> file2 的含义是将file1的内容写到file2尾部 $ ssh localhost # 此次再登录ssh,无需输入密码即可。
- 【1.4安装Java环境】
Hadoop是基于Java环境开发的,同时Java语言也可以用来编写Hadoop应用程序,在Linux系统中安装Java环境有两种方式:Oracle的JDK和openJdk,本文采用第一种:
首先在Oracle官网下载JDK1.8,接下来安装并配置。这里选择的是(jdk-8u211-linux-x64.tar.gz)
注意是usr !!! 不是user
$ mkdir /usr/lib/jvm # 创建jvm文件夹 # 解压到/usr/lib/jvm目录下(因为压缩包在在桌面放着) $ sudo tar zxvf /home/root123456/桌面/jdk-8u211-linux-x64.tar.gz -C /usr/lib/jvm $ cd usr/lib/jvm # 进入usr/lib/jvm目录 $ mv jdk1.8.0_211 java # 将jdk1.8.0_211重命名为java 此步可能权限不够,在其前加上sudo
$ vi ~/.bashrc # 给JDK配置环境变量
编辑.bashrc文件,添加如下指令:
export JAVA_HOME=/usr/lib/jvm/java export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
文件修改完毕后,输入以下代码:
$ source ~/.bashrc # 使新配置的环境变量生效
$ java -version # 检测是否安装成功,查看java版本
java安装成功后,就可以进行Hadoop的安装了。
【2】安装配置Hadoop
- 【2.1】Hadoop的下载安装
我的虚拟机Ubuntu安装了VMWare Tools,可以在win10桌面和Ubuntu桌面之间直接交换文件。所以在apache hadoop上直接下载的文件之后拷贝到Ubuntu桌面上。
#解压到/usr/local目录下 $ sudo tar -zxvf /home/root123456/桌面/hadoop-2.9.2.tar.gz -C /usr/local $ cd /usr/local # 切换目录值 $ sudo mv hadoop-2.9.2 hadoop # 重命名为hadoop $ sudo chown -R hadoop ./hadoop # 修改文件权限
给hadoop配置环境变量,
vi /.bashrc
将下面的代码添加到.bashrc文件中:
export HADOOP_HOME=/usr/local/hadoop export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
配置完后,执行source ~/.bashrc使设置生效,并查看hadoop是否安装成功。
- 【2.2】伪分布式配置
Hadoop的默认模式即为本地模式(即单机模式),无需配置就可以运行,值得注意的是,Hadoop的模式变更(单机模式、伪分布式、分布式)完全是通过修改配置文件实现的。
这里配置的是伪分布式模式,即只有一个节点(一台机器),这个节点既作为名称节点(NameNode),也作为数据节点(DataNode),伪分布式模式配置涉及三个配置文件: hadoop目录/etc/hadoop/下的hadoop-env.sh、core-site.xml 和 hdfs-site.xml :
【2.2.1】首先将jdk1.8的路径添加到/etc/hadoop/hadoop-env.sh文件中
export JAVA_HOME=/usr/lib/jvm/java
【2.2.2】在core-site.xml文件中增加
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
【2.2.3】在hdfs-site.xml文件中增加
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
Hadoop的运行方式是由配置文件决定的(运行Hadoop时会读取配置文件),因此如果需要从伪分布式切换为单机模式,需要删除core-site.xml中的配置项。
伪分布式虽然只需要配置fs.defaultFS和dfs.replication就可以运行,不过若没有配置hadoop.tmp.dir参数,则默认使用的临时目录为/temp/hadoop-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行format才行。同时我们也指定了dfs.namenode.name.dir和dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
配置完成后,执行NameNode的格式化
$ ./bin/hdfs namenode -format
启动namanode和datanode进程
启动完后,可以通过jps来判断是否成功启动,若成功,则会出现以下四个进程“NameNode”、”DataNode” 和 “SecondaryNameNode”
$ ./sbin/start-dfs.sh
$ jps
成功启动后,可以通过web界面 http://localhost:50070 查看NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。
至此,Hadoop的伪分布式部署已完成啦!需要使用YARN的话,还需要单独配置mapred-site.xml和yarn-site.xml文件。