15. AppServer
AppServer
Fluentd
Our System Summary
Web + Application Servers
Fluentd
Fluentd Aggregators
Hadoop
Hadoop Cluster(CDH)
NameNode HA
JobTracker HA
Hive, Impala, Sqoop
Hue
Databases
Oracle or MySQL
Our own applications
with WebHDFS
with Sqoop
RDBMS
RDBMS
BI
AppServer
Tools
Batch
Cassandra
Redis
RDBMS
MQ
16. AppServer
AppServer
Fluentd
fluentd
Web + Application Servers
Fluentd
Fluentd Aggregators
Hadoop
Hadoop Cluster
NameNode HA
JobTracker HA
Hive, Impala, Sqoop
Hue
Database
Oracle or MySQL
Our own applications
with WebHDFS
with Sqoop
RDBMS
RDBMS
BI
AppServer
Tools
Batch
Cassandra
Redis
RDBMS
MQ
17. fluentd Configuration
• tail Input Plugin
• forward Output Plugin
- Multiple ports of active nodes
- One is “standby”
Fluentd
AppServer
Fluentd
Aggregator
Forward port 2422X, 2422Y
One is standby
Fluentd
Fluentd
A pair of active and standby x 2 set ( 4 processes )
Multiprocess port 2422X, 2422Y
Sender
Aggregator
• Multiprocess Input Plugin
• fluent-plugin-parser
• WebHDFS Output Plugin
td-agent ( 1 or 2 ) Sender
Hadoop
with WebHDFS
• fluent-plugin-tail-asis
• fluent-plugin-config-expander
• fluent-plugin-file-alternative
Other plugins
hdfs:///access_log/dt=%Y%m%d/th=%Y%m%d%H
Peak about 1100 lines / sec・process ( 7 billion lines a month )
Active
Standby
1 set
18. fluentd Setting
Ex ) Sender Ex ) Aggregator
<source>
type tail
format none
path /var/log/httpd/access_log
pos_file /var/tmp/td-agent/access_log.pos
tag raw.access.log.${hostname}
</source>
<match **>
type forward
...
<server>
host aggregator1
port 24224
...
</server>
<server>
host aggregator1
port 24225
...
</server>
<server>
host aggregator2
port 24224
standby
...
</server>
<server>
host aggregator2
port 24225
standby
...
</server>
...
</match>
<source>
type forward
port 24224
</source>
<match raw.access.log.*>
type parser
format apache
key_name message
remove_prefix raw
...
</match>
<match access.log.*>
type webhdfs
namenode namenode1:50070
standby_namenode namenode2:50070
path /access_log/dt=%Y%m%d/th=%Y%m%d%H/${hostname}-24224.log.%Y%m%d%H
...
retry_limit 14
max_retry_wait xx
...
<secondary>
type file_alternative
...
</secondary>
</match>
...は省略 ...は省略
なるべくロストしたくない!
サーバーリソースや再送時間を考慮し
ながら調整
forward
tail
forward
parser
webhdfs
19. fluentd -> HDFS ( Hive + Impala )
Hadoop
CREATE EXTERNAL TABLE access_log (
...
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY 't'
PARTITIONED BY (dt INT, th INT)
LOCATION ‘/log/access_log’;
1 ) 外部テーブルで作成 ( Hiveで実行した場合は,impalaから見えるようにinvalidate metadata が必要 )
2 ) 前もってPartitionを作成
ALTER TABLE access_log IF NOT EXISTS PARTITION (dt=20151006, th=2015100619)
LOCATION ‘/log/access_log/‘;
3 ) fluentdからHDFSへ
/log/access_log/dt=20151006/th=2015100619/
access_log.web1.2015100619
SELECT dt, th, count(*)
FROM access_log
WHERE dt = 20151006
GROUP BY dt, th
4 ) クエリ実行
REFRESH access_log;
SELECT dt, th, count(*)
FROM access_log
WHERE dt = 20151006
GROUP BY dt, th
Archive Daily
SequenceFile Compress+
TextFile Impala
Hive
Parquet or
20. AppServer
AppServer
Fluentd
Hadoop (CDH) Cluster
Web + Application Servers
Fluentd
Fluentd Aggregators
Hadoop
Hadoop Cluster(CDH)
NameNode HA
JobTracker HA
Hive, Impala, Sqoop
Hue
Database
Oracle or MySQL
Our own applications
with WebHDFS
with Sqoop
RDBMS
RDBMS
BI
AppServer
Tools
Batch
Cassandra
Redis
RDBMS
MQ
21. Hadoop Cluster ( CDH )
StateStore
Catalogd
Hue
Master Nodes
Metastore
NameNode Standby NameNode JobTracker
Hive Server2
ZooKeeper ZooKeeper ZooKeeper
JobTracker Standby
JournalNode
JournalNode
JournalNode
impalad
DataNode
...
impalad impalad impalad
DataNode DataNode DataNode
TaskTracker TaskTracker TaskTracker TaskTracker
Slave Nodes
Mem xxGB
HDFS HA JobTracker HA
Xeon E5-2640
CPU 8 Cores HT
Memory 128 GB
SAS 1TB 7.2 krpm x N
22. What is Impala?
• 並列処理(MPP)のSQLクエリエンジン
• HadoopディストリビューションベンダーのCloudera社に
よって開発(OSS)
• フロントエンドはJava,バックエンドはC++で開発
• インタラクティブな分析を実行できる
• HDFS,HBase,( Amazon S3 ※ )のデータを扱える
• Hiveと同じMetastore,SQL文法(一部制限あり)を使う
など
※ CDH5.4のドキュメントでは,”is not currently supported or recommended for production use”となっている。
http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/impala_s3.html
23. SQL Differences
Between Hive and Impala
Hive Impala
Data
Types
TINYINT, SMALLINT, INT
BIGINT, FLOAT, DOUBLE, DECIMAL
TINYINT, SMALLINT, INT
BIGINT, FLOAT, DOUBLE, DECIMAL
TIMESTAMP, DATE TIMESTAMP
STRING, VARCHAR, CHAR STRING, VARCHAR, CHAR
BOOLEAN, BINARY BOOLEAN
arrays, maps, structs, union ー
XML and JSON
Functions (built-in)
⚪ ー
TRANSFORM ⚪ ー
Custom FileFormat (※)
and Serde
⚪ ー
UDF / UDAF / UDTF ⚪ / ⚪ / ⚪ ⚪ / ⚪ / ー
Lateral Views ⚪ ー
内容は,本資料作成時の最新の公式ドキュメントベースで,その一部を引用掲載しています。(HiveQL Features not Available in Impala)
詳細は,公式ドキュメントを参照してください。
※ 主要なFileFormatは,Impalaでもサポートされている(Text,Sequence,Avro,Parquet,RCFile)
24. Think between Hive and Impala
• Impalaでは,HiveのUD(A)F関数が使える( via JNI )
-> ただし,Impalaでサポートしていないデータ型やテーブル生成
するUDTF関数は使えない
• Impalaでは,Hiveのようなget_json_object関数やJSONSerde
はない( fluentd からJSON形式でHDFSへ格納して即クエリ実行したい )
-> ImpalaとHiveで共通で扱いたいデータは,Impalaでサポートし
ているデータ形式で格納
-> もしくはJSON形式から変換して別テーブルを作成
もっといいやり方があったら教えてください。。
26. AppServer
AppServer
Fluentd
Hadoop <-> RDBMS
Web + Application Servers
Fluentd
Fluentd Aggregators
Hadoop
Hadoop Cluster(CDH)
NameNode HA
JobTracker HA
Hive, Impala, Sqoop
Hue
Databases
Oracle or MySQL
Our own applications
with WebHDFS
with Sqoop
RDBMS
RDBMS
BI
AppServer
Tools
Batch
Cassandra
Redis
RDBMS
MQ
27. What is Sqoop?
• HDFSとRDBMS間のデータの転送を行なうツール
• HDFSとRDBMS間のデータ転送は,MapReduce Jobで分散実行
される
map map map
RDBMS
HDFS
MapReduce Job
Compile and Create .jar
$ sqoop import --connect jdbc:mysql//dbhost/mydb
--username hadoop --password xxxx --table BANNER
BANNER.jar
Process
metadata
sqoop client
BANNER.java
Generate Record
Container Class
import export
Launch MapReduce
Job
( extend SqoopRecord )
with JDBC or other tools
28. RDBMS->HDFS ( Sqoop Import )
Ex ) Import from RDBMS to Hive
map map map
RDBMS
$ sqoop import -m 3 --connect jdbc:mysql//dbhost/mydb --username hadoop --password xxxx
--table BANNER --hive-import [--direct]
• RDBMSからHDFS(Hiveも可)へのデータ転送
• HiveやImpalaで連携が必要なテーブルのみをインポート
• --directオプションで,RDBMS固有のツールを使用
(ex:mysql => mysqldump)
• 実行されるSQLをよく確認する(インポート対象先の
テーブルのインデックスなど)
ID (PK) NAME
1 Hadoop
… …
1000 Hive
… …
2000 Sqoop
… …
3000 Impala
SELECT ID, NAME FROM BANNER WHERE id >= 1 AND id < 1001
BANNER
MapReduce Job
Split
SELECT ID, NAME FROM BANNER WHERE id >= 1001 AND id < 2001
SELECT ID, NAME FROM BANNER WHERE id >= 2001 AND id <= 3000
Make splits using the result of “SELECT MIN(`id`), MAX(`id`) FROM `banner`” and
the number of maps
create table if not exists dbname.banner (...);
load data inpath ...;
HiveImport
HDFS
Detect primary key -> id
29. HDFS->RDBMS ( Sqoop Export )
Ex ) Export from Hive to RDBMS
$ sqoop export -m 3 --connect jdbc:mysql//dbhost/mydb --username hadoop --password xxxx
--table BANNER --export-dir /user/hive/warehouse/banner
[--staging-table __BANNER --clear-staging-table --direct]
map map map
• HDFS(Hiveも可)からRDBMSへのデータ転送
• HiveやImpalaでの集計結果をRDBMSへエクスポート
• 単一のトランザクションの共有ではないので,ジョブ
の途中で一部のデータがアプリケーションから見える
• --staging-tableオプションで,ステージングテー
ブルを利用可能
MapReduce Job
RDBMS
HDFS
ID (PK) NAME
1 Hadoop
… …
1000 Hive
… …
__BANNER ( staging )
ID (PK) NAME
1 Hadoop
... ...
BANNER
INSERT INTO BANNER ( SELECT * FROM __BANNER )
insert... insert... insert...
With ‘--staging-table’ option
30. Sqoop Column Type Mapping
• デフォルトのマッピングを変更したい場合は,--map-column-java
や--map-column-hiveで調整
SQL
Types
Java
Hive
--map-column-java <mapping>
The class extends SqoopRecord
CREATE TABLE IF NOT EXISTS banner (
id bigint,
...
)
ROW FORMAT DELIMITED ...
Ex) --map-column-hive id=bigint
public void readFields(ResultSet __dbResults)
throws SQLException {
this.id = JdbcWritableBridge.readLong(1, __dbResults);
...
Ex) --map-column-java id=Long
--map-column-hive <mapping>
31. AppServer
AppServer
Fluentd
Our System Summary
Web + Application Servers
Fluentd
Fluentd Aggregators
Hadoop
Hadoop Cluster(CDH)
NameNode HA
JobTracker HA
Hive, Impala, Sqoop
Hue
Databases
Oracle or MySQL
Our own applications
with WebHDFS
with Sqoop
RDBMS
RDBMS
BI
AppServer
Tools
Batch
Cassandra
Redis
RDBMS
MQ