Hadoop开发入门与实践(二)

一、Linux Hadoop环境开发

(一)安装JDK

1、下载Oracle JDK安装文件

[root@localhost ~]# wget http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz

2、解压下载文件

(1)创建Java目录
[root@localhost ~]# mkdir /usr/java
(2)解压文件

创建Java目录:

[root@localhost ~]# mkdir /usr/java 
 [root@localhost ~]# tar zxvf jdk-8u151-linux-x64.tar.gz -C /usr/java

3、配置环境变量

[root@localhost ~]# vi /etc/profile 
 在文件结尾添加: 
 export JAVA_HOME=/usr/java/jdk1.8.0_151 
 export PATH=PATH:JAVA_HOME/bin

4、验证测试

[root@localhost ~]# echo $JAVA_HOME 
 [root@localhost ~]# java –version

(二)Hadoop布署方式

Hadoo部署模式有:本地模式、伪分布模式、完全分布式模式。
区分的依据是 NameNode、DataNode、ResourceManager、NodeManager 等模块运行在几个JVM 进程、几个机器。

模式名称

各模块占用的JVM进程数

各模块运行机器数

本地模式

1 个

1 个

伪分布式模式

N 个

1 个

集群模式

N 个

N 个

1、Hadoop下载:

[root@localhost ~]# curl -O http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.4/hadoop-2.7.4.tar.gz

2、解压文件

(1) 目录创建hadoop目录
[root@localhost /]# mkdir /hadoop

(2) 解压文件:
[root@localhost hadoop]# tar -zxvf hadoop-2.7.4.tar.gz -C /hadoop

hadoop二次开发视频 hadoop开发教程_hadoop

3、目录结构

目录

文件

说明

bin

存放的可执行脚本,所有的用户都有执行的权限

sbin

start-dfs.sh

只有超级用户(superuser)才有权限执行的脚本

start-yarn.sh

只有超级用户(superuser)才有权限执行的脚本

stop-dfs.sh

只有超级用户(superuser)才有权限执行的脚本

stop-yarn.sh

只有超级用户(superuser)才有权限执行的脚本

etc

core-site.xml

配置文件,common

hdfs-site.xml

配置文件, hdfs

mapred-site.xml

配置文件, mapreduce(yarn)的配置信息。

include

C语言接口开发用到的头文件

lib

库文件

share

存放的是doc文档和最重要的Hadoop源代码编译生成的jar包文件。

libexec

目录下存放的是hadoop的配置脚本

logs

日志文件

(三)独立模式(standalone或local mode)

  本地模式是最简单的模式,所有模块都运行与一个JVM 进程中,使用的本地文件系统,而不是HDFS,本地模式主要是用于本地开发过程中的运行调试用。下载hadoop 安装包后不用任何设置,默认的就是本地模式。

1、运行MapReduce程序测试:

(1)用hadoop自带的 wordcount 例子来在本地模式下测试跑mapreduce:

创建目录:data:

准备mapreduce输入文件wordcount.txt

hello

hbase

spark

storm

sqoop

hadoop

hive

spark

hadoop

world

hadoop二次开发视频 hadoop开发教程_hadoop二次开发视频_02

(2)运行测试

[root@localhost hadoop-2.7.4]#./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar wordcount /root/wordcount.txt output

hadoop二次开发视频 hadoop开发教程_mapreduce_03

这里可以看到 job ID 中有 local 字样,说明是运行在本地模式下的。

本地模式下,mapreduce的输出是输出到本地。

[root@localhost hadoop-2.7.4]# ll output


总用量 4

-rw-r–r–. 1 root root 53 12月 12 08:02 part-r-00000 
 -rw-r–r–. 1 root root 0 12月 12 08:02 _SUCCESS

输出目录中有_SUCCESS 文件说明 JOB 运行成功,part-r-00000 是输出结果文件。

part-r-0000这个文件时存放在hdfs上的,并非本地文件系统。

(3)查看输出结果:
[root@localhost hadoop-2.7.4]# cat output/*

hadoop二次开发视频 hadoop开发教程_hadoop_04

(四)伪分布模式

1、修改配置文件:

(1)配置Hadoop环境变量
[root@localhost hadoop-2.7.4]# vi /etc/profile

追加内容:

export HADOOP_HOME=/hadoop/hadoop-2.7.4 
 export PATH=PATH:JAVA_HOME/bin:HADOOPHOME/bin:HADOOP_HOME/sbin

hadoop二次开发视频 hadoop开发教程_hadoop二次开发视频_05

(2) 环境验证:
root@localhost /]# source /etc/profile 
 [root@localhost hadoop-2.7.4]# echo $HADOOP_HOME 
 /hadoop/hadoop-2.7.4
(3) 修改hadoop-env.hs中的Java环境变量:
export JAVA_HOME=/usr/java/jdk1.8.0_151 
 [root@localhost hadoop-2.7.4]# vi etc/hadoop/hadoop-env.sh


