前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >COS助力HADOOP轻松实现数据存储

COS助力HADOOP轻松实现数据存储

原创
作者头像
Hunter
修改2020-03-02 09:38:15
1.8K0
修改2020-03-02 09:38:15
举报

一  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 辑配置文件内容如下

代码语言:javascript
复制
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 

代码语言:javascript
复制
ping master
ping dn-1 

3.1.5 复制master 上/etc/hosts文件到其它服务器 

代码语言:javascript
复制
for i in 1 2 3; do scp /etc/hosts  dn-${i}:/etc/hosts ; done

备注:您也可以手动复制

3.2 java环境配置

3.2.1 在每台服务器上执行

代码语言:javascript
复制
cd /tmp && wget https://swpkg-1251908826.cos.ap-beijing.myqcloud.com/java/jdk-8u144-linux-x64.rpm

3.2.2 在每台服务器上安装jdk

代码语言:javascript
复制
rpm -ivh jdk-8u144-linux-x64.rpm

3.2.3 在master上设置java 环境变量 vim /etc/profile.d/java.sh 内容如下

代码语言:javascript
复制
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 配置文件到每台服务器 

代码语言:javascript
复制
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环境变量 

代码语言:javascript
复制
source /etc/profile.d/java.sh

3.3 hadoop环境配置

3.3.1 在master 编辑vim /etc/profile.d/hadoop.sh 内容如下

代码语言:javascript
复制
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节点上

代码语言:javascript
复制
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环境变量

代码语言:javascript
复制
source /etc/profile.d/hadoop.sh  && export | grep HADOOP

3.3.5 在每台服务器上执行下载Hadoop

代码语言:javascript
复制
cd /tmp && wget https://swpkg-1251908826.cos.ap-beijing.myqcloud.com/hadoop/hadoop-2.8.5.tar.gz

3.4 用户配置

3.4.1 在每台服务器上配置hadoop用户

代码语言:javascript
复制
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执行

代码语言:javascript
复制
su - hadoop

3.5.2 生成证书无密码

代码语言:javascript
复制
ssh-keygen -t rsa -P ''

3.5.3 在master上执行命令复制秘钥到每台服务器

代码语言:javascript
复制
for i in 1 2 3; do ssh-copy-id -i .ssh/id_rsa.pub hadoop@dn-${i}; done

3.6 使用root在master创建hadoop工作目录

代码语言:javascript
复制
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

代码语言:javascript
复制
cd /tmp && tar xf hadoop-2.8.5.tar.gz -C /bdapps/

3.7.2 设置hadoop 软连接

代码语言:javascript
复制
cd /bdapps/ && ln -sv hadoop-2.8.5 hadoop

3.7.3 设置hadoop日志目录添加权限在每台服务器上执行

代码语言:javascript
复制
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 内容如下

代码语言:javascript
复制
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:8020</value>
    </property> 
</configuration>

3.8.2 编辑 vim /bdapps/hadoop/etc/hadoop/yarn-site.xml 内容如下

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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

代码语言:javascript
复制
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

备注:mapred-site.xml 文件为新建立文件,需要设置权限

