实验环境
- Ubuntu-16.04 64-bit
- Java Version 8 Update 91
- Apache Hadoop 2.7.2
Java安装
- 下载Java。
- 解压并移动到
/opt/
目录下,建立软链接:
$ tar -zxvf jdk-8u91-linux-x64.tar.gz
$ sudo mv jdk1.8.0_91 /opt/
$ sudo ln -s /opt/jdk1.8.0_91 /opt/jdk
3.配置环境变量,编辑sudo vim /etc/profile.d/jdk.sh
文件,内容如下:
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
4.运行source /etc/profille
命令,使配置文件生效。
5.运行java,测试Java环境。
Hadoop安装
1.下载Hadoop。
2.解压并移动到/opt/
目录下,建立到软链接:
$ tar -zxvf hadoop-2.7.2.tar.gz
$ sudo mv hadoop-2.7.2 /opt/
$ sudo ln -s /opt/hadoop-2.7.2 /opt/hadoop
3.配置环境变量,编辑sudo vim /etc/profile.d/hadoop.sh
文件,内容如下:
export HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
4.运行source /etc/profile
命令,使配置文件生效。
5.配置Hadoop中Java JDK路径,编辑/opt/hadoop/ect/hadoop/hadoop-env.sh
,修改
export JAVA_HOME=${JAVA_HOME}
为
export JAVA_HOME=/opt/jdk
6.运行hadoop,测试Hadoop配置是否成功。
备注:软链接的使用主要是为了方便在不同的版本之间进行切换。
Hadoop运行模式
Hadoop支持三种运行模式:单机模式,伪分布模式以及分布式模式
单机模式
默认情况下,Hadoop采用单个Java进行以单机模式运行。这在调试时非常有用。
下面的展示了单机模式的运行。
$ mkdir input
$ cp /opt/hadoop/etc/hadoop/*.xml input
$ hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
$ cat output/*
伪分布式模式
Hadoop同样可以在单个主机上采用隔离的Java进程来模拟Hadoop守护进行,从而实现伪分布式模式。
基本配置
配置/opt/hadoop/etc/hadoop/core-site.xml
:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
配置/opt/hadoop/etc/hadoop/hdfs-site.xml
:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
ssh免密码登录
检测ssh连接到本地是否需要输入密码:
$ ssh localhost
如果需要输入密码,则配置免密码登录:
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
备注:官方文档给出的密钥类型为dsa
,Ubuntu-16.04测试不行,因此采用rsa
类型密钥。
执行
本地执行MapReduce工作。
1.格式化文件系统:
$ hdfs namenode -format
2.启动NameNode进程和DataNode进程:
$ start-dfs.sh
Hadoop守护进程日志默认输出到$HADOOP_LOG_DIR
目录下($HADOOP_HOME/logs
)。
3.通过Web接口查看NameNode;默认是:http://localhost:50070/。
4.创建用于执行MapReduce工作的HDFS目录:
$ hdfs dfs -mkdir input
5.拷贝文件到分布式文件系统中:
$ hdfs dfs -put /opt/hadoop/etc/hadoop input
6.运行已提供的示例程序:
$ hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
7.从分布式文件系统中导出输出文件到本地文件系统,并查看结果:
$ hdfs dfs -get output output
$ cat output/*
或者,也可以直接在分布式文件系统中查看结果:
$ hdfs -dfs -cat output/*
8.关闭守护进程:
$ stop-dfs.sh