hadoop面试时的一些问题解答

linux部分

1.请阐述swap分区作用,您认为hadoop集群中的linux是否必须有swap分区?

答:在Linux中,如果一个进程的内存空间不足,那么,它会将内存中的部分数据暂时写到磁盘上,当需要时,再将磁盘上的数据动态置换到内存中,通常而言,这种行为会大大降低进程的执行效率。在MapReduce分布式计算环境中,用户完全可以通过控制每个作业处理的数据量和每个任务运行过程中用到的各种缓冲区大小,避免使用swap分区。
  具体方法是调整/etc/sysctl.conf文件中的vm.swappiness参数。vm.swappiness有效范围是0~100,值越高表明内核应该更积极将应用程序的数据交换到磁盘,较低的值表示将延迟这种行为,而不是强制丢弃文件系统的缓冲区。
参考链接

2.请根据free -g -t,说明内存使用情况,给出剩余内存和可用内存大小。

col Total userd free shared buffers cached
Mem 16027 461 15565 0 65 285
-/+ buffers/cache 110 15916
Swap 8001 0 8001
Total 24028 461 23566

答:从OS角度,buffers和cached是被使用的内存,所以系统的可用内存(物理可用内存)=free-buffers-cached,也即Total-userd-buffers-cached=free-buffers-cached,也即-/+ buffers/cache的第一个值:110; 从程序的角度,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。所以程序可用内存=free+buffers+cached,也即-/+ buffers/cache的第二个值:15916;
参考链接linux查看内存使用情况

3.请说明ssh-copy-id hadoop@host命令实现的作用

答:ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中

4.写一个脚本,实现批量添加20个用户,用户名为hdfs01-20,密码为用户名后面跟5个随机字符。

答:

#!/bin/bash
for i in seq 1 9
do
    pwd=$(cat /dev/urandom | head -1 | md5sum | head -c 5)
    username=hdfs0$i
    useradd username
    echo "${username}$pwd" | passwd --stdin user$i
    echo ${username}  ${username}$pwd" >> userinfo.txt
done
for i in seq 10 20
do
    pwd=$(cat /dev/urandom | head -1 | md5sum | head -c 5)
    useradd hdfs$i
    echo "hdfs$i$pwd" | passwd --stdin user$i
    echo hdfs$i hdfs$i$pwd" >> userinfo.txt
done

5.查看当前系统中每个IP的连接数

答:netstat -n |awk '/^tcp/ {print 5}'|awk -F: '{print1}'|sort|uniq -c|sort -rn ,其中uniq -c是求uv,sort -rn 是降序,以数字顺序排序;参考链接:查看当前系统每个IP的连接数

6.写出查找yarn-hdfs-resourcemanager-master01.log包含error(不区分大小写)字符前后各15行的命令

答:cat yarn-hdfs-resourcemanager-master01|grep -i 'error' -C 15

7.写出查找当前时间48小时之前的hdfs用户的普通文件并删除的命令

答:find -mtime +2 -user hdfs -type f -exec rm {} ;参考链接linux中删除指定日期之前的文件

8.写出显示/usr/local/nagios/etc/nrpc.cfg文件中出去以#开头和空行的所有内容的命令。

答:cat /usr/local/nagios/etc/nrpc.cfg |grep '^#'

9.假设有200台HADOOP主机,slave001到slave200,在开启ssh互信的情况下,编写脚本实现在任意主机上执行批量查看磁盘大小的功能,期望结果:

Slave001:
/dev/sdb1 ext4 548G 224G 297G 43% /data/disk01s

Slave002:
/dev/sdb1 ext4 548G 224G 297G 43% /data/disk01s

Slave003:
...
答:

vim ssh_cmd.sh  
#!/bin/bash
cmd=$1
for((i=1;i<=200;i++))
do
    a=((1000+i))
    user=Slave${a:1}
    echo ${user}:
    ssh ${user}
    out=cmd
    echo ${out} 
done
sh  ssh_cmd.sh `df -h /dev/sdb1`

HADOOP部分

1.Hadoop自身具有严格的权限管理和安全措施保证集群正常运行。(F)

2.NameNode负责管理metadata,client端每次读写请求,它都会从磁盘中读取或者写入metadata信息并反馈client端。(F)

3.Hadoop2.0以上版本支持热部署,修改fair-scheduler.xml或capacity-scheduler.xml文件,调度策略自动生效。(F)

4.HDFS文件支持随机读写。(F)

5.Hadoop默认调度器为公平调度,队列内部是FIFO策略。(F)

6.不同版本hadoop集群之间数据迁移如何实现(给出两种实现方法)

答:

  • 1.使用distcp命令,例如

    hadoop distcp hftp://10.4.2.41:50070/user  hdfs://nn2:8020/bar/foo
    参考链接:Hadoop集群间数据拷贝
  • 2.小数据量hadoop fs -get拷贝到本地,在scp到新集群

7.用什么命令查看hadoop相关进程的详细情况

答:jps

8.如何查看集群中的job的状态,如何杀掉指定用户的所有job(命令行),写出命令。

答:
mapreduce(yarn-core)web界面查看job详细

for i in `hadoop job -list | grep -w  username| awk '{print $1}' | grep job_`;
do
    hadoop job -kill $i;
done

9.如何给用户限制使用HDFS文件系统的大小,如限制用户hadoop大小为10T,写出命令。

答:

hdfs dfsadmin -setSpaceQuota 10t /hadoop/

参考链接:HDFS配置设置 - 季石磊 - 博客园

10.如何统计某一HDFS目录下的文件数

答:hadoop fs -ls /tmp |wc -l

11.如何快速定位某个hadoop进程的输出日志?

答:Hadoop 2.x中YARN系统的服务日志包括ResourceManager日志和各个NodeManager日志,他们的日志位置如下:
ResourceManager日志存放位置是\(HADOOP_HOME/logs/yarn-xxx-resourcemanager-xxx.log,NodeManager日志存放位置是各个NodeManager节点上\)HADOOP_HOME/logs/yarn-xxx-nodemanager-xxx.log;
应用程序日志包括jobhistory日志和Container日志,其中jobhistory日志是应用程序运行日志,包括应用程序启动时间、结束时间,每个任务的启动时间、结束时间,各种counter信息等;Container日志包含ApplicationMaster日志和普通Task日志,它们均存放在$HADOOP_HOME/userlogs/application_xxx目录下,其中ApplicationMaster日志目录名称为container_xxx_000001,普通task日志目录名称则为container_xxx_000002,container_xxx_000003,...同Hadoop1.x一样,每个目录下包含三个日志文件:stdout、stderr和syslog,且具体含义是一样的。

12.列出您使用过的hadoop常用命令和集群管理工具。

13.列出您运维或部署过的Hadoop生态圈相关的组件

14.写出你做过的hadoop集群优化措施以及收到的效果

15.谈谈您对mapreduce和spark的看法

猜你喜欢

转载自www.cnblogs.com/arachis/p/Hadoop_QA.html
今日推荐