OSS-HDFS服務是一款云原生數據湖存儲產品。基于統一的元數據管理能力,在完全兼容HDFS文件系統接口的同時,提供充分的POSIX能力支持,能更好地滿足大數據和AI等領域的數據湖計算場景。本文介紹Hadoop如何通過JindoSDK訪問OSS-HDFS服務。
前提條件
已開通并授權訪問OSS-HDFS服務。具體操作,請參見開通并授權訪問OSS-HDFS服務。
什么是OSS-HDFS服務
通過OSS-HDFS服務,無需對現有的Hadoop、Spark大數據分析應用做任何修改。通過簡單的配置即可像在原生HDFS中那樣管理和訪問數據,同時獲得OSS無限容量、彈性擴展、更高的安全性、可靠性和可用性支撐。
作為云原生數據湖基礎,OSS-HDFS在滿足EB級數據分析、億級文件管理服務、TB級吞吐量的同時,全面融合大數據存儲生態,除提供對象存儲扁平命名空間之外,還提供了分層命名空間服務。分層命名空間支持將對象組織到一個目錄層次結構中進行管理,并能通過統一元數據管理能力進行內部自動轉換。對Hadoop用戶而言,無需做數據復制或轉換就可以實現像訪問本地HDFS一樣高效的數據訪問,極大提升整體作業性能,降低了維護成本。
關于OSS-HDFS服務的應用場景、服務特性、功能特性等更多信息,請參見什么是OSS-HDFS服務。
步驟一:創建專有網絡VPC并添加云服務器ECS實例
創建允許內網訪問OSS-HDFS服務的專有網絡VPC。
登錄專有網絡管理控制臺。
在專有網絡頁面,單擊創建專有網絡。
創建專有網絡VPC時,需確保創建的VPC與待開啟OSS-HDFS服務的Bucket位于相同的地域(Region)。創建VPC的具體操作,請參見創建專有網絡和交換機。
添加云服務器ECS實例。
單擊已創建的VPC ID,然后單擊資源管理頁簽。
在包含基礎云資源區域,單擊云服務器(ECS)右側的。
在實例頁面,單擊創建實例。
創建ECS實例時,需確保該ECS實例與已創建的專有網絡VPC位于相同地域。創建ECS實例的具體操作,請參見選購ECS實例。
步驟二:創建Hadoop運行環境
安裝Java環境。
在已創建的ECS示例右側,單擊遠程連接。
關于遠程連接ECS實例的具體操作,請參見連接方式概述。
檢查JDK版本。
java -version
可選:如果JDK為1.8.0以下版本,請卸載已有的JDK。如果JDK為1.8.0或以上版本,請跳過此步驟。
rpm -qa | grep java | xargs rpm -e --nodeps
安裝Java。
sudo yum install java-1.8.0-openjdk* -y
執行以下命令,打開配置文件。
vim /etc/profile
添加環境變量。
如果提示當前JDK Path不存在,請前往/usr/lib/jvm/查找java-1.8.0-openjdk。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar export PATH=$PATH:$JAVA_HOME/bin
使環境變量生效。
source /etc/profile
啟用SSH服務。
安裝SSH服務。
sudo yum install -y openssh-clients openssh-server
啟用SSH服務。
systemctl enable sshd && systemctl start sshd
生成SSH密鑰,并將生成的密鑰添加到信任列表。
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys
安裝Hadoop。
下載Hadoop安裝包。
wget https://mirrors.sonic.net/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
解壓安裝包。
tar xzf hadoop-3.3.1.tar.gz
將安裝包移動到常用位置。
mv hadoop-3.3.1 /usr/local/hadoop
配置環境變量。
配置Hadoop環境變量。
vim /etc/profile export HADOOP_HOME=/usr/local/hadoop export PATH=$HADOOP_HOME/bin:$PATH source /etc/profile
更新Hadoop配置文件中的HADOOP_HOME。
cd $HADOOP_HOME vim etc/hadoop/hadoop-env.sh
將${JAVA_HOME}替換為實際路徑。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
可選:如果提示目錄不存在,請執行以下命令,使環境變量生效。
cd $HADOOP_HOME/etc/hadoop
更新配置文件core-site.xml以及hdfs-site.xml。
更新配置文件core-site.xml并添加屬性。
<configuration> <!-- 指定HDFS中NameNode的地址。--> <property> <name>fs.defaultFS</name> <!--替換為主機名或localhost。--> <value>hdfs://localhost:9000</value> </property> <!--將Hadoop臨時目錄修改為自定義目錄。--> <property> <name>hadoop.tmp.dir</name> <!--admin操作時完成目錄授權sudo chown -R admin:admin /opt/module/hadoop-3.3.1--> <value>/opt/module/hadoop-3.3.1/data/tmp</value> </property> </configuration>
更新配置文件hdfs-site.xml并添加屬性。
<configuration> <!-- 指定HDFS副本的數量。--> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
格式化文件結構。
hdfs namenode -format
啟動HDFS。
啟動HDFS分為啟動NameNode、DataNode和Secondary NameNode三個步驟。
啟動HDFS。
cd /usr/local/hadoop/ sbin/start-dfs.sh
查看進程。
jps
返回結果如下:
完成上述步驟后,即可建立HDFS守護進程。由于HDFS本身具備HTTP面板,您可以通過瀏覽器訪問http://{ip}:9870,查看HDFS面板以及詳細信息。
測試Hadoop是否安裝成功。
執行hadoop version命令,如果正常返回版本信息,表明安裝成功。
步驟三:切換本地HDFS到云上OSS-HDFS服務
下載JindoSDK JAR包。
切換至目標目錄。
cd /usr/lib/
下載最新版本的JindoSDK JAR包。下載地址,請參見GitHub。
解壓JindoSDK JAR包。
tar zxvf jindosdk-x.x.x-linux.tar.gz
說明x.x.x表示JindoSDK JAR包版本號。
配置環境變量。
編輯配置文件。
vim /etc/profile
配置環境變量。
export JINDOSDK_HOME=/usr/lib/jindosdk-x.x.x-linux
配置HADOOP_CLASSPATH。
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${JINDOSDK_HOME}/lib/*
執行以下命令使環境變量配置生效。
. /etc/profile
配置JindoSDK DLS實現類及AccessKey。
將JindoSDK DLS實現類配置到Hadoop的core-site.xml中。
<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>
將已開啟HDFS服務的Bucket對應的accessKeyId、accessKeySecret預先配置在Hadoop的core-site.xml中。
<configuration> <property> <name>fs.oss.accessKeyId</name> <value>xxx</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>xxx</value> </property> </configuration>
配置OSS-HDFS服務的Endpoint。
訪問OSS-HDFS服務時需要配置Endpoint。推薦訪問路徑格式為
oss://<Bucket>.<Endpoint>/<Object>
,例如oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampleobject.txt
。配置完成后,JindoSDK會根據訪問路徑中的Endpoint訪問對應的OSS-HDFS服務接口。除上述提到的在訪問路徑中指定Endpoint的方式以外,您還可以通過其他配置OSS-HDFS服務的Endpoint。更多信息,請參見配置Endpoint的其他方式。
步驟四:訪問OSS-HDFS服務
新建目錄
在目標存儲空間examplebucket下創建名為dir/的目錄,示例如下:
hdfs dfs -mkdir oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/
上傳文件
將本地examplefile.txt文件上傳至目標存儲空間examplebucket,示例如下:
hdfs dfs -put /root/workspace/examplefile.txt oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/examplefile.txt
查看目錄信息
查看目標存儲空間examplebucket下目錄dir/的信息,示例如下:
hdfs dfs -ls oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/
查看文件信息
查看目標存儲空間examplebucket下文件examplefile.txt的信息,示例如下:
hdfs dfs -ls oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/examplefile.txt
查看文件內容
查看目標存儲空間examplebucket下文件examplefile.txt的內容,示例如下:
重要執行以下命令后,文件內容將以純文本形式打印在屏幕上。如果文件存在特定格式的編碼,請使用HDFS的Java API讀取文件內容,然后進行解碼操作后即可獲取對應的文件內容。
hdfs dfs -cat oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/examplefile.txt
拷貝目錄或文件
將目標存儲空間examplebucket下根目錄subdir1拷貝到目錄subdir2下,且根目錄subdir1所在的位置、根目錄下的文件和子目錄結構和內容保持不變,示例如下:
hdfs dfs -cp oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/subdir1/ oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/subdir2/subdir1/
移動目錄或文件
將目標存儲空間根目錄srcdir及其包含的文件或者子目錄移動至另一個根目錄destdir下,示例如下:
hdfs dfs -mv oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/srcdir/ oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/destdir/
下載文件
將目標存儲空間examplebucket下的exampleobject.txt下載到本地根目錄文件夾/tmp下,示例如下:
hdfs dfs -get oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt /tmp/
刪除目錄或文件
刪除目標存儲空間examplebucket下目錄destfolder/及其目錄下的所有文件,示例如下:
hdfs dfs -rm oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/destfolder/