1. 描述如何安装配置Hadoop

参考:http://www.cnblogs.com/xia520pi/archive/2012/04/08/2437875.html

  • 安装Linux(虚拟机上)—CentOS:创建用户,关闭防火墙,PS:不关防火墙无法访问Web管理页面,删除和增加节点时,会让数据迁移处理时间长,可能假死,节点间无法访问等问题。如果需要防火墙对其他的连接依旧起作用的话,就不能简单的关闭它,而是可以通过配置防火墙的过滤规则,即将hadoop需要监听的那些端口配置到防火墙接受规则中。
  • 安装VSFTP(FTP服务器软件):yum –y install vsftpd,PS:FTP端口号为20、21。
  • 本地安装FlashFXP(FTP软件):支持本地文件系统和服务器文件系统的文件互传。
  • 本地安装SecureSRT(支持SSH的终端仿真程序):用于连接Linux。
  • 网络配置:修改主机名,修改ip,修改hosts文件(用来配置主机将用的DNS服务器信息,将集群中的所有机器的IP与主机名添加,这样就可通过主机名通信)
  • 安装JDK并配置环境变量(/etc/profile)
  • 设置ssh免密码登录:Master生成密码对、设置SSH
  • 解压缩hadoop安装包,并配置环境变量
  • 修改配置文件($HADOOP_HOME/conf):hadoop-env.sh(添加java环境变量)  core-site.xml(配置HDFS的地址和端口号)  hdfs-site.xml(配置HDFS,默认副本为3) mapred-site.xml(配置MapReduce,配置JobTracker的地址和端口)
  • 格式化hdfs文件系统 (hadoop namenode -format)
  • 启动hadoop ($HADOOP_HOME/bin/start-all.sh)
  • 使用jps查看进程

2. 列出正常工作的Hadoop集群中,Hadoop都启动哪些进程,描述功能

  • NameNode: HDFS的守护进程,负责记录文件是如何分割成数据块,以及这些数据块分别被存储到那些数据节点上,它的主要功能是对内存及IO进行集中管理
  • Secondary NameNode:辅助后台程序,与NameNode进行通信,以便定期保存HDFS元数据的快照。
  • DataNode:负责把HDFS数据块读写到本地的文件系统。
  • JobTracker:负责分配task,并监控所有运行的task。
  • TaskTracker:负责执行具体的task,并与JobTracker进行交互

3. 启动时报如下错误如何解决

ERROR org-apache.hadoop.hdfs-server.namenode.NameNode org.apache.hadoop.hdfs.server.common.InconsistentFSStateException:   Direction /tmp/Hadoop-root/dfs/name is in an inconsisrtent state: storage directory dose not existent or is not accessible.

…...

问题分析:NameNode没有正常启动

解决方法:

① hadoop namenode –format(格式化namenode):如果每次都要执行这个命令才能启动namenode,那是万万不行的

② /tmp目录下的文件是临时文件,hadoop会将各种信息存到/tmp下,便会被定期清除,为避免这种情况,在hdfs-site.xml中添加属性dfs.name.dir设置值为想存的目录。

4. Hadoop命令(进入Hadoop_HOME目录,/etc/profile中配置)

①启动Hadoop;sh bin/start-all.sh

②关闭Hadoop:sh bin/stop-all.sh

③文件操作 :sh bin/hadoop fs ...(后面命令操作基本同Linux)

1)查看文件列表

查看hdfs中/user/admin/aaron目录下的文件:sh bin/hadoop fs -ls /user/admin/aaron

2)创建文件目录

hdfs中/user/admin/aaron目录下再新建一个叫做newDir的新目录:sh bin/hadoop fs -mkdir /user/admin/aaron/newDir

3)删除文件

删除hdfs中/user/admin/aaron目录下一个名叫needDelete的文件:sh bin/hadoop fs -rm /user/admin/aaron/needDelete

删除hdfs中/user/admin/aaron目录以及该目录下的所有文件 :sh bin/hadoop fs -rmr /user/admin/aaron

4)上传文件

上传一个本机/home/admin/newFile的文件到hdfs中/user/admin/aaron目录下:sh bin/hadoop fs –put /home/admin/newFile/user/admin/aaron/

5)下载文件

