CDH(Cloudera's Distribution, including Apache Hadoop)は、業界で流行りのHadoopディストリビューションです。ここでは、CDH環境において、HDFSプロトコルを使用してCOS(Cloud Object Storage)バケットへアクセスし、ビッグデータの計算とストレージの分離を実現し、フレキシブルかつ低コストのビッグデータソリューションを提供する方法についてご説明します。
注意:HDFSプロトコルを使用してCOSバケットへアクセスし、最初にメタデータアクセラレーション機能をオンにする必要があります。
現在ビッグデータコンポーネントに対するCOSのサポート状況は次のとおりです。
コンポーネント名 | CHDFSビッグデータコンポーネントのサポート状況 | サービスコンポーネントの再起動の要否 |
---|---|---|
Yarn | サポート | NodeManagerの再起動 |
Yarn | サポート | NodeManagerの再起動 |
Hive | サポート | HiveServerおよびHiveMetastoreの再起動 |
Spark | サポート | NodeManagerの再起動 |
Sqoop | サポート | NodeManagerの再起動 |
Presto | サポート | HiveServerおよびHiveMetastoreとPrestoの再起動 |
Flink | サポート | いいえ |
Impala | サポート | いいえ |
EMR | サポート | いいえ |
セルフビルドコンポーネント | フォローアップサポート | なし |
HBase | 推奨しない | なし |
依存するコンポーネントのバージョンは次のとおりです。
<property>
<name>fs.AbstractFileSystem.ofs.impl</name>
<value>com.qcloud.chdfs.fs.CHDFSDelegateFSAdapter</value>
</property>
<property>
<name>fs.ofs.impl</name>
<value>com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapter</value>
</property>
<!--ローカルcacheの一時ディレクトリ。データの読み取りと書き込みの場合、メモリcacheが不足すると、ローカルディスクに書き込まれます。このパスが存在しない場合は、自動的に作成されます-->
<property>
<name>fs.ofs.tmp.cache.dir</name>
<value>/data/emr/hdfs/tmp/chdfs/</value>
</property>
<!--appId-->
<property>
<name>fs.ofs.user.appid</name>
<value>1250000000</value>
</property>
以下は、入力必須の設定項目です(core-site.xmlに追加する必要があります)。その他の設定については、コンピューティングクラスターにおけるCOSバケットのマウントをご参照ください。
構成アイテム | 値 | 意味 |
---|---|---|
fs.ofs.user.appid | 1250000000 | ユーザーappid |
fs.ofs.tmp.cache.dir | /data/emr/hdfs/tmp/chdfs/ | ローカルcacheの一時ディレクトリ |
fs.ofs.impl | com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapter | chdfsのFileSystemに対する実装クラスは、com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapterに固定されます |
fs.AbstractFileSystem.ofs.impl | com.qcloud.chdfs.fs.CHDFSDelegateFSAdapter | chdfsのAbstractFileSystemに対する実装クラスは、com.qcloud.chdfs.fs.CHDFSDelegateFSAdapterに固定されます |
cp chdfs_hadoop_plugin_network-2.0.jar /opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hadoop-hdfs/
注意:クラスター内の各マシンは、SDKパッケージを同じ場所に配置する必要があります。
Hadoop Distcpツールを使用して、CDH HDFSデータをCOSバケットに移行します。詳細は、HadoopファイルシステムとCOS間のデータ移行をご参照ください。
操作手順
事例
以下に、Hadoop標準テストでのTeraGenとTeraSortの例を示します。
hadoop jar ./hadoop-mapreduce-examples-2.7.3.jar teragen -Dmapred.map.tasks=4 1099 ofs://examplebucket-1250000000/teragen_5/
hadoop jar ./hadoop-mapreduce-examples-2.7.3.jar terasort -Dmapred.map.tasks=4 ofs://examplebucket-1250000000/teragen_5/ ofs://examplebucket-1250000000/result14
説明:
ofs://schema
の後ろを、ユーザーCHDFSのマウントポイントパスに置き換えてください。
操作手順
事例
例えば、あるユーザーの実際の業務の照会では、Hiveコマンドラインを実行してLocationを1つ作成し、CHDFSのパーティションテーブルとします。
CREATE TABLE `report.report_o2o_pid_credit_detail_grant_daily`(
`cal_dt` string,
`change_time` string,
`merchant_id` bigint,
`store_id` bigint,
`store_name` string,
`wid` string,
`member_id` bigint,
`meber_card` string,
`nickname` string,
`name` string,
`gender` string,
`birthday` string,
`city` string,
`mobile` string,
`credit_grant` bigint,
`change_reason` string,
`available_point` bigint,
`date_time` string,
`channel_type` bigint,
`point_flow_id` bigint)
PARTITIONED BY (
`topicdate` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
'ofs://examplebucket-1250000000/user/hive/warehouse/report.db/report_o2o_pid_credit_detail_grant_daily'
TBLPROPERTIES (
'last_modified_by'='work',
'last_modified_time'='1589310646',
'transient_lastDdlTime'='1589310646')
SQL照会を実行します。
select count(1) from report.report_o2o_pid_credit_detail_grant_daily;
観察の結果は次のとおりです。
Tezエンジンは、COSのクライアントインストールパッケージをTezの圧縮パッケージにインポートする必要があります。以下は、apache-tez.0.8.5を例として説明しています。
操作手順
操作手順
事例
例として、Spark example word countテストの実施を取り上げます。
spark-submit --class org.apache.spark.examples.JavaWordCount --executor-memory 4g --executor-cores 4 ./spark-examples-1.6.0-cdh5.16.1-hadoop2.6.0-cdh5.16.1.jar ofs://examplebucket-1250000000/wordcount
実行結果は次のとおりです。
操作手順
事例
例として、MYSQLテーブルのCOSへのエクスポートを取り上げます。リレーショナルデータベースとHDFSのインポート・エクスポートドキュメントを参照し、テストを実施してください。
sqoop import --connect "jdbc:mysql://IP:PORT/mysql" --table sqoop_test --username root --password 123 --target-dir ofs://examplebucket-1250000000/sqoop_test
実行結果は次のとおりです。
操作手順
事例
例として、HIVEによってLocationをCOSとして作成したテーブルの照会を取り上げます。
select * from chdfs_test_table where bucket is not null limit 1;
説明:chdfs_test_tableはlocationがofs schemeのテーブルです。
確認の結果は次のとおりです。
この記事はお役に立ちましたか?