大数据1

    科技2023-11-21  71

    作者:codejiwei

    日期:2020-05-01

    1 Hadoop运行环境搭建

    ①虚拟机环境准备

    克隆虚拟机(克隆-完全复制)

    修改克隆虚拟机的静态ip(物理ip地址)和主机名等

    vim /etc/udev/rules.d/70-persistent-net.rules删除,修改为0,复制物理ip地址vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改HWADDR=复制的物理ip地址;前提(ONBOOT=yes NM=CONTROLLED=yes BOOTROTO=static);修改IPADDR,修改GATEWAY=网关ip,DNS1=网关ip vim /etc/sysconfig/network 修改主机名 vim /etc/hosts 配置hosts节点,所有的节点ip+hostname

    关闭防火墙!!!(不然访问页面端口时会无法连接)

    chkconfig iptables off 关闭防火墙

    service iptables stop 关闭防火墙服务

    查看防火墙自启情况:chkconfig iptables --list

    查看防火墙服务 service iptables status

    创建atguigu用户

    useradd atguigu 创建用户passwd atguigu 创建密码

    配置atguigu具有root权限

    vim /etc/sudoers 给用户root权限,以后用到root权限时使用sudo即可获得和root一样的权限 atguigu ALL=(ALL) ALL 如果有必要其实也可以将atguigu放到root组内,一般不 usermod -g root atguigu

    在/opt目录创建文件夹(以后的安装应用放在内)

    sudo mkdir software 注意的是opt文件夹的操作权限是root!sudo mkdir module修改这两个文件夹的所有者为atguigusudo chown atguigu /software /module

    ②安装JDK

    如果有jdk需要先卸载

    查看Java软件安装情况: rpm -ga | java 如果jdk版本低于1.7,卸载 sudo rpm -e 软件包 查看jdk安装路径 which java

    导入JDK到/opt/software

    可以使用Secure CRT 按alt+p,然后定位cd /opt/software然后拖拽要传输的.tar.gz文件也可以使用FileZilla或者xftp软件传输文件

    解压JDK

    tar -zxf jdk-8…tar.gz -C /opt/module 解压到此目录,安装完成

    配置java环境变量

    vim /etc/profile

    加入:export JAVA_HOME=/opt/module/jdk1.8.0_144

    ​ export PATH= P A T H : PATH: PATH:JAVA_HOME/bin

    使环境变量生效:source /etc/profile

    验证Java安装是否成功

    java -version

    ③安装Hadoop

    也是传入Hadoop的.tar.gz文件解压.tar.gz文件 tar -zxf hadoop…tar.gz -C /opt/module 配置环境变量 vim /etc/profile 加入export HADOOP_HOME=/opt/module/hadoop-2.7.2export PATH= P A T H : PATH: PATH:HADOOP_HOME/binexport PATH= P A T H : PATH: PATH:HADOOP_HOME/sbin 让环境变量生效 source /etc/profile 查看Hadoop是否安装成功 hadoop version

    2 Hadoop运行模式

    ①本地运行模式

    安装完成后就是本地模式

    官方Grep案例

    在Hadoop的安装目录下创建input文件夹 mkdir input 将Hadoop的xml配置文件复制到input cp etc/hadoop/*.xml input 需要注意此时在/opt/module/hadoop…/路径下 执行share目录下的mapreduce程序 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2jar grep input output ‘dfs[a-z.]+’ 需要说明的是此程序是过滤input文件夹内的以dfs后面是若干个字母(.过滤掉空格的)文件到output文件内。 查看输出结果 cat output/*

    官方wordcount案例

    在Hadoop安装目录下创建wcinput文件夹

    mkdir wcinput

    在此文件夹内创建一个wc.input文件

    cd wcinput

    touch wc.input

    vim wc.input

    加入内容:

    hadoop yarn hadoop mapreduce atguigu atguigu

    回到/opt/module/hadoop-2.7.2,执行程序

    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput

    查看结果

    cat wcoutput/part-r-00000

    atguigu 2

    hadoop 2

    mapreduce 1

    yarn 1

    ②伪分布式运行模式

    (1)启动HDFS运行mapreduce程序

    配置集群

    配置hadoop-env.sh

    修改JDK路径(注意所有的env.sh文件都是修改JAVA_HOME变量)export JAVA_HOME=/opt/module/jdk1.8.0_144

    配置core-site.xml

    一个是HDFS的namenode地址:hdfs://hadoop101:9000一个是Hadoop运行时产生文件的存储目录:/opt/module/hadoop-2.7.2/data/tmp <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>

    配置hdfs-site.xml

    指定HDFS副本数量,默认是3个,会分布到不同的datanode节点上 <!-- 指定HDFS副本的数量 --> <property> <name>dfs.replication</name> <value>1</value> </property>

    启动集群

    第一次启动需要格式化namenode bin/hdfs namenode -format 单个启动namenode守护进程 sbin/hadoop-daemon.sh start namenode 单个启动datanode sbin/hadoop-daemon.sh start datanode 查看集群 jps

    在web端查看HDFS文件系统

    地址:192.168.255.101:50070或者是:hadoop101:50070端口号是:50070需要注意的是如果无法访问50070端口的原因: 可能是防火墙没有关闭chkconfig iptables offservice iptables stop

    查看产生的log日志

    /opt/module/hadoop-2.7.2/logs

    操作集群

    在HDFS上创建一个input文件 hdfs dfs -mkdir -p /user/atguigu/input 将测试文件上传到HDFS文件系统 hdfs dfs -put /opt/module/hadoop-2.7.2/wcinput/wcinput /user/atguigu/input 查看上传文件是否正确 hdfs dfs -cat /user/atguigu/input/input 运行mapreduce程序 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input/input /user/atguigu/output 查看输出结果 命令行查看hdfs dfs -cat /user/atguigu/output/*浏览器查看 可以将测试文件内容下载到本地 命令行下载hdfs dfs -get /user/atguigu/output/part-r-00000 ./wcoutput浏览器下载注意!!!此时无法下载的原因可能是本地的window主机并没有配置hosts在C:\Windows\System32\drivers\etc\hosts内添加 各节点的ip+hostname

    需要注意的是!下次再运行时需要删除output文件!!!

    思考题

    为什么不能多次格式化namenode也就是hdfs namenode -format

    因为初次格式化会为namenode和datanode创建一样的clusterID,可以相互通信。

    如果多次格式化或者不关掉namenode和datanode就格式化会导致clusterID不一致,集群找不到已往数据。

    如果需要再次格式化namenode需要提前删除data数据和log日志。

    (2)启动YARN运行mapreduce程序

    配置集群的yarn

    配置yarn-env.sh

    export JAVA_HOME=/opt/module/jdk1.8.0_144

    配置yarn-site.xml

    <!-- Reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop101</value> </property>

    配置mapred-env.sh

    export JAVA_HOME=/opt/module/jdk1.8.0_144

    配置mapred.site.sh(将mapred-site.xml.template重命名)

    <!-- 指定MR运行在YARN上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>

    启动集群

    启动前namenode和datanode需已启动单个启动resourcemanager sbin/yarn-daemon.sh start resourcemanager 单个启动nodemanager sbin/yarn-daemon.sh start nodemanager

    集群操作

    yarn的浏览器页面查看 192.168.255.101:8088或者hadoop101:8088 删除HDFS上的output文件执行mapreduce程序,wordcount程序

    (3)配置历史服务器

    为了查看程序的历史运行情况,需要配置历史服务器。

    配置mapred-site.xml

    <!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop101:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop101:19888</value> </property>

    启动历史服务器

    sbin/mr-jobhistory-daemon.sh start historyserver

    在web端查看

    192.168.255.101:19888/jobhistory

    (4)配置日志的聚集

    配置日志和job历史都在yarn的192.168.255.101:8088上可以看到

    开启日志聚集功能需要冲洗启动nodemanager、resourcemanager和historyserver

    配置yarn-site.xml

    在里面添加

    <!-- 日志聚集功能使能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日志保留时间设置7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>

    关闭nodemanager、sourcemanager和historyserver

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

    启动nodemanager、sourcemanager和historyserver

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

    删除HDFS上已经存在的output文件

    hdfs dfs -rm -r /user/atguigu/output

    执行wordcount程序

    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output

    在web页面可以查看job执行进程、history处可以查看历史,进入后的log处可以查看日志信息

    ③完全分布式运行模式

    当配置好了ssh无密登录之后就可以在单个节点上群起集群了!集群的部署规划如下表:

    hadoop102hadoop103hadoop104HDFSNameNode DataNodeDataNodeSecondaryNameNode DataNodeYARNNodeManagerResourceManager NodeManagerNodeManager

    为了合理分配计算机资源,所以将namenode放在hadoop102节点上,将resourcemanager放在hadoop103节点上,secondarynamenode放在hadoop104节点上。

    (1)配置集群

    配置core-site.xml

    修改之前配置的hdfsnamenode的节点 <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>

    配置hadoop-env.sh

    修改JAVA_HOME

    配置hdfs-site.xml

    修改hdfs的副本数为3,添加secondary节点位置。 <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定Hadoop辅助名称节点主机配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:50090</value> </property>

    配置yarn-env.sh

    修改JAVA_HOME

    配置yarn-site.xml

    reducer获取数据方式为shuffle,修改resourcemanager为hadoop103 <!-- Reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property>

    配置mapred-env.sh

    修改JAVA_HOME

    配置mapred-site.xml

    <!-- 指定MR运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>

    (2)分发配置文件

    在一个节点上配置好文件之后,就可以使用xsync分配脚本,分发配置文件

    xsync /opt/module/hadoop-2.7.2/

    (3)查看文件分发情况

    cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml

    企业中不会先配置伪分布式,会直接按照上述配置分布式系统!

    (4)启动集群

    集群的单节点启动,如果首次启动也是需要格式化namenode。

    单节点启动:hadoop-daemon.sh start namenode

    ​ hadoop-daemon.sh start datenode(各个节点上都需要启动)

    ​ yarn-daemon.sh start resourcemanager(在hadoop103上启动)

    ​ yarn-daemon.sh start nodemanager(在各个节点上都需要启动)

    上述的单节点启动方式太麻烦了!!!

    集群的群起

    群起之前还需要配置/opt/module/hadoop…/etc/hadoop/slaves文件

    在namenode节点(hadoop102上):start-dfs.sh 开启namenode和所有的datanode和secondarynode

    在resourcemanager节点(hadoop103上):start-yarn.sh 开启resourcemanager和所有的nodemanager

    如果配置好了历史服务器和日志聚集也可以启动单节点启动 mr-jobhistory-daemon.sh -start historyserver

    (5)web端查看secondarynamenode

    192.168.255.104:50090 secondarynamenode节点信息

    (6)集群基本测试

    上传小文件上传大文件HDFS的文件会根据设置在各个节点上进行备份,每个文件的默认块的大小是128M,HDFS文件的存放位置在:/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0这个地方!!对于分成两个块的文件可以使用拼接>>指令进行拼接到一个文件内。拼接后就是原来的大文件。

    (7)集群群关

    stop-dfs.sh (namenode节点关闭hdfs进程)stop-yarn.sh(resourcemanager节点关闭yarn进程)

    (8)集群时间同步

    时间同步会在集群中找一台服务器作为时间服务器,其他的节点都会跟他进行时间同步。比如每十分钟同步一次时间。

    时间同步原理:

    时间服务器配置(必须root用户)

    检查ntp是否安装

    rpm -qa |grep ntp # 如果没有安装可以使用rpm -i ntp去安装 # 也可以使用yum install ntp去安装

    修改ntp配置文件

    vim /etc/ntp.conf # 在里面修改: 1. restrict 192.168.255.0 mask 255.255.255.0 nomodify notrap # 此网段的所有机器都能从这台机器上查询和同步时间 2.修改。集群在局域网中,不适用其他互联网上的时间。 server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst为 #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst 3.添加(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步) server 127.127.1.0 fudge 127.127.1.0 stratum 10

    修改/etc/sysconfig/ntpd文件

    增加内容如下(让硬件时间与系统时间一起同步) SYNC_HWCLOCK=yes

    重启ntpd服务

    service ntpd status # 查看ntpd服务 chkconfig ntpd --list # 查看ntpd服务开启启动情况 # 开启ntpd服务 service ntpd start # 开启自启ntpd服务 chkconfig ntpd on

    其他机器配置(必须root用户)

    其他机器每十分钟同步一次时间

    crontab -e # 创建定时任务 # 输入定时任务 */10 * * * * /usr/sbin/ntpdate hadoop102 每十分钟 与hadoop102进行同步时间。

    修改时间和查看时间

    # 修改时间 date -s “2018-11-11 11:11:11” # -s修改时间 # 查看时间 date

    3 Hadoop-Linux操作

    当配置好了一台服务器之后,没有必要也没有精力去配置其他机器,完全可以使用一些Linux操作比如scp,rsync,和集群分发脚本xsync去便捷配置环境。

    ①安全拷贝scp

    scp 语法 scp -r 文件的路径 目的用户@目的hostname:目的路径 案例1: 在hadoop101上,将hadoop101中/opt/module目录下的软件拷贝到hadoop102上.scp -r /opt/module root@hadoop102:/opt/module需要注意的是:注意查看目的路径文件的所有者!!!拷贝过去之后为了能使hadoop2下的atguigu用户能够使用还要修改文件权限: sudo chown -R atguigu:atguigu /opt/module 在创建集群的时候,可以安全拷贝配置好的软件,以及环境变量。

    ②远程同步工具rsync

    突然想起,关机时按下的sync将数据保存到磁盘。

    rsync 主要用于备份和镜像,速度快,只对差异文件做更新。scp是全部拷贝过去。rsync 语法: rsync -rvl 文件路径 目的用户@目的hostname:目的路径-r 递归拷贝-v 显示拷贝过程-l 拷贝符号连接 实例1: rsync -rvl /opt/software root@hadoop102:/opt/software

    ③集群分发脚本xsync

    思考:如果有1000个节点,上面的复制拷贝也是很麻烦。

    xsync +要同步的文件名称

    脚本的实现步骤:

    在/home/atguigu目录下创建bin目录,并在bin目录下创建xsync文件

    在文件中编写如下代码:

    #!/bin/bash #1 获取输入参数个数,如果没有参数直接退出 pcount=$# if ((pcount==0));then echo no args; exit; fi #2 获取文件名称 p1=$1 fname=basename $p1 echo fname=$fname #3 获取上级目录到绝对路径 pdir='cd -p $(dirname $p1); pwd' echo pdir-$pdir #4 获取当前用户名称 user=`whoami` #5 循环 for((host=103; host<105; host++)); do echo ------------------- hadoop$host -------------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done

    修改脚本文件权限

    chmod 777 xsync

    调用脚本形式:xsync 文件名称

    xsync /home/atguigu/bin

    如果xsync放到/home/atguigu/bin目录下仍然不能实现全局使用,就放在/usr/local/bin目录下。

    ④SSH无密登录

    设置好ssh无密登录就可以群起集群。

    ssh基本语法:ssh 另一台电脑的ip

    无密登录原理

    服务器的公钥和私钥都放在~/.ssh文件下

    生成公钥和私钥

    ssh-keygen -t rsa

    此时看到.ssh文件下面多了两个文件id_rsa(私钥);id_rsa.pub(公钥)

    将公钥拷贝到要免密登录的机器上

    ssh-copy-id hadoop102

    ssh-copy-id hadoop103

    也需要将公钥拷贝到本机!

    上面是将hadoop102下的atguigu用户的公钥分发给各个节点,还需要将root用户的分发给各个节点;还需要将hadoop103atguigu的公钥分发给各个

    known_hosts记录ssh访问过计算机的公钥(public key)id_rsa生成的私钥id_rsa.pub生成的公钥authorized_keys存放授权过得无密登录服务器公钥

    ⑤定时任务crontab

    # 重启定时任务 service crond restart # 动态显示定时信息的更新 tail -f banzhang.txt # tail显示底部更新 -f动态显示更新

    4 Hadoop编译源码

    5 Hadoop琐碎知识总结

    ①端口号总结:

    HDFS端口号:50070yarn端口号:8088历史服务器端口号:19888Sercondarynode端口号:50090

    ②配置文件总结

    按照组件去分:

    Hadoop:(★)

    hadoop-env.shcore-site.xml fs.defaultFS namonode节点地址hadoop.tmp.dir hadoop运行时的产生的临时文件存储目录

    HDFS(★)

    hdfs-site.xml

    dfs.replication HDFS的副本数,默认为3dfs.namenode.secondary.http-address辅助名称节点主机配置

    YARN(★)

    yarn-env.shyarn-site.xml yarn.nodemanager获取数据方式yarn.resourcemanager地址

    MapReduce(★)

    mapred-env.shmapred-site.xml mapreduce.framework.name指定MR运行在YARN上

    历史服务器

    mapred-site.xml mapreduce.jobhistory.address历史服务器地址mapreduce.jobhistory.webapp.address历史服务器web端地址

    日志聚集

    yarn-site.xml yarn.log-aggregation-enable日志聚集功能开启yarn.log-aggregation.retain-seconds日志保留时间设置为7天

    注意只要是***-env.sh都是修改JAVA_HOME

    ③一些错误信息

    注意1:历史服务器不随yarn群起,要单独启动historyserver注意2:历史服务器需要配置resourcemanager节点,也在其节点启动。
    Processed: 0.010, SQL: 8