大数据基础(2)Hadoop\HDFS\YARN搭建部署与简易使用教程

TangLu 未命名 2021-12-09 4543 0

一、Hadoop下载与安装

1、通过Apache官方网站可以下载Hadoop的二进制安装包,无需编译,解压即用

wget https://downloads.apache.org/hadoop/common/hadoop-2.10.1/hadoop-2.10.1.tar.gz
tar hadoop-2.10.1.tar.gz
mv hadoop-2.10.1 /usr/local/
ln -s /usr/local/hadoop-2.10.1 /usr/local/hadoop


2、为Hadoop配置环境变量

vi /etc/proflie
JAVA_HOME=/usr/local/jdk
HADOOP_HOME=/usr/local/hadoop
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
source /etc/profile


3、还需在Hadoop环境配置文件中做以下配置,否则会遇到JAVA_HOME is not set and could not be found的错误

vi /usr/local/hadoop-2.10.1/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0


4、验证配置

hadoop version

hadoop1.png


5、Hadoop主要配置文件有4个,都在$HADOOP_HOME/etc/hadoop下,关于配置文件的默认配置项,可以通过解压jar包后从xxx-default.xml文件中查询,比如/usr/local/hadoop/share/hadoop/hdfs/hadoop-hdfs-2.10.1.jar里就有hdfs-default.xml配置文件,里面有hdfs具体配置项和默认配置信息

· core-site.xml(配置通用属性)

· hdfs-site.xml(配置HDFS)

· mapred-site.xml(配置MapReduce)

· yarn-site.xml(配置yarn)


二、Hadoop本地模式(只需1个节点)

Hadoop在安装后默认就是本地模式,无后台进程,可以直接通过命令运行测试,该模式通常用于开发阶段的调试。如下示例就是使用hadoop的测试jar包的grep方法遍历/data/hadoop/input目录,以''中的正则作为过滤规则将结果输出到/data/hadoop/output目录(该目录不用提前创建,如果该目录存在运行会失败),由于是本地模式,文件不用上传到HDFS中,运行完毕后如果output目录存在_SUCCESS文件则代表运行成功


1、本地模式grep方法

