hadoop面试题和资料详解:


 

hadoop的背景?

 

apache发行版本大致:1.x 和 2.x 和 3.x

 

提公司:

apache : 原生

cloudar公司 : cdh

hortworks公司提供 : hdp

mapR

华为

星环

 

 

海量数据诞生、同时没有海量数据的存储、和处理

 

goole:GFS、mapreduce、bigtable

 

hadoop创始人Doug cutting:

 

hadoop起源,

起源思想:google

起源代码:luence ---> nutch(mapreduce、ndfs) ---> hadoop

 

 

hadoop的核心思想:

 

 

hadoop1.x 和 2.x 、 3.x的区别?

1.x和2.x最大的区别是,2.x将资源管理单独提取出来使用yarn模块来管理。

namenode角色能启动的个数:

块大小:

 

 

大数据的应用:

 

 

 

hadoop到底是一个什么?

The Apache? Hadoop? project develops open-source software for reliable, scalable, distributed computing.

open-source:

reliable:

scalable:

distributed computing:

 

hadoop框架允许使用简单模型来分布式处理集群中海量数据集

hadoop框架设计从单台服务器扩展成千上万台服务器,每一个都能提供本地的存储和计算。

hadoop框架设计本身就可以检测和处理应用层的失败(容错),而不是依赖硬件,因为集群中每一个都有可能失败。

 

 

hadoop包括四个模块:

common : 通用工具类支持其他hadoop的模块

hdfs (hadoop distribut file system): hadoop分布式文件系统,提供高吞吐来处理应用数据

yarn : 作业调度和资源管理的框架

mapredcue : 基于yarn来并行处理海量数据集的系统

 

 

Local (Standalone) Mode:单机版

Pseudo-Distributed Mode:伪分布式

Fully-Distributed Mode:全分布式

 

 

单机版的安装:运行在单个jvm中,经常用于debug

 

安装步骤:

下载hadoop二进制包

解压并配置hadoop的环境变量

配置hadoop的配置文件:etc/hadoop/hadoop-env.sh

测试

 

tar -zxvf /home/hadoop-2.9.1.tar.gz -C /usr/local/ : 解压到/usr/local目录

hadoop安装目录介绍:

bin : 操作hdfs和mapreduce的可执行命令

sbin : 启停hadoop相关服务的可执行命令

etc : hadoop相关配置文件目录

lib、libexec :相管扩展或者扩展库

share : 源码、文档和测试案例等。

 

 

vi /etc/profile 配置hadoop的环境变量

export HADOOP_HOME=/usr/local/hadoop-2.9.1/

 

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:

 

source /etc/profile : 是配置生效

 

vi ./etc/hadoop/hadoop-env.sh 告诉hadoop的jdk目录

export JAVA_HOME=/usr/local/jdk1.8.0_152/

 

测试:

hdfs dfs -ls /

 

yarn jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /home/words /home/out/00

words是已存在的文件 后面/home/out/00是自己创建的

 

执行第二个作业:

mkdir /home/input

cp ./etc/hadoop/*.xml /home/input/

yarn jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /home/words /home/out/00

 

 

 

三大核心:

 

 

hdfs的设计目标??

 

 

hdfs的优缺点??

 

hdfs的三个服务:

hdfs的架构成主从架构master/slave.

namenode(master):接收来自client端的i/o请求;记录操作元素据;获取来自小弟的汇报信息(心跳、块报告等);

datenode(slaves): clinet请求小弟真正读写数据内容;接受老大命令读写数据;

secondarynamenode(小秘): 协同老大管理元数据(合并元数据)

metastore: 元数据。描述hdfs块数据的数据的数据(块的地址、块id、块大小、块的创建人、创建时间等);

client : 客户端(发送读写数据请求)

 

hdfs的工作机制:

clinet请求namenode,然后namenode处理请求,返回信息;如果信息中有地址列表,客户端就需要和对应的地址上的datanode服务进行沟通。

 

机架:

数据块:文件局部或者全部数据内容。文件以块的形式进行存储,块又以文件的形式存储到磁盘。

1.x : 64M

2.x : 128M

3.x : 256M

默认每一个块3个副本,默认最小的副本数是1个。

多个副本不能同时存储在一台服务器中。理由如下:

如果存储到一台服务器中,多个副本路径将会重复,

降低服务器坏丢所有块。

副本数是小于等于datanode服务数量的。

 

 

hdfs中的写流程:

 

 

 

伪分布式:将所有的服务运行在一台节点上,就称之为伪分布式。伪分布式模型中,每一个服务使用一个jvm。

1、解压并配置环境变量

tar -zxvf /home/hadoop-2.9.1.tar.gz -C /usr/local/

 

vi /etc/profile

export HADOOP_HOME=/usr/local/hadoop-2.9.1/

 

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:

 

source /etc/profile : 是环境变量生效

hadoop version : 检测hadoop版本信息

 

2、配置配置文件

etc/hadoop/hadoop-env.sh :指定JAVA_HOME的路径

etc/hadoop/core-site.xml : 配置核心配置文件

/*下面的hadoop01是自己的主机名,修改的话/etc/sysconfig/network */

<property>

<name>fs.defaultFS</name>

<value>hdfs://hadoop01:9000</value>

</property>

 

etc/hadoop/hdfs-site.xml

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

 

etc/hadoop/slaves

hadoop01 #主机名

 

到此,hdfs的伪分布式配置完毕。