下载hdfs中/user/admin/aaron目录下的newFile文件到本机/home/admin/newFile中 :sh bin/hadoop fs –get /user/admin/aaron/newFile /home/admin/newFile

④MapReduce Job操作

1)提交MapReduce Job

运行一个/home/admin/hadoop/job.jar的MapReduce Job:sh bin/hadoop jar /home/admin/hadoop/job.jar [jobMainClass] [jobArgs]

2)杀死某个正在运行的Job:(hadoop job -list, 假设Job_Id为:job_201005310937_0053)sh bin/hadoop job -kill job_201005310937_0053

⑤添加datanode节点(在datanode中启动执行启动datanode命令):sh hadoop-daemon.sh start datanode

⑥删除datanode节点(namenode上):sh hadoop dfsadmin  -refreshServiceAcl

 5. Hadoop调度器

Hadoop调度器将系统中空闲的资源按一定策略分配给作业,比较流行的三种调度器有:默认调度器FIFO,计算能力调度器Capacity Scheduler,公平调度器Fair Scheduler

①默认调度器FIFO

hadoop中默认的调度器,采用先进先出的原则,按照到达时间的先后选择被执行的作业。

② 计算能力调度器Capacity Scheduler

支持多个队列,作业先按照运行任务数和计算资源的比值选择小(资源占用少)的队列,在每个队列里在按照FIFO调度策略。

③ 公平调度器Fair Scheduler

每个队列中的资源可配置,同一队列中的作业公平共享队列中所有资源

6. 当前日志采样格式为

a,b,c,d

b,b,f,e

a,a,c,f

写出MapReduce程序,计算第四列每个元素出现的个数

  1 package org.apache.hadoop.WordCount1;
  2
  3 import java.io.IOException;
  4
  5 import org.apache.hadoop.conf.Configuration;
  6
  7 import org.apache.hadoop.fs.Path;
  8
  9 import org.apache.hadoop.io.IntWritable;
 10
 11 import org.apache.hadoop.io.Text;
 12
 13 import org.apache.hadoop.mapreduce.Job;
 14
 15 import org.apache.hadoop.mapreduce.Mapper;
 16
 17 import org.apache.hadoop.mapreduce.Reducer;
 18
 19 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
 20
 21 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 22
 23 import org.apache.hadoop.util.GenericOptionsParser;
 24
 25 public class WordCount {
 26
 27   public static class MyMapper
 28
 29       extends Mapper<Object, Text, Text, IntWritable>{
 30
 31       public void map(Object key, Text value, Context context)
 32
 33         throws IOException, InterruptedException {
 34
 35         String[] split = value.toString().split("\t");
 36
 37                     for(String word:split){
 38
 39         context.write(split[3], 1);
 40
 41                     }
 42
 43       }
 44
 45     }
 46
 47   }
 48
 49   public static class MyReducer
 50
 51       extends Reducer<Text,IntWritable,Text,IntWritable> {
 52
 53       private IntWritable result = new IntWritable();
 54
 55       public void reduce(Text key, Iterable<IntWritable> values,Context context)
 56
 57            throws IOException, InterruptedException {
 58
 59         int sum = 0;
 60
 61         for (IntWritable val : values) {
 62
 63            sum += val.get();
 64
 65         }
 66
 67       result.set(sum);
 68
 69       context.write(key, result);
 70
 71     }
 72
 73   }
 74
 75
 76
 77   public static void main(String[] args) throws Exception {
 78
 79     Configuration conf = new Configuration();
 80
 81     Job job = new Job(conf, "word count");
 82
 83        job.setJarByClass(WordCount1.class);
 84
 85       job.setMapperClass(MyMapper.class);
 86
 87     job.setReducerClass(MyReducer.class);
 88
 89     job.setOutputKeyClass(Text.class);
 90
 91     job.setOutputValueClass(IntWritable.class);
 92
 93     FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
 94
 95     FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
 96
 97     JobClient.runJob(conf);
 98 }
 99
100 }

7. 你认为用Java、Streaming、pipe方式开发MapReduce。各有哪些优缺点

Java:可实现复杂逻辑,编程繁琐

