怕输的人,没资格赢~!
一:Hadooop概述
1.Hadoop组成
1)Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统
2)HadoopM MapReduce:一个分布式的离线并行计算框架
3)Hadoop YARN:作业调度与集群资源管理的框架
4)Hadoop Common:支持其他模块的工具模块
 
2.HDFS架构概述
1)NameNode:存储文件的元数据,如文件名,文件目录结构,文件属性,以及每个文件的快列表和快所在的DataNode等
2)DataNode:在本地文件系统存储文件快数据,以及快数据的校验和
3)Secondary NameNode:用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照
 
3.YARN架构概述 
1)ResourceManager(rm):处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度;
 2)NodeManager(nm):单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令;
 3)ApplicationMaster:数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错。
 4)Container:对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。 
4.MapReduce架构概述
MapReduce将计算过程分为两个阶段:Map和Reduce
 1)Map阶段并行处理输入数据
 2)Reduce阶段对Map结果进行汇总 
二.Hadoop运行环境搭建
1.虚拟机网络模式为NAT
1)设置网络适配器为NAT模式
2)重新启动系统——sync;reboot
 
2.克隆虚拟机
 
3.修改静态IP
1)在终端命令窗口输入 vim /etc/udev/rules.d/70-persistent-net.rules
      删除eth0该行;将eth1修改为eth0,同时复制物理ip地址
2)修改IP地址 vim /etc/sysconfig/network-scripts/ifcfg-eth0
需要改的有5项,例:
IPADDR=192.168.1.101
GATEWAY=192.168.1.2
ONBOOT=yes
BOOTPROTO=static
DNS1=192.168.1.2
3)执行service network restart
4)如果报错,reboot,重启虚拟机
 
4.修改linux主机名
1)修改linux的hosts文件  hostname
2)如果感觉此主机名不合适,我们可以进行修改  vi /etc/sysconfig/network
3)打开此文件后,就可以看到主机名。修改此主机名为我们想要修改的主机名
4)保存退出
5)打开/etc/hosts   vim /etc/hosts,将克隆的IP和主机名写进去
6)重启设备,重启后,查看主机名,已经修改成功
 
5.修改window的hosts文件
1)进入C:\Windows\System32\drivers\etc 路径
2)打开hosts文件并添加如下内容
 
6.关闭防火墙 
1)查看防火墙开机启动状态
chkconfig iptables --list
2)关闭防火墙
chkconfig iptables off
 
7.在opt目录下创建文件
1)创建mm用户
adduser mm
passwd mm
2)设置mm用户具有root权限,修改 /etc/sudoers文件,找到下面一行,在root下面添加一行
mm ALL=(ALL) ALL
3)在/opt目录下创建文件夹
1)在root用户下创建module、software文件夹
mkdir module
mkdir software
2)修改module、software文件所有者
chown mm module
chown mm software
 
8.安装jdk
1)卸载现有jdk 
rpm -qa | grep java
rpm -e 软件包
2)用传输工具,将jdk、Hadoop-2.7.2 tar.gz导入到opt目录下面的software文件夹下面
3)在linux系统下的opt目录中查看软件包是否导入成功
4)解压jdk到/opt/module目录下
tar -zxvf jdk-7u79-linux-x64.gz -C /opt/module/
5)配置环境变量
①先获取jdk路径:pwd
②打开/etc/profile文件:vi /etc/profile,在文件末尾添加jdk路径
##JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.7.0_79
export PATH=$PATH:$JAVA_HOME/bin
③保存并退出:wq;
④让修改后的文件生效:source /etc/profile
⑤重启sync;reboot
⑥测试jdk安装成功:java -version
 
