This website requires JavaScript.

在Hadoop中分析数据(一)

本文主要讲解在Hadoop中进行典型的存储及获取模式,需要各位对Hadoop有一定了解。本篇将用kite SDK导入csv,json 数据。

一、样例数据获取

我们选择20M的MovieLens数据

wget http://files.grouplens.org/datasets/movielens/ml-20m.zip unzip ml-20m.zip
我们可以预览下数据,我们主要用到这两张表
head ml-20m/movies.csv head ml-20m/ratings.csv

二、使用Kite SDK导入数据

Kite is a high-level data layer for Hadoop. It is an API and a set of tools that speed up development. You configure how Kite stores your data in Hadoop, instead of building and maintaining that infrastructure yourself.

1.生成schema

kite-dataset csv-schema movies.csv --record-name Movie
指定字段不能为空

虽然默认生成的schema可用,单并非最优,比如 ratings.csv  movieId,userid是肯定存在的,如果我们用spark做操作,就不用去判断数据是否为空. 我们可以用以下命令生成schema

kite-dataset csv-schema ratings.csv --record-name Rating --require movieId,userId,timestamp

2.生成schema并存储

kite-dataset csv-schema movies.csv --record-name Movie -o movie.avsc
kite-dataset csv-schema ratings.csv --record-name Rating --require movieId,userId,timestamp -o rating.avsc
手动修改rating.avsc 其中rating的类型我们改为float ,生成double类型要占用8个字节,而我们评分不需要这么大的范围

建立分区

kite-dataset partition-config --schema rating.avsc timestamp:year timestamp:month kite-dataset partition-config --schema rating.avsc timestamp:year timestamp:month -o year-month.json

3.建立数据集

kite-dataset create movies --schema movie.avsc
分区数据集
kite-dataset create ratings --schema rating.avsc --partition-by year-month.json --format parquet
关于parquet 可以参考 [深入分析Parquet列式存储格式](http://www.infoq.com/cn/articles/in-depth-analysis-of-parquet-column-storage-format)

4.更新数据集

kite-dataset update movies –schema movie.avsc

5.查看数据集

kite-dataset info movies

6.导入数据

kite-dataset csv-import movies.csv movies
通过以上步骤,数据就导入到HBase里面了 ,linux下的工具真多,,,
hadoop fs -ls /user/hive/warehouse/movies
hadoop fs -cat /user/hive/warehouse/movies/.metadata/schemas/1.avsc

hive> describe formatted movies;

三、导入Json数据

1. 下载样本数据

我们可以从jsonstudio下载数据

wget http://jsonstudio.com/wp-content/uploads/2014/02/zips.zip unzip zips.zip

2. 生成schema,数据集,并导入数据

kite-dataset json-schema zips.json --record-name Zipcode
kite-dataset json-schema zips.json --record-name Zipcode -o zip.avsc
kite-dataset create zips --schema zip.avsc 
kite-dataset json-import zips.json zips
kite-dataset show zips

四、拆分ratings.csv并且格式化然后用作分区导入

1.拆分并格式化

#!/bin/bash

# add the CSV header to both files
head -n 1 ratings.csv > ratings_1.csv
head -n 1 ratings.csv > ratings_2.csv

# output the first 10,000,000 rows to ratings_1.csv
# this includes the header, and uses tail to remove it
head -n 10000001 ratings.csv | tail -n +2 | awk '{print $1 "000"}' >> ratings_1.csv

# output the rest of the file to ratings_2.csv
# this starts at the line after the ratings_1 file stopped
tail -n +10000002 ratings.csv | awk '{print $1 "000"}' >> ratings_2.csv
这里注意,默认下载的ratings.csv换行符号可能不一样,导致以上语句失败,可以用sed -e 's/\r/000\r/g'

2. 将ratings1和2 放到Hadoop中然后导入

这次改变一下形式..

hadoop fs -copyFromLocal ratings_1.csv hadoop fs -copyFromLocal ratings_2.csv hadoop fs -ls kite-dataset csv-import hdfs:/user/bihell ratings

五、查询数据

1. 使用impala

连接

impala-shell -i localhost:21000
更新元数据
invalidate metadata

2.使用kite-dataset

默认显示十行

kite-dataset show movies

0条评论
avatar