大数据学习笔记—Hadoop运行环境搭建

Hadoop运行环境搭建

  • 一、安装前准备
  • 二、Hadoop的安装
    • 1. 单机模式
    • 2. 伪分布式
    • 3. 完全分布式

一、安装前准备

1. 在Windows系统下装有VMware workstation pro的PC[具体操作略]

2. 在VMware workstation pro中安装并开启Linux虚拟机(Ubuntu16)[具体操作略]

3. 关闭防火墙

  • 如果不关闭Ubuntu操作系统防火墙,可能会出现以下几种情况:
    (1)无法正常访问Hadoop HDFS的Web界面
    (2)会导致后台某些运行脚本(如Hive程序)出现假死
    (3)在删除和增加节点的时候,会让数据迁移处理的时间更长,甚至无法完成相关操作

关闭防火墙命令如下:

$ sudo ufw disable
Firewall stopped and disabled on system startup

查看防火墙状态,状态为“inactive”,说明已关闭:

$ sudo ufw status
Status: inactive

4. 安装SSH

  • SSH是Secure Shell的缩写,它是一种建立在应用层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。历用SSH可以有效防止远程管理过程中的信息泄露。
    SSH由客户端(openssh-client)软件和服务端(openssh-server)软件组成。在安装SSH服务时,需要Ubuntu虚拟机联网

Ubuntu系统默认装有SSH客户端,但没有安装服务端。运行如下命令安装服务端:

$ sudo apt-get install openssh-server

重启SSH服务:

$ sudo /etc/init.d/ssh restart

5. 安装Xshell及Xftp / VMware Tools,将JDK与Hadoop安装包上传至Ubuntu虚拟机Download文件夹[具体操作略]

6.安装JDK(这里使用jdk1.8)

  • Hadoop是基于java语言开发,运行Hadoop需要安装JDK

切换到JDK包所在目录,将JDK安装至/usr/local文件夹下:

$ cd Download
$ sudo tai -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/local

设置JDK环境变量:

$ sudo vi ~/.bashrc

在文件末尾添加:

	export JAVA_HOME=/usr/local/jdk1.8.0_181  #根据安装版本确定 
	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 version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

7. 解压Hadoop的安装包(这里使用hadoop2.7)

切换到Hadoop包所在目录,将Hadoop安装至/usr/local文件夹下:

$ cd Download
$ sudo tai -zxvf hadoop-2.7.3.tar.gz -C /usr/local

设置Hadoop环境变量:

$ sudo vi ~/.bashrc

在文件末尾添加:

	export HADOOP_HOME=/usr/local/hadoop-2.7.3  #根据安装版本确定 
	export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

刷新,使配置生效:

$ source ~/.bashrc

检验是否安装成功:

$ hadoop  version

出现版本信息说明安装成功:

Hadoop 2.7.3
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r baa91f7c6bc9cb92be5982de4719c1c8af91ccff
Compiled by root on 2016-08-18T01:41Z
Compiled with protoc 2.5.0
From source with checksum 2e4ce5f957ea4db193bce3734ff29ff4
This command was run using /usr/local/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3.jar

8. Hadoop的目录结构

进入Hadoop解压目录并查看:

$ cd /usr/local/hadoop-2.7.3
$ ll

得到如下结果:

total 140
drwxr-xr-x  9 root root  4096 8月  18  2016 ./
drwxr-xr-x 13 root root  4096 5月  17 13:39 ../
drwxr-xr-x  2 root root  4096 8月  18  2016 bin/
drwxr-xr-x  3 root root  4096 8月  18  2016 etc/
drwxr-xr-x  2 root root  4096 8月  18  2016 include/
drwxr-xr-x  3 root root  4096 8月  18  2016 lib/
drwxr-xr-x  2 root root  4096 8月  18  2016 libexec/
-rw-r--r--  1 root root 84854 8月  18  2016 LICENSE.txt
-rw-r--r--  1 root root 14978 8月  18  2016 NOTICE.txt
-rw-r--r--  1 root root  1366 8月  18  2016 README.txt
drwxr-xr-x  2 root root  4096 8月  18  2016 sbin/
drwxr-xr-x  4 root root  4096 8月  18  2016 share/

