1 hadoop概述

 

1.1 为什么会有大数据处理

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。 传统模式已经满足不了大数据的增长 1)存储问题
  • 传统数据库:存储亿级别的数据,需要高性能的服务器;并且解决不了本质问题;只能存结构化数据
  • 大数据存储:通过分布式存储,将数据存到一台机器的同时,还可以备份到其他机器上,这样当某台机器挂掉了或磁盘坏掉了,在其他机器上可以拿到该数据,数据不会丢失(可备份)
  • 磁盘不够挂磁盘,机器不够加机器(可横行扩展)
  2)分析数据问题
  • 传统数据库: 当数据库存储亿级别的数据后,查询效率也下降的很快,查询不能秒级返回
  • 大数据分析:分布式计算。也可以横行扩展
                              MapReduce:(批处理)多次与磁盘进行交互,运行比较慢                                                        运算的数据是有范围的,运算完一次,就代表该批次处理完成                               实时计算:     (流处理)对时间的要求很高,基本可以快速处理完成                实时计算的数据,没有范围的,会根据某个时间的范围进行计算。spark streaming  ,storm,  flink 01-Hadoop概述及基础环境搭建 Hadoop 第1张

 

1.2 什么是hadoop?

 

Hadoop项目是以可靠、可扩展和分布式计算为目的而发展的开源软件 Hadoop 是Apache的顶级项目 Apache:APACHE软件基金会,支持Apache的开源软件社区项目,为公众提供好的软件产品 项目主页: http://hadoop.apache.org 01-Hadoop概述及基础环境搭建 Hadoop 第2张

 

大数据的主要特点(4V)
  • 数据容量大(Volume)。从TB级别,跃升到PB级别
  • 数据类型繁多(Variety)。包括网络日志、音频、视频、图片、地理位置信息等,这些多类型的数据对数据的处理能力提出了更高要求
  • 商业价值高(Value)。客户群体细分,提供定制化服务;发掘新的需求同时提高投资的回报率;降低服务成本
  • 处理速度快(Velocity)。这是大数据区分于传统数据挖掘的最显著特征。预计到2020年,全球数据使用量将达到35.2ZB。在如此海量的数据面前,处理数据的效率就是企业的生命
  hadoop的历史起源 创始人: Doug Cutting  和 Mike Cafarella  2002开始,两位创始人开发开源搜索引擎解决方案: Nutch 2004年受Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发,NDFS( Nutch Distributed File System )引入Nutch 2006年 在Yahoo!工作的Doug Cutting将这套大数据处理软件命名为Hadoop 01-Hadoop概述及基础环境搭建 Hadoop 第3张

 

hadoop核心组件 用于解决两个核心问题:存储和计算 核心组件 1)Hadoop Common: 一组分布式文件系统和通用I/O的组件与接口(序列化、Java RPC和持久化数据结构) 2)Hadoop Distributed FileSystem(Hadoop分布式文件系统HDFS)         分布式存储, 有备份, 可扩展 3)Hadoop MapReduce(分布式计算框架)         分布式计算,多台机器同时计算一部分,得到部分结果,再将部分结果汇总,得到总体的结果(可扩展) 4)Hadoop YARN(分布式资源管理器)         MapReduce任务计算的时候,运行在yarn上,yarn提供资源
  hadoop的框架演变 01-Hadoop概述及基础环境搭建 Hadoop 第4张

Hadoop1.0 的 MapReduce(MR1):集资源管理和任务调用、计算功能绑在一起,扩展性较差,不支持多计算框架

Hadoop2.0 的Yarn(MRv2):将资源管理和任务调用两个功能分开,提高扩展性,并支持多计算框架   hadoop生态圈   01-Hadoop概述及基础环境搭建 Hadoop 第5张

01-Hadoop概述及基础环境搭建 Hadoop 第6张

 

