Hadoop — 搭建大数据平台笔记 — 安装配置Hadoop,运行第一个实例

前面的操作都是为安装配置Hadoop做准备工作,接下来是核心部分
本文章包含以下内容:
1. 安装Hadoop2.7.3
2. 向 hadoop 集群系统提交第一个 mapreduce 任务(wordcount)

阅读本篇之前默认你已经会cd,cp, mkdir, tar等简单命令,本篇不在赘述。

1. 安装Hadoop2.7.3

同样推荐先下载到电脑本地,然后再拷贝到三个虚拟机中。省时省力

下载地址http://archive.apache.org/dist/hadoop/core/hadoop-2.7.3/  选择hadoop-2.7.3.tar.gz下载

下载之后拷贝到各个虚拟机,在每个虚拟机下重复如下操作

  • 创建/usr/hadoop文件夹,修改权限

cd /usr/
sudo mkdir hadoop
sudo chmod -R 777 /usr/hadoop

  • 复制hadoop-2.7.3.tar.gz到hadoop文件夹下并且解压

sudo cp hadoop-2.7.3.tar.gz的位置 /usr/hadoop/
cd /usr/hadoop/
sudo tar xzvf hadoop-2.7.3.tar.gz

  • 在/usr/hadoop/目录下,建立 tmp、hdfs/name、hdfs/data 目录

sudo mkdir /usr/hadoop/tmp
sudo mkdir /usr/hadoop/hdfs
sudo mkdir /usr/hadoop/hdfs/data
sudo mkdir /usr/hadoop/hdfs/name

  • 配置环境变量

sudo gedit ~/.bash_profile

在文件中输入以下内容后,ctrl+s保存,关闭窗口

export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin

使环境变量生效

source ~/.bash_profile

然后输入hadoop检验一下是否是安装成功了

(这样的界面说明hadoop命令可以使用)
(如果提示 command not found 可能是因为上面source命令未使用)

重复上述操作,完成另外两个虚拟机的安装


  • 配置Hadoop (三台都需要操作)

注意文中有几个配置,三台虚拟机是按照自己的情况修改的。

进入配置文件夹

cd /usr/hadoop/hadoop-2.7.3/etc/hadoop/

需要配置的文件列表如下,我们一个个配置

hadoop-2.7.3/etc/hadoop/hadoop-env.sh
hadoop-2.7.3/etc/hadoop/yarn-env.sh
hadoop-2.7.3/etc/hadoop/core-site.xml
hadoop-2.7.3/etc/hadoop/hdfs-site.xml
hadoop-2.7.3/etc/hadoop/mapred-site.xml
hadoop-2.7.3/etc/hadoop/yarn-site.xml

  1. 配置hadoop-env.sh

这里大家先确定一下自己的jdk文件夹的名称

cd /usr/java
ls

复制jdk文件夹的名称,比如我的是  jdk-9.0.1

sudo gedit /usr/hadoop/hadoop-2.7.3/etc/hadoop/hadoop-env.sh

我们在这一行前面加一个 # 符号
然后换行加入下面代码 (jdk-9.0.1 这个不是固定的,需要按照你自己刚才查到的来改),ctrl+s保存关闭即可

export JAVA_HOME=/usr/java/jdk-9.0.1

2. 配置yarn-env.sh

sudo gedit /usr/hadoop/hadoop-2.7.3/etc/hadoop/yarn-env.sh

找到如下代码
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
修改为新的代码
export JAVA_HOME=/usr/java/jdk-9.0.1

3. 配置core-site.xml

sudo gedit /usr/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml

找到
<configuration>
</configuration>
修改为 (注意修改第4行代码中的master,如果你是跟着我做过来的,那么可以复制,如果你自己给虚拟机起的名字那么请修改为你的主机名字)

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
<description>HDFS 的 URI,文件系统://namenode 标识:端口号 </description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
<description>namenode 上本地的 hadoop 临时文件夹</description>
</property>
</configuration>

4. 配置 hdfs-site.xml

sudo gedit /usr/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml

