1、再次运行官网例子 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+' 发现报错,日志显示文件已存在
解决方法 hdfs dfs -rm -r /user/zhangyujie/output
2、Yarn
2.1编写配置文件
vim etc/hadoop/mapred-site.xml
vim etc/hadoop/yarn-site.xml
配置shuffle 反洗牌 主要作用为将混乱的数据合并在一起
2.2 启动
sbin/start-yarn.sh
已知pid查看端口号使用netstart -nlp |grep <进程号>
2.3修改yarn端口
原因:8088端口容易被挖矿
top查看系统占用资源判断是否被挖矿
vim etc/hadoop/yarn-site.xml
添加
yarn.resourcemanager.webapp.address ${yarn.resourcemanager.hostname}:9527
重启yarn查看端口
stop-all.sh关闭全部
start-all.sh打开全部
3、run a MapReduce job
在自己用户的data下创建一个wordcount.txt写入内容
创建文件夹 hdfs dfs -mkdir -p /wordcount/input
将wordcount.txt放入hadoop的input内 hdfs dfs -put wordcount.txt /wordcount/input
运行 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wordcount/input /wordcount/output
发现报错:配置文件内缺少东西
Please check whether your etc/hadoop/mapred-site.xml contains the below configuration:
环境变量大致含义
yarn.app.mapreduce.am.env :MR App Master环境变量
mapreduce.map.env :MR MapTask环境变量
mapreduce.reduce.env :MR ReduceTask环境变量
完善配置文件再次运行
查看运行状态 登陆9527端口查看任务及运行状态
查看结果
出现output文件夹
hdfs dfs -cat /wordcount/output/* 查看wc结果
yarn页面
进入管理页面查看其内容
查看hdfs命令
hdfs dfs -help
linux 同理 ll -h等
常用hdfs命令
hdfs dfs=hadoop fs
-ls
-put
-mkdir
-rm
-r
-cat
-help
4 作业
4.1 如何避免小文件过多(什么时候去合并,怎么合并)
解决小文件问题的最简单方法就是在生成阶段就进行杜绝。如果是由数据源产生大量小文件并直接拷贝到Hadoop,可以调研了解数据源是否能生成一些大文件,或者从数据源到HDFS的数据抽取过程中进行数据处理合并小文件。如果每小时只抽取10MB的数据,考虑是否改为每天一次,这样创建1个240MB的文件而不是24个10MB的文件。但是,你可能无法控制数据源的改动配合或业务对数据抽取间隔的需求,这样小文件问题无法避免,这时可能需要考虑其他的解决方案。 当产生小文件是不可避免时,文件合并是常见的解决方案。使用这种方法,你可以定期运行一个MapReduce任务,读取某一个文件夹中的所有小文件,并将它们重写为较少数量的大文件。比如一个文件夹中有1000个文件,你可以在一个MapReduce任务中指定reduce的数量为5,这样1000个输入文件会被合并为5个文件。随后进行一些简单的HDFS文件/文件夹操作(将新文件覆盖回原目录),则可以将NameNode的内存使用减少到200分之1,并且可以提高以后MapReduce或其他计算引擎对同一数据处理的性能。 在Hive或Java MapReduce中实现同样比较容易。这些MapReduce作业运行同样需要集群资源,所以建议调度在生产系统非繁忙时间段执行。但是,应该定期执行这种合并的MapReduce作业,因为小文件随时或者几乎每天都可能产生。但这个合并程序需要有额外的逻辑来判断存在大量小文件的目录,或者你自己是知道哪些目录是存在大量小文件的。因为假如某个目录只有3个文件,运行合并作业远不如合并一个500个文件的文件夹的性能优势提升明显。
4.2 sql作业
4.2.1 拿纸写 emp表求部门内最高的总薪资的部门,姓名总薪资
select empno, ename, sal, t1.deptno, avg_sal
from (select deptno, avg(sal) avg_sal
from emp group by deptno) t1, emp t2
where t1.deptno = t2.deptno and t1.avg_sal < t2.sal;
4.2.2 emp表,求同部门,按照薪资sal从大到小排名,排名上一位和下一位分别是多少薪资(两种方法:自关联和窗口函数)
(1)select t1.empno, t1.deptno, t1.sal, t2.sal, t3.sal from
(select t.*, dense_rank() over(partition by deptno order by sal) rk
from emp t) t1
left join
(select t.*, dense_rank() over(partition by deptno order by sal) rk
from emp t) t2
on t1.rk = t2.rk + 1 and t1.deptno = t2.deptno
left join
(select t.*, dense_rank() over(partition by deptno order by sal) rk
from emp t) t3
on t1.rk = t3.rk - 1 and t1.deptno = t3.deptno
order by t1.deptno, t1.sal
(2)select empno, deptno, sal, lag(sal, 1) over(partition by deptno order by sal) lag, lead(sal, 1) over(partition by deptno order by sal) lead
from emp;