hdfs namenode -format : 格式化hdfs文件系统

/tmp/hadoop-root/dfs/name has been successfully formatted

 

ll /tmp/hadoop-root/dfs/name : 元数据存储目录

 

start-dfs.sh : 启动hdfs相关的进程(服务)

 

测试:

jsp 检测进程是否符合

http://hadoop01:50070 : 检测hdfs web监控 //需要在自己电脑下的C:\Windows\System32\drivers\etc的hosts下添加hadoop01 以及对应的ip地址

 

对hdfs文件系统进行读写: 能正常读写浏览则ok

hdfs dfs -ls / : 查看hdfs文件系统中的根目录

hdfs dfs -put /home/words / :上传/home/words 到hdfs中的根目录

hdfs dfs -cat /words :读hdfs中/words文件

 

 

 

服务启动不起来,查看对应的日志。hadoop-root-datanode-hadoop01.log

访问不到50070,检测防火墙,检测映射,检测namenode是否启动。

操作hdfs中的文件不行,connection异常,优先检测防火墙

 

 

ssh 免登陆流程:

 

hadoop01 ---> hadoop02

1、在hadoop01上生成公司密钥对().

ssh-keygen -t rsa

2、将hadoop01的公钥拷贝到想免登陆的服务器中(hadoop02).

ssh-copy-id hadoop02

 

3、hadoop01给hadoop02发出请求信息,hadoop02接到去authorithd_keys找对应的ip和用户名,

能找到则用其对应公钥加密一个随机字符串(找不到则输入密码),然后将加密的随机字符串返回给hadoop01,hadoop01

接到加密后的字符然后用自己的私钥解密,然后再发给HAdoop02,hadoop02判断和加密之前的是否一样,

一样则通过登录,不一样则拒绝。

 

 

4、如果window中用私钥登录。需要从登录服务器中拉去对应用户的私钥(服务器中用户的家目录下的.ssh下的id_rsa)

放到windon中的某个目录,然后使用xshell进行私钥登录。

 

 

启动命令:

start-all.sh : 全启动(启动hdfs和yarn的模块的所有服务)

stop-all.sh : 全停止(停止hdfs和yarn的模块的所有服务)

 

模块启动:

start-dfs.sh : hdfs的模块启动

stop-dfs.sh : hdfs的模块停止

start-yarn.sh : yarn的模块启动

stop-yarn.sh : yarn的模块停止

 

单个启动:

hadoop-daemon.sh start/stop namenode :启动单个namenode

hadoop-daemons.sh start/stop namenode :启动多个namenode

hadoop-daemon.sh start/stop datanode :启动单个datanode

hadoop-daemons.sh start/stop datanode :启动多个datanode

hadoop-daemon.sh start/stop secondarynamenode :启动单个secondarynamenode

hadoop-daemons.sh start/stop secondarynamenode :启动多个secondarynamenode

 

yarn-daemon.sh start/stop resourcemanager

 

 

 

自动化脚本?测试

全分布式搭建

hdfs和yarn的架构官方文档阅读?

hdfs的shell命令使用?

 

 

 

hadoop的核心模块之一hdfs??

 

 

 

全分布式配置:

全分布式:将某些服务分别启动在多台服务器中,可以用于生产。

 

步骤:

 

规划集群:

192.168.216.111 hadoop01 namenode,datanode,nodemanager

192.168.216.112 hadoop02 datanode,resourcemamnager,nodemanager,secondarynamenode

192.168.216.113 hadoop03 datanode,nodemanager,jobhistroyserver

 

准备工作:

需要安装集群的服务器必须安装jdk

需要安装ssh,并且需要做好ssh免登陆(老大需要免登陆小弟)

hadoop01 hadoop01,hadoop02,hadoop03

hadoop02 hadoop01,hadoop02,hadoop03

 

解压配置环境变量

配置配置文件

vi ./etc/hadoop/hadoop-env.sh

hadoop-env.sh.note

vi ./etc/hadoop/core-site.xml

core-site.xml.note

 

vi ./etc/hadoop/hdfs-site.xml

hdfs-site.xml.note

 

vi ./etc/hadoop/slaves

添加三台主机名

mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml

 

template是模版 给他重命名

vi ./etc/hadoop/mapred-site.xml

mapred-site.xml.note

 

vi ./etc/hadoop/yarn-site.xml

yarn-site.xml.note

 

发送配置好的hadoop到每一台服务器中:

scp -r ../hadoop-2.9.1/ hadoop02:/usr/local/

scp -r ../hadoop-2.9.1/ root@hadoop02:/usr/local/

 

 

hdfs的格式化:

在namenode的服务器上执行格式化命令:

hdfs namenode -format

 

启动服务测试:

start-all.sh

mr-jobhistory-daemon.sh start historyserver(3号机)

start-yarn.sh(2号机)

 

检查是否按照规划启动进程(如没有可以尝试当个启动)

 

查看web:

http://hadoop01:50070 namenode的web

http://hadoop02:50090 secondarynamenode的web

http://hadoop02:8088 resourcemanager的web

http://hadoop03:19888 jobhistroyserver的web

 

hdfs的读写数据:

hdfs dfs -put /home/words /

hdfs dfs -put /home/words hdfs://hadoop01:9000/

 

hdfs dfs -cat hdfs://hadoop01:9000/words

 

yarn的job的测试:

yarn jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar wordcount /words /out/00