当前位置: 首页 > 编程日记 > 正文

Hadoop葵花宝典(一)

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

相关文章:

stata命令汇总_第九届高级计量经济学及stata应用研讨会在京顺利举办

二零一九&#xff0c;寒假佳时&#xff0c;近30余所高校的师生齐聚北京&#xff0c;参加了计量经济学服务中心举办的第九届“高级计量经济学及Stata应用”现场研讨班。本届研讨班于2019年1月19日-1月22日在北京国际温泉酒店顺利举办&#xff0c;现场学员既有博士、硕士&#xf…

下轮牛市高峰可能在2020年,以太坊是关键

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 “用自己一颗宁静的内心去感受市场真正的趋势&#xff0c;一旦发现趋势便全力跟随之。—刘强《期货大作手风云录》” 文章导读&#xff1a; 驱动这…

jQuery中的事件机制深入浅出

昨天呢,我们大家一起分享了jQuery中的样式选择器,那么今天我们就来看一下jQuery中的事件机制,其实,jQuery中的事件机制与JavaScript中的事件机制区别是不大的,只是,JavaScript中调用是原生的函数方法,而jQuery中调用的绑定的是jQuery中的对象方法,那么在昨天的第一篇中,我们已经…

滑动加载商品列表

商品列表htmL 所绑定的js事件 后台代码 $(function () { //滚动加载 var stop true; var start 2; // $.ajaxSetup({async:false}); function getData(url){ // console.log(url); $.ajax({ type:"get",//跨域访问时只能用get url:url,//要访问的api地址 dataType:…

mac 怎么查找大于200m的文件_U盘无法拷贝大于4GB的文件怎么办?

相信在经常使用U盘的用户手中&#xff0c;都会或多或少的存有几个U盘&#xff0c;有时候如果我们需要重装系统的时候&#xff0c;就会发现下载的系统居然无法拷贝到U盘当中&#xff0c;这究竟是怎么回事呢&#xff1f;U盘主要有三种格式&#xff1a;FAT32&#xff1a;缺点&…

以太坊今日大涨7.5%,芝商所备战“以太坊期货”

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 据The Block报道&#xff0c;芝加哥商品交易所&#xff08;CME&#xff09;预计将于7月15日改变以太坊相关的参考利率和指数&#xff0c;消息人士称…

python package_Python之package、module

一、模块&#xff1a; 1.简单的描述&#xff1a;一个.py文件 2.好处&#xff1a;大大提高代码的可维护性 3.模块三种&#xff1a;1.python标准库 2.第三方模块 3.应用程序自定义模块&#xff08;*****&#xff09; 4.import实质就是&#xff1a;1.执行对应文件 2.引入变量名 在…

C# Timer使用方法示例

实例化一个timer&#xff1a; // 每5分钟执行一次,每次执行的间隔毫秒时长 System.Timers.Timer timer new System.Timers.Timer(5*60*1000);为timer设置事件和任务循环回调方法&#xff1a; //到达时间的时候执行事件timer.Elapsed new System.Timers.ElapsedEventHandler(T…

[Educational Codeforces Round 16]A. King Moves

[Educational Codeforces Round 16]A. King Moves 试题描述 The only king stands on the standard chess board. You are given his position in format "cd", where c is the column from a to h and dis the row from 1 to 8. Find the number of moves permitted…

解读Go语言的2018:怎么就在中国火成这样了?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 本篇文章是 Go 语言 2018 年终盘点&#xff0c;力求客观、深入分析 2018 年 Go 语言的技术发展现状&#xff0c;同时对明年可能的发展情况进行预测…

Io流的字节流与缓冲流

当我们队大量数据进行保存时可以用数组&#xff0c;当数据到达一定量时或给用户一个易懂得接口时就可采用IO流&#xff1a; IO流按进行的操作分输出流与输入流InputStream与OutputSteam 按操作的原理来分有2种常见的IO流字节流与缓冲流&#xff1a;这2种IO的的输入输出流都是对…

057 Insert Interval 插入区间

给出一个无重叠的按照区间起始端点排序的区间列表。在列表中插入一个新的区间&#xff0c;你要确保列表中的区间仍然有序且不重叠&#xff08;如果有必要的话&#xff0c;可以合并区间&#xff09;。示例 1:给定区间 [1,3],[6,9]&#xff0c;插入并合并 [2,5] 得到 [1,5],[6,9]…

python3笔记_python3基础笔记(一)

1、就单个 python 文件来说在 python 中 python 的后缀可以是任意的。但如果这个 python 文件需要导入的时候如果不是 .py 会出错。所以一般情况下 python 文件的后缀为 .py 2、是 linux 中使用 ./文件.py 时候需要在文档的第一行注明解释器路径 # !/usr/bin/env/ python 3、声…

django中使用celery简单介绍

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 本章节我们重点在于实现&#xff0c;如何存储任务的结果. 我们将任务函数改为: from celery_demo.celery import app import time 加上app对象…

Node.js:路由

ylbtech-Node.js&#xff1a;路由1.返回顶部 1、Node.js 路由 我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数&#xff0c;随后路由需要根据这些数据来执行相应的代码。 因此&#xff0c;我们需要查看 HTTP 请求&#xff0c;从中提取出请求的 URL 以及 GET/POST 参…

如何进行Web服务的性能测试?

随着浏览器功能的不断完善&#xff0c;用户量不断的攀升&#xff0c;涉及到web服务的功能在不断的增加&#xff0c;对于我们测试来说&#xff0c;我们不仅要保证服务端功能的正确性&#xff0c;也要验证服务端程序的性能是否符合要求。那么性能测试都要做些什么呢&#xff1f;我…

64位游戏找call_替换Unity可执行文件为64位,改善游戏性能

虽然Unity同时支持多种架构,但是总有些程序员选择只打包32位版本,既然我们没有办法手动给程序员的脑子抽水,那就自己动手替换一个64位版本吧以下面这个游戏为例右键目录内最大的可执行文件或dll,属性,查看版本显然这个游戏使用的是5.6.6版本的Unity打开Unity官网(https://unity…

Python数据分析学习文章归纳

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 数据分析如何入门学习How do I learn data analysis with Python? 虽然是英文的&#xff0c;不过看一遍很大收获&#xff08;可以用百度翻译看一…

概率统计 —— 常犯错误

1. 患病的概率与医院的精度 已知某一种疾病在人群中的患病概率是万分之一&#xff08;0.01%&#xff09;&#xff0c;某医院检查的精度为 99.9%&#xff0c;某人在该医院检查的结果显示自己患了这个病&#xff0c;那么此人确实患病的概率是多少&#xff1f; 也即在诊断出患病的…

python tcp不用循环监听_网络编程: TCP

1. IP 地址概念: 标识网络中设备的地址(需要联网才有没有联网, 是没有这个地址)表现形式:ipv4 目前主要使用的, 点分十进制的格式,(192.168.3.43)分为 4 段, 每段的范围是 0-255, 0.0.0.0 ~ 255.255.255.255公网 IP, 可以直接被别人使用访问的 ip(需要购买)局域网 ip(内网), 通…

WC2018集训 吉老师的军训练

WC2018集训 吉老师的军训练 #include<bits/stdc.h> #define RG register #define IL inline #define _ 200005 #define X 100000000 #define ll unsigned long long using namespace std;IL int gi(){RG int data 0 , m 1; RG char ch 0;while(ch ! - && (ch&…

一篇文章搞定Python全部基础知识

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 前言&#xff1a; 1、Python软件安装 第一章、字符串及数字变量 1、变量 要点提炼&#xff1a;Python变量为强类型动态类型。换言之&#xff0c…

Java 时间和日期类型的 Hibernate 映射

以下情况下必须显式指定 Hibernate 映射类型一个 Java 类型可能对应多个 Hibernate 映射类型. 例如: 如果持久化类的属性为 java.util.Date 类型, 对应的 Hibernate 映射类型可以是 date, time 或 timestamp. 此时必须根据对应的数据表的字段的 SQL 类型, 来确定 Hibernate 映射…

idea springmvc_SSM三大框架使用Maven快速搭建整合(SpringMVC+Spring+Mybatis)

本文介绍使用SpringMVCSpringMyBatis三大框架使用Maven快速搭建一个demo&#xff0c;实现数据从数据库中查询返回到页面进行展示的过程。技术选型&#xff1a;SpringMVCSpringMyBatisMySqlMavenJSPIDEATomcat7JDK1.8Navicat for MySql下面开始搭建项目&#xff1a;一、数据库环…

欧拉函数+素数筛

欧拉函数&#xff0c;就是欧拉发现的一个关于求素数的的公式&#xff0c;然后我们编个函数实现这个公式。 欧拉发现求小于等于n的正整数中有多少个数与n互质可以用这个公式&#xff1a; euler(x)x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn为x的所有素因数&a…

对 Python 开发者而言,IPython 仍然是 Jupyter Notebook 的核心

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 Jupyter 项目提供的魔法般的开发体验很大程度上得益于它的 IPython 基因。 最近刚刚写过我为什么觉得觉得 Jupyter 项目&#xff08;特别是 Jupy…

LintCode 249. 统计前面比自己小的数的个数

给定一个整数数组&#xff08;下标由 0 到 n-1&#xff0c; n 表示数组的规模&#xff0c;取值范围由 0 到10000&#xff09;。对于数组中的每个 ai 元素&#xff0c;请计算 ai 前的数中比它小的元素的数量。 注意事项 We suggest you finish problem Segment Tree Build, Segm…

springboot过滤器排除掉一些url_理解这9大内置过滤器,才算是精通Shiro

小Hub领读&#xff1a;权限框架一般都是一堆过滤器、拦截器的组合运用&#xff0c;在shiro中&#xff0c;有多少个内置的过滤器你知道吗&#xff1f;在哪些场景用那些过滤器&#xff0c;这篇文章希望你能对shiro有个新的认识&#xff01;别忘了&#xff0c;点个 [在看] 支持一下…

安装APK,启动系统Activity

要同时设置data和type的话只能用函数setDataAndType private void installApk(File file) {Intent intent new Intent("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT"); // intent.setData(Uri.fromFile(fi…

EOS能不能囤?一篇文章搞懂EOS优缺点

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 EOS是一个基于区块链的开发平台&#xff0c;专为构建去中心化应用程序&#xff08;dApp&#xff09;而设计。EOS是一个开源项目&#xff0c;其源代…