1)HDFS(Hadoop分布式文件系统)         HDFS是一种数据分布式保存机制,数据被保存在计算机集群上。数据写入一次,读取多次。HDFS 为hive、HBase等工具提供了基础   2)MapReduce(分布式计算框架)         MapReduce是一种分布式计算模型,用以进行大数据量的计算,是一种离线计算框架         这个 MapReduce 的计算过程简而言之,就是将大数据集分解为成若干个小数据集,每个(或若干个)数据集分别由集群中的一个结点(一般就是一台主机)进行处理并生成中间结果,然后将每个结点的中间结果进行合并, 形成最终结果   3)HBASE(分布式列存数据库)         HBase是一个建立在HDFS之上,面向列的NoSQL数据库,用于快速读/写大量数据。HBase使用Zookeeper进行管理,确保所有组件都正常运行
  4)Sqoop(数据ETL/同步工具)         Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之间传输数据   5)flume(分布式日志收集系统)         Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中   6)Storm(流示计算、实时计算)         Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。Storm经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域   7)Zookeeper(分布式协作服务)         Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作         作用:解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等   8)Pig(ad-hoc脚本)         Pig定义了一种数据流语言—Pig Latin,它是MapReduce编程的复杂性的抽象,Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig Latin)         其编译器将Pig Latin 翻译成MapReduce 程序序列将脚本转换为MapReduce任务在Hadoop上执行。通常用于进行离线分析   9)Hive(数据仓库)         Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析         HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务   10)Spark(内存计算模型)         Spark提供了一个更快、更通用的数据处理平台。和Hadoop相比,Spark可以让你的程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍。   11)Oozie(工作流调度器)         Oozi可以把多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务
  12)Mahout(数据挖掘算法库)         Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序   13)Hadoop YARN(分布式资源管理器)         YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的         其核心思想:                 将MR1中JobTracker的资源管理和作业调用两个功能分开,分别由ResourceManager和ApplicationMaster进程来实现                 1)ResourceManager:负责整个集群的资源管理和调度                 2)ApplicationMaster:负责应用程序相关事务,比如任务调度、任务监控和容错等   14)Tez(DAG计算模型)         一个运行在YARN之上支持DAG(有向无环图)作业的计算框架         Tez的目的就是帮助Hadoop处理这些MapReduce处理不了的用例场景,如机器学习   什么是集群,集群和服务的关系。 01-Hadoop概述及基础环境搭建 Hadoop 第7张

 

  集群规划: 一个主节点:nn1.hadoop, 一个从节点:nn2.hadoop, 三个工作节点:s1.hadoop、s2.hadoop、s3.hadoop   网络规划:  nn1.hadoop   192.168.174.160 nn2.hadoop    192.168.174.161 s1.hadoop      192.168.174.162 s2.hadoop      192.168.174.163 s3.hadoop      192.168.174.164   在企业里还应有操作机(跳板机) 01-Hadoop概述及基础环境搭建 Hadoop 第8张

 

2 基础环境搭建

 

配置网络
 1 // 查看网卡配置文件是否一致
 2 vim /etc/sysconfig/network-scripts/ifcfg-ens33
 3  4 // 文件配置如下:
 5 TYPE="Ethernet"
 6 BOOTPROTO=static
 7 DEFROUTE="yes"
 8 IPV4_FAILURE_FATAL="no"
 9 IPV6INIT="yes"
10 IPV6_AUTOCONF="yes"
11 IPV6_DEFROUTE="yes"
12 IPV6_FAILURE_FATAL="no"
13 NAME="eno16777736"
14 UUID="cb7a79a9-8114-482b-93f0-fce73bcef88b"
15 DEVICE="eno16777736"
16 ONBOOT="yes"
17 IPADDR=192.168.142.200
18 PREFIX=24
19 GATEWAY=192.168.142.2
20 DNS1=192.168.142.2
21 DNS2=8.8.8.8
22     
23 // 重启网络
24 systemctl restart network.service  或   service network restart
25 // ping 百度,测试网络是否正常
26 ping www.baidu.com 

 

2.1 配置阿里云 yum 源

 

1)安装sz rz工具,用于以后用rz sz上传下载文件
yum install -y lrzsz

 

2)下载 repo 文件 文件下载地址: http://mirrors.aliyun.com/repo/Centos-7.repo   3)用 rz 将下载的 Centos-7.repo 文件上传到Linux系统的某个目录下   4)备份并替换系统的repo文件
1 mv Centos-7.repo /etc/yum.repos.d/ 
2 cd /etc/yum.repos.d/ 
3 mv CentOS-Base.repo CentOS-Base.repo.bak
4 mv Centos-7.repo CentOS-Base.repo

 

