大数据运维方向面试题
一、基础题
1.请写出http和https请求的区别,并写出遇到过的响应状态码.
一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。 三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
状态码常用:
301 永久重定向
403 服务器已经理解请求,但是拒绝执行
404 页面丢失
500 服务器错误
2.请写出在linux系统上面搭建系统或者产品等大数据平台需要对系统进行哪些检查。
从稳定性说:需要检查集群中的每一台服务器的命令安装是否完善,环境变量是否配置完毕,每一台服务器的软件配置是否有问题。
扩展性: 能够快速扩展机器,横向扩展条件是否具备
3.请写出使用过的linux系统有哪些版本,如何查看系统信息?(发行版本,内核版本等信息)。
Centos 6.5 6.6 x64 1.查看发行版本命令:cat /etc/issue
2.查看内核版本: cat /proc/version
4.请使用命令在linux系统中创建用户test,用户组为test1,用户目录 /test , 并赋予sudo权限。
useradd -d /test -m test -g test1 -G root
useradd 选项 用户名 其中各选项含义如下:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
Sudo可以修改文件需要root用户
sudo的工作过程如下:
1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
2,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
3,若密码输入成功,则开始执行sudo后续的命令
4,root执行sudo时不需要输入密码(eudoers文件中有配置root ALL=(ALL) ALL这样一条规则)
5,若欲切换的身份与执行者的身份相同,也不需要输入密码
5.写出最少3个监控系统指标的命令(如内存,CPU ,IO,磁盘等)。
看内存 :free
看cpu:more /proc/cpuinfo
看IO:iostat -x 10
看磁盘:fdisk -l
6.请用多种方式在linux系统中设置环境变量,并指出各种方式的区别。
1、控制台中设置,不赞成这种方式,因为他只对当前的shell 起作用,换一个shell设置就无效了: $PATH="$PATH":/NEW_PATH (关闭shell Path会还原为原来的path)
2、修改 /etc/profile 文件,如果你的计算机仅仅作为开发使用时推存使用这种方法,因为所有用户的shell都有权使用这个环境变量,可能会给系统带来安全性问题。这里是针对所有的用户的,所有的shell 在/etc/profile的最下面添加: export PATH="$PATH:/NEW_PATH"
3、修改bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的 .bashrc文件就可以了。 在下面添加: Export PATH="$PATH:/NEW_PATH"
7.请在linux系统中添加指定的定时任务。(每月1,15日,1,10点运行 /run.sh).
* 1 ,10 1,15 * * sh /run.sh
8.编写个shell脚本将/data目录下大于100k的文件转移到 /tmp 目录下。
#! /bin/sh
directory=/data/*
filesize=0
for file in $directory
do
filesize=$(wc -c < $(basename $file))
if [ $filesize -gt 100*1024 ]
then
mv $(basename $file) /tmp
fi
done
9.请使用命令写出在linux系统中对于文件01.txt ,查找行内容包含“java”关键字,但不包含“bug”关键字的内容,不区分大小写。
:set ignorecase 忽略大小写 然后执行命令 /java[^bug]
10.请帮我查询出8443端口正在被哪个进程使用?
netstat -tunlp|grep 8443
11.请在linxu系统中使用命令快速找出mysql文件的位置。
rpm -qal |grep mysql
12.搭建NFS文件共享服务,如共享目录为 /nfs , 如何配置NFS服务,客户端怎么挂载共享目录。
1. yum install nfs-utils rpcbind 安装NFS服务端
2. vi /etc/sysconfig/nfs 搜索和设置如下所示的端口配置:
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
3.关闭防火墙
4.vi /etc/selinux/config 将上述文件中的 SELINUX=enforcing 替换为 SELINUX=permissive 保存上述文件之后,运行以下命令: setenforce 0
5、创建共享目录 mkdir /home/nfs-share
6、vi /etc/exports 在上述文件的末尾新增一行,如下所示:
/data/nfs_share 192.168.4.212(rw,sync,no_root_squash)
/data/nfs_share *(ro) 这一行表示只有192.168.4.212客户端能够以读写权限挂载共享目录,其他客户端只能以只读权限挂载。
7.启动chkconfig nfs on
chkconfig rpcbind on
service nfs start
service rpcbind start
8. yum install -y nfs-utils
9.手动挂载NFS共享目录
Step-1:确定挂载点,运行以下命令: showmount -e 192.168.4.211
-e选项显示NFS服务端的导出列表。
Step-2:创建挂载目录,运行以下命令: mkdir -p /root/remote_dir 其中,/root/remote_dir为共享目录的挂载点目录。
Step-3:挂载共享目录,运行以下命令: mount -t nfs 192.168.4.211:/data/nfs_share /root/remote_dir 其中,-t选项用于指定文件系统的类型为nfs。
Step-4:共享目录使用结束之后,卸载共享目录,运行以下命令: umount /root/remote_dir
13.解释以下vi命令的意思,根据意思写出vi命令。
1) :s/p1/p2/g 将所有的p1替换成p2
2) 显示行号 :set nu
3) p 粘贴 对应 nyy复制使用
4) 删除光标下6行 6dd
5) 将光标移动到最后一行行首 G
6) /apple 查找apple字符串
14.是否搭建过大数据组件相关的集群,如果集群之间无法通信了,怎么排查?
搭建过,应该检查 1. jps查看进程是否停止
2. 检查ip是否ping通
15.是否安装过mysql源码版本,写出安装流程。
Mysql5.6安装
一 编译环境安装
1、安装make编译器
2、安装 bison
3、安装gcc-c ++
4、安装cmake
5、安装ncurses
6、 yum install gcc gcc-c++
yum install -y ncurses-devel
yum install -y cmake
yum install -y libaio
yum install -y bison
二 mysql安装
1、解压mysql源码压缩文件
2、编译完成配置mysql服务
3、启动mysql
4、修改root密码(默认为空)
16.有下列两表:
TAB1
C1 C2
------ - -----
A 11
B 12
C 13
TAB2
CX CY
------ ------
A 21
C 22
D 23
要得到一下结果:
C1 C2 CX CY
----- ----- ------ ------
A 11 A 21
C 13 C 22
----- ------ D 23
请写出具体的sql语句
SELECT * from tab1 RIGHT JOIN tab2 on tab1.C1 =tab2.CX
Union是连接两个查询语句 (select * from tab1 union all select * from tab2)
Union ALL 连接所有值包括重复 Union不包括重复值
二、基础题
1、请写出mysql数据库的几种备份/恢复方法。并指出其优缺点
备份
1、linux命令 mysqldump 直接生成.sql文件备份
mysqldump -u username -p dbname table1 > /home/BackupName.sql 输出mysql密码后备份
2.利用工具备份(Navicat)
3.复制整个数据库目录备份 (xcopy 命令)
4.使用mysqlhotcopy工具快速备份(热备份)
原理:先将需要备份的数据库加上一个读锁,然后用FLUSH TABLES将内存中的数据写回到硬盘上的数据库,最后,把需要备份的数据库文件复制到目标目录。
恢复:
mysql -u root -p dbname < C:\backup.sql
优缺点:
1.Mysqldump:利用linux或者shell进行备份比较灵活,运行较慢
2.利用工具:不好控制,不能自定义
3.复制整个data目录 :这种方法不适用于InnoDB存储引擎的表,而对于MyISAM存储引擎的表很方便。同时,还原时MySQL的版本最好相同。
4.mysqlhotcopy:mysqlhotcopy支持不停止MySQL服务器备份。而且,mysqlhotcopy的备份方式比mysqldump快。mysqlhotcopy是一个perl脚本,主要在Linux系统下使用。其使用LOCK TABLES、FLUSH TABLES和cp来进行快速备份。需要安装Perl和DBI支持。
2、请解释max_allowed_packet 的用途
指代mysql服务器端和客户端在一次传送数据包的过程当中数据包的大小这个是定义mysql服务器端和客户端在一次传送数据包的过程当中数据包的大小定义过大,比如max_allowed_packet=8092,有可能服务器端太忙,来不及接收,或者网络太差,会容易造成丢包定义过小,会因为客户端可能无法快速接收服务器端发过来的包,一般推荐是4096
3、写出调优过的mysql配置参数(连接数/接收的数据包大小)
MySQL配置文件my.cnf
global max_connections 设置连接数
max_allowed_packet 客户端与服务端之间一次传输数据包大小
。。。。
4、查看linux系统中启动了多少java进程,并获取其中某个java进程的内存使用情况。
Jps 查看进程pid
jmap -heap pid
5、指出Nginx支持哪几种负载均衡模式,并指出各模式的应用场景。
1.roundrobin 轮询方式,依次将请求分配到各个后台服务器中,默认的负载均衡方式。 适用于后台机器性能一致的情况。 挂掉的机器可以自动从服务列表中剔除。
2.weight 根据权重来分发请求到不同的机器中,适用于后台机器性能不一样的情况。
3.ip_hash 根据请求者ip的hash值将请求发送到后台服务器中,可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。
4.url_hash 根据请求的url的hash值将请求分到不同的机器中,当后台服务器为缓存的时候效率高。
5.fair 根据后台响应时间来分发请求,响应时间短的分发的请求多。
三、专项题
1.写出hadoop集群常用进程以及进程含义
1、Namenode
它是Hadoop 中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问。
2、Datanode
它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个 datanode 守护进程。
3、secondaryNameNode
它不是 namenode 的冗余守护进程,而是提供周期检查点和清理任务。 出于对可扩展性和容错性等考虑,我们一般将SecondaryNameNode运行在一台非NameNode的机器上。
4、ResourceManager
负责调度 DataNode上的工作。每个 DataNode有一个NodeManager,它们执行实际工作。
5、NodeManager
负责执行ResourceManager分发的任务
HA 模式忽略
2.Hadoop安装部署需要修改的配置文件,以及常用端口,举例说明
hadoop-env.sh hadoop jdk配置
core-site.xml hadoop核心文件-配置hadoop的命名服务和tmp目录和zookeeper集群
hdfs-site.xml 配置通信端口 http端口等。
mapred-site.xml 配置mapreduce的资源调度框架 yarn
yarn-site.xml yarn相关配置
Slaves 文件 指定hadoop集群的子节点位置
端口:
50070 namenode的web访问端口
9000 RPC通信端口
2181 zookeeper端口
...
3.使用过的hadoop shell 命令
Hadoop fs -ls /
Hadoop fs -mkdir /test
Hadoop fs -cat /
.......