代码语言:javascript
复制
chown -R hadoop:hadoop ./*

3.8.5 编辑 vim /bdapps/hadoop/etc/hadoop/vim slaves 告知hadoop集群从节点是哪些服务器 

代码语言:javascript
复制
dn-1
dn-2
dn-3

备注:删除locahost

3.8.6 hadoop相关配置文件说明可参考 https://zhuanlan.zhihu.com/p/25472769

3.9 数据节点安装hadoop

3.9.1 在每个数据节点解压缩hadoop

代码语言:javascript
复制
cd /tmp && tar xf hadoop-2.8.5.tar.gz -C /bdapps/ && ll /bdapps/

备注:也可以从主节点复制到每个节点。

3.9.2 在每个节点创建目录授权

代码语言:javascript
复制
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用户进入配置文件目录

代码语言:javascript
复制
su - hadoop 
cd /bdapps/hadoop/etc/hadoop

3.10.2 复制配置文件到每台数据节点 

代码语言:javascript
复制
for i in 1 2 3; do scp ./* dn-${i}:/bdapps/hadoop/etc/hadoop/; done

3.10.3 检查配置文件是否复制到每个节点

代码语言:javascript
复制
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

代码语言:javascript
复制
su - hadoop 
hdfs namenode -format 

备注:namenode只在主节点格式化即可

出现如下提示表示格式化成功

代码语言:javascript
复制
Storage directory /data/hadoop/hdfs/nn has been successfully formatted.

3.11.2 格式化nn后可以查看数据

代码语言:javascript
复制
ll /data/hadoop/hdfs/nn/

出现current表示 格式化成功

3.11.3 启动hadoop NN SNN DN 服务 执行命令 

代码语言:javascript
复制
start-dfs.sh

代码语言:javascript
复制
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.
hadoop@0.0.0.0's password:
0.0.0.0: starting secondarynamenode, logging to /bdapps/hadoop/logs/hadoop-hadoop-secondarynamenode-hadoop-master.out

3.11.4 启动hadoop RM 服务 执行命令

代码语言:javascript
复制
start-yarn.sh
代码语言:javascript
复制
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内创建目录

代码语言:javascript
复制
hdfs dfs -mkdir /test

4.1.2上传文件到hdfs的/test目录下

代码语言:javascript
复制
hdfs dfs -put /etc/fstab /test/fstab

4.1.3 查看hdfs内的文件

代码语言:javascript
复制
hdfs dfs -ls -R /test

4.1.4 查看hdfs下的文件内容

代码语言:javascript
复制
hdfs dfs -cat /test/fstab

4.1.5 在dn节点查看hdfs将数据存到物理机什么位置上

代码语言:javascript
复制
ls /data/hadoop/hdfs/dn/current/BP-1789289483-172.16.5.13-1582193169051/current/finalized/subdir0/subdir0/

4.1.6 执行一个统计的测试程序

代码语言:javascript
复制
yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount /test/fstab /test/fstab.out

4.1.7 等待分析结束查看分析结果

代码语言:javascript
复制
hdfs dfs -cat /test/fstab.out/part-r-00000

4.1.8 web方式 查看 hadoop hdfs 使用状态

代码语言:javascript
复制
http://140.143.211.224:50070/

4.1.9 web方式 查看 hadoop applications 使用查看

代码语言:javascript
复制
http://140.143.211.224:8088/

五 hadoop-cos配置

5.1.1 停止hadoop 服务

代码语言:javascript
复制
stop-dfs.sh && stop-yarn.sh
代码语言:javascript
复制
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下

代码语言:javascript
复制
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文件用户属主 

代码语言:javascript
复制
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 文件在文件末端增加如下内容 

代码语言:javascript
复制
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 内容如下

代码语言:javascript
复制
<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 到每台节点服务器

代码语言:javascript
复制
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集群

代码语言:javascript
复制
start-dfs.sh && start-yarn.sh

5.1.9 在cos文件系统创建test目录

代码语言:javascript
复制
hdfs dfs -mkdir cosn://log-1251908826/test/

5.1.10 上传测试文件到cos上的test目录

代码语言:javascript
复制
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上目录内是否有对应的文件

代码语言:javascript
复制
hdfs dfs -ls cosn://log-1251908826/test/

5.1.12 执行一个统计的测试程序从cos上读取文件,统计结果输出到cos

代码语言:javascript
复制
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 查看两个文件计算结果

代码语言:javascript
复制
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

代码语言:javascript
复制
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 记得修改为您自己的内容

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一  COS助力HADOOP轻松实现数据存储
  • 二 基础信息规划
  • 三 环境配置
  • 四 hadoop集群简单测试
  • 五 hadoop-cos配置
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档