- 环境准备
Ubuntu16.04 64位 、Hadoop2.9.2、jdk8
这里使用的是虚拟机安装Ubuntu系统进行环境搭建。 - 下载地址
可以通过官网自行下载
- Hadoop:http://hadoop.apache.org/
- jdk8:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
也可以从百度云链接中下载
链接:https://pan.baidu.com/s/1dehs6l9CDp_uDvSt3YeLzg
提取码:fp7c
Hadoop单机环境搭建
要安装Hadoop,需要先做一些准备工作。
1 创建Hadoop用户
首先,如果你安装 Ubuntu 的时候不是用的 “hadoop” 用户,就需要创建一个新的用户,并赋予其管理员权限。
- 创建hadoop用户,并使用 /bin/bash 作为 shell
$ sudo useradd -m hadoop -s /bin/bash
- 设置hadoop用户的密码
$ sudo passwd hadoop #这里需要输入两次新密码(不管密码强度如何,管理员权限都可以直接改)
- 为hadoop用户增加管理员权限
$ sudo adduser hadoop sudo
2 更新 apt 安装包索引、安装vim
- 更新apt
$ sudo apt-get update # 如果没更新apt可能会造成软件安装失败
- 安装vim
由于后续我们需要编辑一些配置文件,用vim会比较便捷。
$ sudo apt-get install vim
3 安装SSH并配置SSH免密登录
- 安装SSH
$ sudo apt-get install openssh-server # 安装SSH server
安装好SSH之后可以使用如下命令登录本机(localhost):
$ ssh localhost
登录SSH会有以下提示信息,输入yes,然后输入密码,登录成功。
然后我们输入exit退出localhost。
$ exit
- 配置SSH免密登录
$ cd ~/.ssh # 进入ssh配置目录,如果没有该目录,先执行一次ssh localhost
$ ssh-keygen -t rsa # 生成ssh密钥。提示信息都按回车即可
$ cat ./id_rsa.pub >> ./authorized_keys # 将公钥加入授权(注意是在当前目录下)
$ ssh localhost # 测试ssh是否免密登录
ssh-keygen 运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
SSH (Secure Shell)
SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH分为SSH client和SSH server,即客户端 openssh-client(ssh) 和服务端 openssh-server(sshd)。如果你想登录别的机器的SSH,那么你只需要在本机上安装openssh-client;如果你想要开放SSH服务让别人登录,那么你就需要安装openssh-server。Ubuntu 默认已安装了 SSH client,因此我们还需要安装 SSH server。
SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
什么是SSH客户端?
比如:“SSH Secure Shell”、“PuTTY”、“securecrt” 它们都是SSH客户端,使用它们就可以在windows下连接并操作linux服务器。
4 安装JDK并配置环境变量
安装jdk环境有许多方法,这只是其中一种。
- 安装jdk
在/usr/lib 目录下创建新目录jvm
:
$ cd /usr/lib
$ mkdir jvm
进入存储jdk压缩包的目录:
$ cd /mnt/hgfs/ShareData
# 这里我将jdk压缩包放在了共享文件夹中,Ubuntu安装完VMWareTools后,共享文件夹默认在 /mnt/hgfs/ 下
将下载好的jdk8的安装包jdk-8u162-linux-x64.tar.gz
解压到 /usr/lib/jvm/下:
$ sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm # 解压当前目录下的jdk文到/usr/lib/jvm
- 配置Java环境变量
$ cd ~
$ vim ~/.bashrc # vim编辑配置文件
在.bashrc
文件的开头添加如下信息:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
然后保存退出,执行如下命令,使配置文件生效:
$ source ~/.bashrc
查看Java是否安装成功:
$ java -version
出现如下信息证明安装成功:
5 安装Hadoop
- 进入Hadoop安装包所在目录,将其解压至 /usr/local 中
$ cd /mnt/hgfs/ShareData # 安装包在我系统中的位置
$ tar -zxvf hadoop-2.9.2.tar.gz -C /usr/local # 解压
- 进入/usr/local/ ,将目录hadoop-2.9.2改名为hadoop
$ cd /usr/local/
$ mv ./hadoop-2.9.2/ ./hadoop
- 修改用户hadoop操作Hadoop的权限
$ sudo chown -R hadoop ./hadoop
- 查看Hadoop是否安装成功
$ cd /usr/local/hadoop
$ ./bin/hadoop version
6 Hadoop单机配置
Hadoop 默认模式即为单机模式(本地模式)。现在我们可以运行一个Hadoop实例。
$ cd /usr/local/hadoop
$ mkdir ./input
$ cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+' # 运行Hadoop实例
$ cat ./output/* # 查看运行结果
注意,Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除。
$ rm -r ./output
Hadoop伪分布式环境搭建
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml,它们位于 /usr/local/hadoop/etc/hadoop/ 中。
- 修改
core-site.xml
$ cd /usr/local/hadoop/ect/hadoop
$ gedit ./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>
- 修改
hdfs-site.xml
$ gedit ./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 中的配置项。
- 配置完成后,执行 NameNode 的格式化
$ cd /usr/local/hadoop
$ ./bin/hdfs namenode -format
若成功则会看到 “successfully formatted” 的提示:
- 开启 NameNode 和 DataNode 守护进程
$ cd /usr/local/hadoop
$ ./sbin/start-dfs.sh
- 通过jps命令检查Hadoop是否成功启动
若成功启动则会列出如下进程,如果没有 NameNode 或 DataNode ,那就是配置不成功。
启动成功后,通过web访问http://[NameNode的IP地址]:50070
,这里是http://localhost:50070,出现以下界面。可以查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。
- 运行Hadoop伪分布式实例
伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。
上面的单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:
$ ./bin/hdfs dfs -mkdir -p /user/hadoop
创建input目录:
$ ./bin/hdfs dfs -mkdir input
$ ./bin/hdfs dfs -put ./etc/hadoop/*.xml input # 将输入文件复制到分布式文件系统
执行Hadoop实例:
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
查看运行结果:
$ ./bin/hdfs dfs -cat output/*
结果如下,注意到刚才我们已经更改了配置文件,所以运行结果不同。
- 关闭Hadoop
./sbin/stop-dfs.sh