hadoop fs -ls  #查看hadoop文件系统,命令格式和Linux差不多,由于这里是独立本机模式,所以看到的文件也都是本机的文件了
cp -a /usr/local/hadoop-2.10.1/etc/hadoop/* /data/hadoop/input/  #复制一些文件用于测试
hadoop jar /usr/local/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar grep /data/hadoop/input /data/hadoop/output 'dfs[a-z]+'


2、本地模式wordcount方法

hadoop jar /usr/local/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount /data/hadoop/wordcount_in /data/hadoop/wordcount_out


三、Hadoop+HDFS 伪分布模式(只需1个节点)

以守护进程方式运行在本地机器上,模拟小规模集群

1、配置伪分布式HDFS

#编辑hadoop-env.sh,增加以下内容
export JAVA_HOME=/usr/local/jdk

#编辑core-site.xml,增加以下内容
<configuration>
    <property>
        <name>fs.defaultFS</name>   
        <value>hdfs://localhost:9000/</value>        #指定HDFS NameNode地址
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop/data/tmp</value>         #指定HDFS临时文件存储路径,如果该路径发生变化,后续启动HDFS时要删除log和data目录并重新初始化才行
    </property>
</configuration>

#编辑hdfs-site.xml,增加以下内容
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>                             #配置HDFS副本数量,集群模式下这里是3,由于是模拟环境,只有1台机器
    </property>
    <property>
        <name>dfs.permissions.enabled</name>         #关闭HDFS权限检查,否则必须进行授权操作才可以上传
        <value>false</value>                             
    </property>
</configuration>


2、第一次启动HDFS前需要进行格式化,关注命令执行后的successfully

hdfs namenode -format

hdfs1.png


3、启动HDFS的namenode和datanode

hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode

hadoop-daemon.sh stop datanode   #停止HDFS顺序要注意先停止datanode
hadoop-daemon.sh stop namenode   #停止HDFS



4、使用jps可以验证服务,正常情况下可以看到NameNode和DataNode的信息,并且按照配置文件所指定的相关目录自动创建了data目录,logs则是在Hadoop的安装目录下

jps
ll /usr/local/hadoop/logs/      #生成了datanode和namenode日志
ll /data/hadoop/data/tmp/dfs/   #生成了存放元数据的name目录和存放数据的data目录



5、通过HDFS命令行上传文件到HDFS

hadoop fs -put /etc/fstab /          #上传文件到HDFS
hdfs dfs -mkdir -p /data/hdfs/input  #通过hdfs命令创建目录到HDFS
hdfs dfs -put /data/mysql3306/log /data/hdfs/input   #通过hdfs命令上传目录到HDFS



6、通过HDFS命令行查看文件

hdfs dfs -ls /data/hdfs/input
hdfs dfs -cat /data/hdfs/input/error.log



7、访问HDFS WEB页面,端口为50070,进入Utilities可以看到上传的文件。这里有个Block Size需要注意,默认每个块为128M,如果上传的文件大于它,通过查看文件可以看到会被分成多个Block进行存放,而如果文件没有大于它,在硬盘中实际存储的大小和文件本身一样,只是显示上依然为128M

hdfs2.png

hdfs3.png


8、使用hadoop的wordcount对HDFS中的文件进行处理

hadoop jar /usr/local/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount /data/hdfs/input/log /data/hdfs/output


9、查看和下载处理后的文件

hdfs dfs -cat /data/hdfs/output/part-r-00000
hdfs dfs -get /data/hdfs/output/part-r-00000

10、删除无用文件

hdfs dfs -rmr /data/hdfs/output


四、Hadoop+HDFS+Yarn 伪分布模式(只需1个节点)

1、配置Yarn

#配置环境变量
vi yarn-env.sh
export JAVA_HOME=/usr/local/jdk

#配置yarn
vi yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>    #map reducer获取数据的方式
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>    #配置YARN的ResourceManager地址
        <value>node1</value>
    </property>
    <property>                    
        <name>yarn.resourcemanager.nodes.include-path</name>      #伪分布式配置dnrm信息
        <value>/usr/local/hadoop-2.10.1/etc/hadoop/dnrm</value> 
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>   #配置YARN使用的最大内存
        <value>4096</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>   #配置YARN使用的CPU核数
        <value>8</value>
</configuration>

#配置mapred环境变量
vi mapred-env.sh
export JAVA_HOME=/usr/local/jdk

#编辑mapred-site.xml,增加以下内容
cp mapred-site.xml.template mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>


2、创建dnrm文件

vi /usr/local/hadoop-2.10.1/etc/hadoop/dnrm
node1  #做好hosts解析


3、启动yarn

yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
jps


4、运行任务进行测试,现在任务将使用yarn进行资源调度

hadoop jar /usr/local/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount /data/hdfs/input/log /data/hdfs/output


5、通过Web访问Yarn可以看到正在运行的任务和进度情况,通过Web访问IP:8088/cluster可以看到hadoop任务的进度

yarn.png

yarn2.png


6、通过Web访问Yarn后可以看到在进度条旁边有个history按钮,但是这个是需要配置了历史服务才能访问的,否则是404错误,history服务配置方式如下

#编辑mapred-site.xml,增加以下内容
cp mapred-site.xml.template mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>         #配置job history server地址
        <value>node1:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>  #配置job history server web ui地址
        <value>node1:19888</value>
    </property>    
</configuration>


7、启动job history历史服务

mr-jobhistory-daemon.sh start historyserver 
jps


8、历史服务成功启动后,后续有任务完成后都可以通过history按钮查看任务情况了,也可以通过ip:19888端口直接访问history服务

job_history.png



五、全分布模式:至少需要3台机器,节点之间需要配置好SSH免密登录,每个节点都做相同配置,由于NodeManager、ResourceManager、SecondaryNameNode都比较消耗资源,建议分开部署

1、配置hadoop模块

#编辑/usr/local/hadoop/etc/hadoop/hadoop-env.sh,增加以下内容
export JAVA_HOME=/usr/local/jdk

#编辑/usr/local/hadoop/etc/hadoop/core-site.xml,增加以下内容
<configuration>
    <property>
        <name>fs.defaultFS</name>   
        <value>hdfs://localhost:9000/</value>        #指定HDFS NameNode地址
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop/data/tmp</value>         #指定HDFS临时文件存储路径,如果该路径发生变化,后续启动HDFS时要删除log和data目录并重新初始化才行
    </property>
</configuration>


2、配置hdfs模块

#编辑hdfs-site.xml,增加以下内容
vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>                             #配置HDFS副本数量,当文件有多个副本后将会在每个节点上都保存一份
    </property>
    <property>
        <name>dfs.permissions.enabled</name>         #关闭HDFS检查
        <value>false</value>                             
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>   #指定secondary节点地址
        <value>node3:50090</value>                             
    </property>
</configuration>


2、配置slave

vi /usr/local/hadoop/etc/hadoop/slaves
node1
node2
node3


3、配置Yarn模块,去掉之前的DNRM配置

vi /usr/local/hadoop/etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/local/jdk

#配置yarn
vi /usr/local/hadoop/etc/hadoop/yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>    #map reducer获取数据的方式
        <value>mapreduce_shuffle</value>
    </property>
    
    <property>
        <name>yarn.resourcemanager.hostname</name>    #配置YARN的ResourceManager地址
        <value>node1</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>   #配置YARN使用的最大内存
        <value>4096</value>
    </property>
    
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>   #配置YARN使用的CPU核数
        <value>8</value>
    </property>
    
    <property>
        <name>yarn.log-aggregation-enable</name>   #开启日志收集
        <value>true</value>
    </property>
    
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>   #日志保留时长为7天
        <value>604800</value>
    </property> 
                    
    <property>
        <name>yarn.log-aggregation.retain-check-interval-seconds</name>   #日志检查时间为1天
        <value>86400</value>
    </property>     
</configuration>


4、mapreduce文件和伪分布式基本一致

vi /usr/local/hadoop/etc/hadoop/mapred-env.sh
export JAVA_HOME=/usr/local/jdk


#编辑mapred-site.xml,增加以下内容
cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>         #配置job history server地址
        <value>node1:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>  #配置job history server web ui地址
        <value>node1:19888</value>
    </property>    
</configuration>

 

5、在HDFS NameNode进行格式化并启动HDFS,如果有节点未正常启动,大概率是因为之前环境遗留下来的目录没有清理干净,建议全部删掉

hdfs namenode -format
# hadoop-daemon.sh start namenode #伪分布式使用的是该命令管理nodename,分布式下推荐使用start-dfs.sh脚本
start-dfs.sh    #会启动所有节点的namenode、datanode


6、在Yarn ResourceManager节点启动Yarn

start-yarn.sh


7、在各个节点是否启动成功,由于这里把NameNode和ResourceManager都部署在了一个节点上,所以该节点会存在4个服务,其他节点则是启动DataNode和NodeManager

企业微信截图_20211215140056.png


8、进行任务测试

hdfs dfs -put /usr/local/hadoop/etc/hadoop /data/hdfs/data/input/
hadoop jar /usr/local/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount /data/hdfs/data/input/hadoop /data/hdfs/data/output


9、日志收集配置。由于分布式系统,日志必然是存在不同节点中,为了方便统一管理,可以配置Yarn的日志聚集

#配置yarn
vi yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>    #map reducer获取数据的方式
        <value>mapreduce_shuffle</value>
    </property>
    
    <property>
        <name>yarn.resourcemanager.hostname</name>    #配置YARN的ResourceManager地址
        <value>node1</value>
    </property>

    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>   #配置YARN使用的最大内存
        <value>4096</value>
    </property>
    
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>   #配置YARN使用的CPU核数
        <value>8</value>
    </property>
    
    <property>
        <name>yarn.log-aggregation-enable</name>   #开启日志收集
        <value>true</value>
    </property>
    
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>   #日志保留时长为7天
        <value>604800</value>
    </property> 
                    
    <property>
        <name>yarn.log-aggregation.retain-check-interval-seconds</name>   #日志检查时间为1天
        <value>86400</value>
    </property>     
</configuration>


12、重启nodemanager、resourcemanager、historyserver

mr-jobhistory-daemon.sh stop historyserver
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh stop nodemanager

yarn-daemon.sh start nodemanager
yarn-daemon.sh start resourcemanager
mr-jobhistory-daemon.sh start historyserver


13、访问history的Web界面(ip:19888)查看统一日志,这些日志都会上传到HDFS中,也可以通过HDFS看到

history2.png

评论