1. 在Windows系统下装有VMware workstation pro的PC[具体操作略]
2. 在VMware workstation pro中安装并开启Linux虚拟机(Ubuntu16)[具体操作略]
3. 关闭防火墙
关闭防火墙命令如下:
$ sudo ufw disable
Firewall stopped and disabled on system startup
查看防火墙状态,状态为“inactive”,说明已关闭:
$ sudo ufw status
Status: inactive
4. 安装SSH
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)
切换到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的安装方式有3种:单机模式(Standalone Mode)、伪分布式(Pseudo-Distributed Mode)、完全分布式(Fully-Distributed Mode)
(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
(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)免密登录设置
生成密钥对,输入下面命令后连续敲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
③设置hdfs-site.xml
$ sudo vi hdfs-site.xml
在
和< /configuration >
之间增加如下内容:
dfs.replication
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
⑤设置yarn-site.xml
$ sudo vi yarn-site.xml
在
和< /configuration >
之间增加如下内容:
yarn.resourcemanager.hostname
node1
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.sh
与start-yarn.sh
可以合并为一条命令:start-all.sh
(7)通过Web访问Hadoop
格式为IP:端口,IP根据根据自己的实际IP输入。
(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.sh
与stop-yarn.sh
可以合并为一条命令:stop-all.sh
完全分布式模式也叫集群模式,是将Hadoop运行在多台主机中,各个主机按照相关配置运行相应的Hadoop守护进程。完全分布式模式是真正的分布式环境,可用于实际的生产环境。
(1)安装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)免密登录设置
免密登录设置(三台虚拟机操作一样)
生成密钥对,输入下面命令后连续敲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
③设置hdfs-site.xml
$ sudo vi hdfs-site.xml
在
和< /configuration >
之间增加如下内容:
dfs.replication
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
⑤设置yarn-site.xml
$ sudo vi yarn-site.xml
在
和< /configuration >
之间增加如下内容:
yarn.resourcemanager.hostname
node1
yarn.nodemanager.aux-services
mapreduce_shuffle
⑥设置slavers
$ sudo vi slaves
将原有内容删除增加如下内容:
node2
node3
(7)分发配置,仅在node1操作
将node1的配置分发到node2与node3:
$ cd ${HADOOP_HOME}/etc
$ scp -r Linux用户名@node2: ${HADOOP_HOME}/etc/
$ scp -r Linux用户名@node3: ${HADOOP_HOME}/etc/
(8)格式化HDFS,仅在node1(master)主机操作
$ hdfs namenode -format
(9)启动Hadoop进程仅在node1(master)主机操作
采用如下命令启动HDFS:
$ start-dfs.sh
采用如下命令启动YARN:
$ start-yarn.sh
start-dfs.sh
与start-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输入。
(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.sh
与stop-yarn.sh
可以合并为一条命令:stop-all.sh