找到
<configuration>
</configuration>
修改为 (注意修改倒数第3行代码中的master,如果你是跟着我做过来的,那么可以复制,如果你自己给虚拟机起的名字那么请修改为你的主机名字)

<configuration>
<!–hdfs-site.xml–>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/hdfs/name</value>
<description>namenode 上存储 hdfs 名字空间元数据 </description> </property>
<property>
<name>dfs.namenode.data.dir</name>
<value>file:/usr/hadoop/hdfs/data</value>
<description>datanode 上数据块的物理存储位置</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>副本个数,配置默认是 3,应小于 datanode 机器数量 </description>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.http.address</name>
<value>你的内网ip地址(我是192.168.56.101):50070</value>
</property>
</configuration>

5. 配置mapred-site.xml

这个略有不同,先创建再编辑

cd /usr/hadoop/hadoop-2.7.3/etc/hadoop/
sudo cp mapred-site.xml.template mapred-site.xml
sudo gedit mapred-site.xml

找到
<configuration>
</configuration>
修改为 (注意修改代码中的master(两处),如果你是跟着我做过来的,那么可以复制,如果你自己给虚拟机起的名字那么请修改为你的主机名字)

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/history/done</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/history/done_intermediate</value>
</property>
</configuration>

6. 配置 yarn-site.xml

sudo gedit /usr/hadoop/hadoop-2.7.3/etc/hadoop/yarn-site.xml

找到
<configuration>
</configuration>
修改为 (注意修改第四行代码中的master和倒数第三行的ip地址(:8099不要删除),如果你是跟着我做过来的,那么可以复制,)

<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.56.101:8099</value>
</property>
</configuration>

7.配置slaves

sudo gedit /usr/hadoop/hadoop-2.7.3/etc/hadoop/slaves

写入如下内容

slave1
slave2

目前第一台虚拟机已经配置好了,我们按照同样的程序重新修改一下其他两个虚拟机的配置,注意三台虚拟机的配置文件一样的,!!无须!! 将master修改为slave1,slave2


  • 在继续运行之前我们先设置一下root的密码

sudo passwd

然后输入我们之前一直输入的密码,这里输入密码是不显示的,心里默念就好

  • 启动Hadoop (以下操作在第一台master虚拟机中执行)

cd /usr/hadoop/hadoop-2.7.3

格式化namenode

sudo bin/hdfs namenode –format

修改/etc/ssh/ssh_config 文件中的配置,添加如下两行配置:

sudo gedit /etc/ssh/ssh_config

添加如下内容(加载文件最后即可)

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

启动 NameNode 和 DataNode 守护进程
启动 ResourceManager 和 NodeManager 守护进程

这里不知道为什么总是让输入root密码,所以我们强制以我开机时的用户名来执行
这个用户名可以在终端前面来看     @前面的即为用户名

sudo -u 用户名 sbin/start-all.sh


  • 验证每台虚拟机是否启动成功

在每台虚拟机上执行以下命令

jps

这里我简单介绍一下,master虚拟机jps显示进程中会有一个NameNode进程,slave虚拟机中会有DataNode进程,而且现在在master虚拟机中打开浏览器,输入192.168.56.101:50070 (master主机的ip:50070 就可以了)

类似这样就是成功了。

可以看到两台slave的信息


2.提交第一个 mapreduce 任务

  • 下面过程均在master主机上操作
  • 进入本地hadoop目录(cd /usr/hadoop/hadoop-2.7.3)
  • 执行  bin/hdfs dfs -mkdir -p /data/input 在虚拟分布式文件系统上创建一个测试目录/data/input
  • 执行 bin/hdfs dfs -put README.txt /data/input/  将当前目录下的README.txt 文件复制到虚拟分布式文件系统中
  • 执行 bin/hdfs dfs-ls /data/input 查看文件系统中是否存在我们所复制的文件

    中途有几个WARING,这里我暂时忽略了。最终的结果

  • 向hadoop提交单词统计任务

    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce- examples-2.7.3.jar wordcount  /data/input /data/output/result

     

  • 运行完毕之后查看运行结果

     

    bin/hdfs dfs -cat /data/output/result/part-r-00000

    显示的结果是一些单词的统计

    到此为止 Hadoop安装完成