
# MapReduce访问多组件样例程序开发思路
#### 场景说明
该样例以MapReduce访问HDFS、HBase、Hive为例，介绍如何编写MapReduce作业访问多个服务组件。帮助用户理解认证、配置加载等关键使用方式。
该样例逻辑过程如下：
以HDFS文本文件为输入数据：
log1.txt：数据输入文件
```
YuanJing,male,10
GuoYijun,male,5
```
Map阶段：
1. 获取输入数据的一行并提取姓名信息。
2. 查询HBase一条数据。
3. 查询Hive一条数据。
4. 将HBase查询结果与Hive查询结果进行拼接作为Map输出。
Reduce阶段：
1. 获取Map输出中的最后一条数据。
2. 将数据输出到HBase。
3. 将数据保存到HDFS。
 
#### 数据规划
1. 创建HDFS数据文件。
   1. 在Linux系统上新建文本文件，将log1.txt中的内容复制保存到data.txt。
   
   2. 在HDFS上创建一个文件夹"/tmp/examples/multi-components/mapreduce/input/"，并上传data.txt到此目录，命令如下：
      1. 登录HDFS客户端。 **cd** *客户端安装目录*
         **source bigdata_env**
         
      
      2. 在Linux系统HDFS客户端使用命令*hdfs dfs -mkdir -p* */tmp/examples/multi-components/mapreduce/input/*
      
      3. 在Linux系统HDFS客户端使用命令*hdfs dfs -put* *data.txt /tmp/examples/multi-components/mapreduce/input/*
       
    
2. 创建HBase表并插入数据。
   1. 在Linux系统HBase客户端执行**source bigdata_env** ，并使用命令*hbase shell*。
   
   2. 在HBase shell交互窗口创建数据表table1，该表有一个列族cf，使用命令*create 'table1', 'cf'*。
   
   3. 插入一条rowkey为1、列名为cid、数据值为123的数据，使用命令*put 'table1', '1', 'cf:cid', '123'*。
   
   4. 执行命令*quit*退出。
    
3. 创建Hive表并载入数据。
   1. 在Linux系统Hive客户端使用命令*beeline*。
   
   2. 在Hive beeline交互窗口创建数据表person，该表有3个字段：name/gender/stayTime，使用命令*CREATE TABLE person(name STRING, gender STRING, stayTime INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored as textfile;*。
   
   3. 在Hive beeline交互窗口加载数据文件，*LOAD DATA INPATH* *'/tmp/examples/multi-components/mapreduce/input/'* *OVERWRITE INTO TABLE person;*。
   
   4. 执行命令*!q*退出。
    
4. 由于Hive加载数据将HDFS对应数据目录清空，所以需再次执行[1]。
 
