チュートリアルの概要
このチュートリアルでは、ある企業の注文データやサイトへのアクセスログなどをもとに、売上を分析したり、バスケット分析を行ったりします。
シナリオの詳細は(英語ですが)原文をご覧ください。ただし、読まなくてもチュートリアルを行うことはできます。
チュートリアル1:Sqoopを使って、MySQLからデータをHadoopにインポートする
まず、DBに収められているマスターデータをHadoopに投入します。以下のコマンドを実行してください。
$ sqoop import-all-tables \ -m 1 \ --connect jdbc:mysql://quickstart.cloudera:3306/retail_db \ --username=retail_dba \ --password=cloudera \ --compression-codec=snappy \ --as-avrodatafile \ --warehouse-dir=/user/hive/warehouse
以下のコマンドで、データが正しくインポートされたことを確認できます。
$ hdfs dfs -ls /user/hive/warehouse $ hdfs dfs -ls /user/hive/warehouse/categories/
ローカルディレクトリの/home/clouderaには、*.avscという拡張子のファイルがいくつかあります。これは、Avroというファイルフォーマットのスキーマ定義ファイルですが、今は詳細を理解しなくても大丈夫です。
このデータをすべてHadoop上にロードします。
$ sudo -u hdfs hdfs dfs -mkdir /user/examples $ sudo -u hdfs hdfs dfs -chmod +rw /user/examples $ hdfs dfs -copyFromLocal ~/*.avsc /user/examples/
次に、このスキーマ定義ファイルをもとに、Hive上でテーブルを作成します。まず、HiveServer2にアクセスします。
$ beeline -u jdbc:hive2://localhost:10000 -n cloudera -p cloudera -d org.apache.hive.jdbc.HiveDriver
次に、以下のクエリをコピー&ペーストしてテーブルを作成していきます。
CREATE EXTERNAL TABLE categories ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' LOCATION 'hdfs:///user/hive/warehouse/categories' TBLPROPERTIES ('avro.schema.url'='hdfs://quickstart.cloudera/user/examples/sqoop_import_categories.avsc'); CREATE EXTERNAL TABLE customers ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' LOCATION 'hdfs:///user/hive/warehouse/customers' TBLPROPERTIES ('avro.schema.url'='hdfs://quickstart.cloudera/user/examples/sqoop_import_customers.avsc'); CREATE EXTERNAL TABLE departments ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' LOCATION 'hdfs:///user/hive/warehouse/departments' TBLPROPERTIES ('avro.schema.url'='hdfs://quickstart.cloudera/user/examples/sqoop_import_departments.avsc'); CREATE EXTERNAL TABLE orders ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' LOCATION 'hdfs:///user/hive/warehouse/orders' TBLPROPERTIES ('avro.schema.url'='hdfs://quickstart.cloudera/user/examples/sqoop_import_orders.avsc'); CREATE EXTERNAL TABLE order_items ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' LOCATION 'hdfs:///user/hive/warehouse/order_items' TBLPROPERTIES ('avro.schema.url'='hdfs://quickstart.cloudera/user/examples/sqoop_import_order_items.avsc'); CREATE EXTERNAL TABLE products ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' LOCATION 'hdfs:///user/hive/warehouse/products' TBLPROPERTIES ('avro.schema.url'='hdfs://quickstart.cloudera/user/examples/sqoop_import_products.avsc');
上記のクエリの詳細は『プログラミングHive』のp.229を参照してください。
クエリをすべて実行したら、以下のコマンドを使って正常にテーブルが作成されたかどうかを確認します。
show tables;
確認が終わったら、hiveを終了します。
!quit
いかがでしたか?
次回は、Impalaを使用して投入したデータを高速に分析し、Hiveを使用してアクセスログの分析を行います。お楽しみに!