5)执行yum源更新命令  
yum clean all 
# 服务器的包信息下载到本地电脑缓存起来
yum makecache 
yum update -y

配置完毕。

 

2.2 安装常用软件

 

1 yum install -y openssh-server vim gcc gcc-c++ glibc-headers bzip2-devel lzo-devel curl wget openssh-clients zlib-devel autoconf automake cmake libtool openssl-devel fuse-devel snappy-devel telnet unzip zip net-tools.x86_64 firewalld systemd

 

2.3 关闭防火墙

 

查看防火墙状态:firewall-cmd --state 关闭防火墙:systemctl stop firewalld.service 禁止防火墙开机启动: systemctl disable firewalld.service 查看服务是否开机启动: systemctl is-enabled firewalld.service  

2.4 关闭SELinux

 

查看关闭状态 /usr/sbin/sestatus -v 关闭方法 vim /etc/selinux/config 把文件里的SELINUX=disabled   01-Hadoop概述及基础环境搭建 Hadoop 第9张 重启服务器 reboot 启动之后用 /usr/sbin/sestatus -v 查看selinux的修改状态  

2.5 安装JDK

 

1)JDK 下载地址 地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 01-Hadoop概述及基础环境搭建 Hadoop 第10张

 

2)安装JDK 用 rz 命令将安装文件上传Linux 系统 rpm -ivh jdk-8u144-linux-x64.rpm   3)配置JDK 环境变量 修改系统环境变量文件 /etc/profile,在文件尾部追加以下内容
1 export JAVA_HOME=/usr/java/jdk1.8.0_144
2 export JRE_HOME=$JAVA_HOME/jre
3 export PATH=$PATH:$JAVA_HOME/bin
4 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

 

export 设置或显示环境变量 用export修饰一个变量,A脚本中调用B脚本,B脚本也能拿到这个变量 01-Hadoop概述及基础环境搭建 Hadoop 第11张

01-Hadoop概述及基础环境搭建 Hadoop 第12张

 

4)使修改生效,并配置JDK
1 #使修改生效
2 source /etc/profile
3 #查看系统变量值
4 env | grep PATH
5 #检查JDK 配置情况
6 env | grep JAVA_HOME

 

2.6 修改主安装常用软件主机名

 

1 hostnamectl set-hostname nn1.hadoop
2 #修改完后用hostname可查看当前主机名
3 hostname

 

2.7 创建hadoop 用户并设置 hadoop 用户密码

 

1 #创建hadoop用户
2 useradd hadoop
3 4 #给hadoop用户设置密码
5 hadoop000

 

2.8 给hadoop用户,配置SSH密钥

 

配置SSH密钥的目的:使得多台机器间可以免密登录。 实现原理: 使用ssh-keygen在linux01 上生成private和public密钥,将生成的public密钥拷贝到远程机器linux02 上后,就可以使用ssh命令无需密码登录到另外一台机器linux02上。如果想互相登录,则要把公钥私钥都拷贝到远程机器linux02 上。 01-Hadoop概述及基础环境搭建 Hadoop 第13张 实现步骤:
 1 #切换到hadoop用户
 2 su – hadoop                      
 3 #创建.ssh目录
 4 mkdir ~/.ssh   
 5 #生成ssh公私钥                         
 6 ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''    
 7 #输出公钥文件内容并且重新输入到~/.ssh/authorized_keys文件中        
 8 cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys 
 9 #给~/.ssh文件加上700权限
10 chmod 700 ~/.ssh       
11 #给~/.ssh/authorized_keys加上600权限       
12 chmod 600 ~/.ssh/authorized_keys 

 

2.9 禁止非 whell 组用户切换到root,配置免密切换root

 

