一 COS助力HADOOP輕松實作資料存儲
通過學習本文您将了解到如下内容:
1.1 如何快速搭建hadoop分布式叢集。
1.2 如何在hadoop叢集上實作簡單的資料處理,通過 wordcount 實作測試。
1.3 hadoop如何從騰訊雲cos提取和存儲資料。
二 基礎資訊規劃
2.1 業務拓撲&網絡安全政策
2.1.1 準備好一個VPC網絡
2.1.2 在VPC内部建立4台伺服器
2.1.3 4台伺服器在同一個安全組内
2.1.4 安全組側率允許内網互相通路,允許特點源IP通路hadoop叢集(允許你希望通路叢集的IP通路,這樣可以避免部分安全問題)

2.2 版本資訊
2.2.1 作業系統版本 centos 7.2 x64
2.2.2 java jdk 版本 jdk-8u144
2.2.3 hadoop 版本 2.8.5
2.2.4 hadoop-cos 元件版本 2.8.5
2.3 節點規劃
2.3.1 NameNode(nn)SecondaryNameNode(snn) ResourceManager(rm) 三種角色安裝在master伺服器上,備注:如果是生産環境,這三個角色要分開部署。
2.3.2 DataNode(dn) NodeManager( nm) 三台
三 環境配置
3.1 基礎環境配置
3.1.1 在CVM WEB 控制台擷取每台CVM内網IP
3.1.2 使用ssh協定登入master伺服器
3.1.3 在master伺服器上執行 vim /etc/hosts 輯配置檔案内容如下
192.x.x.x master
192.x.x.x dn-1
192.x.x.x dn-2
192.x.x.x dn-3
複制
備注:記得設定每台伺服器的主機名
3.1.4 在master 上使用ping 指令分别ping master dn-1 dn-2 dn-3
ping master
ping dn-1
複制
3.1.5 複制master 上/etc/hosts檔案到其它伺服器
for i in 1 2 3; do scp /etc/hosts dn-${i}:/etc/hosts ; done
複制
備注:您也可以手動複制
3.2 java環境配置
3.2.1 在每台伺服器上執行
cd /tmp && wget https://swpkg-1251908826.cos.ap-beijing.myqcloud.com/java/jdk-8u144-linux-x64.rpm
複制
3.2.2 在每台伺服器上安裝jdk
rpm -ivh jdk-8u144-linux-x64.rpm
複制
3.2.3 在master上設定java 環境變量 vim /etc/profile.d/java.sh 内容如下
export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=/usr/java/jdk1.8.0_144/jre
export PATH=$PATH:/usr/java/jdk1.8.0_144/bin
export CLASSPATH=./:/usr/java/jdk1.8.0_144/lib:/usr/java/jdk1.8.0_144/jre/lib
複制
3.2.4 複制master上java.sh 配置檔案到每台伺服器
for i in 1 2 3; do scp /etc/profile.d/java.sh dn-${i}:/etc/profile.d/java.sh; done
複制
3.2.5 在每台伺服器上加載java環境變量
source /etc/profile.d/java.sh
複制
3.3 hadoop環境配置
3.3.1 在master 編輯vim /etc/profile.d/hadoop.sh 内容如下
export HADOOP_HOME=/bdapps/hadoop
export HADOOP_PREFIX=/bdapps/hadoop
export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
export HADOOP_MAPPERD_HOME=${HADOOP_PREFIX}
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
複制
3.3.2 在master上操作複制hadoop.sh配置檔案到每台hadoop節點上
for i in 1 2 3; do scp /etc/profile.d/hadoop.sh dn-${i}:/etc/profile.d/hadoop.sh ; done
複制
3.3.4 在每台伺服器上加載hadoop環境變量
source /etc/profile.d/hadoop.sh && export | grep HADOOP
複制
3.3.5 在每台伺服器上執行下載下傳Hadoop
cd /tmp && wget https://swpkg-1251908826.cos.ap-beijing.myqcloud.com/hadoop/hadoop-2.8.5.tar.gz
複制
3.4 使用者配置
3.4.1 在每台伺服器上配置hadoop使用者
useradd hadoop && echo 'hadoop' | passwd --stdin hadoop && for i in 1 2 3; do ssh root@dn-${i} "useradd hadoop && echo 'hadoop' | passwd --stdin hadoop && id hadoop"; done
複制
3.5 設定hadoop使用者秘鑰登入叢集每個節點
3.5.1 在master執行
su - hadoop
複制
3.5.2 生成證書無密碼
ssh-keygen -t rsa -P ''
複制
3.5.3 在master上執行指令複制秘鑰到每台伺服器
for i in 1 2 3; do ssh-copy-id -i .ssh/id_rsa.pub hadoop@dn-${i}; done
複制
3.6 使用root在master建立hadoop工作目錄
mkdir -pv /bdapps /data/hadoop/hdfs/{nn,snn,dn} && for i in 1 2 3; do ssh root@dn-${i} "mkdir -pv /bdapps /data/hadoop/hdfs/{nn,snn,dn}"; done
chown -R hadoop:hadoop /data/hadoop/hdfs/ && for i in 1 2 3; do ssh root@dn-${i} "chown -R hadoop:hadoop /data/hadoop/hdfs/"; done
複制
3.7 使用root在master安裝hadoop
3.7.1 解壓縮hadoop
cd /tmp && tar xf hadoop-2.8.5.tar.gz -C /bdapps/
複制
3.7.2 設定hadoop 軟連接配接
cd /bdapps/ && ln -sv hadoop-2.8.5 hadoop
複制
3.7.3 設定hadoop日志目錄添權重限在每台伺服器上執行
cd hadoop && mkdir logs && chmod g+w logs && chown -R hadoop:hadoop ./*
複制
3.8 hadoop 配置檔案調整
3.8.1 編輯 vim /bdapps/hadoop/etc/hadoop/core-site.xml 内容如下
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
</configuration>
複制
3.8.2 編輯 vim /bdapps/hadoop/etc/hadoop/yarn-site.xml 内容如下
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
</configuration>
複制
3.8.3 編輯 vim /bdapps/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/hdfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/hdfs/dn</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
</property>
<property>
<name>fs.checkpoint.edits.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
</property>
</configuration>
複制
3.8.4 編輯 vim /bdapps/hadoop/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
複制
備注:mapred-site.xml 檔案為建立立檔案,需要設定權限
chown -R hadoop:hadoop ./*
複制
3.8.5 編輯 vim /bdapps/hadoop/etc/hadoop/vim slaves 告知hadoop叢集從節點是哪些伺服器
dn-1
dn-2
dn-3
複制
備注:删除locahost
3.8.6 hadoop相關配置檔案說明可參考 https://zhuanlan.zhihu.com/p/25472769
3.9 資料節點安裝hadoop
3.9.1 在每個資料節點解壓縮hadoop
cd /tmp && tar xf hadoop-2.8.5.tar.gz -C /bdapps/ && ll /bdapps/
複制
備注:也可以從主節點複制到每個節點。
3.9.2 在每個節點建立目錄授權
cd /bdapps/ && ln -sv hadoop-2.8.5 hadoop && cd hadoop && mkdir logs && chmod g+w logs && chown -R hadoop:hadoop ./* && ll && ll /bdapps/
複制
3.10 在master節點複制配置檔案到每個資料節點
3.10.1 切換為hadoop使用者進入配置檔案目錄
su - hadoop
cd /bdapps/hadoop/etc/hadoop
複制
3.10.2 複制配置檔案到每台資料節點
for i in 1 2 3; do scp ./* dn-${i}:/bdapps/hadoop/etc/hadoop/; done
複制
3.10.3 檢查配置檔案是否複制到每個節點
for i in 1 2 3; do ssh hadoop@dn-${i} 'ls -l /bdapps/hadoop/etc/hadoop/' ; done
複制
3.11 在master啟動服務
3.11.1 格式化hdfs
su - hadoop
hdfs namenode -format
複制
備注:namenode隻在主節點格式化即可
出現如下提示表示格式化成功
Storage directory /data/hadoop/hdfs/nn has been successfully formatted.
複制
3.11.2 格式化nn後可以檢視資料
ll /data/hadoop/hdfs/nn/
複制
出現current表示 格式化成功
3.11.3 啟動hadoop NN SNN DN 服務 執行指令
start-dfs.sh
複制
Starting namenodes on [hadoop-master]
hadoop@hadoop-master's password:
hadoop-master: starting namenode, logging to /bdapps/hadoop/logs/hadoop-hadoop-namenode-hadoop-master.out
dn-2: starting datanode, logging to /bdapps/hadoop/logs/hadoop-hadoop-datanode-dn-2.out
dn-1: starting datanode, logging to /bdapps/hadoop/logs/hadoop-hadoop-datanode-dn-1.out
dn-3: starting datanode, logging to /bdapps/hadoop/logs/hadoop-hadoop-datanode-dn-3.out
Starting secondary namenodes [0.0.0.0]
The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
ECDSA key fingerprint is SHA256:N0oGIztp4e9xcieBKcP1uPzL3+a6qxH4m+TlifFqRVU.
ECDSA key fingerprint is MD5:3d:5c:f6:50:5f:f8:8c:33:be:34:c8:42:35:42:fb:8c.
Are you sure you want to continue connecting (yes/no)? yes
0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
[email protected]'s password:
0.0.0.0: starting secondarynamenode, logging to /bdapps/hadoop/logs/hadoop-hadoop-secondarynamenode-hadoop-master.out
複制
3.11.4 啟動hadoop RM 服務 執行指令
start-yarn.sh
複制
starting yarn daemons
starting resourcemanager, logging to /bdapps/hadoop/logs/yarn-hadoop-resourcemanager-hadoop-master.out
dn-1: starting nodemanager, logging to /bdapps/hadoop/logs/yarn-hadoop-nodemanager-dn-1.out
dn-3: starting nodemanager, logging to /bdapps/hadoop/logs/yarn-hadoop-nodemanager-dn-3.out
dn-2: starting nodemanager, logging to /bdapps/hadoop/logs/yarn-hadoop-nodemanager-dn-2.out
複制
至此,如果以上順利完成hadoop叢集已經可以正常運作了。
四 hadoop叢集簡單測試
4.1 hdfs相關測試
4.1.1 在hdfs内建立目錄
hdfs dfs -mkdir /test
複制
4.1.2上傳檔案到hdfs的/test目錄下
hdfs dfs -put /etc/fstab /test/fstab
複制
4.1.3 檢視hdfs内的檔案
hdfs dfs -ls -R /test
複制
4.1.4 檢視hdfs下的檔案内容
hdfs dfs -cat /test/fstab
複制
4.1.5 在dn節點檢視hdfs将資料存到實體機什麼位置上
ls /data/hadoop/hdfs/dn/current/BP-1789289483-172.16.5.13-1582193169051/current/finalized/subdir0/subdir0/
複制
4.1.6 執行一個統計的測試程式
yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount /test/fstab /test/fstab.out
複制
4.1.7 等待分析結束檢視分析結果
hdfs dfs -cat /test/fstab.out/part-r-00000
複制
4.1.8 web方式 檢視 hadoop hdfs 使用狀态
http://140.143.211.224:50070/
複制
4.1.9 web方式 檢視 hadoop applications 使用檢視
http://140.143.211.224:8088/
複制
五 hadoop-cos配置
5.1.1 停止hadoop 服務
stop-dfs.sh && stop-yarn.sh
複制
5.1.2 在master使用root使用者上下載下傳cos元件 cd /tmp && wget https://swpkg-1251908826.cos.ap-beijing.myqcloud.com/cos-hadoop/hadoop-cos-master.zip
複制
5.1.3 解壓縮cos元件 unzip hadoop-cos-master.zip
5.1.4 将hadoop-cos-maste dep 目錄下的hadoop-cos-2.8.5-shaded.jar*, 拷貝到$HADOOP_HOME/share/hadoop/tools/lib下
cp /tmp/hadoop-cos-master/dep/hadoop-cos-2.8.5-shaded.jar /bdapps/hadoop/share/hadoop/tools/lib/
複制
5.1.5 修改hadoop-cos-2.8.5-shaded.jar檔案使用者屬主
chown hadoop.hadoop /bdapps/hadoop/share/hadoop/tools/lib/hadoop-cos-2.8.5-shaded.jar
複制
5.1.6 編輯vim /bdapps/hadoop/etc/hadoop/hadoop-env.sh 檔案在檔案末端增加如下内容
for f in $HADOOP_HOME/share/hadoop/tools/lib/*.jar; do
if [ "$HADOOP_CLASSPATH" ]; then
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f
else
export HADOOP_CLASSPATH=$f
fi
done
複制
備注:詳細内容請查詢 https://cloud.tencent.com/document/product/436/6884
5.1.7 修改vim /bdapps/hadoop/etc/hadoop/core-site.xml 内容如下
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>test.fs.cosn.name</name>
<value>cosn://log-1251908826</value>
</property>
<property>
<name>fs.cosn.credentials.provider</name>
<value>org.apache.hadoop.fs.auth.SimpleCredentialProvider</value>
<description>
This option allows the user to specify how to get the credentials.
Comma-separated class names of credential provider classes which implement
com.qcloud.cos.auth.COSCredentialsProvider:
1.org.apache.hadoop.fs.auth.SimpleCredentialProvider: Obtain the secret id and secret key
from fs.cosn.userinfo.secretId and fs.cosn.userinfo.secretKey in core-site.xml
2.org.apache.hadoop.fs.auth.EnvironmentVariableCredentialProvider: Obtain the secret id and secret key from system environment variables named COS_SECRET_ID and COS_SECRET_KEY
If unspecified, the default order of credential providers is:
1. org.apache.hadoop.fs.auth.SimpleCredentialProvider
2. org.apache.hadoop.fs.auth.EnvironmentVariableCredentialProvider
</description>
</property>
<property>
<name>fs.cosn.userinfo.secretId</name>
<value>AKID431rb9dpzy571</value>
<description>Tencent Cloud Secret Id</description>
</property>
<property>
<name>fs.cosn.userinfo.secretKey</name>
<value>veJk040mT0LVebLxQipk</value>
<description>Tencent Cloud Secret Key</description>
</property>
<property>
<name>fs.cosn.bucket.region</name>
<value>ap-beijing</value>
<description>The region where the bucket is located.</description>
</property>
<property>
<name>fs.cosn.impl</name>
<value>org.apache.hadoop.fs.CosFileSystem</value>
<description>The implementation class of the CosN Filesystem.</description>
</property>
</configuration>
複制
備注:secretId secretKey region bucket資訊請替換為您自己的資訊。
5.1.7 切換使用者到hadoop 複制core-site.xml hadoop-env.sh hadoop-cos-2.8.5-shaded.jar 到每台節點伺服器
su - hadoop
for i in 1 2 3; do scp /bdapps/hadoop/etc/hadoop/core-site.xml dn-${i}:/bdapps/hadoop/etc/hadoop/ ;done
for i in 1 2 3; do scp /bdapps/hadoop/etc/hadoop/hadoop-env.sh dn-${i}:/bdapps/hadoop/etc/hadoop/ ;done
for i in 1 2 3; do scp /bdapps/hadoop/share/hadoop/tools/lib/hadoop-cos-2.8.5-shaded.jar dn-${i}:/bdapps/hadoop/share/hadoop/tools/lib/ ;done
複制
5.1.8 啟動hadoop叢集
start-dfs.sh && start-yarn.sh
複制
5.1.9 在cos檔案系統建立test目錄
hdfs dfs -mkdir cosn://log-1251908826/test/
複制
5.1.10 上傳測試檔案到cos上的test目錄
hdfs dfs -put /etc/fstab cosn://log-1251908826/test/
hdfs dfs -put /etc/rc.d/init.d/functions cosn://log-1251908826/test/
複制
5.1.11 檢視cos上目錄内是否有對應的檔案
hdfs dfs -ls cosn://log-1251908826/test/
複制
5.1.12 執行一個統計的測試程式從cos上讀取檔案,統計結果輸出到cos
yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount cosn://log-1251908826/test/fstab cosn://log-1251908826/test/fstab1.out
yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount cosn://log-1251908826/test/functions cosn://log-1251908826/test/func1.out
複制
5.1.13 檢視兩個檔案計算結果
hdfs dfs -cat cosn://log-1251908826/test/fstab1.out/part-r-00000
hdfs dfs -cat cosn://log-1251908826/test/func1.out/part-r-00000
複制
5.1.14 執行一個統計的測試程式從本地檔案系統讀取檔案,統計結果輸出到cos
yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount /test/fstab cosn://log-1251908826/test/fstab2.out
複制
至此hadoop已經可以與cos協作,hadoop可以将資料存儲到cos上。
備注:騰訊雲的秘鑰和bucket id 記得修改為您自己的内容