Hadoop三大发行版本**:Apache、Cloudera、Hortonworks。**
Apache 版本最原始(最基础)的版本,对于入门学习最好。
Cloudera 在大型互联网企业中用的较多。
Hortonworks 文档较好。
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在兼容性,安全性,稳定性上有所增强。
(4)Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署好一个Hadoop集群,并对集群的节点及服务进行实时监控。Cloudera Support即是对Hadoop的技术支持。
(5)Cloudera的标价为每年每个节点4000美元。Cloudera开发并贡献了可实时处理大数据的Impala项目。
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)雅虎工程副总裁、雅虎Hadoop开发团队负责人Eric Baldeschwieler出任Hortonworks的首席执行官。
(4)Hortonworks的主打产品是Hortonworks Data Platform(HDP),也同样是100%开源的产品,HDP除常见的项目外还包括了Ambari,一款开源的安装和管理系统。
(5)HCatalog,一个元数据管理系统,HCatalog现已集成到Facebook开源的Hive中。Hortonworks的Stinger开创性的极大的优化了Hive项目。Hortonworks为入门提供了一个非常好的,易于使用的沙盒。
(6)Hortonworks开发了很多增强特性并提交至核心主干,这使得Apache Hadoop能够在包括Window Server和Windows Azure在内的Microsoft Windows平台上本地运行。定价以集群为基础,每10个节点每年为12500美元。
HDFS(Hadoop Distributed File System)的架构概述,如图
MapReduce将计算过程分为两个阶段:Map和Reduce,如图2-25所示
1)Map阶段并行处理输入数据
2)Reduce阶段对Map结果进行汇总
图中涉及的技术名词解释如下:
1)Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
2)Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
3)**Kafka:**Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
(1)通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
(2)高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
(3)支持通过Kafka服务器和消费机集群来分区消息。
(4)支持Hadoop并行数据加载。
4)Storm:Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
5)Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
6)Oozie:Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统。
7)Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
8)Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
10)R语言:R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
11)Mahout:Apache Mahout是个可扩展的机器学习和数据挖掘库。
12)ZooKeeper:Zookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
在/opt目录下创建module、software文件夹
[root@hadoop101 opt]$ sudo mkdir module
[root@hadoop101 opt]$ sudo mkdir software
(1)查询是否安装Java软件:
[root@hadoop101 opt]$ rpm -qa | grep java
(2)如果安装的版本低于1.7,卸载该JDK:
[root@hadoop101 opt]$ sudo rpm -e 软件包
(3)查看JDK安装路径:
[root@hadoop101 ~]$ which java
如果这块没有安装一下 java &hadoop~安装在/opt/software
[root@hadoop101 opt]$ cd software/
[root@hadoop101 software]$ ls
hadoop-2.7.2.tar.gz jdk-8u144-linux-x64.tar.gz
JDK、hadoop /到/opt/module目录下
[root@hadoop101 software]$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
(1)先获取JDK/hadoop路径
[root@hadoop101 jdk1.8.0_144]$ pwd
/opt/module/jdk1.8.0_144
[root@hadoop101 hadoop-2.7.2]$ pwd
/opt/module/hadoop-2.7.2
(2)打开/etc/profile文件
[root@hadoop101 software]$ sudo vi /etc/profile
在profile文件末尾添加JDK/hadoop路径
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=PATH:JAVA_HOME/bin
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
(3)保存后退出
:wq
(4)让修改后的文件生效
[root@hadoop101 jdk1.8.0_144]$ source /etc/profile
(5)测试JDK是否安装成功
[root@hadoop101 jdk1.8.0_144]# java -version
java version "1.8.0_144"
[root@hadoop101 jdk1.8.0_144]# hadoop version
Hadoop 2.7.2
#####注意:重启(如果java -version可以用就不用重启)######
[root@hadoop101 jdk1.8.0_144]$ sync
[root@hadoop101 jdk1.8.0_144]$ sudo reboot
#### 3 官方案例
[root@hadoop101 hadoop-2.7.2]$ mkdir input
[root@hadoop101 hadoop-2.7.2]$ cp etc/hadoop/*.xml input
[root@hadoop101 hadoop-2.7.2]$ bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output ‘dfs[a-z.]+’
[root@hadoop101 hadoop-2.7.2]$ cat output/*
[root@hadoop101 hadoop-2.7.2]$ mkdir wcinput
[root@hadoop101 hadoop-2.7.2]$ cd wcinput
[root@hadoop101 wcinput]$ touch wc.input
[root@hadoop101 wcinput]$ vi wc.input
在文件中输入如下内容
hadoop yarn
hadoop mapreduce
atguigu
atguigu
保存退出::wq
5. 执行程序
[root@hadoop101 hadoop-2.7.2]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
6. 查看结果
[root@hadoop101 hadoop-2.7.2]$ cat wcoutput/part-r-00000
atguigu 2
hadoop 2
mapreduce 1
yarn 1
a)配置:hadoop-env.sh
Linux系统中获取JDK的安装路径:
[root@ hadoop101 ~]# echo $JAVA_HOME
/opt/module/jdk1.8.0_144
修改JAVA_HOME 路径:
export JAVA_HOME=/opt/module/jdk1.8.0_144
(b)配置:core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
(c)配置:hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
(a)格式化NameNode(第一次启动时格式化,以后就不要总格式化)
[root@hadoop101 hadoop-2.7.2]$ bin/hdfs namenode -format
(b)启动NameNode
[root@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
(c)启动DataNode
[root@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
(3)查看集群
(a)查看是否启动成功
[root@hadoop101 hadoop-2.7.2]$ jps
13586 NameNode
13668 DataNode
13786 Jps
注意:jps是JDK中的命令,不是Linux命令。不安装JDK不能使用jps
(b)web端查看HDFS文件系统
别忘记本地hosts 要配置解析 ip haoop10x
最好服务器也配置相关服务器hosts 主机名ip解析
http://hadoop101:50070/dfshealth.html#tab-overview
注意:如果不能查看,看如下帖子处理
http://www.cnblogs.com/zlslch/p/6604189.html
(c)查看产生的Log日志
**说明:在企业中遇到Bug时,经常根据日志提示信息去分析问题、解决Bug。
当前目录:/opt/module/hadoop-2.7.2/logs
[atguigu@hadoop101 logs] ls
hadoop-atguigu-datanode-hadoop.atguigu.com.log
hadoop-atguigu-datanode-hadoop.atguigu.com.out
hadoop-atguigu-namenode-hadoop.atguigu.com.log
hadoop-atguigu-namenode-hadoop.atguigu.com.out
SecurityAuth-root.audit
[atguigu@hadoop101 logs]# cat hadoop-atguigu-datanode-hadoop101.log
(d)思考:为什么不能一直格式化NameNode,格式化NameNode,要注意什么?
[root@hadoop101 hadoop-2.7.2] cd data/tmp/dfs/name/current/
[root@hadoop101 current]$ cat VERSION
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837
[root@hadoop101 hadoop-2.7.2]$ cd data/tmp/dfs/data/current/
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837
注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode。
(a)配置yarn-env.sh
配置一下JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
(b)配置yarn-site.xml
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
(c)配置:mapred-env.sh
配置一下JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
(d)配置: (对mapred-site.xml.template重新命名为) mapred-site.xml
[atguigu@hadoop101 hadoop]$ mv mapred-site.xml.template mapred-site.xml
[atguigu@hadoop101 hadoop]$ vi mapred-site.xml
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
a)启动前必须保证NameNode和DataNode已经启动
(b)启动ResourceManager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
(c)启动NodeManager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
Browse the file system 可以浏览网页文件系统
[root@hadoop101 hadoop-2.7.2]# hadoop fs -put a/ /
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快**,rsync只对差异文件做更新**。scp是把所有文件都复制过去
基本语法
rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
#!/bin/bash
#xxx /opt/module
if (($#<1))
then
echo 参数不足 #参数不能小于1 (host1)
exit
fi
f1 =$(basename $1) # 通过basename获取 文件名
pdir=$(cd -P $(dirname $1);pwd) ##获取(父)目录
##遍历所有集群
for host in hadoop102 hadoop103 hadoop104
do
#rsync -av /opt/module/jdk#
rsync -av $pdir/$f1 $host:$pdir #发送远程主机
done
===========================================================
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=103; host<105; host++)); do
echo ------------------- hadoop$host --------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
chmod 777 xsync
执行脚本 ./xsync (要发送文件目录)/opt/module/a
对称加密 :加密和解密是一把钥匙
非对称加密:加密和解密不是一把钥匙
1- 创建本地秘钥
ssh-keygen -t rsa (一直空格就可以)
2-把公钥拷贝要免密登入目标机器(从自己开始)
ssh-copy-id hadoop10x
注意 :但是这么配置 只是单向免密发送,从其它发送过来就不可以了
将./xsync .ssh 全部都发送过去
对于HDFS 来说 :DN=datanode
对于resourcemanager 来说 NM=nodemanager
Datanode 管理集群节点存储
Nodemanger 管理集群 cpu 和内存(资源)
SecondaryNameNode(辅助名称节点,简称SNN):
存储fsimage,editslog;
定期合并fsimage+editslog,合并时机由检查点(checkpoint)决定,检查点由dfs.namenode.checkpoint.period 参数定义,默认3600秒。
SNN每隔一个小时从NN上备份fsimage下来
fsimage 镜像文件,系统镜像文件,系统全量文件
editslog操作日志,读写记录操作,系统增量文件
客户端向DN写数据,如果副本数是3,客户端只需要写入1分数据,然后拷贝。
上面的图片展示了 Secondary NameNode 是怎么工作的。
首先,它定时到 NameNode 去获取edit logs,并更新到 fsimage 上。[笔者注:Secondary NameNode自己的fsimage]
一旦它有了新的 fsimage 文件,它将其拷贝回 NameNode 中。
NameNode 在下次重启时会使用这个新的 fsimage 文件,从而减少重启的时间。
Secondary NameNode 的整个目的是在 HDFS 中提供一个检查点。它只是NameNode 的一个助手节点。这也是它在社区内被认为是检查点节点的原因。
所以NM和DN 在一台机器 不冲突哈 ~!
对于HDFS 主机:Namenode 从机:3*DN
对于YRAN 主机:ResourceManager 从机:3*NM
1. 生成密钥对
ssh-keygen -t rsa 三次回车
2. 发送公钥到本机
ssh-copy-id hadoop102 输入一次密码
3. 分别ssh登陆一下所有虚拟机
ssh hadoop103
exit
ssh hadoop104
exit
4. 把/home/atguigu/.ssh 文件夹发送到集群所有服务器
xsync /home/atguigu/.ssh
1 在一台机器上安装Java和Hadoop,并配置环境变量,并分发到集群其他机器
1. 拷贝文件到/opt/software,两个tar包
2. tar -zxf h"+tab" -C /opt/module
3. tar -zxf j"+tab" -C /opt/module
4. sudo vim /etc/profile
在文件末尾添加
JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin
HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH= P A T H : PATH: PATH:HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存
source /etc/profile
sudo xsync /etc/profile
在其他机器分别执行source /etc/profile
####3 所有配置文件都在$HADOOP_HOME/etc/hadoop
首先配置hadoop-env.sh,yarn-env.sh,mapred-env.sh文件,
在(hadoop102)每个文件第二行添加 export JAVA_HOME=/opt/module/jdk1.8.0_144
fs.defaultFS
hdfs://hadoop102:9000
hadoop.tmp.dir
/opt/module/hadoop-2.7.2/data/tmp
dfs.replication
3
dfs.namenode.secondary.http-address
hadoop104:50090
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop103
yarn.log-aggregation-enable
true
yarn.log-aggregation.retain-seconds
604800
启动历史服务器:mr-jobhistory-daemon.sh start historyserver
hadoop102
hadoop103
hadoop104
-----------------------------凡是碰到问题 先看日志----------------------------------
Ps:一定是全新的 之前老的 可以删除
xsync /opt/module/hadoop-2.7.2
hdfs namenode -format
start-dfs.sh
在配置了Resourcemanager机器上执行
mkdir input
vim input/input
abc
def efg
asd
hadoop fs -put input /
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output
在哪配置就在哪服务器上启动—这里是hadoop104
mr-jobhistory-daemon.sh start historyserver**
如果集群出了问题
stop-dfs.sh
stop-yarn.sh
stop-dfs.sh
stop-yarn.sh
cd $HADOOP_HOME
rm -rf data logs
回到5
hadoop-daemon.sh start namenode或datanode
yarn-daemon.sh start resourcemanager或nodemanager
date—如果时间差太多 会出问题–
[****root****@hadoop102 桌面]# rpm -qa|grep ntp
ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64
执行 service ntpd status
如果显示正在运行 就关掉 service ntpd stop**
chkconfig ntpd off --关闭开启自启(如果是已停状态 就无需操作)
[****root****@hadoop102 桌面]# vi /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 iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 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 iburst
c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
[****root****@hadoop102 桌面]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
[****root****@hadoop102 桌面]# service ntpd status
ntpd 已停
[****root****@hadoop102 桌面]# service ntpd start
正在启动 ntpd: [确定]
[****root****@hadoop102 桌面]# chkconfig ntpd on
[****root****@hadoop103桌面]/[****root****@hadoop104桌面]crontab -e
编写定时任务如下:
*/10 * * * * /usr/sbin/ntpdate hadoop102
[****root****@hadoop103桌面]# date -s “2017-9-11 11:11:11”
[****root****@hadoop103桌面]# date
说明:测试的时候可以将10分钟调整为1分钟,节省时间。