Streaming:优点:支持多种语言编写程序,直接;缺点:细节无法控制(不能写自定义的partitioner, combiner,writablecomparable等),慢(交换过程不如Java API直接)

Pipe: 允许C++程序员编写mapreduce程序,它允许用户混用C++和Java的RecordReader, Mapper, Partitioner,Rducer和RecordWriter等五个组件。

Hadoop Streaming:

http://dongxicheng.org/mapreduce/hadoop-streaming-programming/

Hadoop Pipes:

http://dongxicheng.org/mapreduce/hadoop-pipes-programming/

8. Hive有哪些方式保存元数据,各有哪些特点(连接到数据库的三种模式及存储方式)

Hive的metastore组件是hive元数据集中存放地。Metastore组件包括两个部分:metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如hive默认的嵌入式磁盘数据库derby,还有mysql数据库。Metastore服务是建立在后台数据存储介质之上,并且可以和hive服务进行交互的服务组件。

1) 单用户模式:内存数据库derby,较小,不常用

2) 多用户模式:本地MySQL,较常用

3) 远程服务器模式:远程mysql,不常用

9. Hadoop实现join的几种方法

1) reduce side join

reduce side join是一种最简单的join方式,其主要思想如下:

在 map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签(tag),比 如:tag=0表示来自文件File1,tag=2表示来自文件File2。即:map阶段的主要任务是对不同文件中的数据打标签。

在reduce阶段,reduce函数获取key相同的来自File1和File2文件的value list, 然后对于同一个key,对File1和File2中的数据进行join(笛卡尔乘积:在数学中,两个集合XY的笛卡尓积表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能的有序对的其中一个成员。假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)})。即:reduce阶段进行实际的连接操作。

2) map side join

之所以存在reduce side join,是因为在map阶段不能获取所有需要的join字段,即:同一个key对应的字段可能位于不同map中。Reduce side join是非常低效的,因为shuffle阶段要进行大量的数据传输。

Map side join是针对以下场景进行的优化:两个待连接表中,有一个表非常大,而另一个表非常小,以至于小表可以直接存放到内存中。这样,我们可以将小表复制多份,让每个map task内存中存在一份(比如存放到hash table中),然后只扫描大表:对于大表中的每一条记录key/value,在hash table中查找是否有相同的key的记录,如果有,则连接后输出即可。

PS:MySQL Join

① Inner Join:SELECT * FROM TableA INNERJOIN TableB

产生的结果是A、B表的交集

②Full Outer join:SELECT * FROM TableA FULLOUTER JOIN TableB

产生的结果是A、B表的并集,对于没有匹配的记录,则会以null做为值

③Left outer join

SELECT * FROM TableA LEFTOUTER JOIN TableB ONTableA.name =TableB.name产生A的完全集,B中匹配的则有值,没匹配的NULL取代

SELECT* FROM TableA LEFTOUTER JOIN TableB ONTableA.name=TableB.nameWHERE TableB.id IS null

产生在A表有在B表没有的集合

SELECT * FROM TableA FULLOUTER JOIN TableB ONTableA.name =TableB.nameWHERE TableA.id IS null ORTableB.id IS null

产生A表和B表都没有出现的 即AB表除了交集的集合

10. Hadoop怎样实现二级排序

在Hadoop中,默认情况下是按照key进行排序,如果要按照value进行排序怎么办?

有两种方法进行二次排序,分别为:buffer and in memory sort和 value-to-key conversion。

buffer and in memory sort

主要思想是:在reduce()函数中,将某个key对应的所有value保存下来,然后进行排序。 这种方法最大的缺点是:可能会造成out of memory。

value-to-key conversion

主要思想是:将key和部分value拼接成一个组合key(实现WritableComparable接口或者调 setSortComparatorClass函数),这样reduce获取的结果便是先按key排序,后按value排序的结果,需要注意的是,用户需要自己实现Paritioner,以便只按照key进行数据划分。Hadoop显式的支持二次排序,在Configuration类中有个 setGroupingComparatorClass()方法,可用于设置排序group的key值

http://dongxicheng.org/mapreduce/hadoop-join-two-tables/

转载于:https://www.cnblogs.com/butterfly-2350/p/5784623.html

