1.Hadoop简介
1. 官网地址
2. 对Hadoop解读
Hadoop这个名字不是一个缩写,它是一个虚构的名字。该项目的创建者,Doug Cutting如此解释Hadoop的得名:”这个名字是我孩子给一个棕黄色的大象样子的填充玩具命名的。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子是这方面的高手。Google就是由小孩命名的。
Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。
Hadoop带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。
说到这里大家可能还会觉得很抽象,下面给出一些实例:
设想一下这样的应用场景. 我有一个100M 的数据库备份的sql 文件.我现在想在不导入到数据库的情况下直接用grep操作通过正则过滤出我想要的内容。例如:某个表中 含有相同关键字的记录那么有几种方式,一种是直接用linux的命令 grep 还有一种就是通过编程来读取文件,然后对每行数据进行正则匹配得到结果好了 现在是100M 的数据库备份.上述两种方法都可以轻松应对.
那么如果是1G , 1T 甚至 1PB 的数据呢 ,上面2种方法还能行得通吗? 答案是不能.毕竟单台服务器的性能总有其上限.那么对于这种 超大数据文件怎么得到我们想要的结果呢?
有种方法 就是分布式计算, 分布式计算的核心就在于 利用分布式算法 把运行在单台机器上的程序扩展到多台机器上并行运行.从而使数据处理能力成倍增加.但是这种分布式计算一般对编程人员要求很高,而且对服务器也有要求.导致了成本变得非常高.
Hadoop 就是为了解决这个问题诞生的.Hadoop 可以很轻易的把 很多linux的廉价pc 组成 分布式结点,然后编程人员也不需要知道分布式算法之类,只需要根据mapreduce的规则定义好接口方法,剩下的就交给Hadoop. 它会自动把相关的计算分布到各个结点上去,然后得出结果.
例如上述的例子 : Hadoop 要做的事 首先把 1PB的数据文件导入到 HDFS中, 然后编程人员定义好 map和reduce, 也就是把文件的行定义为key,每行的内容定义为value , 然后进行正则匹配,匹配成功则把结果 通过reduce聚合起来返回.Hadoop 就会把这个程序分布到N 个结点去并行的操作.
那么原本可能需要计算好几天,在有了足够多的结点之后就可以把时间缩小到几小时之内.
再简单点理解就是比如 1亿个 1 相加 得出计算结果, 我们很轻易知道结果是 1亿.但是计算机不知道.那么单台计算机处理的方式做一个一亿次的循环每次结果+1
那么分布式的处理方式则变成 我用 1万台 计算机,每个计算机只需要计算 1万个 1 相加 然后再有一台计算机把 1万台计算机得到的结果再相加
从而得到最后的结果.理论上讲, 计算速度就提高了 1万倍. 当然上面可能是一个不恰当的例子.但所谓分布式,大数据,云计算 大抵也就是这么回事了
3.Hadoop的一些组件
大数据组件(简单了解):
数据抽取收集: SQOOP1/2、Flume
消息中间件: MQ、Kafka
存储: HDFS(分布式文件系统)、HBase(实时列式数据库)、Hive(离线数据库)、Kudu
计算:MapReduce(复杂)–>Hive(SQL|简单) + Spark(CORE、SQL、Streaming)
资源调度+作业调度平台: Yarn
结果存储:–>Hive,Hbase,MySQL, Redis +接口(代码暴露的服务)
搜索引擎: Elasticsearch
报表可视化: echarts、superset、saiku
调度: kettle、azkaban、rundeck 定时调用job(官网下载地址,后面会介绍)
Hadoop由HDFS、MapReduce、HBase、Hive和ZooKeeper等成员组成,其中最基础最重要元素为底层用于存储集群中所有存储节点文件的文件系统HDFS(Hadoop Distributed File System)来执行MapReduce程序的MapReduce引擎。
4.Hadoop1.x
HDFS : 分布式文件系统,存储
MapReduce: 分布式计算+资源调度和作业调度
5.Hadoop2.x
- HDFS : 分布式文件系统,传统文件系统的硬盘寻址慢,通过引入存放文件信息的服务器Namenode和实际存放数据的服务器Datanode进行串接。对数据系统进行分布式储存读取。
- MapReduce : 计算框架,MapReduce的核心思想是把计算任务分配给集群内的服务器里执行。通过对计算任务的拆分(Map计算\Reduce计算)。
- Yarn (YetAnother Resource Negotiator): 资源管理、任务调度的框架,主要包含三大模块:ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)。其中,ResourceManager负责所有资源的监控、分配和管理;ApplicationMaster负责每一个具体应用程序的调度和协调;NodeManager负责每一个节点的维护。对于所有的applications,RM拥有绝对的控制权和对资源的分配权。而每个AM则会和RM协商资源,同时和NodeManager通信来执行和监控task。
(后面博客会对其进行详细的解读)
2.介绍hadoop-2.8.1.tar.gz和hadoop-2.8.1-src.tar.gz两者之间的区别
- 查看官网hadoop.apache.org我们可以看到1.有两种下载方式,分别为hadoop-2.8.1.tar.gz和hadoop-2.8.1-src.tar.gz。
- tar.gz是已经编译好的了,解压改改配置文件就能用。src.tar.gz是源码,要编译才能用。tar.gz的是给32位机器用的,想在64位机器上用只能用编译的。我们这里使用hadoop-2.8.1-src.tar.gz进行自己编译。
3.准备工作
- 把准备好的压缩包上传到linux上
- 先创建软件放置位置对应的文件夹
创建software、sourcecode文件夹
[root@zydatahadoop001 opt]# mkdir /opt/software /opt/sourcecode
[root@zydatahadoop001 opt]# cd /opt/sourcecode/
上传事先下载好的 hadoop-2.8.1-src.tar.gz
[root@zydatahadoop001 opt]# rz
解压文件
[root@zydatahadoop001 opt]# tar -xzvf hadoop-2.8.1-src.tar.gz
[root@zydatahadoop001 sourcecode]# ll 查看
total 33720
drwxr-xr-x. 17 root root 4096 Jun 2 2017 hadoop-2.8.1-src
-rw-r--r--. 1 root root 34523353 Nov 30 16:24 hadoop-2.8.1-src.tar.gz
[root@zydatahadoop001 sourcecode]# cd hadoop-2.8.1-src
[root@zydatahadoop001 hadoop-2.8.1-src]# ll
total 220
-rw-rw-r--. 1 root root 15623 May 24 2017 BUILDING.txt 要求文档
drwxr-xr-x. 4 root root 4096 Dec 18 10:18 dev-support
drwxr-xr-x. 4 root root 4096 Dec 18 12:44 hadoop-assemblies
drwxr-xr-x. 4 root root 4096 Dec 18 12:44 hadoop-build-tools
drwxrwxr-x. 2 root root 4096 Dec 18 10:18 hadoop-client
drwxr-xr-x. 11 root root 4096 Dec 18 12:56 hadoop-common-project
drwxr-xr-x. 2 root root 4096 Dec 18 10:18 hadoop-dist
drwxr-xr-x. 8 root root 4096 Dec 18 10:18 hadoop-hdfs-project
drwxr-xr-x. 9 root root 4096 Dec 18 10:18 hadoop-mapreduce-project
drwxr-xr-x. 4 root root 4096 Dec 18 12:44 hadoop-maven-plugins
drwxr-xr-x. 2 root root 4096 Dec 18 10:18 hadoop-minicluster
drwxr-xr-x. 4 root root 4096 Dec 18 12:44 hadoop-project
drwxr-xr-x. 3 root root 4096 Dec 18 12:44 hadoop-project-dist
drwxr-xr-x. 18 root root 4096 Dec 18 10:18 hadoop-tools
drwxr-xr-x. 3 root root 4096 Dec 18 10:18 hadoop-yarn-project
-rw-rw-r--. 1 root root 99253 May 24 2017 LICENSE.txt
-rw-rw-r--. 1 root root 15915 May 24 2017 NOTICE.txt
drwxrwxr-x. 2 root root 4096 Jun 2 2017 patchprocess
-rw-rw-r--. 1 root root 20477 May 29 2017 pom.xml
-rw-r--r--. 1 root root 1366 May 20 2017 README.txt
-rwxrwxr-x. 1 root root 1841 May 24 2017 start-build-env.sh
查看BUILDING.txt wenjian文件,编译hadoop所需要的要求
[root@zydatahadoop001 hadoop-2.8.1-src]# cat BUILDING.txt
Build instructions for Hadoop
----------------------------------------------------------------------------------
Requirements:
* Unix System
* JDK 1.7+
* Maven 3.0 or later
* Findbugs 1.3.9 (if running findbugs)
* ProtocolBuffer 2.5.0
* CMake 2.6 or newer (if compiling native code), must be 3.0 or newer on Mac
* Zlib devel (if compiling native code)
* openssl devel (if compiling native hadoop-pipes and to get the best HDFS encryption performance)
* Linux FUSE (Filesystem in Userspace) version 2.6 or above (if compiling fuse_dfs)
* Internet connection for first build (to fetch all Maven and Hadoop dependencies)
所需要的软件:
4.安装java
- 上传java到指定目录并解压
创建java目录
[root@zydatahadoop001 hadoop-2.8.1-src]# mkdir -p /usr/java
[root@zydatahadoop001 hadoop-2.8.1-src]# cd /usr/java
上传java,并解压
[root@zydatahadoop001 hadoop-2.8.1-src]# rz
[root@zydatahadoop001 hadoop-2.8.1-src]# tar -xzvf jdk-8u45-linux-x64.gz
查看并修改用户和用户组
[root@zydatahadoop001 java]# ll
total 169216
drwxr-xr-x. 8 uucp 143 4096 Apr 11 2015 jdk1.8.0_45
-rw-r--r--. 1 root root 173271626 Nov 30 15:13 jdk-8u45-linux-x64.gz
可能出现的问题:这时候我们查看当前的用户组会发现:uucp 143 并不是root root 所以我们要修改用户和用户组
[root@zydatahadoop001 java]# chown -R root:root jdk1.8.0_45
[root@zydatahadoop001 java]# ll
total 169216
drwxr-xr-x. 8 root root 4096 Apr 11 2015 jdk1.8.0_45
-rw-r--r--. 1 root root 173271626 Nov 30 15:13 jdk-8u45-linux-x64.gz
- 配置环境变量
[root@zydatahadoop001 java]# vi /etc/profile
在最后一行添加如下内容:
export JAVA_HOME=/usr/java/jdk1.8.0_45
export PATH=$JAVA_HOME/bin:$PATH
- 生效配置文件
[root@zydatahadoop001 java]# source /etc/profile
查询版本
[root@zydatahadoop001 java]# which java
/usr/java/jdk1.8.0_45/bin/java
[root@zydatahadoop001 java]# java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
5.安装Maven
- 上传文件并解压
[root@zydatahadoop001 java]# cd /opt/software/
[root@zydatahadoop001 software]# rz
[root@zydatahadoop001 software]# ll
total 8432
-rw-r--r--. 1 root root 8617253 Aug 20 12:35 apache-maven-3.3.9-bin.zip
解压
[root@zydatahadoop001 software]# unzip apache-maven-3.3.9-bin.zip
- 配置环境变量
[root@zydatahadoop001 software]# vi /etc/profile
添加下面的内容
export MAVEN_HOME=/opt/software/apache-maven-3.3.9
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
生效配置文件
[root@zydatahadoop001 software]# source /etc/profile
查询版本
[root@zydatahadoop001 software]# mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /opt/software/apache-maven-3.3.9
Java version: 1.8.0_45, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_45/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-431.el6.x86_64", arch: "amd64", family: "unix"
6.protobuf安装
- 上传文件并解压
[root@zydatahadoop001 software]# rz
[root@zydatahadoop001 software]# tar -xzvf protobuf-2.5.0.tar.gz
[root@zydatahadoop001 software]# ll
total 10792
drwxr-xr-x. 6 root root 4096 Nov 10 2015 apache-maven-3.3.9
-rw-r--r--. 1 root root 8617253 Aug 20 12:35 apache-maven-3.3.9-bin.zip
drwxr-xr-x. 10 109965 5000 4096 Feb 27 2013 protobuf-2.5.0
-rw-r--r--. 1 root root 2401901 Aug 20 13:03 protobuf-2.5.0.tar.gz
- 安装gcc cmake等程序包
[root@zydatahadoop001 software]# cd protobuf-2.5.0
[root@zydatahadoop001 protobuf-2.5.0]# yum install -y gcc gcc-c++ make cmake
- 编译
[root@zydatahadoop001 protobuf-2.5.0]# ./configure --prefix=/usr/local/protobuf
./configure是编译你的源码文件 --prefix=/usr/local 是指定文件安装目录
- 安装
[root@zydatahadoop001 protobuf-2.5.0]# make && make install
- configure
Linux 平台有各种不同的配置,安装时需要通过 configure 来确定,如:编译器用的是 cc 还是 gcc、不同库文件所在目录等。执行 configure 后会生成 Makefile,Makefile 规定了用什么编译器、编译参数等信息。 - make
根据 Makefile 中规定的内容进行编译,生成的可执行文件放在当前目录或某个子目录。 - make install
将 make 生成的文件安装到系统目录中或指定目录,如 /usr/bin,这一步需要 root 权限,所以通常得用 sudo make install。如果没有这一步,在命令行中输入程序名字不能启动相应程序。
- 配置环境变量
[root@zydatahadoop001 protobuf-2.5.0]# vi /etc/profile
添加如下内容
export PROTOC_HOME=/usr/local/protobuf
export PATH=$PROTOC_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
- 生效配置文件
[root@zydatahadoop001 protobuf-2.5.0]# source /etc/profile
查询版本
[root@zydatahadoop001 protobuf-2.5.0]# protoc --version
libprotoc 2.5.0
7.Findbugs安装
- 上传文件并解压
[root@zydatahadoop001 software]# rz
[root@zydatahadoop001 software]# unzip findbugs-1.3.9.zip
- 配置环境变量
[root@zydatahadoop001 software]# vi /etc/profile
添加如下内容
export FINDBUGS_HOME=/opt/software/findbugs-1.3.9
export PATH=$FINDBUGS_HOME/bin:$PROTOC_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
- 生效配置文件
[root@zydatahadoop001 software]# source /etc/profile
查询版本
[root@zydatahadoop001 software]# findbugs -version
1.3.9
8.其他依赖
[root@zydatahadoop001 software]#yum install -y openssl openssl-devel svn ncurses-devel zlib-devel libtool
[root@zydatahadoop001 software]#yum install -y snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop autoconf automake
9.编译
[root@zydatahadoop001 sourcecode]# cd hadoop-2.8.1-src
[root@zydatahadoop001 hadoop-2.8.1-src]# mvn clean package -Pdist,native -DskipTests -Dtar
提醒:
1. 有时候编译过程中会出现下载某个包的时间太久,这是由于连接网站的过程中会出现假死,
此时按ctrl+c,重新运行编译命令。
2. 如果出现缺少了某个文件的情况,则要先清理maven(使用命令 mvn clean) 再重新编译。
10查看编译好的文件
/opt/sourcecode/hadoop-2.8.1-src/hadoop-dist/target/hadoop-2.8.1.tar.gz