9.安装hadoop
1)进入到Hadoop安装包路径下:cd /opt/software
2)解压安装文件到/opt/module下面:tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module
3)查看是否解压成功:ls /opt/module/
4)配置hadoop中的hadoop-env.sh
①Linux系统中获取jdk的安装路径:echo ¥JAVA_HOME
②修改hadoop-env.sh文件中JAVA_HOME路径
export JAVA_HOME=/opt/module/jdk1.7.0_79
5)将hadoop添加到环境变量
①获取hadoop安装路径:pwd
②打开/etc/profile文件:vi /etc/profile,在文件末尾添加jdk路径
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
③保存后退出:wq
④让修改后的文件生效:source /etc/profile
⑤重启:sync,reboot
 
三:Hadoop运行模式
1)本地模式:不需要启动单独进程,直接可以运行,测试和开发时使用
2)伪分布式模式:等同于完全分布式 ,只有一个节点
3)完全分布式模式:多个节点一起运行
 
四:本地文件运行Hadoop案例
1.官方grep案例
1)创建在hadoop-2.7.2文件下面创建一个input文件夹 mkdir input
2)将hadoop的xml配置文件复制到input cp /etc/hadoop/*.xml input
3)执行share目录下的mapreduce程序
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
4)查看输出结果 cat output/*
 
2.官方wordcount案例
1)创建在hadoop-2.7.2文件下面创建一个wcinput文件夹  mkdir wcinput
2)在wcinput文件下创建一个wc.input文件
3)编辑wc.input文件
4)回到hadoop目录:/opt/module/hadoop2.7.2
5)执行程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
6)查看结果:cat wcountput/part-r-00000
 
五.伪分布式运行Hadoop案例
1.HDFS上运行MapReduce程序
1)分析:准备一台客户机;安装jdk;配置环境变量;安装hadoop;配置环境变量;配置集群;启动、测试集群增、删、差;在HDFS上执行wordcount案例
2)执行步骤:
①配置集群
(a)配置:hadoop-env.sh;
Linux系统中获取jdk的安装路径:echo $JAVA_HOME;
修改JAVA_HOME路径:export JAVA_HOME=/opt/module/jdk1.7.0_79
(b)配置:core-site.xml
 
<!-- 指定HDFS中NameNode的地址 -->
 <property>
     <name>fs.defaultFS</name>
     <value>hdfs://hadoop101:8020<value>
 </property>(c)配置hdfs-site.xml
 
<!-- 指定HDFS副本的数量 -->
 <property>
      <name>dfs.replication</name>
      <value>1<value>
 </property>②启动集群
(a)格式化namenode(第一次启动时格式化,以后就不要格式化):bin/hdfs namenode -format
(b)启动namenode:sbin/hadoop-daemon.sh start namenode
(c)启动datanode:sbin/hadoop-daemon.sh start datanode
③查看集群
(a)查看是否启动成功:jps
(b)查看产生的log日志:/opts/module/hadoop-2.7.2/logs
(c)web端查看HDFS文件系统:http://192.168.1.101:50070/dfshealth.html#tab-overview
④操作集群
(a)在hdfs文件系统上创建一个Input文件夹:bin/hdfs dfs -mkdir -p /user/mm/mapreduce/wordcount/input
(b)将测试文件内容上传到文件系统上:bin/hdfs dfs -put wcinput/wc.input /user/mm/mapreduce/wordcount/input
(c)查看上传的文件是否正确:
bin/hdfs dfs -ls /user/mm/mapreduce/wordcount/input/
bin/hdfs dfs -cat /user/mm/mapreduce/wordcount/input/wc.input
(d)在HDFS上运行mapreduce程序:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-example-2.7.2.jar/wordcount /user/mm/mapreduce/mapreduce/wordcount/input /user/mm/mapreduce/wordcount/output
(e)查看输出结果
命令行查看:bin/hdfs dfs -cat /user/mm/mapreduce/wordcount/output/*
⑤将测试文件内容下载到本地
hadoop fs -get /user/mm/mapreduce/wordcount/output/part-r-00000 ./wcinput/
⑥删除输出结果
hdfs dfs -rmr /user/mm/mapreduce/wordcount/output