HDFS 分布式文件系统
Namenode
Secondarynode
Datanode

MapReduce 分布式计算框架
JobTracker
TaskTracker
Map Task
Reducer Task

Yarn 集群资源管理系统
Resourcemanager
Nodemanager
ApplicationMaster
Container
Client

hadoop 安装 (单机模式)

禁用 selinux 和 iptables
配置 /etc/hosts 保证所有主机域名能够相互解析

1、安装 java
#yum install java-1.8.0-openjdk -y

验证:
#java -version

2、安装 jps
#yum install java-1.8.0-openjdk-devel -y

验证:
#jps

3、安装 hadoop
#tar zxf hadoop-2.7.3.tar.gz
#mv hadoop-2.7.3 /usr/local/hadoop

修改配置文件的运行环境:
#vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre"
export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"

验证:
#cd /usr/local/hadoop
#./bin/hadoop version

统计分析热词
创建数据源
#mkdir input
在这个文件夹里面放入需要统计分析的数据
#cp *.txt input/

统计分析1 单词出现的频率 #前提要用主机名 ping通自己
#vim /etc/hosts
127.0.0.1 node1 ...

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

统计分析2 某一个关键词出现的频率,例如 dfs 这个词前面字母是 h 的出现的频率
#./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep /input /output1 '(?<=h)dfs'

排错 1
提示 JAVA_HOME is not set and could not be found
表示 JAVA_HOME 没有设置
解决方法:
设置 hadoop-env.sh 里面的 JAVA_HOME 或在运行脚本前面加入前置变量设置
JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre" ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input output

排错 2
提示 java.net.UnknownHostException: host: host: unknown error
at java.net.InetAddress.getLocalHost(InetAddress.java:1505)
表示主机名没有 IP 解析
解决方法:
在 /etc/hosts 里面增加 主机名 IP 对应关系

排错 3
提示:17/07/24 23:10:46 INFO jvm.JvmMetrics: Cannot initialize JVM Metrics with processName=JobTracker, sessionId= - already initialized
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/usr/local/hadoop/output already exists
表示输出的文件目录已经存在
解决方法:
删除已经存在的目录或更改结果保存位置


http://hadoop.apache.org

# for i in node{1..3}; do ssh ${i} 'yum install java-1.8.0-openjdk-devel -y'; done

伪分布式配置:

xml 配置格式

关键字
变量值
描述

配置文件路径 /usr/local/hadoop/etc/hadoop/
1 配置 hadoop-env.sh
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre"
export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"
查找 JAVA_HOME
#readlink -f $(which java)

2 配置 core-site.xml
https://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/core-default.xml



fs.defaultFS
file:///


hadoop.tmp.dir #hadoop数据根目录
/var/hadoop


hdfs://namenode:port/


3 配置 hdfs-site.xml
https://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml



dfs.replication
2
文件复制份数


dfs.namenode.http-address
192.168.4.10:50070


dfs.namenode.secondary.http-address
192.168.4.10:50090

常用配置选项
dfs.namenode.name.dir
dfs.datanode.data.dir
dfs.namenode.http-address
dfs.namenode.secondary.http-address
dfs.webhdfs.enabled
dfs.permissions.enabled

4 配置 mapred-site.xml
https://hadoop.apache.org/docs/r2.7.3/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml


指定mapreduce的资源管理器(单机时是local)
mapreduce.framework.name
yarn #使用yarn来做集群资源管理

使用yran来管理下面其实可以不配,yarn会自动管理jobtracker和tasktracker角色,这里我们还是指定master为jobtracker
#指定jobtracker.http端口
mapreduce.jobtracker.http.address
master:50030


mapreduce.jobhistory.address
master:10020


mapreduce.jobhistory.webapp.address
master:19888

常用配置选项
mapreduce.framework.name
mapreduce.jobtracker.http.address

mapreduce.jobhistory.address
mapreduce.jobhistory.webapp.address

Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。默认情况下,Hadoop历史服务器是没有启动的,我们可以通过下面的命令来启动Hadoop历史服务器
#mr-jobhistory-daemon.sh start historyserver
这样我们就可以在相应机器的19888端口上打开历史服务器的WEB UI界面。可以查看已经运行完的作业情况。历史服务器可以单独在一台机器上启动

5 配置 yarn-site.xml
https://hadoop.apache.org/docs/r2.7.3/hadoop-yarn/hadoop-yarn-common/yarn-default.xml



yarn.nodemanager.aux-services
mapreduce_shuffle


    yarn.resourcemanager.hostname
    master

常用配置选项
yarn.nodemanager.aux-services
yarn.nodemanager.aux-services.mapreduce.shuffle.class
yarn.resourcemanager.hostname