Hadoop葵花宝典(一)相关推荐

  1. java基础巩固-宇宙第一AiYWM:为了维持生计,大数据Hadoop之HDFS分布式文件系统(HDFS读写流程、主从集群两种问题“单点故障”及“压力过大内存受限”、HDFS的架构设计)~整起

    Hadoop之HDFS 目录 一.大数据 二.HADOOP 三.HDFS 1.HDFS基本概念 2.HDFS的架构设计 3.HDFS自己对于上面两种数据持久化技术的实现: 4.HDFS读写流程 5.H ...

  2. hadoop 添加删除机器以及设置免密登录

    添加hadoop机器 先在slaves中添加机器 然后启动datanode $: ./usr/hadoop-0.20.2-cdh3u4/bin/hadoop-daemon.sh start datan ...

  3. linux环境下快速配置hadoop集群免密登录

    背景 在hadoop的日常使用过程中经常需要登录某些机器,如何更好的免密登录呢?这将为我们节省大量的时间 操作 假设你需要在A机器上免密登录B机器,那么你首先要确定B机器下是有秘钥文件的.如何确定是否 ...

  4. hadoop问题小结

    20220322 https://blog.csdn.net/lt5227/article/details/119459827 hadoop控制台设置密码 访问验证 20220314 进入hive 高 ...

  5. hadoop,spark,scala,flink 大数据分布式系统汇总

    20220314 https://shimo.im/docs/YcPW8YY3T6dT86dV/read 尚硅谷大数据文档资料 iceberg相当于对hive的读写,starrocks相当于对mysq ...

  6. spark,hadoop区别

    https://zhuanlan.zhihu.com/p/95016937 Spark和Hadoop的区别和比较: 1.原理比较: Hadoop和Spark都是并行计算,两者都是用MR模型进行计算 H ...

  7. 2021年大数据Hadoop(三十):Hadoop3.x的介绍

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Hadoop3.x的介绍 介绍 Hadoop 3.0新特性 ...

  8. 2021年大数据Hadoop(二十九):​​​​​​​关于YARN常用参数设置

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 关于yarn常用参数设置 设置container分配最小内 ...

  9. 2021年大数据Hadoop(二十七):YARN运行流程

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn运行流程 本系列历史文章 2021年大数据Hado ...

最新文章

  1. C++_STL——map、multimap、set、multiset
  2. ajax的数据库,AJAX 数据库
  3. 超级计算机换算成智商,全球第二超级计算机运算力不如人脑 《转》
  4. guid主键 oracle_使用GUID作为数据库主键的测试
  5. 一台电脑,内外网同时使用
  6. Matlab实用代码——定位文件位置,自动导入文件
  7. B VUE系列 三:vuex,vue全局变量管理和状态更新的利器
  8. 软件项目需求调研报告模板下载_强烈推荐:一个软件,即可搞定所有方案报价工作...
  9. 一揽子修改win10的IP地址
  10. Discuz收费插件模版合集包;discuz大部分插件下载地址;http://pan.baidu.com/s/1nt5hwU1
  11. C语言的lsb算法bmp信息隐藏,C-LSB C语言信息隐藏数字水印LSB算法 - 下载 - 搜珍网...
  12. python 开源cms内容管理系统_wagtail-基于Django构建的开源内容管理系统
  13. Python技术pip的使用命令总结
  14. 网络波动造成服务器文件系統损坏,和平精英网络波动异常 与服务器失去连接解决方法...
  15. P1413 坚果保龄球洛谷c++题解
  16. CentOS ping本机ip,能ping通,外网ping不通
  17. 面试android开发工程师小结
  18. 成人c语言培训,C语言程序设计在成人教育中教学.doc
  19. ninjia必须以root权限运行问题
  20. Windows7无法自动安装FT232RL驱动解决方法

热门文章

  1. float向u8和s8的转换
  2. 一个Java程序员应该掌握的10项技能
  3. dede 后台 mysql_织梦dedecms使用Mysql8.0无法登录后台的解决办法
  4. Go基础编程:延迟调用defer
  5. 1029 Median
  6. LeetCode Python题解(一)----双指针法
  7. Flask基础-(模板)
  8. 系统利益相关者描述案例
  9. 几何画板画一个五边形内部的方法
  10. vim打开多窗口、多文件之间的切换