天天看點

COS助力HADOOP輕松實作資料存儲一  COS助力HADOOP輕松實作資料存儲二 基礎資訊規劃三 環境配置四 hadoop叢集簡單測試五 hadoop-cos配置

一  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通路,這樣可以避免部分安全問題)

COS助力HADOOP輕松實作資料存儲一  COS助力HADOOP輕松實作資料存儲二 基礎資訊規劃三 環境配置四 hadoop叢集簡單測試五 hadoop-cos配置

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 記得修改為您自己的内容