自述:这篇可能也不完全是 面试题,就是一些知识点的整理。【持续更新中…】
【愿君一路披荆斩棘,觅得心仪大offer】
1、linux的常用的命令:
(1)磁盘管理:
pwd:显示工作目录的绝对路径名称
ls:显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)
mkdir:用于创建目录
rmdir:删除空的目录
cd:用于切换当前工作目录
(2)文件管理:
touch:用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件
cp:用于复制文件或目录
rm:删除一个文件或者目录
mv:为文件或目录改名、或将文件或目录移入其它位置
cat:连接文件并打印到标准输出设备上
more:类似 cat ,不过会以一页一页的形式显示
less:与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件
chmod:控制用户对文件的权限的命令
chown:用于设置文件所有者和文件关联组的命令
chgrp:用于变更文件或目录的所属群组。(与 chown 命令不同,chgrp 允许普通用户改变文件所属的组,只要该用户是该组的一员)
(3)系统管理:
useradd:用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中
passwd:用来更改使用者的密码
su:用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。(使用权限:所有使用者。)
sudo:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。(使用权限:在 /etc/sudoers 中有出现的使用者。)
userdel:用于删除用户帐号
who:用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等。(使用权限:所有使用者都可使用。)
(4)其他命令:
head:用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容
tail:用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件
【详细内容可参考 菜鸟教程的 linux命令大全:https://www.runoob.com/linux/linux-command-manual.html】
2、MR、Hive、Spark的词频统计
(1)MR的词频统计:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import java.io.IOException;
public class WordCount {
public static void main(String[] args) throws Exception {
//获取job对象
//1.新创建配置文件
Configuration conf = new Configuration();
conf.set("mapreduce.framework.name","local");
conf.set("fs.defaultFS","file:///"); //本地模式
// conf.set("fs.defaultFS", "hdfs://192.168.137.71:8020"); //集群模式
Job job = Job.getInstance(conf);
//2.指定驱动类进行打包
job.setJarByClass(WordCount.class);
//3.指定Mapper,reducer类
job.setMapperClass(wcMapper.class);
job.setReducerClass(wcReducer.class);
//4.指定mapper输出的数据类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
//5.指定reduce输出的数据类型
job.setOutputKeyClass(NullWritable.class);
job.setOutputValueClass(Text.class);
//6.指定输入的数据路径
FileInputFormat.setInputPaths(job,new Path("D:\\Test\\spark\\words.txt"));
FileOutputFormat.setOutputPath(job,new Path("D:\\Test\\1"));
//8.提交任务并退出
boolean b = job.waitForCompletion(true);
System.exit(b?0:1);
}
}
class wcMapper extends Mapper<LongWritable,Text,Text, LongWritable>{
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String[] splits = value.toString().split(" ");
for (String s : splits) {
context.write(new Text(s),new LongWritable(1L));
}
}
}
class wcReducer extends Reducer<Text, LongWritable, NullWritable, Text>{
@Override
protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
long l=0L;
for (LongWritable value : values) {
l++