1.1 大数据概念
![](https://i-blog.csdnimg.cn/blog_migrate/9a549d9b489b3c63fa95ef40586bcbb7.png)
1.2 大数据特点(4V)
![](https://i-blog.csdnimg.cn/blog_migrate/691cabbba8819928513a63239c5401d5.png)
1.3 大数据应用场景
![](https://i-blog.csdnimg.cn/blog_migrate/95dd2842b5e0d8aea1132e827e46b7ea.png)
1.4 大数据发展前景
1.5 大数据部门业务流程分析
1.6 大数据部门组织结构(重点)
第2章 从Hadoop框架讨论大数据生态2.1 Hadoop是什么
![](https://i-blog.csdnimg.cn/blog_migrate/368813aaef58670ccba5b18c1e08587d.png)
2.2 Hadoop发展历史(了解)
2.3 Hadoop三大发行版本(了解)Hadoop三大发行版本:Apache、Cloudera、Hortonworks。Apache版本最原始(最基础)的版本,对于入门学习最好。Cloudera内部集成了很多大数据框架。对应产品CDH。Hortonworks文档较好。对应产品HDP。1)Apache Hadoop官网地址:http://hadoop.apache.org/releases.html下载地址:https://archive.apache.org/dist/hadoop/common/2)Cloudera Hadoop 官网地址:https://www.cloudera.com/downloads/cdh/5-10-0.html下载地址:http://archive-primary.cloudera.com/cdh5/cdh/5/(1)2008年成立的Cloudera是最早将Hadoop商用的公司,为合作伙伴提供Hadoop的商用解决方案,主要是包括支持、咨询服务、培训。(2)2009年Hadoop的创始人Doug Cutting也加盟Cloudera公司。Cloudera产品主要为CDH,Cloudera Manager,Cloudera Support(3)CDH是Cloudera的Hadoop发行版,完全开源,比Apache Hadoop在兼容性,安全性,稳定性上有所增强。Cloudera的标价为每年每个节点10000美元。(4)Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署好一个Hadoop集群,并对集群的节点及服务进行实时监控。3)Hortonworks Hadoop官网地址:https://hortonworks.com/products/data-center/hdp/下载地址:https://hortonworks.com/downloads/#data-platform(1)2011年成立的Hortonworks是雅虎与硅谷风投公司Benchmark Capital合资组建。(2)公司成立之初就吸纳了大约25名至30名专门研究Hadoop的雅虎工程师,上述工程师均在2005年开始协助雅虎开发Hadoop,贡献了Hadoop80%的代码。(3)Hortonworks的主打产品是Hortonworks Data Platform(HDP),也同样是100%开源的产品,HDP除常见的项目外还包括了Ambari,一款开源的安装和管理系统。(4)Hortonworks目前已经被Cloudera公司收购。2.4 Hadoop的优势(4高)
![](https://i-blog.csdnimg.cn/blog_migrate/24721e241243afe8718b81eefa67dbbc.png)
2.5 Hadoop组成(面试重点)
2.5.1 HDFS架构概
阿善看到
2.5.2 YARN架构概述
![](https://i-blog.csdnimg.cn/blog_migrate/4308ac1246d2fd8efc1d35756c81f605.png)
2.5.3 MapReduce架构概述MapReduce将计算过程分为两个阶段:Map和Reduce1)Map阶段并行处理输入数据2)Reduce阶段对Map结果进行汇总
![](https://i-blog.csdnimg.cn/blog_migrate/f0ebff117edd2ddc10b2d19714c397aa.png)
2.6 大数据技术生态体系
![](https://i-blog.csdnimg.cn/blog_migrate/a80bc60de7e655a7d3e66ef36a601804.png)
图中涉及的技术名词解释如下:1)Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。2)Flume:Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据; 3)Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统; 4)Storm:Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。5)Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。6)Flink:Flink是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。7)Oozie:Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统。8)Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。9)Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。10)ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。2.7 推荐系统框架图
![](https://i-blog.csdnimg.cn/blog_migrate/d4e2998626ff578a3fe2c98558b8794e.png)
第3章 Hadoop运行环境搭建(开发重点)3.1 虚拟机环境准备1)准备三台虚拟机,虚拟机配置要求如下:(1)单台虚拟机:内存4G,硬盘50G,安装必要环境sudo yum install -y epel-releasesudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git(3)修改克隆虚拟机的静态IPsudo vim /etc/sysconfig/network-scripts/ifcfg-ens33改成DEVICE=ens33TYPE=EthernetONBOOT=yesBOOTPROTO=staticNAME="ens33"IPADDR=192.168.1.101PREFIX=24GATEWAY=192.168.1.2DNS1=192.168.1.2(4)查看Linux虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8
(5)查看Windows系统适配器VMware Network Adapter VMnet8的IP地址
![](https://i-blog.csdnimg.cn/blog_migrate/eef02aec2968397a85b0e96d0fc63b8d.png)
(6)保证Linux文件中IP地址、Linux虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。2)修改主机名 (1)修改主机名称sudo hostnamectl --static set-hostname hadoop101(2)配置主机名称映射,打开/etc/hostssudo vim /etc/hosts添加如下内容192.168.1.100 hadoop100192.168.1.101 hadoop101192.168.1.102 hadoop102192.168.1.103 hadoop103192.168.1.104 hadoop104192.168.1.105 hadoop105192.168.1.106 hadoop106192.168.1.107 hadoop107192.168.1.108 hadoop108(3)修改window7的主机映射文件(hosts文件) (a)进入C:\Windows\System32\drivers\etc路径 (b)打开hosts文件并添加如下内容192.168.1.100 hadoop100 192.168.1.101 hadoop101192.168.1.102 hadoop102192.168.1.103 hadoop103192.168.1.104 hadoop104192.168.1.105 hadoop105192.168.1.106 hadoop106192.168.1.107 hadoop107192.168.1.108 hadoop108(4)修改window10的主机映射文件(hosts文件)(a)进入C:\Windows\System32\drivers\etc路径(b)拷贝hosts文件到桌面 (c)打开桌面hosts文件并添加如下内容192.168.1.100 hadoop100 192.168.1.101 hadoop101192.168.1.102 hadoop102192.168.1.103 hadoop103192.168.1.104 hadoop104192.168.1.105 hadoop105192.168.1.106 hadoop106192.168.1.107 hadoop107192.168.1.108 hadoop108(d)将桌面hosts文件覆盖C:\Windows\System32\drivers\etc路径hosts文件3)关闭防火墙sudo systemctl stop firewalldsudo systemctl disable firewalld4)创建atguigu用户sudo useradd atguigusudo passwd atguigu5)重启虚拟机reboot6)配置atguigu用户具有root权限vi sudo修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:## Allow root to run any commands anywhereroot ALL=(ALL) ALLatguigu ALL=(ALL) ALL7)在/opt目录下创建文件夹(1)在/opt目录下创建module、software文件夹sudo mkdir modulesudo mkdir software (2)修改module、software文件夹的所有者cd sudo mkdir /opt/module /opt/softwaresudo chown atguigu:atguigu /opt/module /opt/software3.2 在102安装JDK1)卸载现有JDKrpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps2)用SecureCRT工具将JDK导入到opt目录下面的software文件夹下面
![](https://i-blog.csdnimg.cn/blog_migrate/6f2cb94d15c596a8a39438ef792bcd16.png)
3) “alt+p”进入sftp模式
4)选择jdk1.8拖入工具
5)在Linux系统下的opt目录中查看软件包是否导入成功ls /opt/software/看到如下结果:hadoop-3.1.3.tar.gz jdk-8u212-linux-x64.tar.gz6)解压JDK到/opt/module目录下tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/7)配置JDK环境变量 (1)新建/etc/profile.d/my_env.sh文件sudo vim /etc/profile.d/my_env.sh添加如下内容#JAVA_HOMEexport JAVA_HOME=/opt/module/jdk1.8.0_212export PATH=$PATH:$JAVA_HOME/bin (2)保存后退出:wq (3)重启xshell窗口,让环境变量生效8)测试JDK是否安装成功java -version如果能看到以下结果、则Java正常安装java version "1.8.0_212"注意:重启(如果java -version可以用就不用重启)sudo reboot3.3 在102安装HadoopHadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/1)用SecureCRT工具将hadoop-3.1.3.tar.gz导入到opt目录下面的software文件夹下面切换到sftp连接页面,选择Linux下编译的hadoop jar包拖入,如图2-32所示
![](https://i-blog.csdnimg.cn/blog_migrate/ddb061fdfa06d4312948bd7f7a30deb9.png)
图 拖入hadoop的tar包
![](https://i-blog.csdnimg.cn/blog_migrate/b6d3cbc49104017a0cf4e72095dd3d53.png)
图2-33 拖入Hadoop的tar包成功2)进入到Hadoop安装包路径下[atguigu@hadoop101 ~]$ cd /opt/software/3)解压安装文件到/opt/module下面[atguigu@hadoop101 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/4)查看是否解压成功[atguigu@hadoop101 software]$ ls /opt/module/hadoop-3.1.35)将Hadoop添加到环境变量 (1)获取Hadoop安装路径[atguigu@hadoop101 hadoop-3.1.3]$ pwd/opt/module/hadoop-3.1.3 (2)打开/etc/profile.d/my_env.sh文件sudo vim /etc/profile.d/my_env.sh在profile文件末尾添加JDK路径:(shitf+g)##HADOOP_HOMEexport HADOOP_HOME=/opt/module/hadoop-3.1.3export PATH=$PATH:$HADOOP_HOME/binexport PATH=$PATH:$HADOOP_HOME/sbin(3)保存后退出:wq (4)让修改后的文件生效[atguigu@ hadoop101 hadoop-3.1.3]$ source /etc/profile6)测试是否安装成功[atguigu@hadoop101 hadoop-3.1.3]$ hadoop versionHadoop 3.1.37)重启(如果Hadoop命令不能用再重启)[atguigu@ hadoop101 hadoop-3.1.3]$ sync[atguigu@ hadoop101 hadoop-3.1.3]$ sudo reboot3.4 Hadoop目录结构1)查看Hadoop目录结构[atguigu@hadoop101 hadoop-3.1.3]$ ll总用量 52drwxr-xr-x. 2 atguigu atguigu 4096 5月 22 2017 bindrwxr-xr-x. 3 atguigu atguigu 4096 5月 22 2017 etcdrwxr-xr-x. 2 atguigu atguigu 4096 5月 22 2017 includedrwxr-xr-x. 3 atguigu atguigu 4096 5月 22 2017 libdrwxr-xr-x. 2 atguigu atguigu 4096 5月 22 2017 libexec-rw-r--r--. 1 atguigu atguigu 15429 5月 22 2017 LICENSE.txt-rw-r--r--. 1 atguigu atguigu 101 5月 22 2017 NOTICE.txt-rw-r--r--. 1 atguigu atguigu 1366 5月 22 2017 README.txtdrwxr-xr-x. 2 atguigu atguigu 4096 5月 22 2017 sbindrwxr-xr-x. 4 atguigu atguigu 4096 5月 22 2017 share2)重要目录(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)(4)sbin目录:存放启动或停止Hadoop相关服务的脚本(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例第4章 Hadoop运行模式Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。Hadoop官方网站:http://hadoop.apache.org/4.1 本地运行模式(官方wordcount)1)创建在hadoop-3.1.3文件下面创建一个wcinput文件夹mkdir wcinput2)在wcinput文件下创建一个wc.input文件cd wcinput3)编辑wc.input文件vi wc.input在文件中输入如下内容hadoop yarnhadoop mapreduceatguiguatguigu保存退出::wq4)回到Hadoop目录/opt/module/hadoop-3.1.35)执行程序hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput6)查看结果[atguigu@hadoop101 hadoop-3.1.3]$ cat wcoutput/part-r-00000看到如下结果:atguigu 2hadoop 2mapreduce 1yarn 14.2 完全分布式运行模式(开发重点)分析: 1)准备3台客户机(关闭防火墙、静态ip、主机名称) 2)安装JDK 3)配置环境变量 4)安装Hadoop 5)配置环境变量6)配置集群7)单点启动 8)配置ssh 9)群起并测试集群4.2.1 虚拟机准备详见3.1章。4.2.2 编写集群分发脚本xsync1)scp(secure copy)安全拷贝(1)scp定义:scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2) (2)基本语法scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称(3)案例实操(a)在hadoop101上,将hadoop101中/opt/module目录下的软件拷贝到hadoop102上。[atguigu@hadoop101 /]$ scp -r /opt/module root@hadoop102:/opt/module(b)在hadoop103上,将hadoop101服务器上的/opt/module目录下的软件拷贝到hadoop103上。[atguigu@hadoop103 opt]$sudo scp -r atguigu@hadoop101:/opt/module root@hadoop103:/opt/module(c)在hadoop103上操作将hadoop101中/opt/module目录下的软件拷贝到hadoop104上。[atguigu@hadoop103 opt]$ scp -r atguigu@hadoop101:/opt/module root@hadoop104:/opt/module注意:拷贝过来的/opt/module目录,别忘了在hadoop102、hadoop103、hadoop104上修改所有文件的,所有者和所有者组。sudo chown atguigu:atguigu -R /opt/module(d)将hadoop101中/etc/profile文件拷贝到hadoop102的/etc/profile上。[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop102:/etc/profile(e)将hadoop101中/etc/profile文件拷贝到hadoop103的/etc/profile上。[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop103:/etc/profile(f)将hadoop101中/etc/profile文件拷贝到hadoop104的/etc/profile上。[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop104:/etc/profile注意:拷贝过来的配置文件别忘了source一下/etc/profile,。2)rsync远程同步工具rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。 (1)基本语法rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称 选项参数说明选项 功能-a 归档拷贝-v 显示复制过程(2)案例实操 把hadoop101机器上的/opt/software目录同步到hadoop102服务器的root用户下的/opt/目录[atguigu@hadoop101 opt]$ rsync -av /opt/software/ hadoop102:/opt/software3)xsync集群分发脚本(1)需求:循环复制文件到所有节点的相同目录下 (2)需求分析:(a)rsync命令原始拷贝:rsync -av /opt/module root@hadoop103:/opt/(b)期望脚本:xsync要同步的文件名称(c)说明:在/home/atguigu/bin这个目录下存放的脚本,atguigu用户可以在系统任何地方直接执行。(3)脚本实现(a)在/home/atguigu目录下创建xsync文件cd /home/atguiguvim xsync在该文件中编写如下代码#!/bin/bash#1. 判断参数个数if [ $# -lt 1 ]then echo Not Enough Arguement! exit;fi#2. 遍历集群所有机器for host in hadoop102 hadoop103 hadoop104do echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in $@ do #4 判断文件是否存在 if [ -e $file ] then #5. 获取父目录 pdir=$(cd -P $(dirname $file); pwd) #6. 获取当前文件的名称 fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi donedone(b)修改脚本 xsync 具有执行权限chmod +x xsync(c)将脚本移动到/bin中,以便全局调用sudo mv xsync /bin/ (d)测试脚本sudo xsync /bin/xsync4.2.3 SSH无密登录配置1)配置ssh(1)基本语法ssh另一台电脑的ip地址(2)ssh连接时出现Host key verification failed的解决方法ssh hadoop103出现:The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established.RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.Are you sure you want to continue connecting (yes/no)? (3)解决方案如下:直接输入yes2)无密钥配置(1)免密登录原理
(2)生成公钥和私钥:ssh-keygen -t rsa然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)(3)将公钥拷贝到要免密登录的目标机器上ssh-copy-id hadoop102ssh-copy-id hadoop103ssh-copy-id hadoop104注意:还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;还需要在hadoop103上采用atguigu账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。3).ssh文件夹下(~/.ssh)的文件功能解释known_hosts 记录ssh访问过计算机的公钥(public key)id_rsa 生成的私钥id_rsa.pub 生成的公钥authorized_keys 存放授权过的无密登录服务器公钥4.2.4 集群配置1)集群部署规划 注意:NameNode和SecondaryNameNode不要安装在同一台服务器 注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。 hadoop102 hadoop103 hadoop104HDFS NameNodeDataNode DataNode SecondaryNameNodeDataNodeYARN NodeManager ResourceManagerNodeManager NodeManager2)配置集群(1)核心配置文件配置core-site.xmlcd $HADOOP_HOME/etc/hadoopvim core-site.xml文件内容如下:<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <property> <name>hadoop.proxyuser.atguigu.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.atguigu.groups</name> <value>*</value> </property> <property> <name>hadoop.http.staticuser.user</name> <value>atguigu</value> </property></configuration>(2)HDFS配置文件配置hdfs-site.xmlvim hdfs-site.xml文件内容如下:<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property></configuration>(3)YARN配置文件配置yarn-site.xmlvim yarn-site.xml文件内容如下:<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>4096</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>4096</value> </property> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property></configuration>(4)MapReduce配置文件配置mapred-site.xmlvim mapred-site.xml文件内容如下:<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property></configuration>3)在集群上分发配置好的Hadoop配置文件xsync /opt/module/hadoop-3.1.3/etc/hadoop/4)查看文件分发情况cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml4.2.5 群起集群1)配置workersvim /opt/module/hadoop-3.1.3/etc/hadoop/workers在该文件中增加如下内容:hadoop102hadoop103hadoop104注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。同步所有节点配置文件xsync /opt/module/hadoop-3.1.3/etc2)启动集群 (1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)hdfs namenode -format(2)启动HDFSsbin/start-dfs.sh(3)在配置了ResourceManager的节点(hadoop103)启动YARNsbin/start-yarn.sh(4)Web端查看SecondaryNameNode(a)浏览器中输入:http://hadoop104:9868/status.html (b)查看SecondaryNameNode信息
![](https://i-blog.csdnimg.cn/blog_migrate/8c051835813778a7c2332598c313af86.png)
3)集群基本测试(1)上传文件到集群 上传小文件hadoop fs -mkdir -p /user/atguigu/inputhadoop fs -put $HADOOP_HOME/wcinput/wc.input /user/atguigu/input 上传大文件hadoop fs -put /opt/software/hadoop-3.1.3.tar.gz /(2)上传文件后查看文件存放在什么位置(a)查看HDFS文件存储路径[atguigu@hadoop102 subdir0]$ pwd/opt/module/hadoop-3.1.3/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0(b)查看HDFS在磁盘存储文件内容[atguigu@hadoop102 subdir0]$ cat blk_1073741825hadoop yarnhadoop mapreduce atguiguatguigu(3)拼接-rw-rw-r--. 1 atguigu atguigu 134217728 5月 23 16:01 blk_1073741836-rw-rw-r--. 1 atguigu atguigu 1048583 5月 23 16:01 blk_1073741836_1012.meta-rw-rw-r--. 1 atguigu atguigu 63439959 5月 23 16:01 blk_1073741837-rw-rw-r--. 1 atguigu atguigu 495635 5月 23 16:01 blk_1073741837_1013.meta[atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.jar[atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.jar[atguigu@hadoop102 subdir0]$ tar -zxvf tmp.jar(4)下载[atguigu@hadoop102 hadoop-3.1.3]$ bin/hadoop fs -get /hadoop-3.1.3.tar.gz ./(5)执行wordcount程序[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/atguigu/input /user/atguigu/output4.2.6 集群启动/停止方式总结1)各个服务组件逐一启动/停止 (1)分别启动/停止HDFS组件hdfs --daemon start/stop namenode/datanode/secondarynamenode (2)启动/停止YARNyarn --daemon start/stop resourcemanager/nodemanager2)各个模块分开启动/停止(配置ssh是前提)常用 (1)整体启动/停止HDFSstart-dfs.sh/stop-dfs.sh (2)整体启动/停止YARNstart-yarn.sh/stop-yarn.sh4.2.7 配置历史服务器为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:1)配置mapred-site.xmlvi mapred-site.xml在该文件里面增加如下配置。<!-- 历史服务器端地址 --><property> <name>mapreduce.jobhistory.address</name> <value>hadoop102:10020</value></property>
<!-- 历史服务器web端地址 --><property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop102:19888</value></property>2)分发配置xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml3)在hadoop102启动历史服务器mapred --daemon start historyserver4)查看历史服务器是否启动jps5)查看JobHistoryhttp://hadoop102:19888/jobhistory4.2.8 配置日志的聚集日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。开启日志聚集功能具体步骤如下:1)配置yarn-site.xmlvim yarn-site.xml在该文件里面增加如下配置。<property> <name>yarn.log-aggregation-enable</name> <value>true</value></property><property> <name>yarn.log.server.url</name> <value>http://${yarn.timeline-service.webapp.address}/applicationhistory/logs</value></property><property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value></property><property> <name>yarn.timeline-service.enabled</name> <value>true</value></property><property> <name>yarn.timeline-service.hostname</name> <value>${yarn.resourcemanager.hostname}</value></property><property> <name>yarn.timeline-service.http-cross-origin.enabled</name> <value>true</value></property><property> <name>yarn.resourcemanager.system-metrics-publisher.enabled</name> <value>true</value></property>2)分发配置xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml3)关闭NodeManager 、ResourceManager和HistoryServer在103上执行: stop-yarn.sh在102上执行: mapred --daemon stop historyserver4)启动NodeManager 、ResourceManage、Timelineserver和HistoryServer在103上执行:start-yarn.sh在103上执行:yarn --daemon start timelineserver在102上执行:mapred --daemon start historyserver5)删除HDFS上已经存在的输出文件hdfs dfs -rm -R /user/atguigu/output6)执行WordCount程序hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/atguigu/input /user/atguigu/output7)查看日志, http://hadoop102:19888/jobhistory
![](https://i-blog.csdnimg.cn/blog_migrate/0e48735fba0524274e95cbc6440a9ebe.png)
图 Job History
![](https://i-blog.csdnimg.cn/blog_migrate/f8a2879f867a2a13b1dc4651de9862d7.png)
图 job运行情况
图 查看日志
4.2.9 集群时间同步时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。
![](https://i-blog.csdnimg.cn/blog_migrate/f8071f602e9c0c9da6e557979f306cfc.png)
配置时间同步具体实操:1)时间服务器配置(必须root用户)(1)在所有节点关闭ntp服务和自启动sudo systemctl stop ntpdsudo systemctl disable ntpd(2)修改ntp配置文件vim /etc/ntp.conf修改内容如下a)修改1(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap b)修改2(集群在局域网中,不使用其他互联网上的时间)server 0.centos.pool.ntp.org iburstserver 1.centos.pool.ntp.org iburstserver 2.centos.pool.ntp.org iburstserver 3.centos.pool.ntp.org iburst为#server 0.centos.pool.ntp.org iburst#server 1.centos.pool.ntp.org iburst#server 2.centos.pool.ntp.org iburst#server 3.centos.pool.ntp.org iburstc)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)server 127.127.1.0fudge 127.127.1.0 stratum 10(3)修改/etc/sysconfig/ntpd 文件vim /etc/sysconfig/ntpd增加内容如下(让硬件时间与系统时间一起同步)SYNC_HWCLOCK=yes(4)重新启动ntpd服务systemctl start ntpd(5)设置ntpd服务开机启动systemctl enable ntpd2)其他机器配置(必须root用户)(1)在其他机器配置10分钟与时间服务器同步一次crontab -e编写定时任务如下:*/10 * * * * /usr/sbin/ntpdate hadoop102(2)修改任意机器时间date -s "2017-9-11 11:11:11"(3)十分钟后查看机器是否与时间服务器同步date说明:测试的时候可以将10分钟调整为1分钟,节省时间。第5章 Hadoop编译源码5.1 前期准备工作1)CentOS联网 配置CentOS能连接外网。Linux虚拟机ping www.baidu.com 是畅通的注意:采用root角色编译,减少文件夹权限出现问题2)jar包准备(hadoop源码、JDK8、maven、ant 、protobuf)(1)hadoop-3.1.3-src.tar.gz(2)jdk-8u212-linux-x64.tar.gz(3)apache-ant-1.9.9-bin.tar.gz(build工具,打包用的)(4)apache-maven-3.0.5-bin.tar.gz(5)protobuf-2.5.0.tar.gz(序列化的框架)5.2 Jar包安装注意:所有操作必须在root用户下完成1)JDK解压、配置环境变量 JAVA_HOME和PATH,验证java-version(如下都需要验证是否配置成功)[root@hadoop101 software] # tar -zxf jdk-8u212-linux-x64.tar.gz -C /opt/module/
[root@hadoop101 software]# vi /etc/profile#JAVA_HOME:export JAVA_HOME=/opt/module/jdk1.8.0_212export PATH=$PATH:$JAVA_HOME/bin
[root@hadoop101 software]#source /etc/profile验证命令:java -version2)Maven解压、配置 MAVEN_HOME和PATH[root@hadoop101 software]# tar -zxvf apache-maven-3.0.5-bin.tar.gz -C /opt/module/
[root@hadoop101 apache-maven-3.0.5]# vi conf/settings.xml
<mirrors> <!-- mirror | Specifies a repository mirror site to use instead of a given repository. The repository that | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used | for inheritance and direct lookup purposes, and must be unique across the set of mirrors. |<mirror> <id>mirrorId</id> <mirrorOf>repositoryId</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://my.repository.com/repo/path</url> </mirror> --> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror></mirrors>
[root@hadoop101 apache-maven-3.0.5]# vi /etc/profile#MAVEN_HOMEexport MAVEN_HOME=/opt/module/apache-maven-3.0.5export PATH=$PATH:$MAVEN_HOME/bin
[root@hadoop101 software]#source /etc/profile验证命令:mvn -version3)ant解压、配置 ANT _HOME和PATH[root@hadoop101 software]# tar -zxvf apache-ant-1.9.9-bin.tar.gz -C /opt/module/
[root@hadoop101 apache-ant-1.9.9]# vi /etc/profile#ANT_HOMEexport ANT_HOME=/opt/module/apache-ant-1.9.9export PATH=$PATH:$ANT_HOME/bin
[root@hadoop101 software]#source /etc/profile验证命令:ant -version4)安装 glibc-headers 和 g++ 命令如下[root@hadoop101 apache-ant-1.9.9]# yum install glibc-headers[root@hadoop101 apache-ant-1.9.9]# yum install gcc-c++5)安装make和cmake[root@hadoop101 apache-ant-1.9.9]# yum install make[root@hadoop101 apache-ant-1.9.9]# yum install cmake6)解压protobuf ,进入到解压后protobuf主目录,/opt/module/protobuf-2.5.0,然后相继执行命令[root@hadoop101 software]# tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/[root@hadoop101 opt]# cd /opt/module/protobuf-2.5.0/
[root@hadoop101 protobuf-2.5.0]#./configure [root@hadoop101 protobuf-2.5.0]# make [root@hadoop101 protobuf-2.5.0]# make check [root@hadoop101 protobuf-2.5.0]# make install [root@hadoop101 protobuf-2.5.0]# ldconfig
[root@hadoop101 hadoop-dist]# vi /etc/profile#LD_LIBRARY_PATHexport LD_LIBRARY_PATH=/opt/module/protobuf-2.5.0export PATH=$PATH:$LD_LIBRARY_PATH
[root@hadoop101 software]#source /etc/profile验证命令:protoc --version7)安装openssl库[root@hadoop101 software]#yum install openssl-devel8)安装 ncurses-devel库[root@hadoop101 software]#yum install ncurses-devel到此,编译工具安装基本完成。5.3 编译源码1)解压源码到/opt/目录[root@hadoop101 software]# tar -zxvf hadoop-3.1.3-src.tar.gz -C /opt/2)进入到hadoop源码主目录[root@hadoop101 hadoop-3.1.3-src]# pwd/opt/hadoop-3.1.3-src3)通过maven执行编译命令[root@hadoop101 hadoop-3.1.3-src]#mvn package -Pdist,native -DskipTests -Dtar等待时间30分钟左右,最终成功是全部SUCCESS。
![](https://i-blog.csdnimg.cn/blog_migrate/ef7b076cd19f8a2a4cba0c215a2fa955.png)
4)成功的64位hadoop包在/opt/hadoop-3.1.3-src/hadoop-dist/target下[root@hadoop101 target]# pwd/opt/hadoop-3.1.3-src/hadoop-dist/target5)编译源码过程中常见的问题及解决方案(1)MAVEN install时候JVM内存溢出处理方式:在环境配置文件和maven的执行文件均可调整MAVEN_OPT的heap大小。(详情查阅MAVEN 编译 JVM调优问题,如:http://outofmemory.cn/code-snippet/12652/maven-outofmemoryerror-method)(2)编译期间maven报错。可能网络阻塞问题导致依赖库下载不完整导致,多次执行命令(一次通过比较难):[root@hadoop101 hadoop-3.1.3-src]#mvn package -Pdist,nativeN -DskipTests -Dtar(3)报ant、protobuf等错误,插件下载未完整或者插件版本问题,最开始链接有较多特殊情况,同时推荐2.7.0版本的问题汇总帖子 http://www.tuicool.com/articles/IBn63qf第6章 常见错误及解决方案1)防火墙没关闭、或者没有启动YARNINFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:80322)主机名称配置错误3)IP地址配置错误4)ssh没有配置好5)root用户和atguigu两个用户启动集群不统一6)配置文件修改不细心7)未编译源码Unable to load native-hadoop library for your platform... using builtin-java classes where applicable17/05/22 15:38:58 INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:80328)不识别主机名称java.net.UnknownHostException: hadoop102: hadoop102 at java.net.InetAddress.getLocalHost(InetAddress.java:1475) at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287) at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:415)解决办法:(1)在/etc/hosts文件中添加192.168.1.102 hadoop102 (2)主机名称不要起hadoop hadoop000等特殊名称9)DataNode和NameNode进程同时只能工作一个。
![](https://i-blog.csdnimg.cn/blog_migrate/64fd19f61dc1785d6c02e680b63389a2.png)
10)执行命令不生效,粘贴word中命令时,遇到-和长–没区分开。导致命令失效解决办法:尽量不要粘贴word中代码。11)jps发现进程已经没有,但是重新启动集群,提示进程已经开启。原因是在linux的根目录下/tmp目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群。12)jps不生效。原因:全局变量hadoop java没有生效。解决办法:需要source /etc/profile文件。13)8088端口连接不上[atguigu@hadoop102 桌面]$ cat /etc/hosts注释掉如下代码#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4#::1 hadoop102