hadoop系列笔记
hadoop(一)入门、hadoop架构、集群环境搭建.
hadoop(二)HDFS概述、shell操作、客户端操作(各种API操作)以及hdfs读写流程.
hadoop(三)hdfs的NameNode和DataNode工作机制.
hadoop(四)MapReduce入门及序列化实操.
hadoop(五)MapReduce框架原理及工作机制.
hadoop(六)hadoop数据压缩、yarn架构及工作原理、hadoop企业优化.
1)Lucene–Doug Cutting开创的开源软件,用java书写代码,实现与Google类似的全文搜索功能,它提供了全文检索引擎的架构,包括完整的查询引擎和索引引擎
2)2001年年底成为apache基金会的一个子项目
3)对于大数量的场景,Lucene面对与Google同样的困难
4)学习和模仿Google解决这些问题的办法 :微型版Nutch
5)可以说Google是hadoop的思想之源(Google在大数据方面的三篇论文)
GFS —>HDFS
Map-Reduce —>MR
BigTable —>Hbase
论文链接.
6)2003-2004年,Google公开了部分GFS和Mapreduce思想的细节,以此为基础Doug Cutting等人用了2年业余时间实现了DFS和Mapreduce机制,使Nutch性能飙升
7)2005 年Hadoop 作为 Lucene的子项目 Nutch的一部分正式引入Apache基金会。2006 年 3 月份,Map-Reduce和Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中
9)Hadoop就此诞生并迅速发展,标志这云计算时代来临
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为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。 Storm也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
5)Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
6)Oozie:Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统。Oozie协调作业就是通过时间(频率)和有效数据触发当前的Oozie工作流程。
7)Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
8)Hive:hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
10)R语言:R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
11)Mahout:
Apache Mahout是个可扩展的机器学习和数据挖掘库,当前Mahout支持主要的4个用例:
12)ZooKeeper:Zookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
#java environment
export JAVA_HOME=/opt/module/jdk1.8.0_144
export CLASSPATH=.:${
JAVA_HOME}/jre/lib/rt.jar:${
JAVA_HOME}/lib/dt.jar:${
JAVA_HOME}/lib/tools.jar
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
Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式
<!-- 指定HDFS中NameNode的地址 -->
fs.defaultFS</name>
hdfs://hadoop101:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
hadoop.tmp.dir</name>
/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
<!-- 指定HDFS副本的数量 -->
dfs.replication</name>
1</value>
</property>
<!-- Reducer获取数据的方式 -->
yarn.nodemanager.aux-services</name>
mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
yarn.resourcemanager.hostname</name>
hadoop101</value>
</property>
<!-- 指定MR运行在YARN上 -->
mapreduce.framework.name</name>
yarn</value>
</property>
scp -r hadoop101:/opt/module/hadoop-2.7.2 hadoop102:/opt/module
scp -r hadoop101:/etc/profile hadoop102:/etc/profile
在hadoop102下执行
rsync -av hadoop101:/opt/module/hadoop-2.7.2 /opt/module
在hadoop101下执行
rsync -av /opt/module/hadoop-2.7.2 hadoop102:/opt/module
#!/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=102; host<105; host++)); do
echo ------------------- hadoop$host --------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
YARN | NodeManager |
ResourceManager NodeManager |
NodeManager |
<!-- 指定HDFS中NameNode的地址 -->
fs.defaultFS</name>
hdfs://hadoop102:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
hadoop.tmp.dir</name>
/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
<!-- 指定HDFS副本数量 -->
dfs.replication</name>
3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
dfs.namenode.secondary.http-address</name>
hadoop104:50090</value>
</property>
<!-- Reducer获取数据的方式 -->
yarn.nodemanager.aux-services</name>
mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
yarn.resourcemanager.hostname</name>
hadoop103</value>
</property>
cp mapred-site.xml.template mapred-site.xml
<!-- 指定MR运行在Yarn上 -->
mapreduce.framework.name</name>
yarn</value>
</property>
SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台-包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
以非对称加密实现身份验证,加密和解密用的是不同的秘钥
RSA加密算法就是非对称加密算法
ssh远程登录主机原理:
1.配置ssh
2.无密钥配置
(1)免密登录原理,如图所示
(2)生成公钥和私钥:
ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(3)将公钥拷贝到要免密登录的目标机器上
此文件存放公钥
此时在hadoop102上只需要输入ssh hadoop103就无密登陆hadoop103,注意连接是单向的,只能102 远程登陆103,但是可以再在103上设置远程登陆102,这样实现双通
我们可以看到三台机器互通,配置起来很麻烦,我们可以用一种高效率的方法,只是此方法安全性低,如果服务器之间距离较远,需要外网连接,尽量不要用,如今是学习阶段,可以学习配置一下,了解有这个方法:
3. . . .ssh文件夹下(~/.ssh)的文件功能解释
known_hosts | 记录ssh访问过计算机的公钥(public key) |
---|---|
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过得无密登录服务器公钥 |
1.配置slaves(从机,小弟们)
2.启动集群(首先要免密)
<!-- 历史服务器端地址 -->
mapreduce.jobhistory.address</name>
hadoop104:10020</value>
</property>
<!-- 历史服务器web端地址 -->
mapreduce.jobhistory.webapp.address</name>
hadoop104:19888</value>
</property>
<!-- 日志聚集功能使能 -->
yarn.log-aggregation-enable</name>
true</value>
</property>
<!-- 日志保留时间设置7天 -->
yarn.log-aggregation.retain-seconds</name>
604800</value>
</property>