Cloudera QuickStart VMs(CDH)でHadoop on Windows - Part-4

#はじめに
今回はUnstructuredデータを取り扱ってみます。

内容は以下より。
https://www.cloudera.com/developers/get-started-with-hadoop-tutorial/exercise-2.html

Part-1[はこちら](https://qiita.com/tworks55/items/341bc626dd4c45f30aee)
Part-2[はこちら](https://qiita.com/tworks55/items/62efe9f3af176d78efa1)
Part-3[はこちら](https://qiita.com/tworks55/items/ea552f51b308833efeaf)

#1. データ投入

データはSandboxに準備してありますので、以下のコマンドを実行します。
以下は、HDFSにディレクトリを作成し、ローカルファイルをHDFSにコピーし、最後に投入したデータを確認しています。

> sudo -u hdfs hadoop fs -mkdir /user/hive/warehouse/original_access_logs
> sudo -u hdfs hadoop fs -copyFromLocal /opt/examples/log_files/access.log.2 /user/hive/warehouse/original_access_logs
> hadoop fs -ls /user/hive/warehouse/original_access_logs

以下、結果です。

```
[cloudera@quickstart ~]$ sudo -u hdfs hadoop fs -mkdir /user/hive/warehouse/original_access_logs
[cloudera@quickstart ~]$ sudo -u hdfs hadoop fs -copyFromLocal /opt/examples/log_files/access.log.2 /user/hive/warehouse/original_access_logs
[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/original_access_logs
Found 1 items
-rw-r--r--   1 hdfs supergroup   39593868 2018-04-01 06:32 /user/hive/warehouse/original_access_logs/access.log.2

```

#2. Hiveクエリエディタでテーブルの作成
Hueにログインし、Hiveクエリエディタにアクセスします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/24b51e33-8ac1-58b6-2420-346d2c377703.png)

```
CREATE EXTERNAL TABLE intermediate_access_logs (
    ip STRING,
    date STRING,
    method STRING,
    url STRING,
    http_version STRING,
    code1 STRING,
    code2 STRING,
    dash STRING,
    user_agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
    'input.regex' = '([^ ]*) - - \\[([^\\]]*)\\] "([^\ ]*) ([^\ ]*) ([^\ ]*)" (\\d*) (\\d*) "([^"]*)" "([^"]*)"',
    'output.format.string' = "%1$$s %2$$s %3$$s %4$$s %5$$s %6$$s %7$$s %8$$s %9$$s")
LOCATION '/user/hive/warehouse/original_access_logs';

CREATE EXTERNAL TABLE tokenized_access_logs (
    ip STRING,
    date STRING,
    method STRING,
    url STRING,
    http_version STRING,
    code1 STRING,
    code2 STRING,
    dash STRING,
    user_agent STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/hive/warehouse/tokenized_access_logs';

ADD JAR /usr/lib/hive/lib/hive-contrib.jar;

INSERT OVERWRITE TABLE tokenized_access_logs SELECT * FROM intermediate_access_logs;
```
チュートリアルのページには以下のように記載がありますがエラーになります。
>ADD JAR {{lib_dir}}/hive/lib/hive-contrib.jar;

絶対パスに変更し実行します。
>ADD JAR /usr/lib/hive/lib/hive-contrib.jar;

以下のようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/9bd8eaa2-462d-976d-db41-5b453175ed3c.png)

#2. Query
チュートリアルでは
>invalidate metadata;
>select count(*),url from tokenized_access_logs
>where url like '%\/product\/%'
>group by url order by count(*) desc;

のようになっていますが、以下のようなエラーが発生します。
>Error while compiling statement: FAILED: SemanticException [Error 10128]: line 3:22 Not yet supported place for UDAF 'count'

以下のように修正してから実行します。
>select count(*) as cnt,url from tokenized_access_logs
>where url like '%\/product\/%'
>group by url order by cnt;

以下のように表示されれば成功です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/ba70d791-b4f7-1302-39a7-cbd918073c82.png)

#4. 終わりに
Hiveの雰囲気はわかってきましたが、CDHにはいろいろ機能があるので覚えることがたくさんありますね。

Part-1[はこちら](https://qiita.com/tworks55/items/341bc626dd4c45f30aee)
Part-2[はこちら](https://qiita.com/tworks55/items/62efe9f3af176d78efa1)
Part-3[はこちら](https://qiita.com/tworks55/items/ea552f51b308833efeaf)