大数据技术之Hadoop(入门)
1. 大数据概论
2. 从Hadoop框架讨论大数据生态
名字起源
该项目的创建者,Doug Cutting解释Hadoop的得名 :“这个名字是我孩子给一个棕黄色的大象玩具命名的
项目起源
Hadoop由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发
Google是Hadoop的思想之源(Google在大数据方面的三篇论文)
GFS ====> HDFS
Map-Reduce ====> MR
BigTable ====> HBase
江湖传说永流传:谷歌技术有三宝,GFS、MapReduce和大表(BigTable)!
Hadoop的优势
-
高可靠性
因为Hadoop假设计算元素和存储会出现故障,因为它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理。
-
高扩展性
在集群间分配任务数据,可方便的扩展数以千计的节点。
-
高效性
在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
-
高容错性
自动保存多份副本数据,并且能够自动将失败的任务重新分配。
Hadoop组成
- HDFS : 一个高可靠,高吞吐的分布式文件系统
- MapReduce: 一个分布式的离线并行计算框架。
- YARN: 作业调度与集群资源管理的框架
- Common: 支持其他模块的工具模块(Configuration RPC 序列化机制 日志操作).
HDFS架构概述
- NameNode:存储元数据
- DataNode:存储数据的节点,会对数据块进行校验
- SecondaryNameNode: 监控NameNode 的元数据,每隔一定的时间进行元数据的合并
YARN架构概述
-
ResourceManager(rm)
处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度
-
NodeManager(nm)
单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令
-
ApplicationMaster
数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错
-
Container
对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息
MapReduce架构概述
- MapReduce将计算过程分为两个阶段:Map和Reduce
- Map阶段并行处理输入数据
- Reduce阶段对Map结果进行汇总
3. Hadoop运行环境搭建
关闭防火墙
- 关闭防火墙: systemctl stop firewalld.service
- 禁用防火墙: systemctl disable firewalld.service
- 查看防火墙: systemctl status firewalld.service
- 关闭Selinux: vi /etc/selinux/config
- 将SELINUX=enforcing改为SELINUX=disabled
修改IP
-
Tab键补全
-
vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static ONBOOT=yes IPADDR=192.168.X.51 GATEWAY=192.168.X.2 DNS1=8.8.8.8 DNS2=8.8.4.4 NETMASK=255.255.255.0
-
vi /etc/resolv.conf
nameserver 8.8.8.8 nameserver 8.8.4.4
重启网卡 : service network restart
-
修改主机名
- hostnamectl set-hostname 主机名
-
IP和主机映射
-
vi /etc/hosts
192.168.1.111 bigdata111 192.168.1.112 bigdata112 192.168.1.113 bigdata113
-
windows的映射:C:\Windows\System32\drivers\etc 路径下找到hosts并添加
192.168.1.111 bigdata111 192.168.1.112 bigdata112 192.168.1.113 bigdata113
-
连接X Shell
- 输入IP 用户名 和密码即可连接
-
安装JDK
-
卸载现有JDK
-
查询是否安装Java相关软件
rpm -qa | grep java
-
如果安装的版本低于1.7,卸载该JDK:
rpm -e 软件包名
-
-
在/opt目录下创建两个子文件
mkdir /opt/mod /opt/soft
-
解压JDK到/opt/module目录下
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
-
配置JDK环境变量
-
vi /etc/profile
export JAVA_HOME=/opt/mod/jdk1.8.0_144 export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile 刷新环境变量配置
-
-
测试JDK是否安装成功
-
java -version
java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
安装成功
-
-
4. Hadoop运行模式
伪分布式/完全分布式部署Hadoop
-
SSH无密码登录
- 生成公钥和私钥:ssh-keygen -t rsa
- 然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
- 将公钥拷贝到要免密登录的目标机器上
- ssh-copy-id 主机名1
- ssh-copy-id 主机名2
- ssh-copy-id 主机名3
- 注:在另外两台机器上分别执行,共执行9遍
.ssh文件夹下的文件功能解释 (1)~/.ssh/known_hosts :记录ssh访问过计算机的公钥(public key) (2)id_rsa :生成的私钥 (3)id_rsa.pub :生成的公钥 (4)authorized_keys :存放授权过得无秘登录服务器公钥
-
配置集群(表格版)
- 集群部署规划
bigdata111 bigdata112 bigdata113 HDFS NameNode,SecondaryName,DataNode DataNode DataNode YARN NodeManager ResourceManager,NodeManager NodeManager -
配置文件
-
core-site.xml
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://主机名1:9000</value> </property> <!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.X.X/data/tmp</value> </property>
-
hdfs-site.xml
<!--数据冗余数--> <property> <name>dfs.replication</name> <value>3</value> </property> <!--secondary的地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>主机名1:50090</value> </property> <!--关闭权限--> <property> <name>dfs.permissions</name> <value>false</value> </property>
-
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>主机名1</value> </property> <!-- 日志聚集功能使能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日志保留时间设置7天(秒) --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
-
mapred-site.xml
<!-- 指定mr运行在yarn上--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!--历史服务器的地址--> <property> <name>mapreduce.jobhistory.address</name> <value>主机名1:10020</value> </property> <!--历史服务器页面的地址--> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>主机名1:19888</value> </property>
-
hadoop-env.sh yarn-env.sh mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144(注:是自己安装的路径)
-
slaves
bigdata111
bigdata112
bigdata113(自己设置的主机名)
-
scp文件传输
实现两台远程机器之间的文件传输(bigdata112主机文件拷贝到bigdata113主机上)
文件传输: scp [可选参数] file_source file_target 实例:scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music -1: 强制scp命令使用协议ssh1 -2: 强制scp命令使用协议ssh2 -4: 强制scp命令只使用IPv4寻址 -6: 强制scp命令只使用IPv6寻址 -B: 使用批处理模式(传输过程中不询问传输口令或短语) -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能) -p:保留原文件的修改时间,访问时间和访问权限。 -q: 不显示传输进度条。 -r: 递归复制整个目录。 -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。 -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。 -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。 -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。 -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。 -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式, -P port:注意是大写的P, port是指定数据传输用到的端口号 -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。 scp -r [文件] 用户@主机名:绝对路径 伪分布式是一台、完全分布是三台
-
格式化NameNode
./hdfs namenode -format (只能格式化一次)
为什么要格式化?
NameNode主要被用来管理整个分布式文件系统的命名空间(实际上就是目录和文件)的元数据信息,同时为了保证数据的可靠性,还加入了操作日志,所以,NameNode会持久化这些数据(保存到本地的文件系统中)。对于第一次使用HDFS,在启动NameNode时,需要先执行-format命令,然后才能正常启动NameNode节点的服务。
格式化做了哪些事情?
在NameNode节点上,有两个最重要的路径,分别被用来存储元数据信息和操作日志,而这两个路径来自于配置文件,它们对应的属性分别是dfs.name.dir和dfs.name.edits.dir,同时,它们默认的路径均是/tmp/hadoop/dfs/name。格式化时,NameNode会清空两个目录下的所有文件,之后,会在目录dfs.name.dir下创建文件
hadoop.tmp.dir 这个配置,会让dfs.name.dir和dfs.name.edits.dir会让两个目录的文件生成在一个目录里
-
启动集群
- NameNode的主节点 : sbin/start-dfs.sh
-
Yarn的主节点:sbin/stop-yarn.sh
注意: Namenode和ResourceManger如果不是同一台机器,不能在NameNode上启动yarn, 应该在ResouceManager所在的机器上启动yarn start-all.sh 可以启动全部
-
完全分布式
-
步骤:
1)克隆2台客户机(关闭防火墙、静态ip、主机名称) 2)安装jdk 3)配置环境变量 4)安装hadoop 5)配置环境变量 export JAVA_HOME=/opt/mod/jdk1.8.0_144 export HADOOP_HOME=/opt/mod/hadoop-2.8.4 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME\bin:$HADOOP_HOME\sbin 6)安装ssh 7)配置集群 8)启动测试集群 注:此配置直接使用虚拟机克隆伪分布式两台即可
-
随意上传一个文本文件
创建一个文件夹 hdfs dfs -mkdir /myTask 创建多个文件夹 hdfs dfs -mkdir -p /myTask1/input1 上传文件 hdfs dfs -put /opt/wordcount.txt /myTask/input 查看总目录下的文件和文件夹 hdfs dfs -ls / 查看myTask下的文件和文件夹 hdfs dfs -ls /myTask 查看myTask下的wordcount.txt的内容 hdfs dfs -cat /myTask/wordcount.txt 删除总目录下的myTask2文件夹以及里面的文件和文件夹 hdfs dfs -rmr /myTask2 删除myTask下的wordcount.txt hdfs dfs -rmr /myTask/wordcount.txt 下载hdfs中myTask/input/wordcount.txt到本地opt文件夹中 hdfs dfs -get /myTask/input/wordcount.txt /opt
-
Hadoop启动停止的命令
启动/停止历史服务器 mr-jobhistory-daemon.sh start|stop historyserver
启动/停止总资源管理器 yarn-daemon.sh start|stop resourcemanager
启动/停止节点管理器 yarn-daemon.sh start|stop nodemanager
启动/停止 NN 和 DN start|stop-dfs.sh
启动/停止 RN 和 NM start|stop-yarn.sh
启动/停止 NN、DN、RN、NM start|stop-all.sh
启动/停止 NN hadoop-daemon.sh start|stop namenode
启动/停止 DN hadoop-daemon.sh start|stop datanode