通常情况下,一般用户通过执行“su -”命令、输入正确的root密码,可以登录为root用户来对系统进行管理员级别的配置。 但是,为了更进一步加强系统的安全性,有必要建立一个管理员的组,只允许这个组的用户来执行 “su -” 命令登录为 root 用户,而让其他组的用户即使执行 “su -” 、输入了正确的 root 密码,也无法登录为 root 用户。在UNIX和Linux下,这个组的名称通常为 “wheel” 。   回到root用户 1)修改/etc/pam.d/su配置 su 时要求用户加入到wheel组 修改/etc/pam.d/su文件,将“ #auth        required    pam_wheel.so”替换成“auth        required    pam_wheel.so” 修改/etc/pam.d/su文件,将“ #auth        sufficient    pam_wheel.so”替换成“auth        sufficient    pam_wheel.so” 01-Hadoop概述及基础环境搭建 Hadoop 第14张

 

2)修改/etc/login.defs文件 只有wheel组可以su 到root cp /etc/login.defs /etc/login.defs_back      先做个备份 tail /etc/login.defs                                      从文件底部查看 01-Hadoop概述及基础环境搭建 Hadoop 第15张

 

3) 添加用户到管理员,禁止普通用户su 到 root
1 #把hadoop用户加到wheel组里
2 [root@nn1 ~]# gpasswd -a hadoop wheel
3 #查看wheel组里是否有hadoop用户
4 [root@nn1 ~]# cat /etc/group | grep wheel

 

4)用 hadoop 用户验证一下,由于 hadoop 没有在wheel 组里,所以没有 su - root 权限。 01-Hadoop概述及基础环境搭建 Hadoop 第16张

 

5)修改/etc/pam.d/su文件(上面已经配好) 将字符串“#auth        sufficient    pam_wheel.so”替换成“auth    sufficient    pam_wheel.so” 01-Hadoop概述及基础环境搭建 Hadoop 第17张  

2.10 配置hosts 文件

 

在克隆机器前,配置nn1 机器的 /etc/hosts 文件,文件内需要配置nn1、nn2、s1、s2、s3 所有机器的IP 和 主机名。

修改/etc/hosts文件,追加以下内容。vim /etc/hosts
1 192.168.174.160 nn1.hadoop
2 192.168.174.161 nn2.hadoop
3 192.168.174.162 s1.hadoop
4 192.168.174.163 s2.hadoop
5 192.168.174.164 s3.hadoop

 

2.11 克隆4台机器

 

执行完上面的命令,一个基础的linux系统就配置好了。然后再根据这个虚拟机克隆出 4个linux系统

其中:nn2.hadoop: 从节点

           s1.hadoop、s2.hadoop、s3.hadoop:三个工作节点

并用hadoop用户,测试彼此之间是否能进行ssh通信

1) 虚拟机克隆

右键 nn1 机器→ 管理 → 克隆。

克隆完成后,需要给克隆的虚拟机配置静态IP。

2)配置静态IP

1)查看网卡硬件名称和基本信息  ip add 

01-Hadoop概述及基础环境搭建 Hadoop 第18张

虚拟机会给每个克隆的虚拟机创建新网卡,如上面的 ens33 。 如果网卡设备信息中没有显示IP,则需要配置配置文件 cd /etc/sysconfig/network-scripts/
01-Hadoop概述及基础环境搭建 Hadoop 第19张 vim ifcfg-ens33  service network restart ifcfg-xxx 中的xxx 与网卡名相同后,配置ifcfg-xxx 文件
 1 TYPE="Ethernet"
 2 BOOTPROTO="static"
 3 DEFROUTE="yes"
 4 PEERDNS="yes"
 5 PEERROUTES="yes"
 6 IPV4_FAILURE_FATAL="no"
 7 IPV6INIT="yes"
 8 IPV6_AUTOCONF="yes"
 9 IPV6_DEFROUTE="yes"
10 IPV6_PEERDNS="yes"
11 IPV6_PEERROUTES="yes"
12 IPV6_FAILURE_FATAL="no"
13 NAME="ens33"
14 UUID="d15377eb-6ffa-44c9-a06d-f7eb00f49f44"
15 DEVICE="ens33"
16 ONBOOT="yes"
17 IPADDR=192.168.142.133
18 PREFIX=24
19 GATEWAY=192.168.142.2
20 DNS1=192.168.142.2
21 DNS2=8.8.8.8

 

