Upcoming SlideShare
Loading in...5







Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Hadoop基础及hive入门 Hadoop基础及hive入门 Presentation Transcript

  • hadoop 基础及 hive 入 门
  • 目录 Hadoop  前言介绍  例子  MR 框架  Hive  工作案例  前言介绍  基本模型  数据类型  语句  改进  特性
  • Hadoop 前言介绍 例子 MR 框架 工作案例
  • hadoop 分布式海量数据处理工具 成本低 服务器的成本低了,但不能忽略其他资源成本 可扩展性 加服务器
  • 为什么使用 hadoop 秦始皇统一中国的外交政策“远交近攻 , 各个击破” 分而治之—分治算法
  • hadoop 计算模型 MapReduce 基于“分而治之”的思想,将计 算任务抽象成 map 和 reduce 两个计算过程
  • hadoop 例子 -splitDate 将数据日志按日期切割存储
  • hadoop 例子 -splitDate Map 端操作 public void map(LongWritable key, Text value,) { String str_key = new String(value.getBytes(), 0, value.getLength(), "UTF8").split(“t”)[t_when_index].split(“ “)[0]; out_key.set(str_key); out_value.set(t_value); output.collect(out_key, out_value); } Reduce 端操作 public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) { out = mos.getCollector(name, tmp + name, reporter); while(values.hasNext()){ out.collect(NullWritable.get(), values.next()); } }
  • MR 框架 MAP 类 Reduce 类 Run 参数
  • Map 类public class MapReduce extends Configured implements tool { public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> { // 初始化 public void configure(JobConf job) // 自定义函数 public void udf() public void map(LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) // 结束操作 public void close() }
  • Reduce 类public class Reduce extends MapReduceBase implements Reducer <Text, Text, Text, Text> { // 初始化 public void configure(JobConf job) // 自定义函数 public void udf() public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) // 结束操作 public void close() }
  • Run 参数 public int run(String[] args) throws Exception { /* 指定输入 / 输出文件路径; 文件对应的 map 函数、 reduce 函数;输入 / 输出格式 */ } /*tool 接口和 GenericOptionsParser 处理命令行选项 public static void main(String[] args) { int res = ToolRunner.run(new Configuration(), new DtwTokenJoin(), args); System.exit(res); }}
  • 工作案例 - 文件切割 需求情景 程序后台将所有数据 log 打包成一个日志文件, 数据处理时需要切分不同的数据 log ,然后进行 对应的处理和计算
  • 工作案例 - 文件切割• 解决方法 import org.apache.hadoop.mapred.lib.MultipleOutputs
  • 工作案例 - 文件编码 需求情景 程序数据 log 为 gbk 编码, hadoop 默认文本 utf-8 编码,如何兼容
  • 工作案例 - 文件编码• 解决方法 1 、文件 put 进 hadoop 之前做编码转换 iconv –f gbk –t utf-8 inputFile 2 、自定义 outputFormat 类
  • 工作案例 - 数据解析 字段分隔符 csv 文件, t 分隔符文件,空格分隔符文 件 map.output.field.separator reduce.output.field.separator
  • 工作案例 - 数据解析 二进制文件 二进制编码转成文本编码 hex 进制 base64 uuencode
  • 工作案例 - 数据解析 自定义 InputSplit 和 RecordReader 数据格式是演变的 归根到底,无论数据格式如何,需要能够解析对 应记录和字段
  • 工作案例 - 配置文件 需求情景 需要引入经常修改变化的策划配置表单
  • 工作案例 - 配置文件• 解决方法 import org.apache.hadoop.filecache.DistributedCache //job 配置参数 public int run(String[] args) throws Exception { DistributedCache.addCacheFile(new Path(args[+ +i]).toUri(), conf); } // 读取配置文件 config_files = DistributedCache.getLocalCacheFiles(job); BufferedReader fis = new BufferedReader(new FileReader(config_file.toString()));
  • 万众期待的时刻到了 课间休息十分钟
  • hive 前言介绍 基本模型 数据类型 语句 改进 特性
  • hive 结构化数据文件映射
  • 为什么使用 hive 提高效率。 一行 hive 语句实现的功能,可能需要几十行 hadoop 语句实现 方便分析人员
  • hive 基本模型 物理数据模型 wh: /wh Table: /wh/pvs Partition: /wh/pvs/ds=20090801/ctry=CA Buckets:/wh/pvs/ds=20090801/ctry=US/part-00000 逻辑数据模型 External Table 版本迭代 0.5 0.7 0.8
  • Hive 基本数据类型 Intergers Boolean Floating String
  • Hive 复杂数据类型 Structs Array Maps Timestamp support in version 0.8 Binary support in version 0.8
  • 数据类型之题外话 结构化数据与非结构化数据
  • Hive 语句 QUERIES SELECT …. FROM …..WHERE…… GROUP BY….ORDER BY….LIMIT JOIN DDL database 、 table(location 、 Partitions) funciton 、 index 、 view DML Loading files into tables Inserting data into Hive Tables from queries Writing data into filesystem from queries
  • Hive 改进 Not support Multi-distinct bash: cat t_mall_buy.txt | awk ‘{print uid}’ | sort | uniq | wc –l cat t_mall_buy.txt | awk ‘{print urs}’ | sort | uniq | wc –l mysql : SELECT count(distinct uid), count(distint urs) FROM t_mall_buy hive: SELECT count(distinct uid) FROM t_mall_buy SELECT count(distinct urs) FROM t_mall_buy 补丁支持 https://issues.apache.org/jira/browse/HIVE-287 https://issues.apache.org/jira/browse/HIVE-474
  • Hive 改进 不支持 exists in 子查询 support NOT IN and NOT LIKE syntax in version 0.8 Not support Index Not available until 0.7 release Not support Insert into INSERT INTO syntax is only available starting in version 0.8
  • Hive 特性 Multi Table/File Inserts FROM pv_users INSERT OVERWRITE TABLE pv_gender_sum SELECT pv_users.gender, INSERT OVERWRITE DIRECTORY /user/data/tmp/pv_age_sum SELECT pv_users.age Custom map/reduce scripts transform(hostnum, res_type, event_type, direct, counts) using python ods_wh_economic_money_week.py‘ as (hostnum,res_type,output_type,output_name,counts,isoutput) UDFS & UDAFS 尽量使用 UDF 而不是 transform
  • The End