手把手教你在腾讯云上搭建hadoop3.x伪集群

    技术2022-07-13  80

    一、环境准备

    CentOS Linux release 7.5.1804 (Core) 系统下

    安装

    创建文件夹

    $ cd /home/centos $ mkdir software $ mkdir module

    将安装包导入software文件夹

    $ cd software # 然后把文件拖进去即可

    这里使用的安装包是

    /home/centos/software/hadoop-3.1.3.tar.gz/home/centos/software/jdk-8u212-linux-x64.tar.gz $ tar -zxvf jdk-8u212-linux-x64.tar.gz -C ../module $ tar -zxvf hadoop-3.1.3.tar.gz -C ../module

    配置环境变量

    $ cd /etc/profile.d/ $ vim my_env.sh

    为了不污染系统变量,我们自己创建一个环境变量的脚本,配置内容如下

    #JAVA_HOME,PATH # export 提升为全局变量,如果你的路径和我不同,记得这里要使用自己的路径哦 export JAVA_HOME=/home/centos/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin #HADOOP_HOME export HADOOP_HOME=/home/centos/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin

    然后保存退出(这里不会的话可以看下vim基础使用,不再赘述了)。

    我们source一下,使环境变量生效

    $ source /etc/profile

    测试一下,看看是否成功

    $ hadoop version

    $ java

    出现以上界面就是没问题了,如果还没成功可以做以下两项检查:

    去java和hadoop的安装目录下的bin目录,分别运行,看是否成功。如果不成功,说明安装包解压缩有问题,软件本身就没安装成功。删掉重新安装。如果运行成功了,说明是环境变量没有配置成功。那么可以检查一下环境变量的路径设置,如果没问题的话,那重启试试~

    ssh免密

    虽然是伪集群,但是本机连接本机的时候还是会需要密码的,所以要设置一下ssh免密

    $ ssh-keygen -t rsa

    出现提示就不停的按回车即可,生成完秘钥后

    $ ssh-copy-id 本机hostname

    配置host文件

    vi /etc/hosts #这里我保留的配置为,其中master配置的是腾讯云的内网, 如果配置外网会导致eclipse客户端连不上hadoop ::1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 172.16.0.3 master 127.0.0.1 localhost

    修改主机名

    vi /etc/sysconfig/network #修改HOSTNAME为master HOSTNAME=master

    修改hostname

    $ hostnamectl --static set-hostname master

    关闭防火墙

    $ systemctl disable firewalld #永久

    二、配置hadoop

    配置文件

    进入hadoop的配置文件专区,所有配置文件都在这个文件夹

    $ cd /home/centos/module/hadoop-3.1.3/etc/hadoop

    我们要配置的文件主要有

    core-site.xml fs.defaultFS是本机的访问路径;hadoop.tmp.dir是数据的保存路径内网地址不知道的去腾讯云网站上查一下 hdfs-site.xml dfs.replication是指数据的副本数,默认是3我们设置为1,因为是伪集群嘛 yarn-site.xmlmapred-site.xmlhadoop-env.sh expert JAVA_HOME=你的jdk安装路径

    那接下来就按照步骤操作吧!

    $ vim core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://腾讯云内网ip地址:9820</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/centos/module/hadoop-3.1.3/data/tmp</value> </property> <!-- 通过web界面操作hdfs的权限 --> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property> <!-- 后面hive的兼容性配置 --> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> </configuration> $ vim hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>腾讯云内网ip地址:9868</value> </property> </configuration> $ vim hadoop-env.sh export JAVA_HOME=/home/centos/module/jdk1.8.0_212 $ vim yarn-site.xml <configuration> <!-- Reducer获取数据的方式--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <!-- 环境变量通过从NodeManagers的容器继承的环境属性,对于mapreduce应用程序,除了默认值 hadoop op_mapred_home应该被添加外。属性值 还有如下--> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <!-- 解决Yarn在执行程序遇到超出虚拟内存限制,Container被kill --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <!-- 后面hive的兼容性配置 --> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>4096</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>4096</value> </property> <!-- 开启日志聚集 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 访问路径--> <property> <name>yarn.log.server.url</name> <value>http://172.17.0.13:19888/jobhistory/logs</value> </property> <!-- 保存的时间7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> </configuration>

    配置历史服务器

    $ vim mapred-site.xml <!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>腾讯云内网ip:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>腾讯云内网ip:19888</value> </property>

    初始化

    第一次启动需要格式化NameNode,后面就不需要啦

    $ hdfs namenode -format

    初始化后,可以看到hadoop安装文件夹中,出现了data和logs两个文件夹,这样就是初始化成功了

    接下来看下启动集群

    $ start-dfs.sh

    启动完毕,没有异常信息,查看一下进程

    [root@VM_0_13_centos hadoop]# jps 20032 Jps 30900 DataNode 31355 SecondaryNameNode 30559 NameNode

    全部启动成功~!

    一键启动

    上面都没问题后,可以做一个脚本一键启动集群,在bin目录下新建

    $ vim mycluster

    添加如下内容

    #!/bin/bash case $1 in "start") #dfs yarn history start-dfs.sh start-yarn.sh mapred --daemon start historyserver ;; "stop") # dfs yarn history stop-dfs.sh stop-yarn.sh mapred --daemon stop historyserver ;; *) echo "args is error! please input start or stop" ;; esac

    配置脚本的权限

    $ chmod u+x mycluster

    使用脚本启动

    $ mycluster start $ jps 23680 NodeManager 24129 JobHistoryServer 22417 DataNode 24420 Jps 22023 NameNode 23384 ResourceManager 22891 SecondaryNameNode

    三、查看hdfs

    配置安全组规则

    在进行以下操作前,现在安全组规则中的协议端口中,加入以下要使用的端口

    端口号:

    Namenode ports: 9870Secondary NN ports: 9868JobHistory:19888

    hadoop web页面

    在浏览器输入:腾讯云公网地址:端口号,即可进入对应的web界面

    这是我们发现Secondary NameNode的界面显示不太正常,这是由于hadoop3中dfs-dust.js的时间函数使用有误。我们手动改正一下。

    首先关闭集群

    $ mycluster stop

    修改文件

    $ vim /home/centos/module/hadoop-3.1.3/share/hadoop/hdfs/webapps/static/dfs-dust.js

    约61行的位置,如图所示,更改为:

    return new Date(Number(v)).toLocaleString();

    此时我们再启动集群

    $ mycluster start

    可以看到Secondary NameNode的web界面已经正常了

    测试hdfs

    那我们来上传文件玩一玩吧

    在hadoop目录下新建一个文件夹

    $ mkdir temdatas

    进入文件夹,新建一个测试文件

    $ vim text.txt

    内容随便写吧,写好保存,我们开始上传文件

    $ hdfs dfs -put text.txt /

    查看一下web页面,上传成功了~

    再尝试把这个文件down下来

    $ hdfs dfs -get /text.txt ./text1.txt

    成功~ 至此hadoop集群搭建完毕,可以自己耍一些好玩的事啦~!

    WordCount案例实操

    在web端新建文件夹 input

    在其中上传一个自己写的各种单词的文件,做单词统计

    #或者自己在vim中写好上传也可 $ hdfs dfs -put wordcount.txt /input

    然后测试一下wordcount案例,注意输出文件夹不能存在

    $ hadoop jar /home/centos/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

    运行完之后,我们看一下结果

    #拉取hdfs文件 [root@master mydata]# hdfs dfs -get /output ./ #查看结果 [root@master output]# cat part-r-00000 a 2 b 3 c 2 d 1 e 1 f 1

    至此,你已经可以自由的玩耍hadoop啦。

    当然,如果你已经尝试了的话,会发现,还有一个小问题没有解决,就是在web端点击文件查看head或tail时,会发生无法查看的情况,download也是不可以的。这个在虚拟机安装时并没有发生过,我还在研究怎么回事。 后来查看网页调用,发现在点击文件时,调用的网址是如下形式

    http://master:9864/webhdfs/v1/homework/20200711/login/userlogin.txt?op=OPEN&namenoderpcaddress=内网ip:9820&offset=0

    初步思考应该是腾讯云的端口没开放,设置开放后,这个master应该是我的hostname,但是在windows上无法识别,所以尝试把上面的网址改成

    http://外网ip:9864/webhdfs/v1/homework/20200711/login/userlogin.txt?op=OPEN&namenoderpcaddress=内网ip:9820&offset=0

    果然可以下载了,那就知道原因了。在windows hosts中增加 master 外网ip 重新刷新web可以查看,也可以下载了。

    最后附上hadoop3.0修改端口如下:

    Namenode 端口: 50470 --> 9871 50070 --> 9870 8020 --> 9820

    Secondary NN 端口: 50091 --> 9869 50090 --> 9868

    Datanode 端口: 50020 --> 9867 50010 --> 9866 50475 --> 9865 50075 --> 9864 Thanks♪(・ω・)ノ

    Processed: 0.011, SQL: 9