需要修改的内容,配置完的网卡文件 01-Hadoop概述及基础环境搭建 Hadoop 第20张

 

配置完后,用systemctl restart network.service重启网络服务,当前的ssh就连接不上了,是因为网络IP被改变成你自己设置的静态IP。 用 ip add 查看网卡信息   用 ping www.baidu.com 看是否能连接外网。
1 hostnamectl set-hostname nn1.hadoop
2 #修改完后用hostname可查看当前主机名
3 hostname

 

如果上不了网执行以下操作   3)配置 /etc/resolv.conf  的 nameserver cat /etc/resolv.conf    查看nameserver是否被设置正确 01-Hadoop概述及基础环境搭建 Hadoop 第21张  vim /etc/resolv.conf 修改文件,如果不存在nameserver就在文件下面添加,如果存在就修改,把nameserver 设置成自己对应的DNS。   4)停止掉NetworkManager服务 五台一起执行
1 // 停止NetworkManager服务
2 systemctl stop NetworkManager.service
3 // 并设置成开机不启动
4 systemctl disable NetworkManager.service
5 // 之后重启网络服务
6 systemctl restart network.service

 

5) 修改每个机器的主机名
1 hostnamectl set-hostname nn2.hadoop
2 hostnamectl set-hostname s1.hadoop
3 hostnamectl set-hostname s2.hadoop
4 hostnamectl set-hostname s3.hadoop

 

批量脚本说明及使用

 

3.1 批量脚本说明

 

执行脚本要给脚本加上可执行权限
1 chmod -R +x ~/hadoop_op

 

exe.sh : 执行su 命令,与ssh_root.sh 配套使用 ips :用于存放要操作的主机列表,用回车或空格隔开 scp_all.sh  :用hadoop用户拷贝当前机器的文件到其他操作机 ssh_all.sh  :用hadoop 用户可登陆其他操作机执行相应操作 ssh_root.sh : 用hadoop 用户登录其他操作机,并su 到 root 用户,以root 用户执行相应操作,与exe.sh 配套使用   1)ips 01-Hadoop概述及基础环境搭建 Hadoop 第22张

 

 2)ssh_all.sh 01-Hadoop概述及基础环境搭建 Hadoop 第23张

 

 3)ssh_root.sh 01-Hadoop概述及基础环境搭建 Hadoop 第24张

 

 4)exe.sh 01-Hadoop概述及基础环境搭建 Hadoop 第25张

 

 5)scp_all.sh   01-Hadoop概述及基础环境搭建 Hadoop 第26张  

3.2 批量脚本的使用

 

1)将批量脚本上传到机器上 把hadoop_op.zip文件用 rz 命令上传到 nn1.hadoop 机器上   2)解压批量脚本,并修改批量脚本权限 一般先切换到当前使用用户的home目录下 解压:        unzip hadoop_op.zip     修改权限:chmod -R 775 ./hadoop_op   3)测试批量SSH命令 ./ssh_all.sh hostname   4)测试批量传文件 01-Hadoop概述及基础环境搭建 Hadoop 第27张     如果想将nn1.hadoop 机器上/root下的s1 文件,分发到其他机器的/root/dir/ 目录下,该如何操作? 1)nn1.hadoop:将/root/s1 文件拷贝到hadoop家目录下 01-Hadoop概述及基础环境搭建 Hadoop 第28张

 

2)多机分发脚本,将s1文件分发到其他机器的hadoop家目录 01-Hadoop概述及基础环境搭建 Hadoop 第29张

01-Hadoop概述及基础环境搭建 Hadoop 第30张

  这步一般的是分发到/tmp 临时目录下,这个目录linux会定期删除 3)执行ssh_root.sh  在root家目录下创建dir目录 01-Hadoop概述及基础环境搭建 Hadoop 第31张

01-Hadoop概述及基础环境搭建 Hadoop 第32张

  4)执行ssh_root.sh 将每台机器的hadoop用户家目录下的s1文件拷贝到/root/dir目录下 01-Hadoop概述及基础环境搭建 Hadoop 第33张

01-Hadoop概述及基础环境搭建 Hadoop 第34张

 

       
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