介绍
通过在CDH大数据计算集群中集成AWS S3(Simple Storage Service)的功能,可以方便将存放于AWS S3中的数据在Hive中进行分析,也方便将其它数据源的数据(如ES、MYSQL等),通过Hive写入到S3然后通过其它的数据仓库和BI工具进行分析和展示,其功能包括:
- S3可以作为Impala表的存储
- S3可以作为HDFS和Hive / Impala复制以及群集存储的源或目标
- 启用Cloudera Navigator从Amazon S3存储中提取元数据
- 使用Hue浏览S3数据
- 通过Hive从S3中读取数据进行分析,并可以通过Hive做为中转,将S3和其它的数据源进行数据交换
开启的操作步骤
在CDH中开启操作S3的功能,需要执行以下的操作:
1.在AWS中开通S3的功能,并创建相应的桶;
2.在AWS的账号管理中找到对应的Access Key和Secure Access Key,查看路径为:
AWS管理控制台右上脚的登陆的账号名称 -> 点击下拉箭头选择My Security Credentials -> 左右菜单中的Users -> 点选对应的用户 -> 切换到用户的Security Credentials,该Tab页下方的Access keys就是需要的Key。
每个账号可以有两个Access Key,用户的Secure Access Key需要用户自己保存,不能够通过管理界面查看,一旦用户遗忘,就只能够删除旧的Access Key然后才创建新的,这个需要注意。
3.在CDH中配置AWS Credentials,只有管理员才能够操作,具体操作步骤如下:
1)进入CDH的管理控制台,选择顶部菜单“Administrator -> External Accounts”;
2)在“AWS Credentials” Tab页下,点击“Add Access Key Credentials”;
3)根据指引填入AWS的Access Key和Secure Access Key,如果需要开通S3Guard功能,CDH会自动在AWS上创建对应的DynamoDB表,用于存放S3相关的元数据信息;
4)之后就是重启生效;
以上步骤参考:
https://www.cloudera.com/documentation/enterprise/5-12-x/topics/cm_auth_aws.html#concept_p55_zzm_2y
https://www.cloudera.com/documentation/enterprise/5-12-x/topics/cm_s3guard.html#untitled1
5)为了能够让Hive,Yarn,MapReduce和Spark操作S3,需要在HDFS的core-site.xml中增加如下配置:
<property>
<name>fs.s3.awsAccessKeyId</name>
<value>Amazon S3 Access Key</value>
</property>
<property>
<name>fs.s3.awsSecretAccessKey</name>
<value>Amazon S3 Secret Key</value>
</property>
<property>
<name>fs.s3a.access.key</name>
<value>Amazon S3 Access Key</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>Amazon S3 Secret Key</value>
</property>
<property>
<name>fs.s3n.awsAccessKeyId</name>
<value>Amazon S3 Access Key</value>
</property>
<property>
<name>fs.s3n.awsSecretAccessKey</name>
<value>Amazon S3 Secret Key</value>
</property>
在CDH中可以做统一配置,进入HDFS -> Configuration -> 搜索"Cluster-wide Advanced Configuration Snippet (Safety Valve) for core-site.xml",然后点击配置项右边的“View as XML”,然后再把替换为了你的真实的账号后的值那上面一段配置,直接粘贴在这里即可,然后就是保存重启,并重新打包客户端。
以上参考:
https://www.cloudera.com/documentation/enterprise/5-12-x/topics/cm_s3_clients.html
https://community.cloudera.com/t5/Batch-SQL-Apache-Hive/Impala-Hive-Hive-on-spark-with-S3/td-p/39464
验证
1、准备一些测试数据
分别准备一些json和csv测试,分别放在test_json和test_csv两个目录中,并将这两个目录放到s3中对应测试桶中,如其最终目录为s3://my_test_bucket/test_json和s3://my_test_bucket/test_csv。
Json测试文件和Csv测试文件的格式如下:
{"_id":"key1","key":"key1","value":"value1"}
{"_id":"key2","key":"key2","value":"value2"}
{"_id":"key3","key":"key3","value":"value3"}
...
id,title,price
1,title1,100
2,title2,200
3,title3,300
...
2、在Hive中创建外部表
create external table test_in_s3_json
(`_id` STRING,`key` string, `value` string)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
location 's3a://my_test_bucket/test_json/';
create external table test_in_s3_csv
(`id` int,`title` string, `price` int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3a://my_test_bucket/test_csv/'
TBLPROPERTIES ("skip.header.line.count"="1");
以上参考:
http://qpleple.com/hive-how-to-create-a-table-from-csv-files
https://hortonworks.github.io/hdp-aws/s3-hive/index.html
3、执行查询测试
select * from test_in_s3_csv;
select * from test_in_s3_json;
两个都可以正常查询出结果,说明已经配置成功了。
4.查看HUE的界面,已经多了一个S3文件管理的Button
验证完成。