hadoop二次开发视频 hadoop开发教程_hadoop_06

(4) 核心配置:core-site.xml

[root@localhost hadoop-2.7.4]# vi ${HADOOP_HOME}/etc/hadoop/core-site.xml
fs.defaultFS:用来指定HDFS的(NameNode)的地址:
Hadoop.tmp.dir:用来指定Hadoop运行时产生文件的存放目录
比如 HDFS 的 NameNode 数据默认都存放这个目录下, 查看*-default.xml等默认配置文件,就可以看到很多依赖${hadoop.tmp.dir}的配置。
默认hadoop.tmp.dir 是/tmp/hadoop-${user.name},此时有个问题就是 NameNode 会将 HDFS 的元 数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空/tmp 目录下的东西,导致 NameNode 元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。
添加:

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoopmaster:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/hadoop/hadoop-2.7.4/tmp</value>
        </property>
</configuration>

注意:
一定要修改主机名与之对应。
[root@localhost ~]# vi /etc/hosts
添加:
192.168.191.141 hadoopmaster

(5) 创建临时目录:

[root@localhost hadoop-2.7.4]# mkdir tmp

(6) HDFS配置文件:hdfs-site.xml

[root@localhost hadoop-2.7.4]# vi ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
fs.replicatio:指定hdfs保存数据副本的数量:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
(7) 格式化 HDFS

[root@localhost hadoop-2.7.4]# ./bin/hdfs namenode -format
  格式化是对 HDFS这个分布式文件系统中的DataNode 进行分块,统计所有分块后的初始元数据的存储在NameNode中。
  格式化后,查看core-site.xml 里 hadoop.tmp.dir指定的目录下是否有了dfs目录,如果有,说明格式化成功。
fsimage是NameNode元数据在内存满了后,持久化保存到的文件。
fsimage*.md5是校验文件,用于校验 fsimage 的完整性。
seen_txid是 hadoop 的版本.
[root@localhost hadoop-2.7.4]# cat /hadoop/hadoop-2.7.4/tmp/dfs/name/current/VERSION
vession文件里保存:
namespaceID:NameNode 的唯一ID。
clusterID:集群ID,NameNode 和 DataNode的集群ID应该一致,表明是一个集群。

(8) mapreduce配置:

在etc/hadoop目录下:mapred-site.xml
将:mapred-site.xml.template 改为:mapred-site.xml
[root@localhost hadoop]# cp mapred-site.xml.template mapred-site.xml
指定 mapreduce 运行在 yarn 框架上。

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
(9) Yarn配置yarn-site.xml

[root@localhost hadoop]# vi yarn-site.xml
yarn.nodemanager.aux-services:nodemanager获取数据的方式是shuffle
yarn:指定yarn的主机服务器地址

<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoopmaster</value>
        </property>
</configuration>

yarn.nodemanager.aux-services
配置了 yarn 的默认混洗方式,选择为 mapreduce 的默认混洗算法。
yarn.resourcemanager.hostname 指定了 Resourcemanager 运行在哪个节点上。
Yarn是一个资源调度系统。

2、hadoop初始化和测试

(1) 初始化文HDFS(格式化文件系统)

查找hadoop临时目录命令
[root@localhost hadoop]# which hadoop
/usr/hadoop/hadoop-2.7.4/bin/hadoop

(2) 启动HDFS和YARN
A. 启动NameNode

[root@localhost hadoop]# ${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode

[root@localhost hadoop]# jps

hadoop二次开发视频 hadoop开发教程_hadoop_07

B. 启动DataNode

[root@localhost hadoop]# ${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode

[root@localhost hadoop]# jps

hadoop二次开发视频 hadoop开发教程_mapreduce_08

C. 启动SecondaryNameNode

[root@localhost hadoop]# ${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode

hadoop二次开发视频 hadoop开发教程_mapreduce_09

(3) start-all.sh启动所有节点:

[root@localhost hadoop]# start-all.sh

[root@localhost sbin]# ./start-all.sh

[root@localhost sbin]# jps

hadoop二次开发视频 hadoop开发教程_xml_10


NodeManager:数据节点

SecondaryNameNode:辅助NameNode

(4) 启动Resourcemanager

需配置Yarn

[root@localhost hadoop]# ${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager

hadoop二次开发视频 hadoop开发教程_hadoop_11

(5) 浏览器访问管理:

hadoop二次开发视频 hadoop开发教程_hadoop二次开发视频_12


namenode管理界面:hdfs

http://192.168.146.128:50070/

hadoop二次开发视频 hadoop开发教程_hadoop_13


资源管理:

YARN 的 Web 页面

http://192.168.191.141:8088

hadoop二次开发视频 hadoop开发教程_xml_14