非EMR集群接入OSS-HDFS服務(wù)快速入門
OSS-HDFS服務(wù)(JindoFS服務(wù))完全兼容HDFS接口,同時(shí)支持目錄層級的操作。JindoSDK為Apache Hadoop的計(jì)算分析應(yīng)用(例如MapReduce、Hive、Spark、Flink等)提供了訪問HDFS服務(wù)的能力。本文介紹如何通過在ECS實(shí)例中部署JindoSDK,然后完成OSS-HDFS服務(wù)快速入門常見操作。
如果您使用的是阿里云EMR集群,請通過EMR集群的方式接入OSS-HDFS服務(wù)。具體操作,請參見EMR集群接入OSS-HDFS服務(wù)快速入門。
前提條件
阿里云賬號默認(rèn)擁有通過非EMR集群的方式接入OSS-HDFS服務(wù)并執(zhí)行常見操作的權(quán)限。如果您希望通過RAM用戶接入OSS-HDFS服務(wù),RAM用戶需要具備對應(yīng)的權(quán)限要求,詳情請參見授權(quán)RAM用戶通過非EMR集群接入OSS-HDFS服務(wù)。
已創(chuàng)建ECS實(shí)例。具體步驟,請參見選購ECS實(shí)例。
已創(chuàng)建Hadoop環(huán)境。具體步驟,請參見創(chuàng)建Hadoop運(yùn)行環(huán)境。
已為Bucket開通并授權(quán)訪問OSS-HDFS服務(wù)。具體操作,請參見開通OSS-HDFS服務(wù)。
操作視頻
觀看以下視頻了解如何通過非EMR集群快速接入OSS-HDFS服務(wù)并完成常見操作。
操作步驟
連接ECS實(shí)例。具體操作,請參見連接ECS實(shí)例。
下載并解壓JindoSDK JAR包。下載地址,請參見GitHub。
執(zhí)行以下命令,解壓JindoSDK JAR包。
以下以解壓
jindosdk-x.x.x-linux.tar.gz
為例,如使用其他版本的JindoSDK,請?zhí)鎿Q為對應(yīng)的JAR包名稱。tar zxvf jindosdk-x.x.x-linux.tar.gz
說明x.x.x表示JindoSDK JAR包版本號。
配置環(huán)境變量。
配置
JINDOSDK_HOME
。以安裝包內(nèi)容解壓在/usr/lib/jindosdk-x.x.x-linux目錄為例:
export JINDOSDK_HOME=/usr/lib/jindosdk-x.x.x-linux
配置
HADOOP_CLASSPATH
。export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${JINDOSDK_HOME}/lib/*
重要請將安裝目錄和環(huán)境變量部署到所有所需節(jié)點(diǎn)上。
配置OSS-HDFS服務(wù)實(shí)現(xiàn)類及AccessKey。
執(zhí)行以下命令,進(jìn)入Hadoop的core-site.xml配置文件。
vim /usr/local/hadoop/etc/hadoop/core-site.xml
在Hadoop的core-site.xml中,配置JindoSDK DLS實(shí)現(xiàn)類。
<configuration> <property> <name>fs.AbstractFileSystem.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOSS</value> </property> <property> <name>fs.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOssFileSystem</value> </property> </configuration>
在Hadoop的core-site.xml文件中,配置阿里云賬號的訪問密鑰,或者滿足權(quán)限要求的RAM用戶的訪問密鑰。
關(guān)于RAM用戶在該場景下需要滿足的權(quán)限說明,請參見授權(quán)RAM用戶通過非EMR集群接入OSS-HDFS服務(wù)。
<configuration> <property> <name>fs.oss.accessKeyId</name> <value>xxx</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>xxx</value> </property> </configuration>
配置OSS-HDFS服務(wù)Endpoint。
使用OSS-HDFS服務(wù)訪問OSS Bucket時(shí)需要配置Endpoint。推薦訪問路徑格式為
oss://<Bucket>.<Endpoint>/<Object>
,例如oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt
。配置完成后,JindoSDK會根據(jù)訪問路徑中的Endpoint訪問對應(yīng)的OSS-HDFS服務(wù)接口。您還可以通過其他方式配置OSS-HDFS服務(wù)Endpoint,且不同方式配置的Endpoint存在生效優(yōu)先級。更多信息,請參見EMR集群接入OSS-HDFS服務(wù)快速入門。
通過HDFS Shell命令完成OSS-HDFS服務(wù)常見操作。
上傳文件
將本地根目錄下的examplefile.txt文件上傳至examplebucket,示例如下:
hdfs dfs -put examplefile.txt oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/
下載文件
將examplebucket下的exampleobject.txt下載到本地根目錄文件夾/tmp,示例如下:
hdfs dfs -get oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt /tmp/
更多操作,請參見通過Hadoop Shell命令訪問。
附錄一:配置Endpoint的其他方式
除上述提到的在訪問路徑中指定Endpoint的方式以外,您還可以通過以下兩種方式配置OSS-HDFS服務(wù)的Endpoint:
Bucket級別的Endpoint
如果使用
oss://<Bucket>/<Object>
格式的訪問路徑,即訪問路徑中未設(shè)置Endpoint。此時(shí),您可以在Hadoop的配置文件core-site.xml中設(shè)置Bucket級別的Endpoint,從而指向OSS-HDFS服務(wù)的Endpoint。<configuration> <property> <!-- 以下examplebucket為開通HDFS服務(wù)的Bucket名稱,其他Bucket請根據(jù)實(shí)際情況替換。 --> <name>fs.oss.bucket.examplebucket.endpoint</name> <!-- 以下以杭州地域?yàn)槔渌赜蛘埜鶕?jù)實(shí)際情況替換。 --> <value>cn-hangzhou.oss-dls.aliyuncs.com</value> </property> </configuration>
全局默認(rèn)Endpoint
如果使用
oss://<Bucket>/<Object>
格式的訪問路徑,且訪問路徑中未設(shè)置Bucket級別的Endpoint,則默認(rèn)使用全局Endpoint的方式訪問OSS-HDFS服務(wù)。在Hadoop的配置文件core-site.xml中設(shè)置全局默認(rèn)Endpoint的方式如下:<configuration> <property> <name>fs.oss.endpoint</name> <!-- 以下以杭州地域?yàn)槔渌赜蛘埜鶕?jù)實(shí)際情況替換。 --> <value>cn-hangzhou.oss-dls.aliyuncs.com</value> </property> </configuration>
通過不同方式配置Endpoint后,Endpoint生效優(yōu)先級為訪問路徑中的Endpoint>Bucket級別的Endpoint>全局默認(rèn)Endpoint
。
附錄二:性能調(diào)優(yōu)
您可以結(jié)合實(shí)際業(yè)務(wù)需求,將以下配置項(xiàng)添加到Hadoop的core-site.xml中。僅JindoSDK 4.0及以上版本支持以下配置項(xiàng)。
<configuration>
<property>
<!-- 客戶端寫入的臨時(shí)文件目錄,可配置多個(gè),每個(gè)臨時(shí)文件目錄需以逗號隔開。多用戶環(huán)境需配置可讀寫權(quán)限 -->
<name>fs.oss.tmp.data.dirs</name>
<value>/tmp/</value>
</property>
<property>
<!-- 訪問OSS失敗重試次數(shù) -->
<name>fs.oss.retry.count</name>
<value>5</value>
</property>
<property>
<!-- 請求OSS超時(shí)時(shí)間(毫秒) -->
<name>fs.oss.timeout.millisecond</name>
<value>30000</value>
</property>
<property>
<!-- 連接OSS超時(shí)時(shí)間(毫秒) -->
<name>fs.oss.connection.timeout.millisecond</name>
<value>3000</value>
</property>
<property>
<!-- OSS單個(gè)文件并發(fā)上傳線程數(shù) -->
<name>fs.oss.upload.thread.concurrency</name>
<value>5</value>
</property>
<property>
<!-- OSS并發(fā)上傳任務(wù)隊(duì)列大小 -->
<name>fs.oss.upload.queue.size</name>
<value>5</value>
</property>
<property>
<!-- 進(jìn)程內(nèi)OSS最大并發(fā)上傳任務(wù)數(shù) -->
<name>fs.oss.upload.max.pending.tasks.per.stream</name>
<value>16</value>
</property>
<property>
<!-- OSS并發(fā)下載任務(wù)隊(duì)列大小 -->
<name>fs.oss.download.queue.size</name>
<value>5</value>
</property>
<property>
<!-- 進(jìn)程內(nèi)OSS最大并發(fā)下載任務(wù)數(shù) -->
<name>fs.oss.download.thread.concurrency</name>
<value>16</value>
</property>
<property>
<!-- 預(yù)讀OSS的buffer大小 -->
<name>fs.oss.read.readahead.buffer.size</name>
<value>1048576</value>
</property>
<property>
<!-- 同時(shí)預(yù)讀OSS的buffer個(gè)數(shù) -->
<name>fs.oss.read.readahead.buffer.count</name>
<value>4</value>
</property>
</configuration>