1.Hadoop集群可以运行的3个模式?
(1)单机(本地)模式:这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统。在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM上。这里同样没有DFS,使用的是本地文件系统。单机模式适用于开发过程中运行MapReduce程序,这也是最少使用的一个模式。
(2)伪分布式模式:也是在一台单机上运行,但用不同的Java进程模仿分布式运行中的各类结点(NameNode,DataNode,JobTracker,TaskTracker,SecondaryNameNode),伪分布式(Pseudo)适用于开发和测试环境,在这个模式中,所有守护进程都在同一台机器上运行。
(3)全分布式模式:全分布模式通常被用于生产环境,使用N台主机组成一个Hadoop集群,Hadoop守护进程运行在每台主机之上。这里会存在Namenode运行的主机,Datanode运行的主机,以及tasktracker运行的主机。在分布式环境下,主节点和从节点会分开。
2.Hadoop的核心配置文件有哪些?
配置文件无非就这几个文件:
1、hadoop-env.sh:
只需设置jdk的安装路径,如:export JAVA_HOME=/usr/local/jdk
2、core-site.xml:
(1)fs.defaultFS:hdfs://cluster1(域名),这里的值指的是默认的HDFS路径
(2)hadoop.tmp.dir:/export/data/hadoop_tmp,这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。
(3)ha.zookeeper.quorum:hadoop101:2181,hadoop102:2181,hadoop103:2181,这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点
(4)hadoop.proxyuser.erpmerge.hosts、hadoop.proxyuser.erpmerge.groups主要用来设置oozie的代理用户
3. “jps”命令的用处?
jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号。 jps相当于Solaris进程工具ps。不像”pgrep java”
或”ps -ef grep java”,jps并不使用应用程序名来查找JVM实例。因此,它查找所有的Java应用程序,包括即使没有使用java执行
体的那种(例如,定制的启动 器)。另外,jps仅查找当前用户的Java进程,而不是当前系统中的所有进程。
4.SSH工作的端口号是?
ssh工作的端口号是22
5.hdfs上传文件的流程。
-
客户端拿到一个文件,跟namenode说,我要上传这个文件,上传到哪个目录下。我们假设这个文件名为 cjk.avi,目录为 /hadoop/hdfs/
-
namenode拿到这个文件后,获取文件名,然后去元数据中查找/hadoop/hdfs/中是否已经存在相同文件名的文件,如果没有,那么告诉客户端说你可以上传这个文件
-
客户端接到可以上传文件的命令后,会将文件进行切分(hadoop2.X是128M),切分成N(N>=1)块,如果切成n块,那么除去最后一个,其它块的大小都是一样的。
-
客户端拿到第一个块block01后,跟namenode说,我要上传block01,然后namenode去自身的datanode信息池中查找应该上传到哪几个datanode(备份数)中,然后将查询到的datanode的信息告诉客户端
-
客户端拿到datanode的信息后,开辟一个socket流将block01上传到namenode返回的datanode中最近的一个datanode节点,然后这个datanode节点会对block01进行水平备份,也就是将数据从datanode本地复制到其他指定的机器上。
-
datanode将数据水平备份完成之后,会通知客户端,说block01上传成功
-
然后客户端会通知namenode说block01上传成功,此时namenode会将元数据(可以简单地理解为记录了block块存放到哪个datanode中)同步到内存中
-
其他的block块循环上面的过程
-
至此一个大文件就上传到hdfs中了
6.hdfs读取文件步骤
读取:
- 应用程序通过HDFS客户端向NameNode发生远程调用请求。
- NameNode收到请求之后,返回文件的块列表信息。块列表信息中包含每个block拷贝的datanode地址。
- HDFS 客户端会选择离自己最近的那个拷贝所在的datanode来读取数据。
- 数据读取完成以后,HDFS客户端关闭与当前的datanode的链接
7.请列出正常的hadoop集群中hadoop都分别需要启动 哪些进程,他们的作用分别都是什么启动的进程:
namenode
socondarynamenode
datanode
ResourceManager(JobTracker)JobTracker
NodeManager(TaskTracker)
DFSZKFailoverController
JournalNode
作用:
a) NameNode它是hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,保存有 metadate.
b).SecondaryNameNode它不是namenode的冗余守护进程,而是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。
c)DataNode它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个datanode守护进程。
d)ResourceManager(JobTracker)JobTracker负责调度DataNode上的工作。每个DataNode有一个TaskTracker,它们执行实际工作。
e) NodeManager(TaskTracker)执行任务
f) DFSZKFailoverController高可用时它负责监控NN的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个特定接口来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。
g) JournalNode 高可用情况下存放namenode的editlog文件.
8.linux如何配置环境变量
一、java环境变量
tar -zxvf jdk-8u201-linux-x64.tar.gz -C /opt/module/
2、编辑系统变量:
vim /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_201
export PATH=
P
A
T
H
:
PATH:
PATH:JAVA_HOME/bin
3、使环境变量生效:
source /etc/profile
二、hadoop环境变量
1、解压tar包到指定目录:
tar -zxvf hadoop-3.2.0.tar.gz -C /opt/module/
2、编辑系统变量
vim /etc/profile
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.2.0
export PATH=
P
A
T
H
:
PATH:
PATH:HADOOP_HOME/bin
export PATH=
P
A
T
H
:
PATH:
PATH:HADOOP_HOME/sbin
3、使环境变量生效:
source /etc/profile
4、修改hadoop配置文件:
vim /opt/module/hadoop-3.2.0/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_201