(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

二、Hadoop的安装

Hadoop的安装方式有3种:单机模式(Standalone Mode)、伪分布式(Pseudo-Distributed Mode)、完全分布式(Fully-Distributed Mode)

1. 单机模式

  • Hadoop运行在一台主机上,按默认配置以非分布式模式运行一个独立的Java进程。单机模式的特点是:没有分布式文件系统,直接在本地操作系统的文件系统读/写;不需要加载任何Hadoop的守护进程。它一般用于本地MapReduce程序的调试。单机模式是Hadoop的默认模式。

(1)设置Hadoop配置文件(1个文件)

进入Hadoop配置文件所在目录,修改hadoop-env.sh文件:

$ cd /usr/local/hadoop-2.7.3/etc/hadoop
$ sudo vi hadoop-env.sh

找到export JAVA_HOME这一行,把行首的#去掉,并按实际值修改JAVA_HOME的值:

# The java implementation to use.
export JAVA_HOME=/usr/local/jdk1.8.0_181 

(2)测试Hadoop
新建一个input目录并创建测试文件data.txt:

$ cd ~
$ mkdir input
$ vi data.txt

在测试文件输入以下内容:

Hello World
Hello Hadoop

运行MapReduce WordCount 例子:

$ cd /usr/local/hadoop-2.7.3/share/hadoop/mapreduce
$ hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount ~/input/data.txt ~/output 

查看结果文件名并获取文件内容:

$ cd /usr/local/output 
$ ls
part-r-00000  _SUCCESS
$ cat part-r-00000  _SUCCESS

如获取到以下内容即为成功:

Hadoop	1
Hello	2
World	1

2. 伪分布式

  • 伪分布式模式是指Hadoop运行在一台主机上,使用多个Java进程,模仿完全分布式的各类节点。伪分布式模式具备完全分布式的所有功能,常用于调试程序。

(1)修改主机名

  • 修改主机名方便安装、易于记忆

查看主机名:

$ hostname

修改主机名:

$ sudo vi /etc/hostname

将原主机名删除,添加新主机名:

node1

重启Ubuntu虚拟机,使修改生效:

$ sudo reboot

(2)映射IP地址
首先查看Ubuntu操作系统的IP地址,这里查到的是192.168.1.129:

$ ifconfig
...
inet addr:192.168.1.129
...

修改/etc/hosts文件:

$ sudo vi /etc/hosts

在末尾添加如下内容(根据具体IP修改):

192.168.1.129    node1

(3)免密登录设置

  • 登录其他主机时,通常需要输入密码。如果要让普通用户(如hadoop)无需密码就可以访问集群内的主机,即实现免密登录。通常的做法是:在本机创建一个密钥对(包括公钥和私钥),并将公钥发送给集群内所有的主机进行认证,即可实现免密登录。

生成密钥对,输入下面命令后连续敲3次回车,系统会在~/.ssh目录下生成公钥(id_rsa.pub)和私钥(id_rsa ):

$ ssh-keygen -t rsa

查看公钥和私钥:

$ ls ~/.ssh

追加公钥:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub node1

验证免密登录:

$ ssh node1

出现以下内容且无需输入密码即为成功(第一次使用可能需要输入yes):

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-99-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

93 packages can be updated.
7 updates are security updates.

New release '18.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

退出ssh登录:

$ exit
logout
Connection to node1 closed.

(4)设置Hadoop配置文件(5个文件)

进入Hadoop配置文件所在目录:

$ cd ${HADOOP_HOME}/etc/hadoop

①设置hadoop-env.sh

$ sudo vi hadoop-env.sh

找到export JAVA_HOME这一行,把行首的#去掉,并按实际值修改JAVA_HOME的值:

# The java implementation to use.
export JAVA_HOME=/usr/local/jdk1.8.0_181 

②设置core-site.xml

$ sudo vi core-site.xml

< /configuration >之间增加如下内容:

    
        hadoop.tmp.dir
        /usr/local/hadoop-2.7.3/tmp
        Abase for other temporary directories.
    
    
        fs.defaultFS
        hdfs://node1:9000
    
  • hadoop.tmp.dir指定Hadoop的临时工作目录,这里设置为/usr/local/hadoop-2.7.3/tmp, 请根据实际情况修改。
  • 注意:
    一定要设置hadoop.tmp.dir, 否则默认的tmp目录在/tmp 下,重启Ubuntu操作系统时tmp目录下的dfs/name文件夹会被删除,造成NameNode丢失。
    一定要保证对临时工作目录的所在目录有相应权限,否则会无法创建
  • fs.defaultFS属性指定默认文件系统的URI地址,一般格式为 “hdfs://host:port” 其中,host可以设置为Ubuntu操作系统的IP地址以及主机名称中的任意一个,这里设置为主机名; port 如果不设置,则使用默认端口号8020。

③设置hdfs-site.xml

$ sudo vi hdfs-site.xml

< /configuration >之间增加如下内容:

    
		dfs.replication
		1
	
  • dfs.replication默认值为3,因为伪分布式只有一个节点,所以值为1

④设置mapred-site.xml

复制mapred-site.xml.template,生成mapred-site.xml,编辑mapred-site.xml:

$ sudo cp mapred-site.xml.template mapred-site.xml
$ sudo vi mapred-site.xml

< /configuration >之间增加如下内容:

    
		mapreduce.framework.name
		yarn
	
  • mapreduce.framework.name默认为local,将其修改为yarn,让MapReduce程序运行在YARN框架上。

⑤设置yarn-site.xml

$ sudo vi yarn-site.xml

< /configuration >之间增加如下内容:

    
        yarn.resourcemanager.hostname
        node1
    
    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
  • yarn.resourcemanager.hostname属性为资源管理器的主机,设置为Ubuntu操作系统的主机名或IP地址。
  • yarn.nodemanager.aux-services属性为节点管理器的辅助服务器,默认值为空,设置为mapreduce_shuffle。

(5)格式化HDFS

$ hdfs namenode -format
  • 格式化的过程是创建初始目录和文件系统结构的过程。

(6)启动并验证Hadoop进程

采用如下命令启动HDFS:

$ start-dfs.sh

正确启动的话,使用jps查看会出现下以下三个进程:

$ jps
NameNode
DataNode
SecondaryNameNode

采用如下命令启动YARN:

$ start-yarn.sh

正确启动的话,使用jps查看会出现下以下两个进程:

$ jps
NodeManager
ResourceManager
  • start-dfs.shstart-yarn.sh可以合并为一条命令:start-all.sh

(7)通过Web访问Hadoop

格式为IP:端口,IP根据根据自己的实际IP输入。

  • HDFS Web界面:
    在Windows/Linux浏览器输入网址,格式为http://192.168.1.129:50070,可以查看NameNode和DataNode的信息。
    在Windows/Linux浏览器输入网址http://192.168.1.129:50090,可以查看SecondaryNameNode的信息。
  • YARN Web界面:
    在Windows/Linux浏览器输入网址http://192.168.1.129:8088,可以查看集群所有应用程序的信息。

(8)测试Hadoop

创建测试文件data.txt:

$ cd ~
$ vi data.txt

在测试文件输入以下内容:

Hello World
Hello Hadoop

在HDFS创建input文件夹:

$ hdfs dfs -mkdir /input

将data.txt上传到HDFS的input文件夹:

$ hdfs dfs -put data.txt /input

查看是否上传成功:

$ hdfs dfs -ls /input
Found 1 items
-rw-r--r--   1 node1 supergroup         25 2020-05-19 19:52 /input/data.txt

运行MapReduce WordCount 例子:

$ cd /usr/local/hadoop-2.7.3/share/hadoop/mapreduce
$ hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt  /output 

查看文件名并获取文件内容:

$ hdfs dfs -ls /output
Found 2 items
-rw-r--r--   1 node1 supergroup          0 2020-05-19 19:55 /output/_SUCCESS
-rw-r--r--   1 node1 supergroup         25 2020-05-19 19:55 /output/part-r-00000
$ hdfs dfs -cat /output/part-r-00000

如获取到以下内容即为成功:

Hadoop	1
Hello	2
World	1

(8)停止Hadoop

采用如下命令停止HDFS:

$ stop-dfs.sh

采用如下命令停止YARN:

$ stop-yarn.sh

正确停止的话,使用jps查看不会出现Hadoop进程:

$ jps
jps
  • stop-dfs.shstop-yarn.sh可以合并为一条命令:stop-all.sh

3. 完全分布式

完全分布式模式也叫集群模式,是将Hadoop运行在多台主机中,各个主机按照相关配置运行相应的Hadoop守护进程。完全分布式模式是真正的分布式环境,可用于实际的生产环境。

(1)安装NTP服务

  • 完全分布式模式由多台主机组成,各个主机的时间可能存在较大差异。如果时间差异较大,执行MapReduce程序的时候会存在问题。NTP服务通过获取网络时间使集群内不同主机的时间保持一致。默认安装Ubuntu操作系统时,不会安装NTP服务。

安装NTP服务需要联网:

$ sudo apt-get install ntp

查看时间服务是否运行,如输出有ntp字样即为正在运行:

$ sudo dpkg -l | grep ntp
ii  ntp     1:4.2.8p4+dfsg-3ubuntu5.10    amd64        Network Time Protocol daemon and utility programs

(2)克隆虚拟机

将准备好的虚拟机完整的克隆出两台(共三台虚拟机组成集群)

(3)修改主机名

①将第一台虚拟机主机名设为node1
②将第二台虚拟机主机名设为node2
③将第三台虚拟机主机名设为node3
查看主机名:

$ hostname

修改主机名:

$ sudo vi /etc/hostname

将原有主机名删除,添加新主机名:

node1   #第一台主机填此行
node2   #第二台主机填此行
node3   #第三台主机填此行

(4)映射IP地址

分别查看三台虚拟机的IP地址:

$ ifconfig
#分别查询到如下IP
node1:192.168.1.129
node2:192.168.1.131
node3:192.168.1.132

修改三台虚拟机的/etc/hosts文件(三台虚拟机操作一样)

$ sudo vi /etc/hosts

在末尾添加如下内容(根据具体IP修改):

192.168.1.129    node1
192.168.1.131    node2
192.168.1.132    node3

分别重启三台Ubuntu虚拟机,使前hosts与hostname修改生效:

$ sudo reboot

(5)免密登录设置

  • 登录其他主机时,通常需要输入密码。如果要让普通用户(如hadoop)无需密码就可以访问集群内的主机,即实现免密登录。通常的做法是:在本机创建一个密钥对(包括公钥和私钥),并将公钥发送给集群内所有的主机进行认证,即可实现免密登录。
  • 在完全分布式模式下,集群内任意一台主机可免密登录集群内所有主机,即实现了两两免密登录。分别在node1、node2、node3主机上生成公钥/私钥密钥对,然后将公钥发送给集群内的所有主机。

免密登录设置(三台虚拟机操作一样)
生成密钥对,输入下面命令后连续敲3次回车,系统会在~/.ssh目录下生成公钥(id_rsa.pub)和私钥(id_rsa ):

$ ssh-keygen -t rsa

查看公钥和私钥:

$ ls ~/.ssh

追加公钥,分别将公钥分发给node1,node2,node3:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub node1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub node2
$ ssh-copy-id -i ~/.ssh/id_rsa.pub node3

验证免密登录,在任意主机下登录其他主机:

$ ssh node1
$ ssh node2
$ ssh node3

出现以下内容且无需输入密码即为成功(第一次使用可能需要输入yes):

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-99-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

93 packages can be updated.
7 updates are security updates.

New release '18.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

退出ssh登录:

$ exit
logout
Connection to node1 closed.

(6)设置Hadoop配置文件(6个文件),仅在node1操作

进入Hadoop配置文件所在目录:

$ cd ${HADOOP_HOME}/etc/hadoop

①设置hadoop-env.sh

$ sudo vi hadoop-env.sh

找到export JAVA_HOME这一行,把行首的#去掉,并按实际值修改JAVA_HOME的值:

# The java implementation to use.
export JAVA_HOME=/usr/local/jdk1.8.0_181 

②设置core-site.xml

$ sudo vi core-site.xml

< /configuration >之间增加如下内容:

    
        hadoop.tmp.dir
        /usr/local/hadoop-2.7.3/tmp
        Abase for other temporary directories.
    
    
        fs.defaultFS
        hdfs://node1:9000
    
  • hadoop.tmp.dir指定Hadoop的临时工作目录,这里设置为/usr/local/hadoop-2.7.3/tmp, 请根据实际情况修改。
  • 注意:
    一定要设置hadoop.tmp.dir, 否则默认的tmp目录在/tmp 下,重启Ubuntu操作系统时tmp目录下的dfs/name文件夹会被删除,造成NameNode丢失。
    一定要保证对临时工作目录的所在目录有相应权限,否则会无法创建
  • fs.defaultFS属性指定默认文件系统的URI地址,一般格式为 “hdfs://host:port” 其中,host可以设置为Ubuntu操作系统的IP地址以及主机名称中的任意一个,这里设置为主机名; port 如果不设置,则使用默认端口号8020。

③设置hdfs-site.xml

$ sudo vi hdfs-site.xml

< /configuration >之间增加如下内容:

    
		dfs.replication
		2
	
  • dfs.replication默认值为3,因为只克隆了两个节点,所以值为2

④设置mapred-site.xml

复制mapred-site.xml.template,生成mapred-site.xml,编辑mapred-site.xml:

$ sudo cp mapred-site.xml.template mapred-site.xml
$ sudo vi mapred-site.xml

< /configuration >之间增加如下内容:

    
		mapreduce.framework.name
		yarn
	
  • mapreduce.framework.name默认为local,将其修改为yarn,让MapReduce程序运行在YARN框架上。

⑤设置yarn-site.xml

$ sudo vi yarn-site.xml

< /configuration >之间增加如下内容:

    
        yarn.resourcemanager.hostname
        node1
    
    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
  • yarn.resourcemanager.hostname属性为资源管理器的主机,设置为Ubuntu操作系统的主机名或IP地址。
  • yarn.nodemanager.aux-services属性为节点管理器的辅助服务器,默认值为空,设置为mapreduce_shuffle。

⑥设置slavers

$ sudo vi slaves

将原有内容删除增加如下内容:

node2
node3
  • 设置slavers文件即是指定哪些主机是slaver。
  • 这里指定node2与node3是slaver,即node1是master

(7)分发配置,仅在node1操作

将node1的配置分发到node2与node3:

$ cd ${HADOOP_HOME}/etc
$ scp -r Linux用户名@node2: ${HADOOP_HOME}/etc/
$ scp -r Linux用户名@node3: ${HADOOP_HOME}/etc/
  • 注意要有对相应目录(${HADOOP_HOME}/etc/)的权限,否则无法分发成功

(8)格式化HDFS,仅在node1(master)主机操作

$ hdfs namenode -format
  • 格式化的过程是创建初始目录和文件系统结构的过程。

(9)启动Hadoop进程仅在node1(master)主机操作

采用如下命令启动HDFS:

$ start-dfs.sh

采用如下命令启动YARN:

$ start-yarn.sh
  • start-dfs.shstart-yarn.sh可以合并为一条命令:start-all.sh

(10)验证Hadoop进程

正确启动的话,使用jps查看node1(master节点)会出现下以下3个进程:

$ jps
NameNode
SecondaryNameNode
ResourceManager

正确启动的话,使用jps查看node2与node3(slaver节点)会出现下以下2个进程:

$ jps
DataNode
NodeManager

(11)通过Web访问Hadoop

格式为IP:端口,IP根据根据自己的实际IP输入。

  • HDFS Web界面:
    在Windows/Linux浏览器输入网址http://192.168.1.129:50070,可以查看NameNode和DataNode的信息。
    在Windows/Linux浏览器输入网址http://192.168.1.129:50090,可以查看SecondaryNameNode的信息。
  • YARN Web界面:
    在Windows/Linux浏览器输入网址http://192.168.1.129:8088,可以查看集群所有应用程序的信息。

(12)测试Hadoop

创建测试文件data.txt:

$ cd ~
$ vi data.txt

在测试文件输入以下内容:

Hello World
Hello Hadoop

在HDFS创建input文件夹:

$ hdfs dfs -mkdir /input

将data.txt上传到HDFS的input文件夹:

$ hdfs dfs -put data.txt /input

查看是否上传成功:

$ hdfs dfs -ls /input
Found 1 items
-rw-r--r--   1 node1 supergroup         25 2020-05-19 19:52 /input/data.txt

运行MapReduce WordCount 例子:

$ cd /usr/local/hadoop-2.7.3/share/hadoop/mapreduce
$ hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt  /output 

查看文件名并获取文件内容:

$ hdfs dfs -ls /output
Found 2 items
-rw-r--r--   1 node1 supergroup          0 2020-05-19 19:55 /output/_SUCCESS
-rw-r--r--   1 node1 supergroup         25 2020-05-19 19:55 /output/part-r-00000
$ hdfs dfs -cat /output/part-r-00000

如获取到以下内容即为成功:

Hadoop	1
Hello	2
World	1

(13)停止Hadoop

采用如下命令停止HDFS:

$ stop-dfs.sh

采用如下命令停止YARN:

$ stop-yarn.sh

正确停止的话,使用jps查看不会出现Hadoop进程:

$ jps
jps
  • stop-dfs.shstop-yarn.sh可以合并为一条命令:stop-all.sh

你可能感兴趣的:(Hadoop,大数据,分布式,hadoop,linux)